找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
( Y8 h4 s: D3 c" A$ x& r& M
  1. / RevApp.cpp : Defines the class behaviors for the application.2 ~$ E! [; |$ M4 ]% A
  2. //
    / s" Y. V2 \1 }' B7 P* \. |' z

  3. # m* ]( y4 p8 Z( X! m
  4. #include "stdafx.h"
    $ @. B( V3 }7 T+ b" A
  5. " y% z9 p! n! r, `7 T. |0 `% l
  6. //#define UNICODE* a' I& [5 |8 q2 `
  7. //#include <gdiplus.h>5 A, O( v! r, ~: H
  8. //using namespace Gdiplus;
    6 E. T9 l% Q% U' M, ^1 e* z

  9. & [4 h/ x4 j6 w# X! C( o. K
  10. #include "RevApp.h"
    # W* q$ q0 G# f1 b
  11. #include "RevAppDlg.h"
    5 a' R. S' u6 j+ o

  12. 6 E2 M& p. p, M: {2 K$ P
  13. #pragma warning(disable:4786): K6 ~8 {! p# t
  14. #include <map>
    3 E/ S8 k0 ^; }: v$ E, h4 N9 m
  15. #include <list>5 @( a+ p8 [& f: C
  16. #include <direct.h>3 ^! S% s3 D& |1 q9 A" Q. I
  17. 7 o) F& X2 e: ]7 G4 p  R: h) w% ]
  18. #ifdef _DEBUG! R" h% c! P! V: }$ j5 M
  19. #define new DEBUG_NEW2 K) Q1 _# h  Y' S6 J5 H4 B
  20. #undef THIS_FILE
    4 C- t1 s1 K/ h+ U1 b
  21. static char THIS_FILE[] = __FILE__;7 m7 y# S1 b, @9 W* o' n' \. h$ K) k
  22. #endif4 A* O- l- }# Q2 L1 z2 X
  23. #include "SkinResDef.h"
    % l1 r0 |' K0 A- p" W$ q$ W2 k" O
  24. #include "ChangeBG.h"
    % n+ e$ m( v- W
  25. #include "AFXINET.H"
    " q9 [7 L( h6 i+ T! Y* H

  26. 2 m# j# G( Z4 K+ U- F: O
  27. #define TRADITIONAL_CHINESE 05 e+ }& J2 W9 ?! R( k: P
  28. #define SIMPLIFY_CHINESE 10 A" q& a* }% Q: U' f% V
  29. #define ENGLISH 26 O1 w% t, X" h/ |( d
  30. int m_iLanguage = ENGLISH;+ C6 I6 Q( _* |) l" J% f
  31. /////////////////////////////////////////////////////////////////////////////
    % M/ z" Z, ^4 P: p
  32. // CRevAppApp
    0 ^$ ?; ~2 y/ v+ L% `$ M5 h2 b, L: L
  33. 4 p, |! |3 f1 {0 H
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& R) \! R, C9 o7 x
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    & r: \. m% o' ]" R8 p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    - @! h. |3 c# I4 Q
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!9 l& [/ D3 c# R* P6 l
  38.         //}}AFX_MSG8 A% }8 x/ `. s# ?! h3 c
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    $ ^+ q! L8 E4 g. m
  40. END_MESSAGE_MAP()& u7 j  n4 ?* ^4 y

  41. + x6 B' b- C5 y) c7 m' m3 R( f8 S
  42. /////////////////////////////////////////////////////////////////////////////
    + Y5 Z3 n. H+ w6 {! M! T
  43. // CRevAppApp construction/ E0 X( D7 d. R# G) p

  44. 1 n$ t+ |2 _1 c! J& ^* C
  45. CRevAppApp::CRevAppApp(). ]5 H: [9 W; h% J7 h( @, h
  46. {
    1 o& L2 w! u- U4 L9 B+ u
  47.         // TODO: add construction code here,) v3 \. i9 s' \  I! ]
  48.         // Place all significant initialization in InitInstance7 W# j9 ?: c3 e& F% p; s- q- L5 p
  49.   bDisplayIsBig5=FALSE;0 Q7 w% N& n4 q9 k( E; V# O
  50.   bRestartUpdater=FALSE;! c' p0 O; V+ ~  v: W# e+ N
  51.   bFinishUpdated=FALSE;
    1 X6 e: c( H) c% R
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    9 r( ]7 |6 v- A7 }  p
  53.   InitChangeDataBig52GBKS();4 y- P& [4 g; |: h
  54.   InitChangeDataGBKS2Big5();8 I; l. _9 D5 T# \- M
  55.         //% N) u. }' O8 s7 K! G5 |% ?
  56.         bClickRunExe = FALSE;* O" X2 Z1 @8 [5 f2 D# @' i: D8 P
  57.         //* G( b- D' f8 f$ w
  58. }- W1 p+ r# O( `- a7 {
  59. : G3 z* J7 Y: B9 P+ l0 Y% T4 o
  60. CRevAppApp::~CRevAppApp()
    % z1 s) i9 O3 n4 p8 ?" D
  61. {9 K' r1 C3 s" t
  62.         // TODO: add construction code here,/ U* d4 i& W* ~2 T$ A
  63.         // Place all significant initialization in InitInstance
    " C' Q/ O$ x( g8 c6 R
  64.   EndChangeData();8 u( ?* Y8 c( @, r
  65. }) R: V; a, D' ~
  66. 1 ~+ B! O0 `' R4 j- f% M" g8 |: V
  67. /////////////////////////////////////////////////////////////////////////////- p/ W" i" i6 |; r, \, m. w
  68. // The one and only CRevAppApp object
    - R1 r2 z. h8 @! |

  69. ; T5 D, O4 f: h! S4 T8 g
  70. CRevAppApp theApp;0 P' t% ?5 U) C

  71. ; a, T6 ]  ~; g% {3 _0 b
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    % t' M- x& c! O& A; K
  73. {
    5 O$ \$ f0 d9 s1 Z
  74.   int iEOF=0;
    ' \2 \) Y( j8 N' ]
  75.   char szTempName[MAX_PATH];  r# ]! j# r9 N9 e
  76.   *szFileName=0;# B  N# }: l  q9 G0 @4 n" V7 h
  77.   iEOF=fscanf(fp,"%s",szTempName);) b9 C" P0 f$ l* K4 t0 u
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('), G/ p$ f& ~% d8 F7 A: y
  79.   {
    & k+ r3 I; ~2 h0 U
  80.     strcpy(szFileName,&szTempName[1]);, p  ?0 P! g; Y" a& G; n4 [1 {
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): [6 f& Z: a/ ]
  82.     {* `; L8 x* V# \* C, e/ F( _; k6 ^5 S6 d
  83.       iEOF=fscanf(fp,"%s",szTempName);
    1 n  h: [2 _1 F$ E. X+ e7 {: a
  84.       strcat(szFileName," ");
    / x! x; |& b5 @) r
  85.       strcat(szFileName,szTempName);& ^/ p. i6 H. d+ l* m
  86.     }$ g1 r. s: r4 Y, }' h
  87.     if(strlen(szFileName)>=1)
    . l$ \2 y( U$ f  i$ M
  88.     {4 I) ~3 q0 s. T
  89.       szFileName[strlen(szFileName)-1]=0;+ \; P# E, H# e- {
  90.     }
    5 {/ N, A  R. J
  91.   }8 ~+ ~. k- z2 I
  92.   return szFileName;
    # G" ^% z4 ]& w2 ~; `+ [
  93. }6 A7 l9 s! I( ~% f

  94. 0 \* b4 O) p5 I1 Z- f
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    4 Q  g( U) y- \8 D7 J1 |
  96. {' A  h* l; Y4 t
  97.   FILE *fp;
    ) r! y$ a, M8 G8 X9 I
  98.   char *key=NULL;
    $ W5 m0 i. \# C9 Y
  99.   char version[MAX_PATH];! v7 ]( A- I1 f- }# U! P
  100.   LPUPDATEFILE file,olds;3 F3 O3 Y2 [+ _9 h
  101.   std::map<CString,LPUPDATEFILE>::iterator p;6 P) |" u; A4 r- M( n! U  v

  102. 4 h) \3 r+ A% A
  103.   UpdateList.clear();
    7 J7 w. r5 G7 f( }2 Z' w# z8 a
  104.   UpdateFile.clear();
    1 F+ K- _- I+ f; ^2 I  Y+ C
  105.   if(GetFileAttributes(filename)==-1) return false;
    / @$ K/ p8 s2 s) k, y! B$ z6 B
  106.   if(!(fp=fopen(filename,"r"))) return false;
    * L/ w- n: E4 Y" Q* U& ]
  107.   fscanf(fp,"%s",version);( Z& K: l& G: ]* |% m* D9 ]' j
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . c* L4 R: ?* }+ A" h7 S0 C
  109.   while(fscanf(fp,"%s",version)!=EOF)
    * d% e  Z9 r; ]# p
  110.   {
    9 Y. I& j9 ~+ ^; m/ L
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ }0 s) v1 Z6 w  Y/ g5 x! ~8 K. r
  112.     fscanf(fp,"%s",file->path);2 ?5 }, J' |- E
  113.     ReadFileNames(fp,file->file);2 n4 ~: u, C' Y  p+ d* L. C+ v: d
  114.     strcpy(file->full,".");
      o4 j  H+ P+ R+ I# v/ \- ]
  115.     strcat(file->full,file->path);( B8 k6 R3 F" D8 Z' d4 C" }. o
  116.     strcat(file->full,file->file);0 C) ?. \& Z! S- B- f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    9 A5 d/ N8 M* a' ?" Q8 j
  118.     {
    $ M/ W" L: z1 o# z
  119.       file->vers=(float)atof(version);
    ) f2 F; z$ j1 D2 m- R0 h
  120.       UpdateList.push_back(file->full);+ i% A5 O' Y; {' ?9 J0 W
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));" S3 `* _/ f  j: l. U
  122.     }
    , S* r, P4 ~' o% H" D
  123.     else
    : {; e1 z8 |- f7 t
  124.     {3 b. m; O5 H; P% [# A+ k
  125.       olds=(*p).second;5 \7 \5 r0 B/ r- e" c' s, g
  126.       if(olds->vers<(float)atof(version))
    ! m% }9 ^# ^$ r; J
  127.       {
    + E3 X! m! [& |! D5 E
  128.         olds->vers=(float)atof(version);# w: w: g7 K4 m- D3 X' N
  129.       }8 @% w' g/ Q! A* g: j" \5 ]
  130.       free(file);
    / Q* ]1 ]5 o; }4 X* ]6 J
  131.     }$ I7 N: B8 s- n# a# m1 m$ y- b4 Z
  132.   }% [5 \/ W7 f* s8 L
  133.   fclose(fp);( A3 y/ [' _- q1 I0 W# i# ?$ W
  134.   return true;
    9 u% K& @  ~/ s7 z9 F
  135. }
    * k% x, T7 W5 [* s

  136. ; T9 {9 t2 M: b/ [+ s; J# \+ J% I0 q8 k
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    : Z: q% `- k6 a, ^
  138. {0 o' N- [$ C( F2 I) {3 B
  139.   TCHAR  szFull[MAX_PATH];
    " i& R4 U" b# B3 v: u
  140.   TCHAR *token,*inter;) p4 t( P7 J! u. g  F$ p
  141.   *szPath=0;" G/ R, I9 g) C* K3 ]! p+ b. b
  142.   strcpy(szFull,szFullPath);
    , g7 w! M& K# ?1 T
  143.   token=strtok(szFull,"\\/");
    8 j5 @( ]2 k5 I
  144.   inter=token;
    , J7 b# l+ Q% R3 S  c- ~
  145.   while(token=strtok(NULL,"\\/"))
    ' ^) g" G3 B2 W: m& G* e
  146.   {, D# J) Q1 P' _) I
  147.     strcat(szPath,inter);
    * j7 j* j- T1 K0 P# _: J; Z
  148.     strcat(szPath,"\");
    . X" M, O1 D1 r7 x* L
  149.     inter=token;
    ! a0 ~: j4 _! a1 c5 e
  150.   }! K; d3 E& x* Q/ e+ g! S5 e
  151.   return strlen(szPath);
    : g# o& P. \* {
  152. }
    5 Q, P8 Z# L( K' S
  153. 1 s/ b1 v+ Y9 a% A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    # D' Q5 ?2 Z3 B
  155. {
    . U4 ~" |3 |5 v
  156.   DWORD attrib=GetFileAttributes(Target);
    ! q" S# L3 Y5 u$ P7 y  W
  157.   if(attrib!=-1)
    9 @7 q% K3 b6 l3 ~  Y; O
  158.   {& `7 b2 ?! F5 M3 j. H
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))7 i" u- K( y4 z! r, P! p: O1 t% r
  160.     {
    1 Y* \' |% Z4 L4 u% Z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);& O6 S) N7 ]8 h- ?1 x; r
  162.       SetFileAttributes(Target,attrib);
    8 `! g5 }  {& y
  163.     }# J: t6 n- y! f7 E2 _- Z8 [" c- M. u
  164.   }
    3 K# o7 M$ y& R: J1 p
  165.   CopyFile(Source,Target,Erase);
    " W# w1 r1 H8 T% O
  166. }+ V" x3 t0 g# y2 I1 f
  167. " z* [0 B* X2 {9 w! C1 m) [
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)" }) r2 K- g, f, {' s) }
  169. {9 Q2 l8 h- V0 z8 a) C
  170.      FILE *fp;
    ' J/ |$ ^& B! g& i
  171.      char  szBuffer[8192];; e8 o2 P; v  @4 J* L/ _7 Q
  172.   va_list  argptr;
    5 D3 w  V! l9 F2 z6 n# U0 Y

  173. ( ^9 [: ]9 c- w( {1 P
  174.         va_start(argptr,message);4 j  o3 P3 k4 _# D
  175.         vsprintf(szBuffer,message,argptr);% n; b+ _! D% ]5 [, ^
  176.         va_end(argptr);4 B5 U$ k) M! F6 b% u
  177.   fp=fopen(FileName,"a");
    : f% E/ `. ^* h
  178.   if(fp), J; s, n) K; L  Y
  179.   {  b& q# `- F/ b2 m
  180.     fprintf(fp,szBuffer);
    3 S( @- H% }! I. n: c  V! Q
  181.     fclose(fp);
    - V9 S8 g# J& M4 c! o
  182.           _flushall();
    ; Y2 U7 a$ m5 i& J3 G
  183.   }
    $ {$ {5 K. n2 Y7 T
  184. }- R4 \8 Q' q9 [4 o0 q) \
  185. . i9 @: ?# @* ~4 _
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    9 m+ C& u' |# u8 V" ~+ O
  187. {
    3 ]" k6 x, |) e+ [
  188.      FILE *fp;
    & Y) C4 ^; u; T/ `. P
  189.     DWORD  attrib;' H  s( H0 L+ A5 O
  190.   attrib=GetFileAttributes(FileName);
    ; w. G6 X8 V7 F) x" l
  191.   if(attrib!=-1)
    " [1 u& u, w1 O" y5 s
  192.   {
    5 A/ R* \+ t2 E  ]6 ?" Z2 [! n( G
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);2 c; z' M6 |6 p  M/ Q+ G
  194.     if(!SetFileAttributes(FileName,attrib))
    3 I+ F: P$ V/ ]2 g: B; e: e) Q
  195.     {
    # U& I) ?! B# s. J
  196.       return FALSE;
    0 ]0 t. J3 H/ E, G1 v
  197.     }$ ]( R, }, v% T1 ?) B3 [
  198.   }
    ' ~8 U8 t) l8 E' [. ]) Q
  199.   fp=fopen(FileName,"wb");
    - A, v5 Z, Z; q6 c/ z9 M
  200.   if(fp)6 E. y, _5 ^6 F! |+ ]' k, j' f0 L
  201.   {! G) n* f) G( r+ a8 k2 D9 q
  202.     fclose(fp);# _4 C9 I& `% U9 Z2 F: G
  203.   }
    : |) E7 p3 r( U( }8 N" h. e
  204.   return TRUE;
    2 B, [1 B: r; w0 r- C# w
  205. }* s9 l* H1 Y4 u

  206. ; ~: h! \& F" V2 b! ~- c8 k
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 [) {% x7 l. }/ z
  208. {' N9 [3 U& U$ R7 P+ i" h' y
  209.   char filename[MAX_PATH];& C) T- d& l3 V9 o7 \. N
  210.   LPUPDATEFILE file,olds;
    ! p. e. p7 y5 F/ G, S: H# \6 y: f
  211.   std::map<int,CString>::iterator i;6 u3 P, e: |! D1 ]0 T6 \$ D
  212.   std::map<CString,LPUPDATEFILE>::iterator p;# E1 f( S( ^" k5 i
  213.   std::list<CString>::iterator l;
    $ K0 y) Q- o8 ^7 R* h$ @* Z$ z1 P
  214. ' V2 ?9 T3 l/ ~2 W6 p8 M6 d. w
  215.   if(bFirstUpdate). |! K- E6 L! E: w6 k# l- d
  216.   {  v8 l0 q. n/ G  l3 A& p+ j/ y
  217.     dwCurrFile=0;
    * r" s* v: z9 l* D
  218.     bFirstUpdate=FALSE;" \4 t7 @+ ]% k8 ~' C5 k' F
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 o. c# R: V$ b9 C8 P5 x
  220.     {! p6 R/ u6 I- {9 I3 a; T. B
  221.       dwTotalFiles=UpdateLocal.size();. V0 N' V6 [3 }) y: m
  222.       dwDownLoaded=0;" c& b, s4 t1 n/ u: N* H% U
  223.       bSilentStep=FALSE;
    + D9 I8 I- B, K1 A8 F
  224.       bCompressed=TRUE;
    , r3 M2 \. k: M
  225.       strExtLocal.Empty();
    0 z8 ^9 r& C9 X
  226.       strFullName=(*i).second;) n) L/ D: m3 H% H# Q
  227.       dwProgramState=AP_CONNECT;
    , j9 p. W; r& b+ j
  228.       return TRUE;
    9 p+ \7 t: i. q5 r6 P/ z
  229.     }
    9 u$ c: Z2 {% P7 z( c
  230.   }8 z! W7 U  {: g" O* h
  231.   else if(bRestartUpdater==FALSE)
    1 B+ s# b6 u' s' h7 j
  232.   {
    7 c7 D% }! |: m" k
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())' }) C7 j; ?1 p
  234.     {$ s/ ]0 x7 d! A0 Q5 u' R7 i% ^
  235.       file=(*p).second;2 a) V* P& _% u1 W3 s: t' F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    / j3 {+ Q7 o3 d- }# V( e
  237.       {. Z, ~1 Y1 ]* u& O' P# ^
  238.         olds=(*p).second;
    4 i% ]0 e. ]7 H; t8 ~% d
  239.         olds->vers=file->vers;
    ) a1 V% k# x3 _
  240.       }. o) v6 h" W% \
  241.       else
    , m- J  N9 b7 N* A6 l% Q6 N( i  X
  242.       {
    . u, O! ^& ?# x5 M
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 o* K/ g8 X; z% H
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    3 }; c, z( z5 R6 l* \
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ' a7 n! W4 A' C4 W0 D
  246.       }
    7 j0 W; s! f  ?1 y9 _
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");/ |) l9 f& A6 n7 G) Z- p; L8 ^
  248.       sprintf(filename,"(%s)",file->file);
    8 d6 O% T) `) ?; f( ^  k8 x4 k; _
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* P( Y7 Y+ i& _+ I/ Z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }" \* P3 H" _+ Y: c4 O# d
  251.     }5 z1 U; ]" Z6 \/ |4 _% u) M
  252.     dwCurrFile++;( u' l% y3 i/ E$ C" F/ |" q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 F! q  ]7 {4 b9 t+ K' Z9 h
  254.     {/ M$ S* C, o' ^' Y8 |
  255.       bSilentStep=FALSE;0 m1 @: W6 C9 y7 n6 O
  256.       bCompressed=TRUE;1 h; a! V8 p$ F9 u1 ]1 E
  257.       strExtLocal.Empty();
    9 q/ y' k+ ]8 _
  258.       strFullName=(*i).second;
    1 \+ i3 Z* I3 P9 |( f. G& G  U
  259.       dwProgramState=AP_CONNECT;
    ! K' }7 D4 O; T. c0 Y/ ?
  260.       return TRUE;  E+ n: B2 T6 z: i, G
  261.     }
    , ^& ?. e% m9 M- k: Y$ d" l. Y
  262.     if(!bRestartUpdater)0 s: M% A6 M7 s2 D
  263.     {
    " G' h/ z! v* }
  264.       int iCurrSize,iFileSize;
    ; g/ a- r  [4 C% z  z. E: h4 w1 @
  265.       iCurrSize=0;6 O, E, r7 c* _$ V' `7 C! n  g
  266.       iFileSize=UpdateList2.size();
      s( l! F& ^+ h& F# }/ I  a7 M
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ S7 ^) i$ D/ N6 U: y  e/ P
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ! V- C: g. A0 J+ u
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");& f7 v: i2 Q7 \# }: }
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / Z; Y! X" |5 k( a1 @( d
  271.       Fclearf(".\\update.dat");4 }# ]9 z1 v3 _  \! F1 t5 l
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    & z, b  h: M/ N  J
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)6 j  C+ U3 ~9 d6 r9 ]% @0 Z# u
  274.       {/ Y5 F, \2 d4 P  \/ ^1 O
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())8 t7 N7 ?  m2 I. V( F
  276.         {& ^9 }% x6 b+ s' w8 e
  277.           file=(*p).second;
    . f1 T* l8 h. v0 q8 w
  278.           sprintf(filename,"(%s)",file->file);- @- g2 V, c6 w9 d0 x" [
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);9 O; c% n, W5 i/ h( F' W, Z8 }  s# s
  280.           iCurrSize++;5 D5 h! a' Y/ a6 M) I  z8 a7 z* v
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    , a2 T* z# k% h* a4 x4 U, Q% c' t' Z
  282.         }
    8 ~  b! a( h: C+ P; s
  283.       }
    9 d8 u# ]  p/ q* F
  284.       unlink(".\\update.txt");
    + B. `0 w( I, r8 R
  285.       unlink(".\\update.tmp");
    9 s3 @% \& z) C* k+ _* O
  286.       Fclearf(".\\checkversion.dat");
    . ]7 a* s6 o% c& O6 l7 w( O+ }0 K+ P
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    0 K  ]# h! R, m4 X# e
  288.       if(UpdateLocal.size())
    8 H2 F$ t! ^3 E' w- r, N
  289.       {
    2 a7 }" g0 G$ j# p$ z# E
  290.         UpdateLocal.clear();# Z7 }5 L8 Q8 _; l
  291.       }( G8 e- {- m& e$ N% L! P
  292.       if(UpdateFile3.size())5 N- }/ Y+ Z8 a. N" L& \
  293.       {6 z7 L, G. t4 J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! E  i- d! s1 v
  295.         {
    ! c" n+ R! h1 `0 A5 `+ S
  296.           file=(*p).second;
    % T% i. ^& r1 [2 z4 O3 b
  297.           free(file);  j0 |) w2 N! G1 g' d
  298.         }; e* {( {& K3 [) s+ E
  299.         UpdateFile3.clear();8 k3 R0 ^7 P5 ^' q
  300.         UpdateList3.clear();
    / D! b8 _' p7 F/ |
  301.       }& n0 Z6 E; L/ ^/ n$ W
  302.       if(UpdateFile2.size()): s5 p* B, e% G. B4 \" m$ E3 D: V
  303.       {
    - b. {, a* ]& K: s" ^, j& h' c
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! s* t* K! j9 \) Y4 m
  305.         {# F+ J7 |' \. N4 ^+ W7 ]; N
  306.           file=(*p).second;
    $ u# o$ G2 R" }9 v
  307.           free(file);
    3 u% v; I+ F9 K$ x3 v8 U
  308.         }
    " O: I5 M+ ]- H2 c7 o% i
  309.         UpdateFile2.clear();
    ! D; V) B7 R7 {! K: v: o, t
  310.         UpdateList2.clear();5 Q# S2 i3 }! o
  311.       }
    % l4 c- V' ^1 P) w; r* P
  312.       if(UpdateFile1.size())
    6 ]0 E2 {0 C% m3 m# h0 {$ L
  313.       {
    1 I- s2 D# l6 @2 P% P
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , k9 X9 u! J! K6 W7 F6 Y
  315.         {
    % L! }8 f( U$ x+ w
  316.           file=(*p).second;$ a: o  s" ?6 q: g9 m* A
  317.           free(file);
    8 v7 }3 [$ _) g) F
  318.         }) h; C6 Y' e$ d# @3 B
  319.         UpdateFile1.clear();$ e+ ]* a" x) O9 X) t; j5 Z
  320.         UpdateList1.clear();
    2 A  N( w  I1 d; T
  321.       }
    7 l/ Q9 H- X) E
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; J% e8 c6 @6 s+ g5 R2 y$ d
  323.     }
    * Z. P* b/ K8 D6 \6 |6 D0 w
  324.   }  t# k8 j8 z1 |3 a' H/ g2 h+ G
  325.   return FALSE;
    ( t+ d, v* G# _# ~
  326. }9 F# u6 R) i% g! B: ]2 t
  327. & {6 m* u- d+ h/ l. k1 v
  328. void CRevAppApp::ClearAll(void)
    % U# Q2 h" k. F  @& N/ C7 }
  329. {9 r: U. U* ]" f7 b& P( n# F! }( y
  330.   LPUPDATEFILE file;
    7 Q! }, r" U0 S- \8 k! K
  331.   std::map<CString,LPUPDATEFILE>::iterator p;5 O$ m9 `  B9 n/ y
  332. ! m/ ?' l1 j) b% X: o# V" R  l! j
  333.   if(UpdateLocal.size())
    1 O( _& d! c6 B
  334.   {, `* [- ?3 U: l: L5 {- Y8 e
  335.     UpdateLocal.clear();0 l' T6 O3 c/ U4 n
  336.   }: [! a4 x/ O2 `$ `! |& e5 b
  337.   if(UpdateFile3.size())
    0 N( W7 M9 e; F/ J0 Q  I& L$ B" t
  338.   {
    6 W- u9 B# h3 C! S9 b0 q* H" {
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 v2 D: p- D7 J+ F( Q5 O0 y
  340.     {
    1 P5 P" s- I( X" R! f
  341.       file=(*p).second;- {7 {& f! R$ S' r6 w& j( r1 Y5 ]' F
  342.       free(file);' Q' ?6 e0 v* Q( j
  343.     }
    " f3 H, |0 R+ S
  344.     UpdateFile3.clear();
    $ f& {6 G, D7 z9 O
  345.     UpdateList3.clear();
    " g4 ]' G1 q3 v4 u' K5 w" N8 T
  346.   }. P3 k1 Y5 r; x$ ~. i  H6 |) m
  347.   if(UpdateFile2.size())% S" D; I7 J( h$ E
  348.   {! L2 O" F* n3 _% H* h' S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 V8 v, K0 n/ h7 z& X1 s
  350.     {
    8 b2 _5 j% P0 S, a
  351.       file=(*p).second;. f: @* L+ E; X2 g  W/ p
  352.       free(file);6 f' W* x1 L/ Z' J) h) I# s: {
  353.     }) G- N1 V9 U: ~- j$ T2 _  h
  354.     UpdateFile2.clear();
    6 T* k5 O! h: n7 K
  355.     UpdateList2.clear();8 [8 q7 l" O, @
  356.   }
    3 z% w1 m; w; v; A4 W
  357.   if(UpdateFile1.size())1 W8 d$ @- z# e% L( y& q
  358.   {
    5 v5 |9 o3 e( X( M6 a: O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); m) O8 j, b7 j. j4 c. v
  360.     {
    ) k9 ]& Q; l) P
  361.       file=(*p).second;3 b, H, z$ G8 f$ L+ P
  362.       free(file);4 J& B. y3 ?% N/ {6 g4 m& \
  363.     }
    & Q6 g; P& Y( Y" ^
  364.     UpdateFile1.clear();
    . i6 b* f5 ]3 T# t5 n- [
  365.     UpdateList1.clear();2 U: `7 W) w& {1 o
  366.   }
    % Y1 ~& ~) R3 R* a! X/ j  c  T
  367. }  
    % _! r8 S0 `3 j3 O" j3 u
  368.   
    8 a- X- t( ]. [. s* c
  369. BOOL CRevAppApp::CheckLocalVersion(void)
      }5 }. `& a+ ~. x7 q
  370. {
    . B5 U) N4 L' R4 b0 v" }4 W# @; [
  371.   int c;
    " v5 M* U: n: o; _& o! k; z: X
  372.   LPUPDATEFILE file1,file2;( r: `. ~' C; R
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
      {  _' [3 C. i6 I/ _# J" p
  374.   std::list<CString>::iterator l;5 D; U2 R6 N$ q9 O. T7 y$ A
  375. & z8 W( m: [% {/ R
  376.   UpdateLocal.clear();
    + ]8 `% F. ^1 j: U
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);$ k$ C6 s8 \# |7 ?9 Y, A
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);' A; \5 D+ P, p4 y! m+ \! `" [/ e
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + v' }7 C. _, S+ D+ y7 g. Z# `
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    1 r" w. U. t4 T6 ?
  381.   if(UpdateFile3.size())
    , J" R( C) j/ j. `2 F6 D
  382.   {
    . x, S: ~: ]" n' m  P# a# L: y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    + }" q+ w2 o: x4 I* {6 V
  384.     {
    6 j8 `5 w7 K+ E& U! l9 y$ Y
  385.       file2=(LPUPDATEFILE)(*i).second;
      H7 J: ]- a2 G# P/ |/ }% l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 @6 h9 I- `" z6 O" l  q6 O0 ^$ o( s* d
  387.       {6 B' q' q6 W  ]
  388.         file1=(LPUPDATEFILE)(*p).second;, l' G  q. L: E% b& ~
  389.         file1->vers=file2->vers;3 y5 i- b# b. S' z* i7 \6 u3 l5 T2 j
  390.       }3 \4 @" V- A0 H4 u7 w* @
  391.       else
    ' ~& E* c( G7 p" m% G
  392.       {' B( Y6 d: f: K7 P9 [* }4 H
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. }$ C4 x2 C, X% I2 t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
      K) x+ u& I) K9 j: ?$ x
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    9 c- y& n. _) g) l" f
  396.       }' d! M3 {+ Z- M  a& W
  397.     }1 d* D: m/ O5 e! l& Z: j% x! Z9 u
  398.   }
    # _  @1 R/ x+ A1 O! l: b
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)! W/ y. H2 ]$ c3 T* G
  400.   {* S% {/ z5 }; |& U. _
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 s% x4 }# R, N( ]0 I
  402.     {
    + k& f/ _* n% j/ q$ S0 }
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 M% A, R8 m% Q1 D
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * Y# {8 n$ b' F
  405.       {. h. w/ k- d8 m# D9 K
  406.         file1=(LPUPDATEFILE)(*p).second;% u5 f. v! w1 y
  407.         if(file1->vers!=file2->vers)* l& a7 h+ d0 }; n2 \
  408.         {
    ; @# C1 K0 o9 G- R- l6 o, `0 E; [
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' `; H8 N/ O( T! w
  410.           c++;7 N" R( x9 K1 ~4 j* C& Y
  411.         }
    5 x  U' p& H4 t
  412.       }) X# l; W; n$ E7 m' j2 S' C) n
  413.       else3 ~  M2 p3 M( m( C' c
  414.       {
    6 v2 ?2 k6 R  p4 }- g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ E! W' O% c0 Z3 t) m9 N9 r; d
  416.         c++;
    / @( t8 E, Z) I2 v' ~* j: E
  417.       }( ]/ M8 n& v# S, N" \0 I
  418.     }
    3 l) {& x& I: k
  419.   }
      [; W* L$ g0 `6 t7 g
  420.   unlink(".\\DownLoad\\update.txt");& K; Y, B0 \8 |9 }& Q0 i2 @9 X
  421.   if(UpdateLocal.size()) return TRUE;
    + e* k) X3 a9 M: k- Y, s% P
  422.   else                   return FALSE;
    ( Z4 Q) ~% D; ~+ C$ `& \3 O, h
  423. }3 p& D; a7 a1 t% N+ [, M: ]

  424. * [* Z9 }) ?7 H4 T, w
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/", u( W/ z6 Y" S
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ( W, ^+ w5 \: C# y, j7 F
  427. , {# @/ D( {5 Y& ^9 ~% I9 r9 a8 {

  428. , I2 u5 t' P0 F% P1 K, q% c
  429. 9 }- i# n) x, v% p3 f
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ' H8 C- t7 B7 r9 \" ?
  431. {' Q3 v( h  |' e+ l1 ^
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;$ f( H, f. T- c, C+ p! i
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' T3 H5 v- s( S2 X) R3 r
  434.   {
    6 |# Q% A& y* S- ^
  435.     char szLanguage[50];
    ' @! H: F, e& \8 p( g& R
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");. z2 h$ `- ]* S- `3 l/ ~) Y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 ~( S8 n( F$ M; a7 t. I1 ]. m
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 I0 L* e0 a+ S/ @2 `* e1 V* H
  439.     else                                   m_iLanguage=ENGLISH;
    ' S: Q! c: v4 ]3 p3 N
  440.     char szRegister[100];8 b2 x. T& O) {9 C7 a
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 o( `# x+ |; x$ d6 P
  442.     strRegsName=szRegister;2 U, @; Z9 G$ d1 n% K) W9 \. u
  443.     char szPatchURL[100];
    - r$ ^  E+ `' e2 M
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: q( ]8 d5 r  f: H
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) k8 F, b/ P  q* R" x
  446.   }: a3 w9 T& M& H+ o4 A( h2 Z
  447.   else6 i7 p0 g7 Z& I; g6 f( J
  448.   {
    4 U! _+ U; B% L6 s0 `
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 \- x2 _' j, f2 b. Y& u' h
  450.     strRegsName=DEFAULT_REG_URL;) _  r, A) B  C! u: N
  451.   }0 }. \/ Z. l  F. w) T" H
  452.   if(GetFileAttributes("hosts.ini")!=-1)# @2 O& t- l$ x# h/ X
  453.   {' E) U7 e& B' ^1 {2 j
  454.     char szIP[50];. ]) e" ]0 G- x/ v8 S3 j1 a
  455.     char szDIR[300];
    8 t7 u7 q0 y1 e$ Z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))( Z- x8 K2 f; i; N! r! Y
  457.     {( ^4 Y0 L1 N$ J" Y- t( R
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    2 u7 f' W+ p3 F
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");& p1 A; {3 s3 L( i& g7 y2 Q8 s
  460.       strHostName=szIP;" Z* t0 c8 ]1 w* s5 Q
  461.       strHostPath.Format("/%s",szDIR);( u; |5 }$ |( O; J1 \5 N  j
  462.     }7 v  U& E/ r& w
  463.     else
    " `+ r8 Y# \1 V- G, C1 i" d
  464.     {
    , z# x9 q7 L! u( r) Z8 M2 W1 z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & j0 a+ V0 K, q# I5 P
  466.       {
    $ N  S% c# G) }% U
  467.         char szLanguage[50];- S9 e2 H* f* P9 n2 n$ C
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' m/ S. i& @" c- u) @5 ]) F; }
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . Q, j% [# y' d' N" R
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* @3 ?8 |  Q' G7 ?' G$ `; \
  471.         else                                   m_iLanguage=ENGLISH;1 \- G3 Y- J+ [  G1 o' x) x
  472.         char szRegister[100];- k5 z; W+ _) _0 C
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 A& U5 m7 y5 D" Z9 `' l4 L7 e1 ~
  474.         strRegsName=szRegister;+ B! x2 g/ w( r1 G7 S( R
  475.         char szPatchURL[100];
    . Q* o, I# S- J/ _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 C& |3 }1 c5 I) ~* W9 Y6 V. H
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / c9 S( M4 M1 |
  478.       }
    5 C* ^' K. `" b  |% h1 T
  479.       else* j8 b( {4 W1 \* k2 f7 s
  480.       {; i& J# k* E! {4 Y  _9 y
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 Y: c( K) [; P  U
  482.         strRegsName=DEFAULT_REG_URL;" S1 L/ _, ^3 i. k( G; Y
  483.       }& S; z9 m2 U. D; o
  484.     }
    % V( K( U8 x& H0 z4 b& D' g) ]
  485.   }6 E8 i9 ?9 C* u3 u, Z) H3 @' P
  486.   return true;
    & }) P6 r* ~1 n" S5 G
  487. }$ I( r' B) G4 I
  488. ) d3 I* b' W' M. e" N' o
  489. #include ".\ZLib\unzip.h"( Q! _! B$ }1 g  s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( m9 E) F  w, `6 `& i1 U3 J
  491. /////////////////////////////////////////////////////////////////////////////
    # _# u4 Y& {+ j3 f+ N) L
  492. // CRevAppApp initialization
      l! ]) I3 x) c7 L6 y; ^; u

  493. 8 ?$ e. ?: a( k1 s. Q5 _+ T
  494. BOOL CRevAppApp::InitInstance()
    ! _* F/ y' Q: `: Z8 l. I  ?: k
  495. {
    " L* r; s% R2 T
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];4 W' R7 E5 ?! v8 l" f4 d
  497. 9 `4 H4 M! {8 j- M9 r( u( F/ r2 a
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);( h8 S' E: S1 v# W2 A
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ) W: d# m- o7 D' A# N
  500.   {
    9 S" f* F1 b& k" ~* N
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 i! N' ~7 m% U1 l
  502.     GetPathFromFullPath(szPathTarget,szPathSource);, B; R5 _4 w+ X, P
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    . u$ R# u0 a# ~5 T
  504.     {, \) a9 s. X7 c4 ?1 s
  505.       strcpy(szPath,szPathTarget);, ~+ ]) z3 W/ e! J( l
  506.       SetCurrentDirectory(szPath);+ _# \4 ]# J; e" G
  507.     }
    & `9 H9 X: _& U: \/ i- K
  508.   }
    0 c2 O2 I5 f# X5 c' I8 B* \6 G
  509. #ifdef _DEBUG' w3 Q( b) q2 ~# T6 X& X' [& }
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) M  z8 V" e2 {
  511. #else1 ]( @: p+ i# _+ c; w! p' i' U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 [) C5 V: \, T) G  D
  513. #endif
    / T( `; y* s5 q& f/ {- z$ \/ j
  514.   {
    ; q! Z# c1 H4 s4 D2 f& |
  515.     char tempFileName[MAX_PATH];
    1 s7 e; U# V9 o  m3 d6 q  V) E" ?
  516.     strcpy(tempFileName,szPathSource);
    2 B: h' ?5 o- z7 u  Z3 K4 O- ^0 h7 r8 {
  517.     tempFileName[strlen(szPathSource)-12]=0;
    9 T( F& P: ?$ m6 D1 s" p
  518.     strcat(tempFileName,"\\$CSUpdate.exe");8 a  n2 p- t" }/ s5 Y1 w+ u: z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);- Q* K) b! ^0 n/ i* L: ~9 F
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);6 I9 a; l6 i9 l+ X$ i: ~% [
  521.     return TRUE;
    : M, E3 ]0 `% \7 D3 X" W
  522.   }% f4 K2 |; ^0 ^% N# y
  523.   // Nuke 0118: Delete run.exe) X" W* M- @6 Z- j5 R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    % w  B% k, @& k0 `5 u, }) p! z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");1 m4 w2 h" ^: [, j
  526.   if(!ReadCfgFile("Config.ini"))5 I) V0 b; Y3 f% ?$ E5 n
  527.   {
    3 O' S- h& a9 c# B  d% H( E
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);/ L2 c: X3 \1 W
  529.     return TRUE;
    6 @. g+ N; m) c# d
  530.   }- w/ S9 ~4 {+ f6 A/ {& R3 ^
  531.   HANDLE mutex;7 ?8 ~& _1 X6 J" ]: W" n
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))3 k% Z" t5 W+ _! T/ u
  533.   {
    $ U) m0 b# f( ?' F6 u
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)5 L5 c) @; ?$ {$ `: q+ i$ }* ?- q
  535.     {
    # S: P: [( y$ i0 X6 l) Z5 c# t
  536.       CloseHandle(mutex);
    8 D- I* Y9 [: p8 H* H5 r
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& R2 R9 Q: G0 h+ W% n
  538.       return TRUE;
    ) s# I( g0 u! M, Y
  539.     }
    9 R+ v1 p" Q8 F  j
  540.   }  9 w6 F% a! f3 c
  541.   CloseHandle(mutex);; E( }0 I! k% c* w3 F, P
  542. 4 X, H2 o2 a7 z  Z* p$ z7 Z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    + n% }, l0 ]; |' n, n) ?3 O6 J
  544. ! s1 L8 k6 v3 }3 ?
  545.         AfxEnableControlContainer();% b7 e, Q6 O2 n* |6 J1 R& r
  546. ; b( y# }, a* k: Y0 P$ x- A" x; h
  547.   bCanUpdate=FALSE;1 h8 o' w1 G/ ]1 T' B
  548.   dwStartUpSteps=1;
    5 z/ R4 z5 i$ P% N
  549.   dwProgramState=AP_NOTHING;( W2 V8 z: n# j2 _
  550. # h7 E" F7 @: X9 Z# \8 l3 n
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    * q* j/ W( s/ U% p

  552. , W, R( G0 e3 A% {
  553.         // Standard initialization
    0 J& N, H4 S+ n0 T) B9 P2 K
  554.         // If you are not using these features and wish to reduce the size
    6 E+ c2 w" }. K) b' w/ b* l
  555.         //  of your final executable, you should remove from the following
    / b( W) C+ i* h1 Q+ G
  556.         //  the specific initialization routines you do not need.
    # T" t; D$ `+ y- r0 `% p9 r3 E
  557. ) E, x/ t5 [& R% \  A  S" w  _5 S
  558. #ifdef _AFXDLL
    2 @: a3 S( }  q7 {9 E6 M3 e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    : @/ `/ K0 e) y! R% N) r8 k
  560. #else
    7 D# R5 [* }9 F2 @
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically- q4 V, e# l7 j2 U& u
  562. #endif& E. n. U  B$ f

  563. # _  s0 l$ v& z; v/ H7 [+ G" t
  564.   dlg=new CRevAppDlg;* H; ]9 j# y2 l0 G' M
  565.   dlg->Create(IDD_REVAPP_DIALOG);' ?/ A2 L* x, B( B1 |
  566.   dlg->ShowWindow(SW_SHOWNORMAL);9 E4 U, w# ?/ O8 T, ?5 r/ a$ x) y
  567.   m_pMainWnd=dlg;! C+ D8 v' V# Z8 ^

  568. 2 A  u" M! ~* R, I4 A5 `. O8 A
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    5 R, }& M: `0 n' g

  570. * L2 d4 k/ C3 ]7 i+ Y% m
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( I: u9 P2 M! o" F2 P! m
  572. //  ULONG_PTR gdiplusToken;
    " @6 ~- _8 F6 y; {7 q/ `+ P1 W
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);: {- T6 S& [( P, H# v2 l

  574. ! y- l1 l3 d7 g( u4 o
  575. //        CRevAppDlg dlg;
    " z0 u5 i0 Y! X
  576. //        int nResponse = dlg.DoModal();
    - r. Q( H3 J. A! m* e0 r2 E# R- ^
  577. //        if (nResponse == IDOK)/ V% L5 g, r) b) p5 }/ _6 Z+ ^1 e  |
  578. //        {
    8 \6 c# S% k# Z3 C
  579. //                // TODO: Place code here to handle when the dialog is  K: E3 X- p: x& |
  580. //                //  dismissed with OK
    & Q; |! J7 g3 [6 N# F
  581. //        }
    ) O8 B: D8 A" B6 d& k/ s# g4 q
  582. //        else if (nResponse == IDCANCEL)* L+ u0 P9 F+ u" g! R* a. O8 y, f. [' H: s
  583. //        {
    + ^; K& T3 |8 G/ I0 n- `  c
  584. //                // TODO: Place code here to handle when the dialog is) c2 k8 k" f* Z$ q% Z. R- B- l
  585. //                //  dismissed with Cancel
    ! i; v7 _) K4 r. d  d! w1 z
  586. //        }
    % @- C7 G- E+ Y% [  b

  587. * Y( o1 ]- V: J# V* j
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    # E. `9 m$ V( C
  589.         //  application, rather than start the application's message pump.6 u% n/ h+ Z' Y/ P5 m, r
  590.         return TRUE;
    " c6 R" [' u$ c% i1 O5 d$ ?
  591. }6 c7 A( K' H  Y0 f
  592. - \5 s+ N4 |# q. W! y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)4 B' X2 ]8 ?" M: ]
  594. {2 h' K( P' J9 K/ j$ R
  595.   int i;, m2 {8 q; z- e8 J! D7 A
  596.   char *szRet;+ z& V6 z4 c8 n3 }% n

  597. . }4 _# `% i8 E' D7 {9 X
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ) e0 ]) N) k$ w* I+ ?+ M/ D" o
  599.   if(sztoken)! N$ R: E# t/ ^9 i0 y
  600.   {, Z1 f; m. z$ e: |# S$ W4 t
  601.     szRet=&sztoken[itoken];
    3 ^; u9 J+ l* c. }4 B, G
  602.     while(sztoken[itoken])
    # `  j3 ]3 R( U4 P
  603.     {8 d! _1 j# u# Z  a/ e, g
  604.       for(i=0;i<(int)strlen(token);i++)5 ~/ M+ F& w! v- s/ G: s
  605.       {2 y  r' s4 X# o  f8 ]; N
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])) y/ r6 f' ^3 j0 M* X
  607.         {+ I1 J4 h4 D/ q  n  o
  608.           sztoken[itoken++]=0;! }6 @4 U: _0 V& f, e
  609.           sztoken[itoken++]=0;
    ) I: u; W# ?% [5 M4 i, O3 }7 B2 m
  610.           return szRet;
    , i/ J/ p/ V3 m0 K& Q
  611.         }* p& M; Q2 q/ v: u2 z8 w$ c8 W
  612.       }% Y/ A$ @; p% t1 V
  613.       itoken++;
    + A8 f9 T& a7 @4 v' f2 {' b. a9 }$ h
  614.     }
    # W7 G) J$ r$ ~2 M
  615.   }6 J! a( L1 m' S& B! B, ]
  616.   return NULL;
    5 M6 w! T& @# N0 g0 Y. e
  617. }- \+ Q0 W1 k( v. S7 k0 C2 _# v; n

  618. 4 Z, |6 c. d5 h& _1 W. Q
  619. void ProcessProc(long Total,long Current)- V8 K: |8 c( W: k% |% t7 r
  620. {
    ' p2 j/ H4 \4 u; |) i; _, J
  621.         MSG msg;$ N; I: H* o0 z2 s; e( ]5 i$ O* b2 S
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    : @' [/ ~. L/ \
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    8 w& `# }/ Z' Q0 I+ q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    , l% |% n; [4 Y. G' B
  625.         {
    $ \# R0 t/ X- V/ P
  626.                 if(!GetMessage(&msg,NULL,0,0))
    6 V+ J1 N6 k) `# ?
  627.                 {+ q7 T* h; j% g) f! X! Y9 {
  628.                         return;
    ) u# @2 J+ n" D6 O4 ~1 r
  629.                 }
    + D9 D+ F0 u* [9 ~: i4 k
  630.                 TranslateMessage(&msg);- b/ c% M1 b+ j" I; Q! d
  631.                 DispatchMessage(&msg);
    / }( `% I( b0 v7 S; Q# P9 n% ~; R
  632.         }        " b, _* ~, y( [/ W" N$ R
  633. }
    , a& Q( ~: ~, a- z' ?) l

  634. - k2 Q  g2 s( ^5 _) N) ~
  635. BOOL bFirstChar=TRUE;$ w- ~& m0 _1 H/ o/ A" E* J

  636. 9 p, V/ s& V: _1 ?
  637. BOOL CRevAppApp::OnIdle(LONG lCount)3 X+ w# z- n" \0 _. P3 x
  638. {: \( ~' w. I1 u, X5 P
  639.         // TODO: Add your specialized code here and/or call the base class# a7 }( s+ J4 J
  640.   switch(dwProgramState)' t: ^" s) q- `& b9 R
  641.   {
    ( Q5 n+ y) j2 a4 z, \
  642.   case AP_NOTHING:
    " G: O$ D& `( W' U
  643.     switch(dwStartUpSteps); M" ?# V9 V& b: M8 T
  644.     {! W1 V* E; q9 {% e) _$ ]
  645.     case 1:6 F7 d- e2 C/ i/ m4 f. G
  646.       {/ e: k, H% G& q8 H& i3 l
  647.         int i;7 D0 n. D# y- l& }: d" N( U2 a" o
  648.         CDC *pCDC=dlg->GetDC();7 J' ]. G2 H& ]- @) W  \
  649.         HDC hdcwnd=pCDC->m_hDC;2 _% o& D$ G4 b9 R
  650. //        Graphics graphics(hdcwnd);
    9 y; ?) h- M0 n+ H7 s
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    6 j! B1 S/ L& {* Z5 M9 _/ o
  652. //        INT iWidth=bitmap.GetWidth();
    0 T. [- E/ C  P: T
  653. //        INT iHeight=bitmap.GetHeight();8 T9 _/ X% C+ @+ T7 u
  654. //        Color color,colorTemp;8 m: _% g3 Y/ g1 z( g1 t8 y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)- C9 `) L. O4 @
  656. //        {
    - l& o: \  d& T% @3 k# S+ \- C
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    3 C  K0 j7 O* z' \
  658. //          {
    - A/ k4 {) Z8 v; s- _
  659. //            bitmap.GetPixel(iColumn,iRow,&color);, H( }% v/ e' `+ i' m1 B+ U2 q
  660. //            colorTemp.SetValue(color.MakeARGB(  u$ @3 V: |+ E7 ~$ l4 `$ M/ q  e
  661. //              (BYTE)(255*iColumn/iWidth),$ U& R% G+ o; x4 ^9 w- M% d
  662. //              color.GetRed(),! z1 a( U+ Z& `) \0 _
  663. //              color.GetGreen(),3 S4 \6 D# Z1 r9 W- j* Q
  664. //              color.GetBlue()));
    * j6 H$ P7 ~# c" r
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);$ C2 B! R  N: l1 n  u) v; s
  666. //          }
    7 x* b  B( H: V( ~4 g
  667. //        }4 @& Q% R# r+ `. l% @" y7 N  f
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);& F7 B. p0 d: R' D: N# B' P
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # _' J5 ^" E; q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ' h3 J/ @" m/ {' X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( U" N* B+ W' b/ O( }) J
  672.         for(i=0;i<240;i+=8); v& {2 r: A3 P) }1 b" z
  673.         {
    . l' d* E/ M3 g3 z/ C
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , w: u, y5 g& j( M) Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - x# P4 Q8 r) G; n$ E
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* N( @1 d/ Y# q) R1 Z! H( L/ `6 h
  677.           Sleep(33);/ b+ D, j1 O# y4 N; H: G' t1 k: i' g
  678.         }0 z8 b7 w/ z9 y0 m. `! K  i2 F
  679.         Sleep(1000);! x* Z1 P2 d( V3 D; M/ u9 f6 c2 W
  680.         for(i=240;i>0;i-=8)1 d+ }8 t6 C- q( V- j/ s
  681.         {
    " F) Q9 E3 E% E- A9 F4 x
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & z4 D" n+ k1 _, \$ \, a6 h
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 w4 m5 A  R( V. D% }, Z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 h/ ?  z& b+ J; k8 @1 w: p6 E
  685.           Sleep(33);
    - a' ?' ~7 W6 _% R' ]2 L- J- |1 T
  686.         }7 T1 ?8 V6 ?) M% f& r% L, F
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 a( C$ N) I" T/ w3 _
  688.         dlg->ReleaseDC(pCDC);
    * {9 k. o6 c- z* A( u5 O! }$ C
  689.         DeleteDC(hdctar);3 L5 f5 ]5 X% [" X3 W
  690.         DeleteDC(hdcsrc);
    - k) M' o9 |% e
  691.         DeleteDC(hdcorg);
    ' @, I3 Q) J8 ^* ]( |6 x, G4 b- u- j
  692.       }9 [. t) v8 z$ j2 c# ]
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 X4 S# f) D4 g  N' l
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");7 @1 U; ~0 W2 P+ v# ~! C7 |+ X
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, }' P( X4 y' |6 k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    6 E, Q5 {0 r, ]0 \5 D+ l! G) c# U
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' q1 {2 n. Y) V% _# x
  698.       if(!Dn.Connected())
    * A6 l  g3 f5 p
  699.       {
    ( D0 k4 q4 f& w
  700.         dwTotalFiles=1;6 `. q4 y2 l/ T2 n
  701.         dwDownLoaded=0;" s+ Z% p5 ?" ?6 U
  702.         bSilentStep=TRUE;) T( j. k5 b  |9 p4 D$ ^* q
  703.         bCompressed=FALSE;. X% D* E4 D: X# K2 W, B/ N
  704.         strExtLocal.Empty();
    0 ^: T( g4 E" D/ e
  705.         strFullName="readme.txt";
    " @1 C: E8 e* O8 v
  706.         dwProgramState=AP_CONNECT;( ]. _4 E0 u7 m, b
  707.       }
    6 F+ Z5 q" ?. X+ C- Q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();( h1 u- W, \: N- x
  709.       dwStartUpSteps=2;
    4 D! W) S+ K' Q6 u2 T" \
  710.       break;
    % d7 C: ]" s% s9 h; ^/ x- P
  711.     case 2:
    ( X; X. n. T% z) @% x
  712.       {  f/ M- r, l$ l; U2 Z# A# Z$ E
  713.         int iEOF;
    + i5 a; k2 L/ x4 a- E' J
  714.         FILE *fp;
    ! I5 `! \0 ]; E
  715.         char szString[512];
    : ^0 n3 y- V0 x$ Z& ^1 u
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    1 d) o1 r, l  ]+ d
  717.         if(fp)6 _% H- y6 }+ d. X
  718.         {0 R& k2 C+ W, V+ C6 t. h
  719.           do
    2 y# d( Q( s9 ~. w% H- d/ I: w. L
  720.           {6 m; _6 x) y3 f* k
  721.             iEOF=fscanf(fp,"%s",szString);( _' W2 {# Y6 @% H" I& U
  722.             if(strlen(szString))# ]3 c6 }7 W. C
  723.             {
    / E( R: s% f' ?
  724.               if(bFirstChar)0 f$ f0 e% i% d% f* ?) A- j; F
  725.               {
    $ D5 a" C: W7 ], U4 U: `- |
  726.                 bFirstChar=FALSE;1 G- Y% Q/ ^* e+ t; k! V: s) r( f
  727.                 bConnectIsBig5=FALSE;* Y( ^0 F) u7 j' x" b
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;7 ?# N9 V8 |* p5 K9 N* e
  729.               }
      Y% @: b1 z4 z, I7 t  G6 {; w
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    # Y/ ^1 u5 w  W5 {- s6 r- X5 d  f
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    0 @: }  j/ U6 Y6 ^
  732.               dlg->m_ListText.AddString(szString);1 X  H1 F* Q  k( z2 a; R
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 X9 [$ S. J8 I% e
  734.               *szString=0;
    ! }* Y- _3 P0 t& @" b; ~* a* m
  735.             }$ A; f0 @. q/ P( Y9 x. _
  736.           } while(iEOF!=EOF);
    . d* \: i! e/ h: I7 S9 _
  737.           fclose(fp);
    9 d) O1 C! s0 O% }+ Q8 V
  738.           unlink(".\\DownLoad\\readme.txt");
    2 g" M2 o! o; C; O9 O# V
  739.           dwStartUpSteps=3;' n$ m- a7 O7 K! ^
  740.         }
    + m! {4 W+ t; @) A! U
  741.       }
    . @7 b, W$ S7 M- d4 x
  742.       break;
    - ]3 }) z! f& u, S8 w
  743.     case 3:
    9 A9 A- Z6 [$ }9 x( t
  744.       if(!Dn.Connected())
    - A% K) c. y5 J4 B, {7 N
  745.       {2 C7 |  C* Q) Q* e3 }0 N6 q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);- S- A! }- R& J/ C7 y. C
  747.         dwTotalFiles=1;6 f* @! ]3 ?3 W; h
  748.         dwDownLoaded=0;
    : c. s2 G4 u6 b
  749.         bSilentStep=TRUE;
    8 D6 j- j( s; e$ @, s7 f3 v8 O
  750.         bCompressed=FALSE;
    / b9 \1 T5 Z) s5 t3 \
  751.         strExtLocal.Empty();* b- G7 B, ~/ Q9 S
  752.         strFullName="checkversion.txt";% m5 I/ m' Q& `! f! m) d4 n, B% H
  753.         dwProgramState=AP_CONNECT;
    5 j+ U1 Y) A% Y6 c
  754.       }/ \4 e; ]  k7 d0 j- S8 `
  755.       dwStartUpSteps=4;
    5 ~0 v) v4 }3 G) T8 T$ ?7 F
  756.       break;9 ^  K" \- r9 {1 k
  757.     case 4:
    ( ]" V7 j0 E: P9 F
  758.       {
    4 }0 J' D% h+ a# O' l
  759.         FILE *fp;  Y4 O, H2 [' @( P2 U, m
  760.         char szString1[128];" Z4 j; Q8 i6 R
  761.         char szString2[128];' b$ ]7 H+ _. [  z, ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");8 @0 g$ ^' Y9 u' V6 e! T1 R) p
  763.         if(fp)$ D, c! D( {+ L# @
  764.         {
    ) S' [' X, b( ~; H/ X2 v
  765.           fscanf(fp,"%s",szString1);
    % `+ {1 V" m' E2 |) ]/ a6 I
  766.           fclose(fp);
    " K9 H4 W6 h2 d- |5 V
  767.           fCheckVersion=atof(szString1);
    ( a6 \: p5 j" W" t5 y
  768.           fp=fopen(".\\checkversion.dat","r");
    , Y" c9 C3 J# k7 f* \9 \
  769.           if(fp)
    ' T+ J+ v- P6 V) k% k1 k
  770.           {
    % ]' Z6 x5 M' d' E  ^& ^9 N1 o* a3 o
  771.             fscanf(fp,"%s",szString2);6 A& c. p# A$ f1 K7 j/ i- z; N: ]. r* U
  772.             fclose(fp);
    ! a: @( Q1 T6 s
  773.             if(atof(szString1)!=atof(szString2))7 n: D! c  q/ {& K
  774.             {
    " v; V) v( K, \6 B2 X
  775.               if(!Dn.Connected())
    / y% P8 V# h' S
  776.               {
    5 Y" \# W+ n& k- g2 P# d  J2 G# C
  777.                 bFirstUpdate=TRUE;% x' b$ l, ^) U+ I
  778.                 dwTotalFiles=1;2 Q7 e; [4 \" V0 A( Q
  779.                 dwDownLoaded=0;
    & \" q' o# I9 n. Z6 a
  780.                 bSilentStep=FALSE;
    ' J" K  c. x+ E4 d2 h% Y& p9 s
  781.                 bCompressed=TRUE;  V4 K3 _+ y1 I' u% o; H
  782.                 strExtLocal=".\\DownLoad\";! A$ o' A& t) G/ G$ e' R: v: s
  783.                 strFullName="update.txt";
    ( Z2 A) n4 a& i. d+ P" I7 w" t3 W
  784.                 dwProgramState=AP_CONNECT;
    0 i6 }0 {0 l3 T" @( u: p
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! B% ?! X$ c/ t- b- C: q
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 }* s( w( D# s' i# q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");+ F+ z* d' L5 c* }
  788. ' \. @6 S+ o) ~$ ^4 k
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: m  E4 k5 |0 C& x
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    4 o* A: m/ _4 W2 \7 E9 j7 n6 E& J
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / B/ R" r# V3 A
  792.                 {
    5 y8 |' H# Y- Q! G3 u; R# ?8 n: t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : B' Z8 L6 B) w4 Q0 Q+ q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");% \9 J2 M  h8 d4 d0 x  I
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    & q3 `% t" L0 j
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 H* p# v/ m5 F8 _# Q/ }

  797. 5 Q+ ^) c' X6 a% i# F
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    3 N9 _8 G! z( ^, ^/ Z) {, s
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; O( j; @1 m$ L& z# I! e* F
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ a( ^7 J; R$ d+ P( s
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' A; q$ ?& o9 r
  802.                 }
    8 y9 J. M: r) S" R
  803.                 dwStartUpSteps=5;, ^1 M. D$ \& K" N" f$ v; a
  804.               }% N: o7 v) x0 ]; b, V# t5 m; E
  805.             }
    / a. c! O' a* ~+ t5 p$ T6 C: M" F
  806.             else
    3 w% Y9 x$ l7 r& |/ a) n
  807.             {' I9 N1 V# Z4 y5 \6 B
  808.               unlink(".\\DownLoad\\checkversion.txt");
    : Y7 M. [* p# t6 ^# d
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - l- Q( C7 x2 l) K4 E
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 r- u3 H7 I' |! w7 c; p
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");* Q1 r1 f+ [( d9 ~% \

  812. ( A) b% x) L% R' Y1 G0 }/ x) I4 o
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 ~  X0 y( h8 J8 V
  814.               dwStartUpSteps=99;/ \+ j  j, w. X3 V' Q+ l, `
  815.               bFinishUpdated=TRUE;
    & N* G- l, P5 `2 }0 r
  816.               bCanUpdate=TRUE;. A7 I: r2 u; H# l* p! I
  817.             }
    ; Z& \+ S5 h+ {: q( a
  818.           }# T1 Z; q% Z6 r* ]+ A( h) d  C
  819.           else
      E# V1 E: {1 Y/ C
  820.           {, V* k8 l! m# e# T# S& l
  821.             if(!Dn.Connected())3 A; X$ v* a: S/ s5 \( z( u( G
  822.             {
    3 H) S( {0 V+ F3 E! @
  823.               bFirstUpdate=TRUE;
    / ?; K( q; `1 S2 x3 u( G5 p
  824.               dwTotalFiles=1;# Y# S2 J) ]+ z
  825.               dwDownLoaded=0;
    7 c( U1 D1 [6 j1 t1 F) i# T$ i6 T3 ?
  826.               bSilentStep=FALSE;
    ! s3 h' r" ?3 e5 s& ?  C" G
  827.               bCompressed=TRUE;
    5 ^4 l& J( l' X1 d
  828.               strExtLocal=".\\DownLoad\";
    # g6 k4 n% g6 X4 @0 d/ P
  829.               strFullName="update.txt";
    ! {8 P: j5 L2 D
  830.               dwProgramState=AP_CONNECT;9 W* j$ U# s4 c' z7 I
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" A0 T9 ]& q  Q# c. `8 w8 @
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- q  m7 T6 E4 i  g$ K  j8 @
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");6 u7 g/ z1 ?7 t6 G  Y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 G2 U  A3 j, |9 L+ T. @
  835.               unlink(".\\DownLoad\\checkversion.txt");* A$ x2 i% M# k
  836.               if(GetFileAttributes("Wsa.zip" )!=-1); Z, A& X" y" [3 A8 B. A
  837.               {) c. f/ |) R9 D9 m  h
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");8 A. v9 U& r# t8 ^' W
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");6 z/ L6 S" Z/ H. E* ]1 C" Y" k
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");" m' H6 q; R' N3 p
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 u; \3 k( N& u% B" r) H
  842.                
    1 U  e8 d( I1 a# M# I4 N4 M6 b  b
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ I: u/ r5 v: l$ C0 g% h
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - z) z$ C# Z* }  q
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; {% l8 N1 v# `* z. v
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 B+ J0 \* Z% w3 U( K' M( _
  847.               }+ C; i$ K! T: K7 A% s0 x5 b+ V. n  P
  848.               dwStartUpSteps=5;
      c- t; n/ r' \1 J, B
  849.             }8 ?, Z# [/ F' n8 O2 U$ x
  850.           }8 }- w/ Q8 z( Q; s, s/ C, w
  851.         }
    ! w- ?# G, E2 m+ y' X
  852.         else3 Y* B# }! \6 W0 ^2 H0 f2 k$ T
  853.         {
    * }( \: s1 d. ?/ X1 f2 e! t* u- @, u
  854.           dwStartUpSteps=3;* h7 |8 |$ C3 D7 y/ Q  s
  855.         }
    ! v/ r8 t9 _0 Y+ b+ i  s. b) \: f
  856.       }4 g# j/ W* O- t; ^
  857.       break;
    . f2 R' Y9 [& l3 O/ a
  858.     case 5:
    3 Z$ C: g& Y. Z8 t* a7 I3 A/ V
  859.       {
    . Q( j1 t" Q/ Y% w- [
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& J# j9 J4 J% L3 B: J, G
  861.         {
    " t5 L8 {' R0 E) N' o
  862.           int opt_overwrite=1;, O- E9 ~; {. w. c8 ]2 Y1 q! Y+ \
  863.           int opt_do_extract_withoutpath=0;
    / V4 q5 M; f) j
  864.           unzFile uf=NULL;
    9 B+ i" J+ e; j

  865. ; l2 E# M! c; ^* W
  866.           uf=unzOpen("Wsa.zip");
    9 U; D! t1 ~) V* w
  867.           if(uf)# J+ j  Q* s- r5 Y0 p3 D
  868.           {
      G) H1 |1 G3 W* \5 C* b
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);$ s2 g% D4 u1 X# \5 t
  870.             unzClose(uf);1 B( w' \1 f& _0 h+ q# u9 n7 \
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    . f8 _0 I) k7 e1 p5 l, t3 D
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ) b" }' V% L/ Z0 _. o3 ?! B( p9 `' _0 K
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
      V! b2 f6 H" C
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) s; I3 g0 [1 f* B
  875.           }
    1 V) h. {9 W7 Q% W/ G' n" S( F
  876.           DeleteFile("Wsa.zip" );& j! y7 I0 [" F- b
  877.         }7 C) r6 f, X4 q1 T
  878. 2 w, D. {/ `  a+ Q  {
  879.         if(CheckLocalVersion())
    9 G, V/ H6 p7 ]2 r, j6 {
  880.         {
    ) A# S. s2 ]  E: F" \+ m$ {
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    6 @0 O( h. v, O+ q% h
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");7 ?+ f) O/ o4 |8 v6 w6 B8 C
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ! j1 z) b% T0 e' O
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & H: X9 j; h, F$ }1 l6 C
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    3 Q+ z/ o' j& s( i  T6 |9 L
  886.           dwStartUpSteps=99;
    ' E" ~6 O+ B; @3 d9 B
  887.         }
    * `# p1 Q* ?; m
  888.         else
      x9 ?/ K" M* v5 H
  889.         {
    . ^$ y( Z7 H+ R" Y
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");( \6 Q# `! q: G+ Z# A' l, v
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    " N) _* M- H. c: W7 M1 m9 s
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");* O; G  M+ t# z: n! ^- q4 A6 u3 X
  893. 3 z* M6 o3 o# G" f  _! r
  894.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 W7 n" L! g/ ~( V; \. C
  895.           dwStartUpSteps=99;
    & ?0 `* c4 C9 ^, F1 {+ f
  896.           bFinishUpdated=TRUE;
    ! |+ b: }7 d$ @
  897.         }! i$ r$ I5 G, V% q+ a  ~2 V
  898.         bCanUpdate=TRUE;
    $ b# }6 Q. i/ w, V( L% o5 K
  899.       }
    / m/ {" r0 i; T5 i8 |: `# ?
  900.       break;
      B9 f( ~9 M! }5 M, m
  901.     case 6:4 a) z5 c9 _  {. _1 `! I% I" ]
  902.       {
    * o) s$ }2 p; G" T$ T) I
  903.         if(!UpdateLocalVersion())
    , X, Z( ?. C. F# q
  904.         {
    4 ?, D3 [& E3 C# V
  905.           if(bRestartUpdater)  P0 g- x: v( ^( P8 l+ _8 ~
  906.           {- a. q5 {% [0 D. N. `+ I6 d" m5 ^9 x
  907.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);) P: l* W2 m6 L9 E
  908.             else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);8 `! Y' m2 ~9 _: j
  909.             else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
    ' G- \- @7 }  o2 m$ [  X) u
  910.             DestroyWindow(m_pMainWnd->GetSafeHwnd());
    ( n$ t5 J. y9 l
  911.             dwStartUpSteps=99;" A0 x; ]: e, P9 d/ t' |
  912.           }* v8 d/ g) e/ e" n% ?
  913.           else7 i' N' I! V  L/ I3 r4 k7 o, E
  914.           {6 {# E  t) y5 \+ E$ I
  915.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈竒ЧΘ.....");
    ( q  s0 {! V) S, c: F  o# |/ X- ?
  916.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新的资料已经完成.....");
    + J- d  y1 Q7 Y! B  o
  917.             else                                                      dlg->m_ListText.AddString("updated file ok.....");$ \' ^8 P3 X6 Q) S. e
  918.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- ]' s# F( Z9 D( I  ]; s9 ?
  919.             SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,0,0);$ |# B. F* d; u$ W/ j+ h8 @
  920.             dwStartUpSteps=7;! `. x& R; R  K
  921.             bFinishUpdated=TRUE;  Y6 o3 e% o6 h* @# y6 ]
  922.           }, P# P- w. S' G$ m/ J$ ~) l; o
  923.         }
    ) V( Y4 ^  J. C2 ~8 F: q& {
  924.         else/ d" s$ s, o- x9 \3 U
  925.         {( Y% X0 E2 O3 V/ `* O# V. H8 Z
  926.           if(bRestartUpdater)( q# F" g! T& f6 a% O/ L
  927.           {9 K$ R" }- n9 l- o
  928.                                                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);
    # n7 ]' H, e0 v( P- `( ^
  929.                                                 else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
    # b& b8 o% W& r! V; J5 t$ u, _
  930.                                                 else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);+ ?6 F4 b) l9 P. t4 y
  931.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    4 p$ Q9 a" B# U9 N6 B
  932.             dwStartUpSteps=99;
    8 o' e0 e  ]" c+ H$ A. K+ L
  933.           }
    3 ~( L/ ?1 w' @/ U3 X3 s3 G
  934.         }
    ; O8 E* h; r8 q' a$ r" }2 M- q
  935.       }
    , }% w9 k& `3 t0 P
  936.       break;
    ( Q' e, Y$ s2 B6 z
  937.     case 7:$ f' ^. w& V0 H
  938.       {
    7 j  o0 G) ?9 V. h7 x/ I
  939.         char szExecuteFile[14]="Bf_Client.exe";
    + Q& N3 o5 o0 q6 N8 o- j* g1 y
  940.         if(GetFileAttributes("Run.exe")!=-1) strcpy(szExecuteFile,"Run.exe");: i2 t1 _, M% H7 |0 C9 s
  941.         if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);  H7 I/ \! r, t" b4 M8 s
  942.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated2",NULL,SW_SHOW);: d! `+ Y) g6 b3 e9 W2 E
  943.         else                                   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);% A! t: p& h! j8 y  p5 }
  944.         DestroyWindow(m_pMainWnd->GetSafeHwnd());- t* T1 l& G( z9 u
  945.         dwStartUpSteps=99;
    & U$ Y5 v1 `/ T, D" a( |2 \
  946.       }; \3 G! A# [$ T" n3 D
  947.       break;
    2 r* p, k! u8 C% G+ f- ^2 W
  948.                 //add by cece: L( }% Q! Q( O7 A! x8 \$ p( x
  949.                 case 8:
    # g% a4 I& k  ~6 i
  950.                         {. `6 v7 W* a2 s( }6 B2 `
  951.                                 if(!Dn.Connected())
    % O) B1 W8 P' o% t* j1 c
  952.                                 {
    & z* n$ A9 |+ l7 W
  953.                                         dwTotalFiles=1;3 b6 O- [; K8 E0 A7 p
  954.                                         dwDownLoaded=0;
    9 H+ r" B( Z+ h- z- K" R
  955.                                         bSilentStep=TRUE;
    4 r( E  R8 p9 o+ E& g
  956.                                         bCompressed=TRUE;
    2 z/ n6 C* a9 f
  957.                                         strExtLocal.Empty();
    , p) ]$ ^% j* S
  958.                                         strFullName="download/CRCTable.txt";
      U! ]) j8 N2 m4 Y; A
  959.                                         dwProgramState=AP_CONNECT;
    , A9 W" e0 c; Q
  960.                                 }
    ' G5 x' u8 ]& O0 D5 o" d, W* P1 P" X
  961.                                 //
    4 X4 l' ~0 G3 {
  962.                                 dwStartUpSteps = 9;
    ! M6 H5 t; A' X" Q( H# I
  963.                         }" W, J6 f* m- ^  x
  964.                         break;
    * f6 h# G/ ~( n% J% S
  965.                 case 9:
    % B) b* g; ]. E" {6 b( }' l: N
  966.                         {
      F( g$ B3 p( c. j& h! H
  967.                                 if(!Dn.Connected())
    0 X! x  A6 n5 G) E
  968.                                 {
    $ N7 n" u: f0 \' G" w
  969.                                         dwTotalFiles=1;3 P: J0 M: q% \5 p; L
  970.                                         dwDownLoaded=0;
    1 I- U( B# k1 n- w8 Q
  971.                                         bSilentStep=TRUE;
    * A' S9 g4 X8 K' |0 x
  972.                                         bCompressed=TRUE;9 R& m. c/ }" f- ^# f' x4 u" l
  973.                                         strExtLocal.Empty();# Y! \7 y/ g  H! Q; M- z' \
  974.                                         strFullName="Run.exe";' Z- ^8 g: \9 v) z3 R( W+ c- h
  975.                                         dwProgramState=AP_CONNECT;9 D+ V6 I1 @# s# }. w: r* s6 d
  976.                                 }
    6 \' T0 H/ e( R4 \4 m6 u2 b5 F' H
  977.                                 //1 z2 X2 n- ~$ i
  978.                                 dwStartUpSteps = 10;6 _. U& p+ f9 M1 p9 U! Z; N. e
  979.                         }
    : v9 a$ l( D3 p9 O5 u0 b
  980.                         break;- c7 B7 W$ D. H; m4 M0 F0 b* Y
  981.                 case 10:
    9 I2 a0 ?  B# P& g0 y+ [4 E
  982.                         {
      w" q/ t2 \( r" A; g5 N/ Q. }* n9 z
  983.                                 if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);
    & l  w2 G* s' c' W, k* @
  984.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open","Run.exe","updated2",NULL,SW_SHOW);# b$ o# Q0 ?- |6 _# ~! S9 N( t! X
  985.         else                                   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);# Z, k: O7 K- \7 _2 _, d9 ]
  986.                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    " e1 a; a& J3 j" x, y4 b
  987.                                 theApp.bClickRunExe = FALSE;
    8 `, \1 i+ d8 z8 `, C% X1 D2 Y
  988.         dwStartUpSteps = 99;4 Q8 Y3 t3 o2 Y6 G
  989.                                 //& R2 y  A1 e  ~/ ^4 k: `. l: @% g
  990.                         }
    " l, W3 o4 h! ?9 ?, h1 e
  991.                         break;5 ^, Y- v* ~4 R
  992.                 //
    ! w" \) O) U- }
  993.     }+ r2 b- `2 \& s" d$ H
  994.     break;
    6 I+ C7 V5 r4 S5 ~1 P! I
  995.   case AP_CONNECT:
    4 ]/ B% R1 i+ n& ~8 [) q" a
  996.           if(Dn.InitNWSSock(4096,4096))
    % T4 y; [# G' x2 e: Q+ P2 c
  997.     {
    4 E* }+ T# p5 g; v
  998.       char szPathName[MAX_PATH];
    4 V0 J4 Y7 {* v: g! W. c2 w* i
  999.       dwLastSize=0;
    4 p$ e% x5 u3 w$ C( S
  1000.       GetPathFromFullPath(szPathName,(char*)(LPCTSTR)strFullName);
    1 {7 y6 k; o, N" V: Y
  1001.       strFilePath=strExtLocal+szPathName;
    % y, b1 y" X  f% T2 `
  1002.       strFileName=strFullName.Right(strFullName.GetLength()-strlen(szPathName));" E& P$ `8 l* a
  1003.       dwResumeNums=0;& e" E1 I" |9 e4 B' q9 l2 n
  1004.       CString strTempName;
    - M% M: D) m2 e  p
  1005.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);
    7 M, ^; c' k  ]  A0 r( }
  1006.       CString strCountData;
    / X+ ^3 z# f( r8 D
  1007.       strCountData.Format("%d/%d",dwDownLoaded+1,dwTotalFiles);
    , c+ i! ]& e# @8 p0 E" H8 ?
  1008.       dlg->m_FileNumber.SetWindowText(strCountData);
    % p; [1 T% i' t- h( h5 G2 Z7 V( h
  1009.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));$ f' H+ N' T/ Z9 P% ]8 l* |
  1010.       if(bCompressed)) }$ U0 k( ~- q  w5 O
  1011.       {
    6 V: x7 |8 Q/ N8 J8 ]
  1012.         strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);$ y: }2 n2 G" n. J$ ]) D
  1013.       }
    5 m" ^" n+ d" o" B
  1014.       else1 K# ?6 @" H: u) Y; g- s) i! v0 @/ W
  1015.       {' o* n" v- d: o1 q4 H5 s! E2 W; y$ Y
  1016.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);  }; E' q# o0 a! J3 S; p% b  U* m
  1017.       }
    9 P! E/ G0 t& \- F
  1018.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);+ [( U$ }0 Z; e  K% ^* ~, R
  1019.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());
    7 k( W- k+ W6 Q
  1020.       LastTickCount=GetTickCount();
    5 H4 K$ ^) T/ A
  1021.       dwProgramState=AP_SENDING;
    7 ]  M, G& t. O9 ]
  1022.     }0 z" H# [2 D# r* f& G0 V) x
  1023.     else
    ) O2 g% Q9 Z( c; _
  1024.     {
    1 A0 K$ b+ j# h- d7 q3 Z5 p
  1025.       Dn.QuitNWSSock();
    - T( K) P1 i2 O+ W" o( u9 T1 p
  1026.       dwProgramState=AP_NOTHING;
    # I) k5 A( m3 j- @: F
  1027.     }
    / n7 c& D/ a! t
  1028.     break;4 i2 O3 {, D( @: j! G. {
  1029.   case AP_RESUMED:
    $ h& f1 L# H5 h2 P6 R' k8 Q5 [5 u
  1030.           if(Dn.InitNWSSock(4096,4096))
    0 T! R& A" c1 Q7 W% d
  1031.     {* @0 Q& v" h* q5 e, ^0 L  Y" e8 z
  1032.       dwResumeNums++;
    0 o9 \" t5 C/ I3 |
  1033.       CString strTempName;- y" z$ ?0 x4 D
  1034.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);, ]; I& J- V6 @+ |2 l1 P
  1035.       CString strCountData;- Z7 {& t' c% w* S
  1036.       strCountData.Format("%d/%d",dwDownLoaded,dwTotalFiles);
    9 S' G+ |5 ^' w" `8 o; o) y8 @
  1037.       dlg->m_FileNumber.SetWindowText(strCountData);
    3 C" L( c4 h; U; @6 M$ c: O
  1038.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
      w/ q8 {. c' _( L- B
  1039.       if(bCompressed)" d2 |9 k! G: `) g
  1040.       {8 F, d7 v2 S5 Q) b9 t
  1041.         strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nRange: bytes=%d-\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName,dwCurrSize);% n& F- \4 j; Z& {
  1042.       }* Y6 q/ I7 P% W1 Y- h( L4 Z
  1043.       else& p, z6 n; S* \- N
  1044.       {. M/ B+ s8 c6 c, ^
  1045.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nRange: bytes=%d-\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName,dwCurrSize);
    , I0 y# d. Y+ r3 X( Z
  1046.       }
    * Y+ T" H; Z- ?: C
  1047.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);
    0 t% b1 a2 I+ p5 n" B, |
  1048.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());
    , g5 c" c" j, j8 c- C* P  f. k6 N* c2 Q# }
  1049.       LastTickCount=GetTickCount();- h) y4 H  W  M  }+ D" @
  1050.       dwProgramState=AP_SENDING;
    . a9 s* U8 S8 ^7 u+ P1 H
  1051.     }7 G' ]5 J7 I: u: E7 R  u7 y
  1052.     else
    7 O% F( A% Y9 G+ u
  1053.     {
    4 D2 ~5 f8 S3 `2 T. m! O" U- f
  1054.       Dn.QuitNWSSock();. Q% u! U+ l0 x. X
  1055.       dwProgramState=AP_NOTHING;
    7 Q% B" x5 W* ?* P4 u+ A9 D
  1056.     }8 `6 h$ i9 c2 N1 b- e
  1057.     break;( j/ _' s' m5 \2 N! _& ]% ~4 u
  1058.   case AP_SENDING:1 q' C: x5 }5 h8 Z, W
  1059.     {% R; b- j' X1 `
  1060.       DWORD RecvLen,SendLen;. Q+ \; U& A+ n( B4 j
  1061.       if(Dn.NetworkLoop(RecvLen,SendLen))- L# [, s" i1 s: \2 t7 a2 t
  1062.       {
    3 h/ @  B% ?" B) {/ b& |
  1063.         LastTickCount=GetTickCount();8 v0 Z* N, n+ Z+ a/ G
  1064.         if(SendLen)
    5 ], t2 A& K% Z1 |  ?  w
  1065.         {
    , |) F# e4 A, |8 z7 }, M: W- i
  1066.           bReadHeaders=FALSE;& R3 \, `, V, y- a
  1067.           dwProgramState=AP_RECEIVE;9 w* w- S* R: c/ I1 V4 K* U
  1068.         }
    9 X5 ~5 _8 G0 ^5 z, q$ K, x& g
  1069.       }5 o8 F1 V! E& A# e* w
  1070.       else& g/ ]) R+ g7 n# u, N+ V+ o
  1071.       {
    * \! P2 r0 ~& F) U/ @+ B
  1072.         if(GetTickCount()-LastTickCount>3000)
    0 p" a* w5 c3 C3 d
  1073.         {
    3 [: o# R) L* c1 n/ Z: r' F
  1074.           Dn.QuitNWSSock();) ]; V( X. r; H, k  y! t
  1075.           dwProgramState=AP_CONNECT;% M: i/ e& R/ R
  1076.                                         //$ ^0 S* }! R/ F" J
  1077.                                         static DWORD s_dwCount = 0;
    / m1 a, A' w. R5 h
  1078.                                         s_dwCount++;
    : t6 I9 _0 ?7 @
  1079.                                         if( s_dwCount > 10 )' J. b5 H6 l( z8 V; w9 h8 P1 A2 @
  1080.                                         {
    # d! b% k0 [9 H( S; i' w
  1081.                                                 if(m_iLanguage==TRADITIONAL_CHINESE)   MessageBox(GetActiveWindow(),"硈钡穝狝竟ア毖叫浪琩眤呼蹈砞竚   ","Error",MB_OK|MB_ICONERROR);5 ~) k: e; g2 o* F9 m, F; e+ f
  1082.                                                 else if(m_iLanguage==SIMPLIFY_CHINESE) MessageBox(GetActiveWindow(),"连接更新伺服器失败,请检查您的网络设置   ","Error",MB_OK|MB_ICONERROR);
    + r$ {7 K7 P+ C
  1083.                                                 else                                   MessageBox(GetActiveWindow(),"Connected Error, Please Check Your Network Status   ","Error",MB_OK|MB_ICONERROR);
    1 |* J1 d0 \& X+ B. }$ a- b
  1084.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());8 J$ n$ F# o6 j, ?* j  }
  1085.                                         }, e9 Q' y" {0 U3 }( i  T' J* V
  1086.         }
    ( F* ?' v2 L  n+ c% ?! ?
  1087.       }
    2 A4 f: y% {/ O5 l! q+ ^+ W" m
  1088.     }* b+ {, d& T* D9 t( [1 p2 e
  1089.     break;
    + {5 ~7 `; x) m' y7 w
  1090.   case AP_RECEIVE:
    ( l) b1 p7 ~: Z$ Z
  1091.     {+ q! X- E9 K5 `& s2 P, q  ^
  1092.       int Count;) h7 A9 W5 M$ \5 s) z' R& s
  1093.       DWORD RecvLen,SendLen;
    : P! k9 Z# P3 [' T+ g
  1094.       if(Dn.NetworkLoop(RecvLen,SendLen))
    : H, C6 m0 [0 Q: |2 B: s
  1095.       {/ m; S  [- q/ i3 ^
  1096.         LastTickCount=GetTickCount();
    / ~; h6 f4 s. X+ B, f3 z& v
  1097.         if(RecvLen); A% S! N# G+ E/ L4 J+ Z' D$ _
  1098.         {; r) z* ?0 `" ~* N1 x, I7 ^
  1099.           if(!bReadHeaders)
    $ n' ~( E+ M) G+ s6 Q6 T- ?# _
  1100.           {3 I$ u8 o$ e: [1 i2 J- w) i9 |
  1101.             char *token=strtok3(Dn.szRecvBuff,"\r\n");3 I/ l7 C: I7 k, i, ]& M- Y
  1102.             if(token)' e3 B& y+ l9 Y
  1103.             {4 i9 d  t4 S( M. T4 A5 A) o4 _
  1104.               dwFileSize=0;) B2 R+ P( s8 H; Q, j% |7 \: u, W
  1105.               for(int i=0;i<(int)strlen(token)-3;i++)
    * J, P7 ]( x3 `
  1106.               {
    : w; H; W& |1 @
  1107.                 if(!strnicmp(&token[i],"206",3))
    7 ~2 L! r! q* |& s' K0 @
  1108.                 {3 N. ]) }: Y( ~! R4 K8 Q3 J, p
  1109.                   if(!bSilentStep)) b8 e' _1 W6 b* g) u% R
  1110.                   {% {0 T% m# z% V  e$ ?
  1111.                     CString strTempName;
    * F4 u6 r4 {' p; B
  1112.                     strTempName.Format("%s.....resuming(%d)",strFileName,dwResumeNums);- a" [! M7 T) E- [9 z# n- n: `
  1113.                     if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);# c6 V7 ^5 D: k
  1114.                     dlg->m_ListText.AddString(strTempName);; s8 p5 n" w0 W1 w; L
  1115.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 Q# p4 y% [: x7 Z
  1116.                   }) l& x/ w9 i1 \$ r0 m) l% A/ L
  1117.                   bReadHeaders=TRUE;4 o% v6 H) H4 W' c  u" f
  1118.                   while(token=strtok3(NULL,"\r\n"))
    / y4 J# P! R6 f" V* }8 c
  1119.                   {
    ( B/ _5 U) `* ]3 a; V
  1120.                     if(!strlen(token)&&dwFileSize)$ M9 x- H2 T8 c8 `
  1121.                     {
    2 l" R' z: X  R% Q- u' c
  1122.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;
    ! J; }1 T8 B% ~$ l
  1123.                       if((int)Dn.dwRecvLeft>0)9 {8 P2 p9 a9 t0 w- z+ q1 X
  1124.                       {
    ) E( _4 z: z( @( q3 |
  1125.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
    / E$ E+ h* K( k2 K; E2 C
  1126.                         {" j' W$ U/ m0 A. q- @* w! [
  1127.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
    % p+ C( i+ O# H* v. P8 C+ d$ l0 q
  1128.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);2 Z5 g1 X0 @* |0 e% ]3 g
  1129.                         }
    ) x! h1 y, G4 B# j9 j
  1130.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);! x2 t! P0 [# S/ X5 N) u
  1131.                         dwCurrSize+=Dn.dwRecvLeft;
    $ {+ h8 g  e4 M2 T; [
  1132.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;0 R  {$ {* m) t8 U1 E) P, }4 k
  1133.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    0 W; T. j3 {8 D' [; K+ E
  1134.                       }
    " O' C& ]0 m. a
  1135.                       break;
    ) L+ G) U0 ?" a" Z  p
  1136.                     }9 T2 J1 \, y% m, Z/ _" G
  1137.                     else
      e! O4 \! X, ^4 [2 i0 [7 A
  1138.                     {
    7 L1 f+ @" O3 j
  1139.                       if(!strnicmp(token,"Content-Length",14))/ d9 ~/ H5 Q& }4 y. ]
  1140.                       {
    6 l0 `5 T% ^' V4 E1 n' e
  1141.                         if(!Dn.szCompBuff)% \4 s* t: q9 Z5 ^9 g. z0 f
  1142.                         {
    : @9 N7 c1 }: u. K. _! R
  1143.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
    # @: o" {) P9 x
  1144.                           Dn.szCompBuff=(LPSTR)malloc(dwFileSize);; r+ b- e. R4 s5 G$ m
  1145.                         }
    ! c4 \  d/ E: z4 n6 J
  1146.                         else if(dwFileSize!=dwLastSize)& |7 j7 C; Y1 R& U5 n
  1147.                         {7 M* q% {/ T  Z& h& f3 A
  1148.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;, u, V8 B! E+ I, X5 o
  1149.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);# O5 n3 a; W: V. s7 O+ s4 k
  1150.                         }
    % o' {) ]. w/ c4 R& d
  1151.                       }; }! s* @. r9 R
  1152.                     }
    ; h6 P% E* N* ]6 V3 r- s# n. E" j  A
  1153.                   }* O% v. W% h% c# q1 N! M7 R9 W' f( n
  1154.                   break;
    0 {6 c  g/ U+ S0 F$ k; v
  1155.                 }- x& r0 V  \1 H$ z( v7 }2 ]
  1156.                 if(!strnicmp(&token[i],"200",3))8 J. Y) O7 c2 k4 t8 d7 U
  1157.                 {3 ~+ X# J6 x; m5 ?5 ~% B3 Y
  1158.                   if(!bSilentStep)
    % n; B& d+ }+ Q# R8 [; B" g; l
  1159.                   {& r: T( i$ n2 _9 o
  1160.                     dlg->m_ListText.AddString(strFileName+".....downloading");
    4 W' Q  X( q0 R  ]( u) S& E8 Y% K# o
  1161.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 A% ^9 J& C: S7 W6 S) o
  1162.                   }" z( ?- b+ x( l" Z7 c
  1163.                   dwCurrSize=0;  e( a4 P4 b1 c. h( P! W4 ^5 r
  1164.                   bReadHeaders=TRUE;# _9 m; W* V! _) K
  1165.                   while(token=strtok3(NULL,"\r\n"))  \+ k' B) I* G2 L
  1166.                   {
    ; y8 d+ v  ^! p4 [' g4 O2 {8 y! T
  1167.                     if(!strlen(token)&&dwFileSize)
    " r1 C  O7 a$ J# q2 \
  1168.                     {2 A, e0 {: T  n
  1169.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;% W; u- c  S% v* Y0 r# ?' ~
  1170.                       if((int)Dn.dwRecvLeft>0)
    0 X2 E5 D+ T& B9 O4 V
  1171.                       {% L2 [3 C4 j* |% X
  1172.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)& A& u' D4 u, @  q  x
  1173.                         {( `9 O1 @" Y6 [/ N$ U3 |  W
  1174.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;1 s) Z) G2 k. G1 _7 f9 W: G
  1175.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);0 R9 q2 m9 e! l4 v. y  d6 t
  1176.                         }
    : |# X; |/ L, U9 \2 @3 p5 v
  1177.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);% F: M7 G6 l; ^
  1178.                         dwCurrSize+=Dn.dwRecvLeft;, D2 t; M' J; Y. J. \% }
  1179.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;2 i+ Z6 Y! \% o
  1180.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;* I/ |) S9 \! c' U$ t
  1181.                       }2 k% y2 M5 X8 J; [. \$ \; m
  1182.                       break;/ o' I/ Z. t5 J. ^. Z
  1183.                     }& N5 Z# \7 D* d$ M' \
  1184.                     else
    5 ~' ]; _* K; t; Q% H' A
  1185.                     {9 q3 |' f" A, r5 m7 ?0 C
  1186.                       if(!strnicmp(token,"Content-Length",14))
    3 {: A; I( U1 x+ n- |. {$ E
  1187.                       {2 B& j" q& u* {# ]
  1188.                         if(Dn.szCompBuff) { free(Dn.szCompBuff); Dn.szCompBuff=NULL; }
    9 D) C# [$ M  S' v2 w- O: j- q( @
  1189.                         dwLastSize=dwFileSize=atoi(&token[16]);$ H: q8 F, w0 U8 d! U, l
  1190.                         Dn.szCompBuff=(LPSTR)malloc(dwFileSize);
    . m0 g( c# n4 J  p, L
  1191.                       }
    3 s5 B; M3 ?' N* H& y8 P% l, G
  1192.                     }$ G8 t* K; z( m/ _. S3 l% A
  1193.                   }7 F* c$ }% Z2 q4 B
  1194.                   break;) T: l' X+ n7 m2 l
  1195.                 }
    $ l) W2 d4 e, {" v( T1 V" f
  1196.               }0 y$ d' |: W6 }2 m8 g
  1197.               if(!bReadHeaders||!dwFileSize): r8 ?4 |  ~# G: `) U$ m4 ?9 S
  1198.               {  c; w* r  z* O. w& k( m
  1199.                 // Wrong Header or Reading File Size Error3 y8 z5 e8 b/ Z: j: x7 q
  1200.                 Dn.QuitNWSSock();7 j0 X5 B& x  w
  1201.                 dwProgramState=AP_NOTHING;5 `) ?/ n7 R2 T* B3 }
  1202.                 CString strTempName;4 _2 g( a5 u0 J
  1203.                 strTempName.Format("Navigate %s File Error !",strFullName);$ N" I: R0 U/ n; q& B+ d
  1204.                 MessageBox(GetActiveWindow(),strTempName,"Error",MB_OK|MB_ICONERROR);2 }/ S7 n2 Q" Y3 T. l( n/ D* u7 k
  1205.                 bRestartUpdater=TRUE;2 x" L' {5 `2 ]& E- r" _6 g
  1206.               }9 I+ ?& u- N" _" x% P' q
  1207.             }/ ?: G. J5 T# c
  1208.             else
    3 S2 n1 l" l7 T3 ?7 V
  1209.             {
    6 v3 [$ S0 k* p  P
  1210.               // Have No Header
    + c  d  k2 l. M& s1 K( u7 G7 e5 ?
  1211.               Dn.QuitNWSSock();+ o8 j8 e5 @5 G8 J3 d" N5 H' f, ~$ _+ C
  1212.               dwProgramState=AP_CONNECT;# L4 F) Q8 r7 R, }& s7 A; V
  1213.             }) [2 }9 S  x/ k: _
  1214.           }* x, [5 c  ?  G" g  V$ C3 [1 K: u
  1215.           else
    % t5 q) p4 m+ I5 [: J
  1216.           {( L  d4 _$ Y+ Y+ ]0 _
  1217.             // Reading File From Web
    1 w9 |# s5 n& ~3 ^' F" O
  1218.             if((int)Dn.dwRecvLeft>0)! x& s5 b9 t* v0 J+ t1 y; i
  1219.             {3 W) T3 k4 ?$ c$ k
  1220.               if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
    ' V" V! G% `; X0 W
  1221.               {/ v4 r* I1 W" T6 l  C" Y
  1222.                 dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;  @$ }# m3 E/ [) x
  1223.                 Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    8 Q! X) ?1 T9 d% a. ]! a6 h
  1224.               }9 G5 g6 ~! u. F) c, }
  1225.               memcpy(Dn.szCompBuff+dwCurrSize,Dn.szRecvBuff,Dn.dwRecvLeft);
    4 ~8 {7 \5 L% @! D
  1226.               dwCurrSize+=RecvLen;& {9 ]& `. g% i( A/ j
  1227.               Dn.dwRecvLeft-=RecvLen;
    ) T! @- Y! Y2 x5 X/ {3 x
  1228.             }
    7 {: e9 p! v1 o# N% i+ Q
  1229.                                                 dlg->m_Process2.SetPos(100*dwCurrSize/(dwFileSize<=0?1:dwFileSize));( d% U$ I, s- B  b4 T
  1230. //            int iRate = 100*dwCurrSize/(dwFileSize<=0?1:dwFileSize);
    . I  Z8 E! [; {8 P
  1231. //            dlg->m_Process2.SetPos(iRate);
    $ q; z8 I. _0 `1 H+ y
  1232. //            if(iRate < 0)   iRate = 0;( K  S4 }$ w6 a) u
  1233. //            if(iRate > 100) iRate = 100;
      G& h+ O, C, d# B: F
  1234. //            char szShow[5];9 L1 p% h/ Y8 k& X. u! M% J
  1235. //            sprintf(szShow,"%d%%",iRate);# g( i) w$ X6 l
  1236. //            dlg->m_SingleRate.SetWindowText(szShow);
    " L! J& K: \0 d
  1237.                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    9 s% c$ Z1 j' S
  1238.           }
    / E+ r6 e2 R; h$ N, _
  1239.         }
      ^9 M& b; K2 s# i. Y3 n
  1240.         else if(dwCurrSize<dwFileSize)
    ) c8 j8 i8 m, ?  x
  1241.         {
    ' A$ A- E6 M) C3 X! u7 F
  1242.           // Disconnection But Size Error0 N: p9 x( o; g' @5 D
  1243.           Dn.QuitNWSSock();
    8 v$ K- Y# ]! n% M9 S0 y
  1244.           if(dwCurrSize) dwProgramState=AP_RESUMED;
    0 @) P  q6 |" I
  1245.           else           dwProgramState=AP_CONNECT;8 N5 g" O' A- n. V
  1246.         }  B7 p- _% L+ e, d9 l9 A  {
  1247.         else
    9 D! ^8 R- q! r# j/ P
  1248.         {
    * T, I9 R$ ?+ ?( W7 N6 b( m
  1249. SaveFileJump:: S+ L3 P6 l' \: y
  1250.           // End of File and Disconnect
    8 y( K5 L4 S5 {" \( J- C
  1251.           FILE *Fp;
    0 P, P4 g% k  G' P0 z0 b+ [
  1252.           char szTempName[MAX_PATH];0 K! ~! v3 m! |/ |# ]8 x/ ~: z
  1253.           strcpy(szTempName,".\\DownLoad\");
    ' S: i' Y/ b) o) c7 z. i8 J) H0 V8 F
  1254.           strcat(szTempName,(char*)(LPCTSTR)strFileName);7 E" K- `* P& G  i0 N/ \
  1255.           if(bCompressed) strcat(szTempName,".zip");
    0 P+ r* C, v3 `1 Y  O
  1256.           if(dwCurrSize)' c( I5 T+ Y, c( U* m
  1257.           {' {3 B6 t; \( X
  1258.                   Fp=fopen(szTempName,"wb");
    7 G3 r* i3 m/ m. S9 B% Q- i
  1259.             if(!Fp)$ }$ H  p: b" q4 |8 m2 M6 a
  1260.             {
    / X. ]6 n6 w, K, l
  1261.               _mkdir("DownLoad");
    7 h+ O+ G4 c8 E8 p' ]9 |$ F
  1262.               Fp=fopen(szTempName,"wb");
    * J! e# B3 F0 g& ?! s9 v8 m9 ^
  1263.             }5 Q( n+ _$ o; Y; Z8 S
  1264.             if(Fp)
    ' N8 ?. E' o; E/ f; q8 R3 F
  1265.             {1 |: h- p4 `/ v5 l1 ]/ ~; A
  1266.               fwrite(Dn.szCompBuff,1,dwCurrSize,Fp);
    6 R$ E; ]: B+ ^5 }( u# ?2 d  y
  1267.               fclose(Fp);3 N% \6 ~* y( c
  1268.             }
    * J2 `3 ]* v% P/ y: b
  1269.           }
    $ D6 `& a. N: ]- D; g
  1270.           if(!bSilentStep)
    $ G2 B# {$ Q+ q0 Y
  1271.           {$ }4 m' j# ]/ S& b
  1272.             if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);7 D/ D# U3 \- J; i8 N. Z3 m
  1273.             dlg->m_ListText.AddString(strFileName+".....saving");
    ! g, I9 |  _/ h, ^+ E
  1274.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 {$ D% U" q8 n0 G8 Y
  1275.           }1 y8 J9 E! d; u0 W+ P1 s+ j) V
  1276.           if(bCompressed)
    9 Y. o" H' f3 O# p$ T7 @
  1277.           {/ q6 }% z7 M3 u$ `4 \3 a. v
  1278.                    int opt_overwrite=1;
    4 B( ?% X' F% f+ ~0 T
  1279.             int opt_do_extract_withoutpath=0;
    - ]/ I( j& u7 s
  1280.                    unzFile uf=NULL;
    + X4 b" C8 p' Y( {# ~9 @, A) J4 x4 p
  1281.                          uf=unzOpen(szTempName);/ m# L0 ]- k; G- S1 q
  1282.             if(uf)
    + W6 A7 q8 x& m6 t
  1283.             {6 J; P- E. K  i
  1284.               if(!bSilentStep)  }1 ~- |- i9 X: p8 \
  1285.               {+ E- k9 L! B% D+ C1 m1 D1 }" U
  1286.                 if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);/ o9 Q5 k' ?8 i$ j, ]9 D
  1287.                 dlg->m_ListText.AddString(strFileName+".....extracting");
    . ^) U( j7 R; H! A( K8 p0 ~( `
  1288.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: m( m! s+ G  a7 l+ t% W* n
  1289.               }
    5 s1 _) t; i# i2 m
  1290.               if(do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,(char*)(LPCTSTR)strFilePath,NULL)==UNZ_OK)
    1 P$ D7 @. i. J. _0 r- P
  1291.               {0 D# {# Y: p- Q8 Q. V
  1292.                 if(!bSilentStep)
    8 K7 M; o5 I/ S% Z) a
  1293.                 {
    % X& M/ H( g6 h/ \
  1294.                   if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);+ E. l* D8 N4 z. m
  1295.                   dlg->m_ListText.AddString(strFileName+".....done");9 L( C4 ?2 @) R8 i8 ?9 V8 v! o1 ]; P
  1296.                   dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . @9 h4 X3 _! s
  1297.                 }6 p$ N) n. A0 F/ M$ R4 P8 Z! G3 q
  1298.                 dwDownLoaded++;
    , G1 c. g, N2 F/ U8 [
  1299.                 dwProgramState=AP_NOTHING;
    , O! f8 B1 X3 O4 k( q
  1300.               }8 v7 f. J& V- X) s+ z
  1301.               else# p. K# U9 j: H0 o
  1302.               {
    3 u  z8 p+ x; ^
  1303.                 dwProgramState=AP_CONNECT;
    # I. F/ J: W$ w* a6 V. V4 e- A& A8 h9 ?
  1304.               }+ V+ P- k7 L" a9 [% E( A- Y
  1305.                     unzClose(uf);, y, L- M7 z9 O9 l+ N
  1306.             }: ?1 a  @7 a5 }. r5 m/ L
  1307.             else" l& x! s, L5 W
  1308.             {7 O: s3 `, _: D& X
  1309.               dwProgramState=AP_CONNECT;
    + I' V, W5 ~, `' R3 {4 {6 p
  1310.             }7 p0 \4 U( |' P" U: B0 W; k
  1311.             unlink(szTempName);
    5 {2 R( U  }9 L$ D% S
  1312.           }
    8 X# D9 G) W+ ^
  1313.           else
    ! {% v/ y( P: M# x2 T9 q
  1314.           {. k% b- u0 i8 g2 u. P
  1315.             if(!bSilentStep)
    / `9 P; ~* L/ V1 L$ `0 x* D" G# h( u; p
  1316.             {% p9 s3 J; _- H; l& k/ A
  1317.               if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    4 D8 P1 c6 G' G" M( \
  1318.               dlg->m_ListText.AddString(strFileName+".....done");
    9 L; A9 w  s5 G( Y
  1319.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 B+ G% p! x% v7 h
  1320.             }* e& q3 |/ X; R
  1321.             dwDownLoaded++;
    " U- _% l5 p! e7 p! @
  1322.             dwProgramState=AP_NOTHING;8 ]' \" M" L4 I. d
  1323.           }1 R; E  G8 ^, B9 X- g
  1324.           Dn.QuitNWSSock();
    5 O! ?4 P9 g0 r4 ]
  1325.         }3 k3 n# Q) a; `" q% D4 q$ ?% D" w
  1326.       }! F$ }- _1 O. v8 j& y3 T9 j
  1327.       else, _+ N) o1 ~6 I8 h0 R
  1328.       {
    2 S6 ~* u2 h7 f# |- W" h" F
  1329.         // Connect Timeout
    ; d4 O+ L1 y9 L  v( y
  1330.         if(GetTickCount()-LastTickCount>30000)2 b. M' I8 r6 H) W7 L0 s
  1331.         {
    " |( I( n* x6 ~
  1332.           Dn.QuitNWSSock();' `5 p( e+ N/ l% g- P( p4 \; D( I  t3 i
  1333.           if(dwCurrSize) dwProgramState=AP_RESUMED;6 K2 t9 r  s8 s1 j
  1334.           else           dwProgramState=AP_CONNECT;
    - U, H8 h6 n1 r
  1335.         }
    & F9 c2 [. w2 M$ R1 W
  1336.       }
    / P( H8 S9 o/ b: H$ ~% F2 ]& L
  1337.     }) r. G. {7 l. }0 A
  1338.     break;
    1 R' v) ^8 ?4 y6 p/ H6 Z2 W
  1339.   }
    & S& y' e$ j! r( r" W
  1340.         return CWinApp::OnIdle(lCount);0 M+ h5 C3 b0 m6 K
  1341. }" x* I4 H0 f  m/ {* n+ @
複製代碼
其实登陆器也就是这么一回事儿……' c8 @& J1 U6 |( X! j
附件有编译教程和源码
/ K/ V) z7 a* S8 V0 M: u6 U
遊客,如果您要查看本帖隱藏內容請回復
" ]# f; U0 e: m) `  _# S

4 t3 `6 a: v4 N* ]% c! r! M- U

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回復

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回復

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回復

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回復

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-1-17 12:48

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表