CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
, X: n, j( M0 O/ q" n: d& j
  1. / RevApp.cpp : Defines the class behaviors for the application.6 C2 D& R/ t% w5 M5 U
  2. //
    ' v# \& F7 x7 \
  3. * q: R* O0 ^/ b6 V
  4. #include "stdafx.h"
    0 R  @! d0 S, E, S' ]  i
  5. ! |6 E* K1 I$ }/ {4 C
  6. //#define UNICODE( z5 u+ c7 v; F, t2 N) a
  7. //#include <gdiplus.h>
    ; W; i" |( T/ ]! Y0 [7 x( k% y
  8. //using namespace Gdiplus;* D% p! X. R6 r$ {, l3 _( Q

  9. + @: p& Z7 |7 s* C4 G7 v1 G3 \4 n
  10. #include "RevApp.h"
    + ^. T. j( P0 \3 Y& J( f
  11. #include "RevAppDlg.h"; @; x+ n: E+ o  {! l# ]8 N3 D

  12. 3 K, ?0 d9 h' V' y1 b
  13. #pragma warning(disable:4786)
    - _9 b$ ?3 M  `- C- H
  14. #include <map>
    5 Q. J+ n) N+ I' h' n
  15. #include <list>7 E* ]: T4 t5 w: P* ?
  16. #include <direct.h>; a% y3 E: X3 {) a2 ^* B
  17. * t0 g+ ]. v- T" L' Y+ \
  18. #ifdef _DEBUG
    3 c: N4 W$ _" Y$ J
  19. #define new DEBUG_NEW
    - O% W9 I  g* D9 l7 E0 q, w1 C
  20. #undef THIS_FILE
    + k" Z/ c7 I4 x, Q6 ~, I
  21. static char THIS_FILE[] = __FILE__;6 i' {9 Y9 u0 M& T2 c% s1 W
  22. #endif
    1 N$ O: F$ H( ]. l6 M' Z3 \/ Z
  23. #include "SkinResDef.h". G- H: |3 i4 _$ W
  24. #include "ChangeBG.h"
    $ i: i0 x1 l; v9 W+ ]
  25. #include "AFXINET.H"
    7 M+ i0 A' }: S

  26. . K- ^' t# }8 @# W0 y; E- o- c
  27. #define TRADITIONAL_CHINESE 0
      j7 _$ S, v0 v; A$ Z; Q1 X0 ^6 j
  28. #define SIMPLIFY_CHINESE 1
    9 J  y) K; V! k4 @
  29. #define ENGLISH 2
    8 j1 O4 m7 o$ Y/ }& {$ a% N7 K
  30. int m_iLanguage = ENGLISH;7 r! r# Q- v$ [, C2 w3 B: d7 F$ e
  31. /////////////////////////////////////////////////////////////////////////////
    . e& ]4 u5 O) `# f& F$ A# s2 C
  32. // CRevAppApp; D+ B2 M: ?) o' V8 q

  33. 3 |4 s/ a- l9 S9 h0 m1 m; t
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 k/ H1 e4 V; m7 T% N
  35.         //{{AFX_MSG_MAP(CRevAppApp)- ?1 w; Y  q! `7 z  x
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    7 Q7 A! W) O- m( b! N2 {+ J8 F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!5 X4 m2 T/ |; ]4 }4 W6 w
  38.         //}}AFX_MSG
    # I" e+ @/ b4 W
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
      Y0 y/ G* J; I* y
  40. END_MESSAGE_MAP()
    / o% O: D8 ^$ u" m) S

  41. . a2 r1 X& n' ?2 x8 x
  42. /////////////////////////////////////////////////////////////////////////////
    ( \! O! b: \9 `4 V; k% ^1 x
  43. // CRevAppApp construction! @  d( R2 C& q

  44. # Y3 w! F0 c/ N6 R) S
  45. CRevAppApp::CRevAppApp()
    - e8 P" K% }3 V) j% o8 {
  46. {
    , `* l& F: e, m& {
  47.         // TODO: add construction code here,
    ; D& `: e$ n, Y& V5 c/ p& C! ?- G
  48.         // Place all significant initialization in InitInstance& N9 C% ~, Q4 Y, R8 z  S# c% c
  49.   bDisplayIsBig5=FALSE;
    $ `1 _# R6 P/ C2 i
  50.   bRestartUpdater=FALSE;
      d" f, h0 ]$ \3 C
  51.   bFinishUpdated=FALSE;
    8 C5 {  u* {9 E# Q/ {2 A. v. D
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ ?& `6 {6 L* |* E2 Q
  53.   InitChangeDataBig52GBKS();
    5 C: \# A% i( h. p9 J/ P
  54.   InitChangeDataGBKS2Big5();; Y" w/ r/ b! h  c6 R+ H# \! @
  55.         //
    - h% z( Y' s: Q, X; _
  56.         bClickRunExe = FALSE;( N8 S: f+ c& m+ d4 V# v! Y; o
  57.         //, e2 Q0 `! ~9 X# W3 e
  58. }' z; N( N- F& _: G

  59. " |3 s7 T: e. E1 t! p- K
  60. CRevAppApp::~CRevAppApp()
    , j# P5 X" n; j0 ?
  61. {! s1 q! {1 e! k% k* e1 V
  62.         // TODO: add construction code here,2 q. i. u! t: }% Q4 Y: U
  63.         // Place all significant initialization in InitInstance' \$ V  ~$ v6 ~( v7 U0 i3 a
  64.   EndChangeData();) H+ [7 |' G3 P; P  \
  65. }
    8 c. [* X8 v! U& `

  66. 5 W- j2 h& a( A( ]; \+ H7 Q
  67. /////////////////////////////////////////////////////////////////////////////& Y9 @4 b" j. v' \8 p
  68. // The one and only CRevAppApp object
    ( ?9 S$ `5 A1 I
  69. " Y" G4 D: Y: }" d
  70. CRevAppApp theApp;
    . d/ k0 p* l. M! D
  71. - x$ o( ]7 E" z/ y; ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    3 f2 h* \$ t$ _9 K9 j
  73. {
    5 U  n. m6 E) ]) Z
  74.   int iEOF=0;1 X( t8 @4 [) _2 ?
  75.   char szTempName[MAX_PATH];
    " T8 \, p7 q$ d( n% l
  76.   *szFileName=0;
    : ^$ a/ v& J9 j# t$ l; L- m) C
  77.   iEOF=fscanf(fp,"%s",szTempName);; L+ m) ?5 j: A2 u' [
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')8 B+ w5 s/ M! k" b, L
  79.   {
    6 \7 h5 Q  V* e
  80.     strcpy(szFileName,&szTempName[1]);( Q& y1 m+ R" t' X: E" V  @/ ?
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)3 K2 T# d0 e0 t# L$ G6 T* C9 x& n: n
  82.     {
    % m* G. _2 g: I+ f9 ?6 t
  83.       iEOF=fscanf(fp,"%s",szTempName);
    9 v: T' g. x* z( m! Z# H" X
  84.       strcat(szFileName," ");7 R# Q# d8 \3 Q
  85.       strcat(szFileName,szTempName);1 C; l% D3 v# ~  N1 U6 `* J
  86.     }) q% T" V# \. L' w  e
  87.     if(strlen(szFileName)>=1)
    4 H# q5 |9 ~: a5 X# g' a
  88.     {4 [7 c+ w7 I0 I8 f; L$ ~( I
  89.       szFileName[strlen(szFileName)-1]=0;
    - O* }# m( W$ Z, s$ n
  90.     }
    ( V6 g8 R& M' {3 ~) d- U
  91.   }. g) N) l( |( A/ E
  92.   return szFileName;& v# x7 n" `. n  u
  93. }
    2 V1 n* r4 ?1 @! V8 x2 g+ {/ z

  94. 3 t2 p7 i! N' Z0 g5 c4 R4 W5 {, I4 E# w
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    4 n( F' k$ \: L7 W! e7 m: f) E
  96. {: M3 U# g. w. z! V* C- ]5 H
  97.   FILE *fp;
    7 O$ n5 o# v) E% f! j/ [4 ?+ z
  98.   char *key=NULL;
    , l3 W0 F2 `* o, C# l9 m) ?# Q
  99.   char version[MAX_PATH];( x. ]/ V& p! n$ v
  100.   LPUPDATEFILE file,olds;
    ' I$ X4 D# a- }% F$ A
  101.   std::map<CString,LPUPDATEFILE>::iterator p;% Z2 N/ Q/ _' k( C6 c
  102. 8 L( C+ a; t7 P3 G' L5 z4 i
  103.   UpdateList.clear();
    " Z% z: C% P' z  L9 R2 w- H. j
  104.   UpdateFile.clear();
    % D. }8 w/ R- u
  105.   if(GetFileAttributes(filename)==-1) return false;- q" d1 n# c% ?3 w6 ?) l8 v
  106.   if(!(fp=fopen(filename,"r"))) return false;9 t% B/ L' k+ n. R
  107.   fscanf(fp,"%s",version);
    5 k! x$ K% c1 k; h6 k$ z+ Y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }3 J1 H  h% y) {- U. f6 _3 U
  109.   while(fscanf(fp,"%s",version)!=EOF)6 d7 W7 t, x$ c# w$ H
  110.   {
    2 _" O1 S2 u1 @: a7 y! _2 O
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ J4 g0 O' q1 P' {, q, b9 t4 h
  112.     fscanf(fp,"%s",file->path);* m$ W, b: U0 V1 R, Q
  113.     ReadFileNames(fp,file->file);
    ! a* I$ K' I# S( ]( o$ e+ O9 d
  114.     strcpy(file->full,".");8 G( e" H9 P! R2 E. A# B+ A
  115.     strcat(file->full,file->path);
    ; p9 z) W' I3 i1 I, q3 Z
  116.     strcat(file->full,file->file);
    ) m5 o& U" [3 k7 a6 j6 @8 \9 B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    & }2 p2 J: Z4 D
  118.     {# r* O% R# O& W9 O3 ~
  119.       file->vers=(float)atof(version);% x  x0 _5 ?- w' A& V! {
  120.       UpdateList.push_back(file->full);
    ! E2 r/ V: s! W" q6 S
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));* @% F1 j& J2 j( y5 Y
  122.     }, \7 g9 `$ @1 C7 v8 V- p" m
  123.     else% e7 c# u; G; m2 i7 M" x' y3 B; r
  124.     {0 u& W5 {. o1 ^3 I+ i
  125.       olds=(*p).second;& w5 M& U& R, W0 k0 U$ ~5 W& n
  126.       if(olds->vers<(float)atof(version)). a# b$ U6 m9 B
  127.       {
    4 J) w' Z/ |/ [7 f) h
  128.         olds->vers=(float)atof(version);
      b6 X7 s% E5 e' }6 @# L
  129.       }
    " p/ [  \3 D- X5 X3 @7 c
  130.       free(file);4 ^' n, K( L+ w2 ^; ^0 I9 m4 \
  131.     }
    ; Y' e0 C9 j5 d- P5 Z9 H6 Z* B
  132.   }0 M( A7 N  f/ C( X$ f4 d
  133.   fclose(fp);2 g, R% ~2 T& i. u# L
  134.   return true;
    4 `& ?) Z& C' G5 z
  135. }
    & }, }/ G4 l0 X

  136. : }. c4 S+ x1 g: F% ^; G: \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath), b2 Y) ~$ L1 F! y' G
  138. {
    # {! A) m8 \5 H" [" d$ j- R
  139.   TCHAR  szFull[MAX_PATH];
    # _' ]( T; ~. c, C
  140.   TCHAR *token,*inter;
    : |  R1 i2 [5 \8 v1 l4 _9 ~& d
  141.   *szPath=0;
    ! }8 }2 F/ g2 r& @/ [/ k
  142.   strcpy(szFull,szFullPath);- M3 F0 \  v9 o
  143.   token=strtok(szFull,"\\/");
    % S) [. T/ `( V* @& x# n
  144.   inter=token;
    2 r$ j6 k5 q# g1 Y1 j* _5 w
  145.   while(token=strtok(NULL,"\\/"))8 p2 i4 ?3 F9 L$ t
  146.   {
    * W* @# `. s$ C: v) Q
  147.     strcat(szPath,inter);
    * w- f7 ?0 _: M& a6 N3 s5 V
  148.     strcat(szPath,"\");. j& i4 z3 G9 e9 z: E2 s3 C+ ]
  149.     inter=token;" U4 x2 y9 f7 w- g% t. b
  150.   }  }- p/ [8 D- R8 f' M/ F) U
  151.   return strlen(szPath);
    * Y' D6 B$ O( v2 k$ x6 U
  152. }
    ( h! w0 `; D0 H/ ^( X6 |

  153. * j3 E4 Z2 J5 D; i* e
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)8 D& _0 v7 Y' A+ f2 U' o
  155. {
    6 `! L" k7 t' `
  156.   DWORD attrib=GetFileAttributes(Target);
    7 h) q0 M) F! M% K& f! u# a! W
  157.   if(attrib!=-1)
    3 x) w; P" \' C6 @' S$ K
  158.   {$ H; y% H6 p; j7 }+ x& ~
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    # i1 |1 H. B& u+ y$ y
  160.     {$ E+ ^7 m, T8 |  R7 n' P# j
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);% g2 E" E( Y/ W& H% \7 M
  162.       SetFileAttributes(Target,attrib);& z. a# W! A% D9 |) A
  163.     }
    ' Z) N: O) l; @
  164.   }, i2 {+ I2 h! P& J$ P" M! ]
  165.   CopyFile(Source,Target,Erase);
    2 A" G0 b$ [/ L0 n- L. \# z/ ?
  166. }
    ; O' k) K5 V7 W8 [# Y$ V
  167.   _6 E7 o+ @6 M& {
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)3 Y* q8 D0 N5 F" S
  169. {
    2 S- d- y/ }' X9 {
  170.      FILE *fp;
    " H$ k, k$ W2 ^8 i: n$ B) t, Q3 l
  171.      char  szBuffer[8192];
    ) f- E! P0 V' ?5 Y) v" w4 x
  172.   va_list  argptr;8 S3 y8 o# `% l. Y( `$ p2 _# |, B

  173. 4 O2 K3 F# Q/ v( i5 g& |. l9 q
  174.         va_start(argptr,message);, ?, g8 O% [7 v2 h0 h7 u7 L
  175.         vsprintf(szBuffer,message,argptr);2 w, ]* u6 ~: E2 r' [! Z
  176.         va_end(argptr);
    # \5 r) m3 p4 b/ ~
  177.   fp=fopen(FileName,"a");1 q  w, F4 T) r4 f3 b
  178.   if(fp)* N$ w3 U- F) P& U
  179.   {. B) l* v! f- v+ m- S) X: ^3 a2 \
  180.     fprintf(fp,szBuffer);, `) S) `6 i/ L4 o
  181.     fclose(fp);
    3 Y+ L& [4 M& S1 }* s7 e
  182.           _flushall();9 d9 A, u1 ]. G) A7 a! t
  183.   }
    % ~8 T( H5 x. z9 b% A6 M6 n
  184. }
    2 D  e6 J* c: b

  185. % W# c9 E. a+ e( i0 h3 C! x
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    2 k2 ]8 }- b0 S& M
  187. {. a6 u& r. S0 K+ G
  188.      FILE *fp;; C7 m* {& [6 Q. g0 E% B: ?4 U
  189.     DWORD  attrib;2 }6 c5 X* [" S4 H& d  s- |
  190.   attrib=GetFileAttributes(FileName);/ e2 d. `5 S. p8 k' X) Y! l
  191.   if(attrib!=-1)  p1 U, ^8 Y% L# L( n1 X
  192.   {, v0 [4 H# Q* r3 h
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);/ E6 @" Y- h: y" w# J6 l3 W
  194.     if(!SetFileAttributes(FileName,attrib)): @8 _0 W. P+ i2 {
  195.     {
      v, F5 Y+ t0 z1 K, C7 p+ |/ ^
  196.       return FALSE;
    4 p6 k/ @* k, C" J. t
  197.     }
    9 [5 \9 S3 C9 J* _4 Y
  198.   }
    ( A8 i# y- \8 u6 \
  199.   fp=fopen(FileName,"wb");
    ) r1 J7 x# f5 R, J
  200.   if(fp)
    8 H" P: ~8 f4 w2 c' G
  201.   {4 k# w: F5 O5 v2 y& P
  202.     fclose(fp);
    # ?" N% v5 q. T7 l) Y) y- C( x
  203.   }+ @% I+ R" K, E! _
  204.   return TRUE;& u: u! D; e4 J
  205. }' p1 d+ |8 q" \% y( }  v/ |! Z

  206. 7 p5 s' x& w. n9 {: S
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    , S& {$ K" N; [. T) g
  208. {
    % f& L) J: e- J6 v) g3 F* ~3 v
  209.   char filename[MAX_PATH];
    9 G5 C0 f. s4 I  U# v5 F' ^* I# |
  210.   LPUPDATEFILE file,olds;
    8 j5 M# X( h3 N5 o
  211.   std::map<int,CString>::iterator i;4 R- W" A( E) L% k
  212.   std::map<CString,LPUPDATEFILE>::iterator p;+ v6 m* z4 u8 s- A% ~, W5 o
  213.   std::list<CString>::iterator l;
    / ~/ Y) ]6 ^$ q) Z, Z$ V1 j

  214. $ d9 T" N+ z5 `9 B7 x1 d7 F
  215.   if(bFirstUpdate)1 n: z& b4 o1 \/ `/ o
  216.   {& C5 O: d$ Q; }
  217.     dwCurrFile=0;) ^# P% p, a9 d6 M
  218.     bFirstUpdate=FALSE;
    # ]+ d. t3 A( B% n$ T
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ q1 j& s* u2 G. T! M
  220.     {
    7 F+ o, g9 g$ J- ]- U
  221.       dwTotalFiles=UpdateLocal.size();5 O7 d, Y- j9 T. p5 L) M& t
  222.       dwDownLoaded=0;0 `3 A; ?, O4 A
  223.       bSilentStep=FALSE;8 K" H5 X- \5 I% i5 x  a8 i
  224.       bCompressed=TRUE;" m+ q) q$ E8 o2 ]: L
  225.       strExtLocal.Empty();2 L+ O/ C" |+ a/ i# V
  226.       strFullName=(*i).second;/ G5 G3 q  a' Z3 d& W
  227.       dwProgramState=AP_CONNECT;" b6 V) r/ y' E) N8 e. t: F
  228.       return TRUE;* l8 Y3 C! o/ ^8 v2 V* K3 G
  229.     }* d$ i* ?* Z7 [/ P7 Z# j7 y% {
  230.   }
    ' V3 K+ l' p& l
  231.   else if(bRestartUpdater==FALSE). b4 N8 g6 V* J
  232.   {; ?$ a) ?% b4 ~4 l) k" K; w
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    % Y, e- ]0 V0 P  Q" ~
  234.     {9 _7 ?' l/ c2 b" P, `
  235.       file=(*p).second;
    8 ]( J7 r% b- f1 A# G# ]
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    . V( w$ v6 G0 x' N7 a% ?
  237.       {
    - {& j5 e5 |$ A) q% p9 q
  238.         olds=(*p).second;# p" ^. A* w; \( h5 z
  239.         olds->vers=file->vers;' W' g: T6 ^- [( M. c
  240.       }8 N" ~2 p% }  U9 ?6 l
  241.       else* K- G9 u  S: a# y4 r! I# J* |
  242.       {
    : c: d" t9 C) w, O3 T* _
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 M! k  e" J# [
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ t+ h' n. V' u0 N) b" W
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));8 p- C  y7 D# n7 l3 ?
  246.       }
    9 u, ~4 a7 }2 D
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");! W  i" O/ C3 j1 x  m& k
  248.       sprintf(filename,"(%s)",file->file);" H2 Z, C0 Q" z/ v8 P
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, T3 ]) s; ?8 D2 k1 u" ?* b4 z8 }
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    / ]0 s9 [7 Z( |  w0 _' p
  251.     }8 T) X* k7 ~( r/ f# j6 o
  252.     dwCurrFile++;
    ( A4 D7 l" C! m+ V7 ]  [# J
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 }; s5 v' I7 x6 G  O+ Z$ ]3 @
  254.     {
    $ j) y* x6 c( @" Y+ K  t0 b0 W! i6 `
  255.       bSilentStep=FALSE;. w( _+ C6 r8 T9 A  n/ y/ I9 f
  256.       bCompressed=TRUE;8 d4 h) i! j/ f) c1 e
  257.       strExtLocal.Empty();
    ( k. k$ ?. M5 _# k1 a6 W
  258.       strFullName=(*i).second;+ S3 h( i. ]6 d
  259.       dwProgramState=AP_CONNECT;
    9 T3 T7 R1 T3 k6 S0 J' R7 }
  260.       return TRUE;
    * _, `2 ~$ I1 {8 |
  261.     }
    % @& G! }% I6 B- q
  262.     if(!bRestartUpdater)
    " @, N0 ~8 ], J/ Z, y5 W. K5 P8 e
  263.     {
    8 [$ |0 Q' d6 V7 ]4 r  f
  264.       int iCurrSize,iFileSize;
    - f# ^; H  e5 U, c  K' j
  265.       iCurrSize=0;
    # h: J6 e4 o, J
  266.       iFileSize=UpdateList2.size();6 Y* Y7 A/ e9 ]% D6 p
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");& M5 H: u$ Z' o! g
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    % t# {7 p' {" I2 l, b
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + e& r0 J- s! \( G) A4 D
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* D# p+ M3 c+ v' e( p
  271.       Fclearf(".\\update.dat");$ g+ T7 a, ^. V6 `. u7 A7 A, Z7 M
  272.       Fprintf(".\\update.dat","Bloodyf\n");' J' K+ @0 F! x$ h
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) k/ g" w# Q' k) m" n
  274.       {* V+ k4 n) z* P+ N# r
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())# u# n! f* E- [' n3 R  o& l! J
  276.         {, |& F9 T$ e* G7 x0 M
  277.           file=(*p).second;* M' w0 [+ C- _" ~, g
  278.           sprintf(filename,"(%s)",file->file);2 f! B' {7 V' u" T1 c
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# V9 {. v" Z5 B% o3 O& n! `
  280.           iCurrSize++;% e( k6 C! `# }7 b
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    $ d+ M# w! o/ K  C7 `6 w5 ^7 n; }6 u* x
  282.         }
    + e+ ]# W( T2 e6 p, W
  283.       }* e# J9 S  ~) H4 ^3 }; @
  284.       unlink(".\\update.txt");
    8 A; K9 F* I0 H2 o4 W  E2 A8 p
  285.       unlink(".\\update.tmp");2 j. Q0 N% ~+ r2 X8 G: I
  286.       Fclearf(".\\checkversion.dat");
    0 ~  r( T, s0 R( o
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# \3 I) O6 P5 T5 Z2 r4 G
  288.       if(UpdateLocal.size())
    6 n1 l2 c0 p3 |2 S
  289.       {
    ! }; h  a6 R% [( S9 z
  290.         UpdateLocal.clear();
    & f! G& e3 x) s% X. O4 n1 R
  291.       }- g! q6 ~9 Z) L8 \
  292.       if(UpdateFile3.size())
    # F5 C2 {2 l8 y! \
  293.       {
    # c* Q* s, U3 r5 ?% N3 M
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 r  q7 N8 u6 W" |" \8 s3 y' S
  295.         {
    : ^8 }4 n- K/ |6 o: L+ M, u% e
  296.           file=(*p).second;! {% a: i) ?  _4 v% g- Q
  297.           free(file);& O0 A# @( {7 M! ~# Z  c' |% }
  298.         }
    ) j1 C2 A. M0 ]) C
  299.         UpdateFile3.clear();5 m  E- n0 G. s/ D$ U
  300.         UpdateList3.clear();' F, F4 a. n  A/ H
  301.       }
    ) Q# H8 J+ v0 H+ D7 u
  302.       if(UpdateFile2.size()), P& |. x3 [( Y2 q  y
  303.       {
    % z! u, J& O" B2 m- d/ o
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# o2 U8 m- I9 w
  305.         {) ]( L9 h8 {$ C4 C+ g
  306.           file=(*p).second;
    ; o7 q/ f" I8 h! _# W
  307.           free(file);5 a% d" x! |  ?' G# K
  308.         }
    8 c) L; x8 [  a
  309.         UpdateFile2.clear();
    / ^$ H1 V: |" U5 v
  310.         UpdateList2.clear();. m% ~0 j( o' w
  311.       }
    9 u$ t' k" z& C3 s% O' v4 g
  312.       if(UpdateFile1.size())# l( {: q( U1 y
  313.       {
    ' j2 {# M2 {+ ^1 X* R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 n& S+ L6 S  N9 Y: a8 F" S( D: i0 {
  315.         {
    - C) Q6 z# |3 }2 _# p/ ^& o: P# s
  316.           file=(*p).second;" C" P0 \  P: \, Z4 a& k/ B
  317.           free(file);/ ^8 q- ~6 u8 j% H0 u" c9 L
  318.         }
    4 i" U# h, ]  W" X0 x+ B  f
  319.         UpdateFile1.clear();0 s  l  [! |7 y% u9 O+ J( G
  320.         UpdateList1.clear();
    ; ^+ W7 Q. x1 S: y: A" a
  321.       }
    ' a2 p( z* j9 Q# A" k* F& r! l
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));2 b1 o" S7 B# Y5 B
  323.     }
    ! F7 K+ _! J% e5 O
  324.   }
    2 E6 z) v3 V# c. Y+ I
  325.   return FALSE;
    ; B/ S% L5 b, W8 I
  326. }0 I7 ~4 T# t# ?3 ^+ }
  327. % o  f' _" N3 W/ U
  328. void CRevAppApp::ClearAll(void); i6 v2 A* O3 e3 g1 @6 S
  329. {& M( C/ N. c- g$ \* i
  330.   LPUPDATEFILE file;
    . i3 S! b/ h- o' }
  331.   std::map<CString,LPUPDATEFILE>::iterator p;. a3 n7 o5 n& A3 B1 G
  332. ; }: d; ?9 b5 m
  333.   if(UpdateLocal.size())
    9 E0 Q5 K, F" w9 }, V
  334.   {( Q, L; B) \" x6 G
  335.     UpdateLocal.clear();
      j. G: a8 n1 b8 x' o# n  ~
  336.   }0 c. P* }0 }' r7 y4 @/ r9 _+ h+ ^
  337.   if(UpdateFile3.size())% s, m2 p+ R, ^* J7 j- F
  338.   {7 N# I% g6 r( ]1 [6 Q" Q
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ L; B( l! @# o" I4 L
  340.     {
    6 `3 e$ g! V: e5 O2 t/ ]
  341.       file=(*p).second;+ {. p" {! I& ~9 C
  342.       free(file);
    3 v% ~% ?6 _" d) ^8 m  Y
  343.     }2 a: _, K+ n% Q1 J- l- c" e1 C
  344.     UpdateFile3.clear();
    ! K4 X- \3 L. C' Y( M+ R: {1 w$ d
  345.     UpdateList3.clear();
    4 }- C3 O7 `1 P0 V8 d
  346.   }
    0 R6 `" a4 h+ [6 i; \5 I$ K5 U8 J
  347.   if(UpdateFile2.size())  S* e! v& P% @
  348.   {2 `6 e+ Q* w0 @6 Q4 N
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 s2 T  b, U+ H2 N5 ^  M
  350.     {& W4 m- q. ^2 g
  351.       file=(*p).second;' L# T. U9 [$ q
  352.       free(file);
      j7 \9 H( t1 a& _7 q8 Y
  353.     }
    + x1 q# w5 y/ t; M7 E+ D
  354.     UpdateFile2.clear();2 @  C# [0 e5 a; W/ T6 Z, N0 C
  355.     UpdateList2.clear();
      S0 c, B0 C# d
  356.   }
    ! _  ]. k( E& \4 G, N0 R& H
  357.   if(UpdateFile1.size())6 l! W+ g" a, p4 d3 a) f
  358.   {
    9 l$ ~: ^0 k; Z5 J# `. M# Z8 }1 \
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), Y1 c0 q" _+ N; A9 r& a
  360.     {5 [+ ?- Z  M0 x- x
  361.       file=(*p).second;
    6 G* q( m1 `, {: i* _
  362.       free(file);
    - a; o# m" d3 B& i) |/ @* U
  363.     }2 A6 |+ y8 J$ O$ b1 f
  364.     UpdateFile1.clear();+ w, o( H! y: j7 z$ o1 k
  365.     UpdateList1.clear();6 b) E$ Q3 m$ O+ d% [- e
  366.   }
    9 o6 t. d$ f" O0 J7 `
  367. }  % g- d) \- `9 n/ @6 s
  368.   ; U' o4 _# ]' [. |6 r! y
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    5 R% G* g6 M. e( J8 R
  370. {
    - E  Q9 k" {0 X( R! q
  371.   int c;
    + u- G) K0 D! O1 c* R2 X
  372.   LPUPDATEFILE file1,file2;
    ! M+ t, L  K1 E2 C6 T" T0 u
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    0 f3 R, c* g3 X1 M# D
  374.   std::list<CString>::iterator l;
    , {1 q) U  }0 L8 R( E+ Y

  375. & Q$ l6 Y/ [: q6 ]- ~5 a# w
  376.   UpdateLocal.clear();% A  ]% i" I) w$ \3 [# F
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);% v8 C; o0 @+ B6 F. q  Z; O
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + [' w  z% K+ F4 t/ B' Z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    2 K  d5 z! T! R. X/ o7 o2 v/ Y8 w3 Q
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);- `. }8 |  G( V: {/ l8 g6 \/ [4 W, X
  381.   if(UpdateFile3.size())
    7 n6 I' M$ O2 J0 v6 P$ p
  382.   {
    / r$ [( z( C' ~/ Q9 x
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)$ b9 y! a1 R8 P! ?# X" i* |
  384.     {
    ) }4 Y8 `) W- |+ z! X
  385.       file2=(LPUPDATEFILE)(*i).second;
    , k3 B7 E0 t5 o( F) E+ M. ~, f  d
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 N' ]# r) L: Q3 V
  387.       {
    " Y! h3 M# A* [8 N2 q2 W& A: s* ^
  388.         file1=(LPUPDATEFILE)(*p).second;' R+ L5 L4 }9 ]/ S
  389.         file1->vers=file2->vers;
    % R9 U2 J- S9 y# [" i
  390.       }
    # F$ ]& s: y2 a5 h9 M! C  b
  391.       else; g' r" i& Q4 E
  392.       {. v! i0 S4 d* _# D1 e
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' W0 P2 N5 u' v( @; @+ X
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ) W' q- o3 J- z: c
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));8 q1 v3 b* H" }" \  h
  396.       }( o- _7 S1 V  W+ {7 u, e
  397.     }3 E! Y  ?' E& [5 Q
  398.   }
    ; m* J* H. `. N4 S6 e' B
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)3 J/ v' a& }% d! o
  400.   {0 f9 x- S, I' y5 H( F& T
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()), w3 h% r  i, L. K' P8 \
  402.     {
    - J' E+ s' V8 m: V& o
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 x9 I8 k* }% T6 [4 K; d! Y$ Y  G
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    . T& T6 |! @( F7 ~! i% k8 |; z
  405.       {
    6 P# C( m0 B& d! k% ]2 @: B0 L1 K
  406.         file1=(LPUPDATEFILE)(*p).second;6 b- \. `; \" y9 V: h
  407.         if(file1->vers!=file2->vers)5 \7 k/ i! V2 b0 e5 X0 T- i
  408.         {
    : J  h  @1 ]9 X' x& T) D* g6 z9 e
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 m3 H1 v. r* _! d/ L% N6 d
  410.           c++;
    % w8 X$ ]2 N2 H* K8 N
  411.         }
    7 l6 g: D3 N: B
  412.       }9 Y3 X# [  D$ l, r( t+ K
  413.       else( i. R6 x( u4 @& o$ R5 q& ^
  414.       {* @5 L( S2 z8 ?: z, |$ u
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& y- V7 m6 E' ~9 ^
  416.         c++;0 {$ b/ t1 E/ J" ~- j8 a
  417.       }0 K% C- b5 X$ K, Y% p
  418.     }; [) p. s& l. {0 i
  419.   }* g6 M& d$ r, E
  420.   unlink(".\\DownLoad\\update.txt");; o: O% Q( w6 t$ E8 X
  421.   if(UpdateLocal.size()) return TRUE;' b# F2 o$ {" i
  422.   else                   return FALSE;  Q, Q! w2 C' j1 z; S5 w- g+ ~
  423. }2 X+ \: `* `) l! \/ a: f" q! Y
  424. $ k! |  t. E9 L, N) r
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"4 z9 {: _3 o) w
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"- F% _: h1 u7 I' P
  427. + f! Z% X* w% L2 A* r* z+ t

  428. ) q+ V% E3 @0 N6 A; l

  429. 3 s* Y( M: o5 l' S( p
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    + ^, K" v1 G; b
  431. {0 |; Z# F" `  A' o) \1 l/ R
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;2 o2 W5 t/ [6 N4 k8 ]
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 @& M. l8 r  J
  434.   {/ H- A! W' r( h$ D# O% n3 L
  435.     char szLanguage[50];( |& o+ G; W) B$ |4 G+ s! e1 s
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 g8 g, t2 Q- L; e& Q# E; o1 L
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , K: t6 [& `$ P3 ?1 y  j
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 W0 k3 `4 \& u6 s, q1 L9 @9 s8 k% t
  439.     else                                   m_iLanguage=ENGLISH;; U7 l$ Q, j& s6 U6 Z2 M
  440.     char szRegister[100];( n9 w* W' j3 m8 U9 h/ Y
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 w1 Z6 t1 _; y
  442.     strRegsName=szRegister;
    + m9 b7 x6 ^* t
  443.     char szPatchURL[100];
    : k( C% [) K' S9 v: l' n: R
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % E' s% ~3 Z6 M( F, m# M
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 n1 E/ ~; k6 B4 V8 q/ I! p  `& L
  446.   }
    9 F' [0 g+ k! q
  447.   else+ a' I0 P* [) ]5 Z
  448.   {
    5 z3 D0 _& d- K9 E- N
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ G9 ]6 W1 G; D  {( T
  450.     strRegsName=DEFAULT_REG_URL;6 L/ Z+ z& V/ e
  451.   }
    ( a9 t; O  I2 _1 i
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    % K; w  g  N. R3 x- @: y
  453.   {4 a% ^/ {$ W) f3 P
  454.     char szIP[50];9 F" i# [6 b+ R
  455.     char szDIR[300];
    . n7 v  E% N; b; B* f
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    . F& ]% V7 D4 p1 n# S; [2 O
  457.     {
    ' c3 t! r& I/ ~, x9 i
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    . `( C0 ^& N: p' Q6 X# R
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");8 x$ ]  V* n- q# y3 x9 \4 g
  460.       strHostName=szIP;
    7 g" }- [! F. g5 ]# t" M7 V
  461.       strHostPath.Format("/%s",szDIR);6 g" C* ^9 Z8 X$ k
  462.     }
    * G8 N2 H! o2 o# e+ Y- W7 c% _
  463.     else/ L! z* v5 a1 Z3 t  e& Y( o
  464.     {
    , f2 _' R: t# O5 Y. O% l
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & d' g  j. h7 p/ ~& ?) @, l' M
  466.       {
    0 f6 Y; B( j5 |8 h0 S
  467.         char szLanguage[50];) s1 t6 p  q( q, d
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    , Z5 q1 u+ k1 D: A; {
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  {. |3 O" ^! |+ f
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 a! [7 e# {4 R1 H$ l9 R2 f. d. }
  471.         else                                   m_iLanguage=ENGLISH;9 U# K, r1 \: f5 z" f" d5 j: M* ~
  472.         char szRegister[100];
    / f1 ?9 u6 {% l( l/ l" h- ^: |
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! g, E5 `( c' _- X- d" w) a
  474.         strRegsName=szRegister;% S1 r4 J' a4 ^" M. D
  475.         char szPatchURL[100];, E$ c" G- E* x1 T8 B/ A
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 R" N  y! d6 z4 n( ?" R
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ I- P  q2 p& }1 ^8 H% {4 w
  478.       }3 Y8 [4 K% o( \: Z& I  {  ~7 X
  479.       else) L( M, D$ Q. k0 H
  480.       {( Y0 o( Z' {0 L6 U1 X/ k
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ z0 N3 Y5 n2 }' u3 [
  482.         strRegsName=DEFAULT_REG_URL;
    # P: j7 M+ m& k$ g
  483.       }
    1 W3 \! V7 F9 v+ z2 i
  484.     }
    + F6 x7 s$ F# w' H
  485.   }/ l$ e/ G5 F- Z
  486.   return true;1 t  ^$ y' P& ?
  487. }
    4 C, d5 r' Y) P0 z+ U

  488. / i- p0 V  j5 k5 M4 d4 u: U
  489. #include ".\ZLib\unzip.h", c8 f$ t; j9 k  k( {' \7 s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
      P8 _0 y  S* C" ~5 f* [6 C
  491. /////////////////////////////////////////////////////////////////////////////
    1 s) K& B; }: C/ V! f( g* k- r8 k
  492. // CRevAppApp initialization
    - s7 y* P: O2 _

  493. , ?# V; M4 v. M8 z/ |6 B0 m2 y
  494. BOOL CRevAppApp::InitInstance()1 Y8 M. q- H- c$ B2 D7 P
  495. {
    * T) c! s; g" D; o  O) O
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];4 k3 Q3 {! P: |1 P& z
  497. ; c# \: ]1 c. v) o+ {
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);3 H, \% W3 Q5 M& Z5 m& D! G
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    , Z7 D! T9 }8 \9 w% s
  500.   {
    3 t( ^- d8 M) w; {% @* N6 L
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    & d1 P# B" z6 Y( O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);7 K' _  ]1 Q$ b0 Q: u7 n; {
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))6 I7 n* O' H2 i* `7 `8 ]2 [
  504.     {- m( Z3 T2 J  n* V
  505.       strcpy(szPath,szPathTarget);. ~* z8 R; i/ H  b8 `
  506.       SetCurrentDirectory(szPath);
    % y4 d1 K+ h) B, M5 [0 M
  507.     }* e5 l: P0 o7 A3 e
  508.   }
    0 c0 m3 f: x$ ~" B. ]% ^% e
  509. #ifdef _DEBUG
    - E5 ?/ f& `/ m+ T* ~7 o- O' M' G
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % `2 {/ N# x) G8 k
  511. #else
    ! F( T' o, i: K" H
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 c% g+ q1 m! [) u: D  M
  513. #endif0 J8 A7 m. o, I% }( R* G
  514.   {& m6 Z* m" m0 z5 z4 _
  515.     char tempFileName[MAX_PATH];9 M) N+ `5 q1 z3 h& N
  516.     strcpy(tempFileName,szPathSource);$ J! R/ D" @: ~1 K
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ; f0 m2 L9 V) c9 z: Y2 {1 d# y* r
  518.     strcat(tempFileName,"\\$CSUpdate.exe");4 B! ?3 b  t* P( x$ m" o
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ! i& r* J* t9 u+ i
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);, @9 e9 Q8 y5 L" [8 H
  521.     return TRUE;
    - K: {* U4 O" L- I+ m; p" X
  522.   }
    : _3 ], }7 E5 \( k
  523.   // Nuke 0118: Delete run.exe7 P5 r, d0 E5 f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );5 p* d  B' w9 N/ s2 ~4 I/ Q" b
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    2 F( M' `) t$ e
  526.   if(!ReadCfgFile("Config.ini"))+ t( F  _, ^  s! G6 c
  527.   {
    2 Q* l; S# H" K0 M
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 K; W" Z3 n  ~* Y5 ^" K, ]" B
  529.     return TRUE;7 @$ s$ H) U6 o+ v* D
  530.   }
    ; Z9 @" Y, i* f) M; H
  531.   HANDLE mutex;
    $ `- j0 o3 F5 e$ ]
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 ]# `! H. J& e( O) C
  533.   {4 s  |9 C6 N8 U7 @
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    $ x6 K) K; C5 I# J, v
  535.     {  ^6 {) A, r5 _) }0 i; B
  536.       CloseHandle(mutex);
    : Q3 D  E. n4 [5 S- j
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 \6 |7 l: d9 w, E
  538.       return TRUE;
    8 H5 p' x/ V1 `9 ]  r
  539.     }
    7 b4 G0 L' o# I* h* Z4 h# _8 J
  540.   }  9 R8 ^' J& h9 O% e, ~, k4 T6 |. w
  541.   CloseHandle(mutex);3 N9 c. q" E$ U, s

  542. , f/ ~0 H* }& A( ^5 o' o
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) k2 h8 Q3 E4 u5 C, h
  544. . }+ S" q7 ^. H- c1 j
  545.         AfxEnableControlContainer();( N; E" @; Z, L8 G! W" k

  546.   q4 Z6 {) G2 r/ o2 o
  547.   bCanUpdate=FALSE;
    2 ^1 G2 t0 k7 k: R! h
  548.   dwStartUpSteps=1;
    / Y2 l9 _: K/ j) |9 o. p
  549.   dwProgramState=AP_NOTHING;
    & W: [- G1 K  f+ z4 C" s

  550. 1 W+ |" N; h" i5 z9 A
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    : j4 o9 d: D8 Z( H1 J: }

  552. 4 b/ o4 f' a  `. ~2 ~* {2 y' p2 A
  553.         // Standard initialization
    7 e9 V2 h$ J, t$ b5 V# x
  554.         // If you are not using these features and wish to reduce the size, X/ ]2 u1 L0 x
  555.         //  of your final executable, you should remove from the following! i; j: g# L6 g8 l- x
  556.         //  the specific initialization routines you do not need.
    % O* ]2 @( f$ q! m9 Y( `

  557. + {7 D2 [8 y8 q, ]& ?
  558. #ifdef _AFXDLL
    - q2 V- }; x5 S) G/ O$ z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    / Y* B1 b, ^1 s& n( r  x
  560. #else
    + l& z# c( v% \7 B9 G8 |6 C* {
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    8 J9 q9 [  z6 J
  562. #endif
    ! j, ~: Q; x0 |# [
  563. 6 C  {0 `. H7 I5 Q4 b
  564.   dlg=new CRevAppDlg;8 C" H# ~  z; i  i% m5 t- H4 z
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' d8 I/ b' }( C4 [! Q% d" o7 c/ J
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
      z# v! |2 E! o
  567.   m_pMainWnd=dlg;  t2 P( k2 u5 {) Y! k9 m6 n2 [
  568. ) i7 O' }4 o- ^% k2 S
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ m0 P& _- a( A5 ^/ S3 t
  570. 4 P7 R& n! r8 k' J) W0 g" a
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ! N  R) I+ O+ T8 D5 Y. e5 y" H
  572. //  ULONG_PTR gdiplusToken;, O: Z$ z/ K, t) ?. d
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);; u# c" E  l* W* U

  574.   I5 c1 Q. d1 l3 R
  575. //        CRevAppDlg dlg;
    1 [9 O# n; w. |$ Q0 ^% o8 W  O" J5 U
  576. //        int nResponse = dlg.DoModal();: V+ g& a* n+ T* q8 j" J2 ^
  577. //        if (nResponse == IDOK)
    5 w+ ~! Q  U0 t
  578. //        {( P2 U& M& T  {, G' Q
  579. //                // TODO: Place code here to handle when the dialog is4 R- m# B) A5 m
  580. //                //  dismissed with OK
    & @4 @) w- M8 V7 |3 S
  581. //        }
    2 L3 A* w& O* ~: c
  582. //        else if (nResponse == IDCANCEL): x) |, H" U" X" W6 ~2 H' T9 j
  583. //        {
    7 F2 _0 f6 S" k9 _% q
  584. //                // TODO: Place code here to handle when the dialog is" L( K7 @& |! J; Z% t' w
  585. //                //  dismissed with Cancel3 X' X6 x( ?/ S
  586. //        }
    0 v$ w' C" |6 w% _( v2 v2 @, S5 m5 k: V

  587. 6 K0 c, g& D  C4 T% |/ P' r, T
  588.         // Since the dialog has been closed, return FALSE so that we exit the  n& Y/ M' T' }+ K, ?1 `5 s3 ]
  589.         //  application, rather than start the application's message pump., {% P! B. u0 h5 U3 ^
  590.         return TRUE;
    / l4 ~7 ~8 w: `. B. h. e
  591. }6 }% o- g* m. ?3 \! }* V$ G3 U- f
  592. ! P3 p" o, N, w
  593. char *CRevAppApp::strtok3(char *pSource,char *token)+ H3 J9 c- E' w
  594. {, L* F( e: h% r, T6 v, F
  595.   int i;6 \: H( s6 H  k& I
  596.   char *szRet;
    : J' |" c7 n2 p! c# z

  597. 1 I# j) j! i0 h0 S: B0 [2 d
  598.   if(pSource) { itoken=0; sztoken=pSource; }- I# d- S' r5 P5 q
  599.   if(sztoken)+ \- k3 P9 v; C% _+ ?$ r
  600.   {
    : N4 P% C1 Y9 N. ], N, n* q
  601.     szRet=&sztoken[itoken];
    ; F- ?2 R: g( [  m
  602.     while(sztoken[itoken])
    8 K( z. F% z% B8 Y/ F+ N4 r4 p
  603.     {
    & D; V/ C( l! h3 U& {7 X' `: ?% c
  604.       for(i=0;i<(int)strlen(token);i++)0 ?3 q% B+ @' O9 m' @/ E
  605.       {$ o( p, O2 i9 p
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])8 _; P1 ^# l4 y0 Y( S
  607.         {
    5 b7 Q! _; ^9 c6 U! n4 l: x( J8 q
  608.           sztoken[itoken++]=0;
    ; O" i, S7 y0 c2 @* i& v
  609.           sztoken[itoken++]=0;0 J, v6 _* h5 m, R7 x
  610.           return szRet;8 X) @  r" E6 Z) S/ b7 E+ [
  611.         }
    9 b' c2 ]4 E" p$ i  A7 j. h
  612.       }4 C" w3 j* w* _  `1 U' t: C  m& D* K
  613.       itoken++;
    , G5 `  E( e; ]9 e
  614.     }
    0 m+ J3 G2 k2 T' n
  615.   }7 O. H: }5 M; J. ^$ Q
  616.   return NULL;  C# v2 @: ^, J9 K+ W
  617. }
    + T& k( ^- F" f6 B; j- S! u, w
  618. , ?) k& ~8 m* W" M; X4 P: z0 i0 [
  619. void ProcessProc(long Total,long Current)
    5 ?4 G# h$ o2 ~( P) [, m2 x
  620. {
    7 g1 I  t  O/ _
  621.         MSG msg;
    . A/ b: L+ `( Q6 O6 z' {
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " `5 D0 }/ T) s$ G* a, x
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    7 @/ [9 R8 B1 \# d4 ~
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + N& V  |5 y) ]8 V  G4 ~
  625.         {
    3 V6 c+ f; Z  d3 N; ^
  626.                 if(!GetMessage(&msg,NULL,0,0))* e2 n7 d0 \5 Q2 M# N" v
  627.                 {
    & t& V! J- `* D, C
  628.                         return;
    0 D; {, G+ q3 R6 Q5 U1 o8 \) M
  629.                 }. t8 J$ p3 e6 D0 o
  630.                 TranslateMessage(&msg);6 N5 M% H* K' q" s
  631.                 DispatchMessage(&msg);
    9 @2 K; `% N+ H0 }5 y% O0 b' e, w
  632.         }       
    7 p0 z; n+ Q/ t7 K  P
  633. }" J% n& t, Y+ B! P, r
  634. % V7 y: L9 ?/ D* t; O* Q/ {
  635. BOOL bFirstChar=TRUE;
    ; @* u" `0 W: B% F" l
  636. - D  s4 p% U9 f! V- B, Y6 t
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    . s4 H$ D6 ]# v4 r% U& h; L& D7 U
  638. {. k+ {3 n+ b* e5 r+ g
  639.         // TODO: Add your specialized code here and/or call the base class
    7 o# @1 D' M8 |- F
  640.   switch(dwProgramState)
    1 `, @. l  P/ r' Z6 T9 B% i
  641.   {2 E( t8 L7 E, a0 {- l& C# `. T; s
  642.   case AP_NOTHING:: f4 x1 _( z' a0 K' {
  643.     switch(dwStartUpSteps)
    9 O% X2 l* M! Y- {9 K9 _
  644.     {
    : S# @7 b; o- {% F& e
  645.     case 1:' L/ I2 l9 s! o- C
  646.       {
    0 a5 B  d2 I3 L; g7 a" `
  647.         int i;
    - c* z9 Y  h: m% e% S' Y' r4 s* q
  648.         CDC *pCDC=dlg->GetDC();
    % \, E% i$ y  X& f9 z& {$ v, |
  649.         HDC hdcwnd=pCDC->m_hDC;6 u  `5 d$ \: f
  650. //        Graphics graphics(hdcwnd);' I$ f/ X( G# D- i) N/ X
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    - z, j' I& z  Z; V4 e7 G( J7 O! h9 V8 g
  652. //        INT iWidth=bitmap.GetWidth();7 |" r7 W. z' w) r: s2 R2 V; c
  653. //        INT iHeight=bitmap.GetHeight();  }# P3 f* M1 c" B/ C6 U/ W
  654. //        Color color,colorTemp;7 G6 b4 \( u, P# f6 p% G$ u3 l6 Y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ! d+ x2 k8 b$ f; T
  656. //        {. h0 \8 \( s+ G# M9 f
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - Y0 E, Q$ H, N. M
  658. //          {- `8 J& q5 f9 ?1 q7 l
  659. //            bitmap.GetPixel(iColumn,iRow,&color);/ a/ r8 S5 B8 o5 U; W5 e5 @1 O
  660. //            colorTemp.SetValue(color.MakeARGB(
    & k& ?1 J: ^: Z$ _
  661. //              (BYTE)(255*iColumn/iWidth),/ h# b& `# |' u& G! F! |4 n
  662. //              color.GetRed(),5 t$ @* r9 I' Z5 m. _: n
  663. //              color.GetGreen(),4 }& `; l  M0 H: q
  664. //              color.GetBlue()));
    % @$ q1 n* f* s( }- ]
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
      R8 z& @% j' Z; e: i' C1 \! r
  666. //          }
    % g  V% d; v* Q" c0 I
  667. //        }3 b5 a/ J$ o- n: C% _1 G% |) e
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    0 q6 h0 S6 ?3 f3 y7 E. K( ?- }3 O
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & A4 H' W5 s( ]4 N8 E
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( J8 X  {" v$ e7 I
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 L7 C* D, H/ `6 ]  Z
  672.         for(i=0;i<240;i+=8)
    & m* m1 E! r% F0 j/ t
  673.         {
    ( u0 S: t- l7 c+ C' q3 B
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  Q5 J' ]- r8 w- u5 ?* W% m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 j( p8 C9 L+ V: o/ d/ d
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! ~) Q! G9 Q# B- R, B7 r8 G
  677.           Sleep(33);4 b6 D: z* r3 A# _
  678.         }
    ( u; K2 M0 n9 S
  679.         Sleep(1000);  v- \. ?7 p+ |4 A, F
  680.         for(i=240;i>0;i-=8)6 j$ t3 @# g5 K  p' i9 r
  681.         {# v( [6 N$ Q/ C: g
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 h8 M9 v/ u1 d5 _$ J
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* f7 o4 g+ T7 c7 c5 i9 T' z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  X/ J+ q1 L  j
  685.           Sleep(33);$ p( F3 L6 t' d( ?' d( v; K
  686.         }2 d: R, S7 ]* q3 i- e* ~
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    # Y: o8 N  o& ^9 N9 E3 u* Z" M: G
  688.         dlg->ReleaseDC(pCDC);
    7 w7 a( x% [9 l
  689.         DeleteDC(hdctar);
    0 F0 \2 y1 t) j
  690.         DeleteDC(hdcsrc);  f# ]  f) F' g! d( q
  691.         DeleteDC(hdcorg);
    7 |- A4 c3 M$ n9 q
  692.       }
    7 q8 F9 R2 z2 ^; l6 a0 I& h
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    $ T5 _: x# Q5 L5 |
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");2 r7 R" J0 u3 R' C1 _" _
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
      g% O1 w  S9 a9 C- E# G: B+ i. F5 }
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    1 ~/ \" }7 ?9 t# P5 |# C) A
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 V( `$ A6 F+ t" B. ]- u
  698.       if(!Dn.Connected())
    ! L* a+ G2 M  c, t: W$ @& i& J
  699.       {( Y' L+ J' _0 y* C. o  N6 _/ }3 B
  700.         dwTotalFiles=1;
    4 Q) m4 L+ D/ [: [
  701.         dwDownLoaded=0;
    " @3 m! s6 ^8 Z
  702.         bSilentStep=TRUE;
    + [1 O* D4 N( R; Z3 a! i, ?, ~
  703.         bCompressed=FALSE;, D6 r+ m7 _, b, N2 N* v; a
  704.         strExtLocal.Empty();
    5 T* R6 Q+ C7 |  e
  705.         strFullName="readme.txt";
    - H7 }" d! W$ M% d; Q
  706.         dwProgramState=AP_CONNECT;  a: ^7 b, ~$ ]/ u- F
  707.       }
    % s5 }. y/ [. e; l: e9 F; |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    9 V8 a. J6 X- t, ]  m8 K
  709.       dwStartUpSteps=2;
    1 p) ?+ A2 T/ B
  710.       break;0 U( x; M5 x% M
  711.     case 2:, p5 w% o, ~8 g% H3 I0 w: j6 E. ^
  712.       {
    1 r( x# p" F5 ^7 p0 D
  713.         int iEOF;
    % U  E1 r1 J8 R- f1 [
  714.         FILE *fp;
    : G# t( @5 e' v3 G0 m
  715.         char szString[512];
    . }2 o: z6 q; w7 m+ c, c
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    3 p& I3 R* m' f7 A6 n
  717.         if(fp)6 e9 f6 e2 t( S9 l# v$ k6 D5 X
  718.         {7 C6 w/ O2 B- c# a" m
  719.           do
    0 f( r9 o2 R  }5 V8 f
  720.           {' {: |* M% J, q! j( e: |5 G
  721.             iEOF=fscanf(fp,"%s",szString);" K6 o6 Y& z+ s/ p: P
  722.             if(strlen(szString))
    : X" e0 H! ~, y5 @
  723.             {
    8 @. t; Q# D2 e: X8 Z0 u7 g
  724.               if(bFirstChar)
    " [( j1 d6 c& n/ _. m! |
  725.               {
    0 I3 _( |& j3 L8 F+ m2 o+ d9 S
  726.                 bFirstChar=FALSE;& [, w6 W4 Z5 h  |
  727.                 bConnectIsBig5=FALSE;) Q+ g; ]1 N2 G$ b
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    5 w- H: \2 w- Y. F2 W1 Q) D' s' Y
  729.               }
    / k" I: p" Z2 Y/ Y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    8 W4 t' q$ a* r7 V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 ~5 F7 m9 {5 Q: _7 `1 A
  732.               dlg->m_ListText.AddString(szString);
    & E& j, B7 |' x* m% s
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 f& Y* M$ U" h; x8 ~9 T
  734.               *szString=0;
    ! H: D# B: n3 h  A- t
  735.             }8 S) q% J' V* `# `# [( |
  736.           } while(iEOF!=EOF);2 Y0 h( `( U5 G8 E& `* N
  737.           fclose(fp);8 k0 F* j! S* X/ \$ ], y2 o
  738.           unlink(".\\DownLoad\\readme.txt");
    ' Q% j+ p6 S4 y! ?6 p: d5 C
  739.           dwStartUpSteps=3;
    8 }+ G2 z) e' G+ l
  740.         }
    : p' U7 P5 b: a# B
  741.       }
    + e' L$ i- c# p! X; x1 i8 x, p+ l
  742.       break;( f# v2 S" c2 i% B; S! B% D" v- Y
  743.     case 3:! B$ b2 L  f9 X+ i
  744.       if(!Dn.Connected())
    6 V$ `, |1 @* c$ d, \
  745.       {1 o3 k% R4 y  Q$ Z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);2 o" }: H7 y' A, K0 y. c
  747.         dwTotalFiles=1;
    - ?0 _" a& {7 G
  748.         dwDownLoaded=0;
    , |% V, m4 Q" A1 X3 p
  749.         bSilentStep=TRUE;* O6 q/ r. Q  W' c( T% l" ^; F
  750.         bCompressed=FALSE;0 H$ z! j2 M% D6 ^  X' @3 T
  751.         strExtLocal.Empty();
    2 _4 M  q6 `  U: d2 h' B# q! [7 k/ O
  752.         strFullName="checkversion.txt";1 F! l3 f# ~$ B
  753.         dwProgramState=AP_CONNECT;
    " O0 Q% X; J$ Z' Y6 r6 }, D5 t1 ~5 G
  754.       }( _8 C  Y; c, H, O. C/ I- J
  755.       dwStartUpSteps=4;
    ) J& k2 I. C1 |& y% {, K
  756.       break;( G5 @+ F; G: S0 G8 ]! ?4 g" A' q
  757.     case 4:' G0 ?; _6 E. ^, Y/ r( K, _' g! N, ^. I
  758.       {
    & M* X: [5 y7 r; M/ }/ }8 E9 T
  759.         FILE *fp;
    - X0 R, x" d: W& u1 |
  760.         char szString1[128];$ x) O7 I% g& S1 ]4 m
  761.         char szString2[128];
    , }1 Y3 I2 X/ ?% J
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");% o# M2 `. w: s' `
  763.         if(fp)
    4 F9 Q+ r7 d8 M- x* U, k, P2 y. c
  764.         {
    3 l- @1 D4 o0 I- |- _
  765.           fscanf(fp,"%s",szString1);
    ' r) q: O2 d& w
  766.           fclose(fp);8 E+ J* b  W- k1 t
  767.           fCheckVersion=atof(szString1);) C7 k- F, N  J; z1 Q
  768.           fp=fopen(".\\checkversion.dat","r");
    0 c: V! e& O4 ^/ z1 W5 o
  769.           if(fp)
    9 o& x2 n# {) `9 f6 A# S
  770.           {
    " Z8 i  B1 b, }. c
  771.             fscanf(fp,"%s",szString2);6 I; _4 l: y& r, d, z$ A; F
  772.             fclose(fp);: M( z+ i- ^8 ~- T
  773.             if(atof(szString1)!=atof(szString2))
    - r9 z* v; _+ s$ X3 a2 [3 h
  774.             {
    6 ^" o( F8 k( h" a+ {
  775.               if(!Dn.Connected()). u4 k! n& k: m& {5 }% J
  776.               {: J* A. h* z, A( c8 E' E! _+ Q
  777.                 bFirstUpdate=TRUE;
    9 [$ E7 T( a* ~  m) A" @
  778.                 dwTotalFiles=1;
    0 m  B6 Y! z  A% H4 Q
  779.                 dwDownLoaded=0;4 [1 H+ X# o. B9 K
  780.                 bSilentStep=FALSE;
    ; u) I8 l6 P& M& K1 X  i4 ^$ |
  781.                 bCompressed=TRUE;9 v7 d( d/ w+ r4 {) {) F+ ~# ]
  782.                 strExtLocal=".\\DownLoad\";
    3 D) s* S+ l" Q: L) E: U2 A
  783.                 strFullName="update.txt";
    6 [4 p) J& Q6 W" y% |# v
  784.                 dwProgramState=AP_CONNECT;+ G  n) N  a& f
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( ^- `: h% M% F8 R3 z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 W3 l. `7 N0 A% c( w! A: D/ ]5 K
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");% g" _5 b2 n) J& C$ M5 y0 M

  788.   P7 H3 Z/ n8 C6 |( q1 v2 ?
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      C2 R) x$ n7 O0 I
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    3 i, T. T0 C; \& a6 C
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    3 w  u  ^7 P4 H3 r. C' _5 r: _
  792.                 {- X3 Q& j1 x1 [: {' r
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");  K9 t, h( p3 ?& H6 V) y! _
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");3 r) L( F% L# G4 N
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    8 S9 T0 q, O! P% M
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! ~3 m. r; i" D; ]  B
  797. ) w- G* S# O) N- `; y2 y8 m
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 D7 i. b4 ], n$ s" f3 v- q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) m# i: l3 V* ^
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");. \) ~/ b9 p; \) e" R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% Y6 y$ v8 \: ?) b# ^$ G) _, Q4 C
  802.                 }
    4 z( z/ e, \( s6 X# j9 W7 T
  803.                 dwStartUpSteps=5;
    " x# i$ y6 L; c9 e+ J% d4 b
  804.               }
    8 e) |4 B# F6 Q: D( k- C
  805.             }
    ( i. p3 T7 U5 W2 T/ q
  806.             else
    3 e9 E1 t5 I. v
  807.             {
    / W* S2 e8 H5 c. Y7 T' T/ {
  808.               unlink(".\\DownLoad\\checkversion.txt");
    0 W+ u3 `4 a& Y) W- O
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");4 [2 \6 L6 T3 n3 B
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) t( V4 K2 |. o
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ) |" K4 I6 r7 |) Q3 @8 Y

  812. % [! v: B/ J6 W: f4 P  |
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* y) A! e, b. Q9 j
  814.               dwStartUpSteps=99;
    / g0 P) @1 }1 Q" N; a
  815.               bFinishUpdated=TRUE;& |; W* W$ T; A# V
  816.               bCanUpdate=TRUE;
    ) b, X/ A/ K: S
  817.             }
    3 b1 x0 |5 ^6 n  t  |1 `. V: W
  818.           }
    ' g! y- ?% a2 M, S1 W* v
  819.           else, w+ l/ E& J6 E/ y! ~: a: O1 I
  820.           {. T1 z# @. r; M
  821.             if(!Dn.Connected())1 {% ?& B/ d$ Z: j; q
  822.             {
    , `. Y! w# q, X7 d7 d
  823.               bFirstUpdate=TRUE;0 c% G5 ?4 F% F( |% }( t
  824.               dwTotalFiles=1;
    : `, x9 F: y. }/ ~- g; n  @5 o2 K0 B
  825.               dwDownLoaded=0;# E! Z. |/ O# l7 ^7 T; a
  826.               bSilentStep=FALSE;
    3 E9 ?  D' m" s6 v9 U; `
  827.               bCompressed=TRUE;0 r& g$ h. H: G2 W* c
  828.               strExtLocal=".\\DownLoad\";
    : ~1 b/ H! {1 g
  829.               strFullName="update.txt";* g- f1 M% w: l+ L- j: r0 n" D
  830.               dwProgramState=AP_CONNECT;( }# I* A1 I$ ^& C9 j# G4 E0 K; S
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% E0 m. n5 v  O" m! J
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 N" k7 ?: p* W# i- d& X* v$ m
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - \9 G) ]8 ~: V/ |* c
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) v% Y2 }+ d6 b: H: L+ T5 ?
  835.               unlink(".\\DownLoad\\checkversion.txt");2 @# \" p: L  d3 A4 J# Z
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . M: p8 E$ E  j7 z  l  @
  837.               {: W! @/ x& `( g& Q: z3 G
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");/ X. e7 N# V: C! Z) m
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");" U7 v3 ?3 K9 O
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");, U, W$ N% d7 R6 a+ L+ |( |. Y
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" e9 c/ }  l7 k7 v) t% ^
  842.                 . E, b2 D3 ?8 a, p
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 H- K+ S# v/ M* r
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* G& }& E$ z" O3 ]. b: ~% g
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");8 H2 M; U7 ~1 u7 a& a
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 S% e# ?' M8 y; E6 P% i7 a( {$ U
  847.               }( D: W& E1 b/ s: ^, y
  848.               dwStartUpSteps=5;" r  y) t3 g( ?9 w. I
  849.             }. c7 g2 _& c/ T$ E% }$ @: [( q
  850.           }
    # W4 I; z; ?" x' U5 G. c
  851.         }
    , ^8 e  h) b( G; f% h( C
  852.         else
    # ^6 F% Q& ?- `5 d/ e
  853.         {+ y/ ?) O4 b6 m4 N
  854.           dwStartUpSteps=3;! d) Q7 q6 g4 Q! L  l/ }
  855.         }
    & o7 N4 G- E" r2 i# P4 |6 m
  856.       }3 E8 s: g  U) M/ h7 ?6 V
  857.       break;
    / A9 }8 v. z- P
  858.     case 5:
    . _) k& K, A- a
  859.       {+ {8 K$ t; ^, k) C9 d  G7 {& c
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    2 q" a" Y' i: w0 }1 m
  861.         {( S' M" v& `3 \. s  u9 j% N4 y* R
  862.           int opt_overwrite=1;
    2 s- x# q: M* g% @- C4 M
  863.           int opt_do_extract_withoutpath=0;
    / a  T5 ?! F% y# d  u
  864.           unzFile uf=NULL;# z, l/ @' J# |5 c

  865. - R( B, `4 l8 F" v/ I: Y! ~, u; @3 O
  866.           uf=unzOpen("Wsa.zip");
    $ d$ e" n: I- e( E
  867.           if(uf)/ W& l# c: w$ J5 F  w, x8 j7 T5 e
  868.           {7 P9 b- Z; u7 ~/ g: S% L) _- u
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    % _" S, F+ g: }
  870.             unzClose(uf);
    4 [8 s7 _- I! A0 p& U  B5 \2 X7 t/ s
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");( M. n( s) T* b% y3 t+ R$ P! C! N, x0 }; D
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");2 S( d+ Q: n( s) |, E) r
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    8 c6 e* I; o: A8 S4 S
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) S* |1 N1 C: z9 p* B- p3 s& G
  875.           }5 [4 c$ W+ m5 C$ e, i
  876.           DeleteFile("Wsa.zip" );
    : k/ c' h9 w5 h0 m: @3 L5 D
  877.         }
    / I8 E) {3 m& x4 T& s: w, z

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

- Z$ Z$ o, d- \( u+ L# b2 y5 G% ^: Q. H# I9 o1 L8 R5 h1 Q. ^

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_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
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部