找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式

4 A6 F4 {" `3 t2 w! ^: z: T, ^
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ! a8 h) _2 j. F, ^7 Z  P
  2. //
      a  V# l% o( z6 s

  3. " [. H6 v. a# m9 C
  4. #include "stdafx.h"+ t, M+ ?2 ^7 ]1 K: _
  5. * X) b% [' M& t" R
  6. //#define UNICODE
    7 K/ X% r8 F  {3 H
  7. //#include <gdiplus.h>
    5 t- @5 h" [* `; \1 m4 P
  8. //using namespace Gdiplus;  Y  X- {, V1 i  J" p) b+ s

  9. 5 Z  e# }/ f, l; x" ?1 o  {
  10. #include "RevApp.h"
    0 g* C. |2 V5 f$ m! M
  11. #include "RevAppDlg.h"# ]) v, G; y% x; B& G
  12. : Q2 J7 r& @5 C  k: R
  13. #pragma warning(disable:4786)3 U  l% N" }% O4 b9 x! Y) h: D4 J
  14. #include <map>
    6 d' W. R* G, y  f6 }
  15. #include <list>
    ( _. q- @+ ?3 |% U& b
  16. #include <direct.h>7 D! Q, B6 J2 R) A% @, l7 k5 y
  17. * r4 _+ Z+ k, O- X
  18. #ifdef _DEBUG! K. j0 H, {; i3 D5 I
  19. #define new DEBUG_NEW" u; y$ b! d8 R  B
  20. #undef THIS_FILE
    9 d$ t! [4 W; A& ^3 P/ i" t
  21. static char THIS_FILE[] = __FILE__;
    - b+ O6 K2 o4 ^3 J1 F5 @" T7 v; E
  22. #endif
    2 E, t2 ^1 K& Y$ |$ [( L8 o
  23. #include "SkinResDef.h"
    ; I7 a) \* F( w. _4 P
  24. #include "ChangeBG.h"2 q4 P5 Q7 M$ {7 {0 _
  25. #include "AFXINET.H"
    3 s5 d9 s5 f4 i9 P3 s/ ]! i$ L- b
  26. 0 Y7 {  k/ R/ ~) L% s* m. N
  27. #define TRADITIONAL_CHINESE 0. d& J  W2 g! \* w
  28. #define SIMPLIFY_CHINESE 1
    ) ^5 M7 q' p$ q6 s4 I' M2 t" h7 L7 b
  29. #define ENGLISH 2
    ) [! J. D' ~) v  Q
  30. int m_iLanguage = ENGLISH;2 b# c& a: \  Z% l$ |. F5 B- i
  31. /////////////////////////////////////////////////////////////////////////////
    6 l6 L# S. s6 s6 y
  32. // CRevAppApp
    5 W/ E- }. z" z, k7 k7 o  T
  33. & _- j+ l& ?. j7 O- z/ t
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    & }7 f0 ]: K- X1 f" j2 b( U# B
  35.         //{{AFX_MSG_MAP(CRevAppApp)1 N- t6 A; R4 G* y2 g
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    1 C0 m9 o5 I  |; s' _% T
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    # b4 |5 v" Q% Z1 N" {9 W- [
  38.         //}}AFX_MSG
    9 R0 ?/ A/ P' A! [  H
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    4 E- Q8 x; T- v, D
  40. END_MESSAGE_MAP()
    0 X- {$ T! S( K. k# p  ?7 ^6 C
  41. 9 g9 @: f3 o& K, _0 m
  42. /////////////////////////////////////////////////////////////////////////////
    - |+ d% r9 O: ]; m9 X7 i0 k7 r
  43. // CRevAppApp construction
    1 t/ u$ R6 k; ?0 e4 A
  44. + U: O: P/ M: D  G; E% U
  45. CRevAppApp::CRevAppApp()# f) y5 j2 d( v- {7 ?
  46. {
    : G4 k1 g" D$ A5 ]
  47.         // TODO: add construction code here,0 ]% b$ w7 n6 a
  48.         // Place all significant initialization in InitInstance
    ) B8 L  N0 A3 J' W' h7 z
  49.   bDisplayIsBig5=FALSE;
    . u  H2 s# J) P8 G( A6 F$ i. E( I
  50.   bRestartUpdater=FALSE;
    ; g. G' L. b; b& u
  51.   bFinishUpdated=FALSE;- u1 Y1 v2 f5 ^! {
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;( e6 I$ q2 i( \$ p7 E( K
  53.   InitChangeDataBig52GBKS();
    # a" j+ I! v& L
  54.   InitChangeDataGBKS2Big5();
    0 J! B: y# P" y+ m2 n
  55.         //1 M8 g' u& ]7 ^4 A9 c  O0 N" k9 Q
  56.         bClickRunExe = FALSE;$ U2 p; i( A% k
  57.         //
    * K! s# @7 L0 N4 C( f! f
  58. }. v! R4 D5 Z2 T2 o
  59. 4 j( g( w7 p/ m3 o! X: e
  60. CRevAppApp::~CRevAppApp()$ i7 E6 f" \- Q. }# z# o& Z
  61. {  M, Z& h* i" p& I$ z: f
  62.         // TODO: add construction code here,( u" S/ _6 e: A
  63.         // Place all significant initialization in InitInstance* [8 O! }5 W( O  G$ G1 N
  64.   EndChangeData();
    . C, r0 X0 m! k& y( @8 [2 M+ ]
  65. }
      [5 X* M0 b( [% U7 Q; s3 B/ I: S
  66. 2 ?! ^9 j/ A" A! [0 U
  67. /////////////////////////////////////////////////////////////////////////////
    ) s7 j/ P' r; X) ~9 a5 s6 U
  68. // The one and only CRevAppApp object' |: [- ~/ W% @+ t
  69. % G+ s+ W$ V% K6 v% r
  70. CRevAppApp theApp;' b  ]2 M% T0 p6 J

  71. % h( b! b8 C; e: H  c- c5 z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName); l' \6 |5 M; h: m3 u
  73. {
    2 X7 Y6 A) A" I7 P1 Q& C7 K
  74.   int iEOF=0;
    9 Q4 J7 A6 R, M4 z$ S
  75.   char szTempName[MAX_PATH];
    & G7 R$ m4 z( E. `6 m
  76.   *szFileName=0;
    ' d1 X6 _; l9 G  y+ f
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ; q* w5 [& P+ \0 H5 S2 Q
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')! t, u% n& u: X1 ~; C& _
  79.   {, R0 }  v" p. D
  80.     strcpy(szFileName,&szTempName[1]);
    - x  }+ p/ |+ u4 R/ _
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ; n5 r" b. c5 x2 s- F( b- U
  82.     {
    3 ]7 A* {1 h4 ]; I  \5 D; i
  83.       iEOF=fscanf(fp,"%s",szTempName);! X2 f) i2 e. D8 j9 Z  u
  84.       strcat(szFileName," ");: T# ~( }4 P8 \; }
  85.       strcat(szFileName,szTempName);
    : y9 l9 q9 }2 t+ J- l6 ?( W0 A# }& d
  86.     }
    0 D4 {7 s. i/ R7 U
  87.     if(strlen(szFileName)>=1)
    9 x# f* [& J' z( \6 Y& g
  88.     {6 K( M6 i. K) z  X+ |
  89.       szFileName[strlen(szFileName)-1]=0;
    $ c4 K& z$ E, b) x: a* y
  90.     }
    8 u! |4 j; s- U+ }% b" j
  91.   }
    2 g, E0 K. U" i5 k
  92.   return szFileName;
    ) r$ E6 b% B" d$ Y, H- m
  93. }; m% S8 T' l2 K. [8 ^6 l5 f
  94. ( ?. J3 m; Y: w2 ?7 `0 k, V
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)9 ?; h0 H; @; X; Z% L8 @6 w! I
  96. {
      n  D3 w  g. C' n5 t' o
  97.   FILE *fp;
    ' f& S5 q& g5 G" o  a! j# C) G
  98.   char *key=NULL;
    8 ~% c+ v# ~) v2 t: S/ D
  99.   char version[MAX_PATH];
    ( L) L4 l% q/ b2 ~% ^( p
  100.   LPUPDATEFILE file,olds;; M/ e7 {* d# w  v, p
  101.   std::map<CString,LPUPDATEFILE>::iterator p;6 Q% F! N: C' i5 T2 g

  102. ' V5 s5 d- t' E6 N0 ~; P9 L
  103.   UpdateList.clear();8 j0 M3 B4 I( v1 |7 R
  104.   UpdateFile.clear();$ S+ K- [; V" I. d  G1 n3 H! R' ~2 c9 V
  105.   if(GetFileAttributes(filename)==-1) return false;. ?. N8 f) x- w, a1 ]3 w
  106.   if(!(fp=fopen(filename,"r"))) return false;* D6 \+ |# J; d7 j( N
  107.   fscanf(fp,"%s",version);9 Q5 x+ i7 T* J  a4 V& o4 @) [
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . q- A8 \/ ~9 |$ J' ?$ `
  109.   while(fscanf(fp,"%s",version)!=EOF)
    8 U& K: j6 l% X" j: w% l  U4 Z7 S' m6 u
  110.   {
    7 u+ l6 M3 t) f. G! C1 U
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# Q: d5 t4 Z* ~, [
  112.     fscanf(fp,"%s",file->path);
    * O) s" ]. I, L9 W# q
  113.     ReadFileNames(fp,file->file);
    / c% }# H% t/ k$ Q
  114.     strcpy(file->full,".");' a- y  a, V8 s" F
  115.     strcat(file->full,file->path);* m6 D1 \! C! x5 ?( [
  116.     strcat(file->full,file->file);
    ! ~8 }) J9 \& c5 @2 V
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())" w. y! T, t0 S" b) O0 V
  118.     {
    : o7 x5 `2 B) g6 G, q6 D9 }
  119.       file->vers=(float)atof(version);
    0 D( [; G6 H6 C. P
  120.       UpdateList.push_back(file->full);
    6 `5 ]0 Q9 r; q7 A0 g2 |8 ?
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    . c* j% o- \9 L/ s7 y
  122.     }1 d/ r. W% E2 i% |" i
  123.     else
    * c& m  o6 J8 r; c3 `
  124.     {
    : R2 ?4 S. j) Q+ I. A1 L5 o
  125.       olds=(*p).second;
    ; G5 @  w- E  w
  126.       if(olds->vers<(float)atof(version))! H* j5 F1 c2 h
  127.       {
    " ]& I" f4 ?6 Z/ g$ ~$ p4 P
  128.         olds->vers=(float)atof(version);
    5 O  ]! z( Q( l9 z. N
  129.       }: `" M1 q) F, a6 a4 [
  130.       free(file);( x# _1 ^6 ~& x
  131.     }
    ' Z0 X! E& t# S+ O" I+ P
  132.   }
    ) s- z5 w- ?. g
  133.   fclose(fp);
    1 N, p: s) Z2 c$ J. Z
  134.   return true;  C: F9 ]9 H( n+ `8 H* q0 x
  135. }
    $ t1 q* R* z6 S' n8 j/ I2 S) m
  136. 4 s# g$ S% J3 i
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)# `  @; M5 D7 d, p: e9 Z
  138. {
    ' i  c( T7 m5 |0 u
  139.   TCHAR  szFull[MAX_PATH];  D2 P" g6 `0 F9 D* }3 }& A- x, a
  140.   TCHAR *token,*inter;
    ' }: E2 l$ @$ l4 L
  141.   *szPath=0;" S9 R* `- A8 i
  142.   strcpy(szFull,szFullPath);
    2 u: i4 Y+ v8 v4 I5 s
  143.   token=strtok(szFull,"\\/");
    $ P, F4 t3 w, k- k2 l$ d$ Y) N: D
  144.   inter=token;) a0 J0 e8 d+ C/ T$ o9 _' f
  145.   while(token=strtok(NULL,"\\/"))
    2 r5 q8 }" H% a, m5 W: A
  146.   {  ]9 f& j; |* q, w6 K5 n
  147.     strcat(szPath,inter);; G' g! W9 x7 e9 X
  148.     strcat(szPath,"\");, _. ~6 m7 Y- [3 j2 f2 T6 _
  149.     inter=token;# s7 Z% s% e: O* P4 j2 ]9 l
  150.   }
    ) _1 W( a+ L6 R# g3 u2 O! f4 }& W
  151.   return strlen(szPath);
    + u" j0 q5 J1 w% u
  152. }, N' J8 ]- i; i4 d3 H& e& m

  153. 4 C$ O' t; s" w- y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    $ x1 A" h. O# s
  155. {
    % ^6 a7 x; L9 y9 i  s; L. F  O
  156.   DWORD attrib=GetFileAttributes(Target);4 B  ?1 F9 P7 {% f; H5 b
  157.   if(attrib!=-1)$ b  u' ~; W/ S, Q& y& v5 x
  158.   {
    . B- x9 k( Y: z3 t- x
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    8 u& C6 a% \9 u+ ]  u( j
  160.     {* Y& v% Y9 K+ y- }& z" \" k. X% n
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    % Q4 [& y1 R) W, s
  162.       SetFileAttributes(Target,attrib);
    # B& N9 ?  s/ ~3 n2 x
  163.     }( \. o& I( `5 T% N
  164.   }
    9 i, U7 w' c; q! Z4 p
  165.   CopyFile(Source,Target,Erase);
    * _- M. V$ U! b  o) K
  166. }
    $ @' q+ j. v7 i
  167. 1 z1 @' i3 n* x, C# J
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...), w) A+ @0 }, a3 q' u7 ^
  169. {- v. X2 {% s$ h& K: N
  170.      FILE *fp;  [3 e4 H7 v( {: s' Q; X
  171.      char  szBuffer[8192];+ e* ]  ?) W+ U2 l4 C' V/ C
  172.   va_list  argptr;
    : }/ [/ v/ R$ `1 ]
  173. 9 X+ u6 q8 r- g0 E. `4 g) Y
  174.         va_start(argptr,message);& ~- U  P, _/ t9 H2 w
  175.         vsprintf(szBuffer,message,argptr);
    " O7 A; I0 W2 J
  176.         va_end(argptr);
    " q5 e) c) C; w8 H& C5 x
  177.   fp=fopen(FileName,"a");8 N& o2 c8 L( r# g, J
  178.   if(fp)4 `! h5 T5 B! F  Q
  179.   {  i6 C1 Q6 J( U6 v: s- D
  180.     fprintf(fp,szBuffer);6 z- R7 F( ^, A) J9 m
  181.     fclose(fp);/ H+ w3 x' D' L. W2 e' F; {0 b" q
  182.           _flushall();$ B8 P, m2 F# ~' B) G
  183.   }  h+ y  j+ f' U( @2 p
  184. }
    : A. M1 ~% X! Q6 w$ [6 }

  185. 0 d$ M6 [" H! N. J  k
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / S- \- O+ a2 P2 ~- `" g
  187. {$ [% ?( {: N8 ]9 `  D( V0 f7 k# P
  188.      FILE *fp;
    , j: _0 ?/ _! _
  189.     DWORD  attrib;
    ( S, a! v7 p6 s4 D: `* w
  190.   attrib=GetFileAttributes(FileName);
    ) Z( }6 ]5 d; O- E
  191.   if(attrib!=-1)! ~# s& r2 X$ O' ?
  192.   {
    8 J5 f3 V4 y& O" I
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    $ c; }8 h# Z/ v6 y  |
  194.     if(!SetFileAttributes(FileName,attrib))9 }; l5 A, u( ]$ j# ^1 _
  195.     {: r4 R- x0 k/ V
  196.       return FALSE;0 W. Z% \! L0 n6 T( t% w( C
  197.     }9 T% f0 d( X/ T. {  h6 H
  198.   }$ a3 r4 e5 Q' f0 ^6 ^7 [  g3 Z" [
  199.   fp=fopen(FileName,"wb");
    ; {. R( j5 X" o% n
  200.   if(fp)  [# q/ o* D& J
  201.   {* \% Q( _6 Q+ {8 M+ S4 u. l- z
  202.     fclose(fp);0 n8 @; V# Y" {) \% ]
  203.   }
    * ]' x" E  G$ @6 p
  204.   return TRUE;
    4 o5 `* w3 G: t0 R" Z9 [
  205. }1 ^0 E" H2 x" s  ]

  206. / U& B9 ?# o: a* a' |( k1 x, Q9 F
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ) h* G- }* @) R  o  ~9 T
  208. {
    2 }& {) X# g2 ~+ z0 G
  209.   char filename[MAX_PATH];
      [) g" _# J+ g) B0 G
  210.   LPUPDATEFILE file,olds;
    8 F/ i* y) V2 i( f& A+ A2 B* h' P
  211.   std::map<int,CString>::iterator i;% ?0 M. m+ w) m$ N
  212.   std::map<CString,LPUPDATEFILE>::iterator p;" s3 e# S1 p8 \
  213.   std::list<CString>::iterator l;
    6 D/ k! V, ?* Q4 a

  214.   h' q: L1 _; j8 K6 A- I3 r# n
  215.   if(bFirstUpdate)
    0 }# T  e4 D5 W0 Y3 {+ R$ q
  216.   {* m" C7 k8 Q5 @! V* f  q8 M& {
  217.     dwCurrFile=0;
    ! z% d+ U( c! B5 V, C# ?2 F9 O
  218.     bFirstUpdate=FALSE;
    0 V2 u( _9 a" g$ F3 d% E
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 c2 h6 j0 {4 c# e/ j& B5 s5 x
  220.     {7 m' ^! [; l( H3 X" x
  221.       dwTotalFiles=UpdateLocal.size();6 q8 O3 V7 M" u# l5 t
  222.       dwDownLoaded=0;
    4 m) d) J/ S6 O4 C# |
  223.       bSilentStep=FALSE;
    9 E8 J) E2 {5 q: P! N/ P; Q9 D
  224.       bCompressed=TRUE;5 B5 X. @$ F0 f# g
  225.       strExtLocal.Empty();
    ! ]$ i8 l* B8 m$ m+ o  L8 `
  226.       strFullName=(*i).second;
    . O: W9 W  G+ L( S1 R* C  s  F
  227.       dwProgramState=AP_CONNECT;- p3 ]/ l2 z  Z3 Y& v2 M- |( L& H
  228.       return TRUE;
    " X# h  c& b9 N' `& c5 q: K0 a: l, ^
  229.     }# [3 U1 b" M) {
  230.   }1 E( U9 X8 `4 T( T8 u6 z- ~
  231.   else if(bRestartUpdater==FALSE)' k. k6 D7 F+ \1 y1 p8 }0 m! T& @
  232.   {
    + Q# U9 o: i  y# G
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()), L  W1 X# C& u% a1 ?; V: ~2 n
  234.     {+ f* Q: e* \# c& V& H0 l* N
  235.       file=(*p).second;* A- b+ u7 J0 ^: P
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())6 X. F  ]  P$ J$ e& T0 F- y9 d
  237.       {
    2 J+ o, a2 J9 W! p7 J
  238.         olds=(*p).second;/ B4 g; A# r  k+ |8 J6 ?9 [" Z9 `8 I
  239.         olds->vers=file->vers;" e% J, R6 [: K7 F. {! [( y
  240.       }! ~: A  \2 G" n
  241.       else+ P8 _+ h: O- A( E/ q. `; Q
  242.       {+ l2 [- e# f( O/ }, y  ]5 M
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " o3 e) M. C* x$ \& U
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    " D" j. r1 I# `4 N
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));4 h' ?1 z, w' _; R# d$ Z* V, G
  246.       }& `; O0 P: H8 x# \4 g
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    " `9 j4 S* k: m, ^0 ?( b' x9 T
  248.       sprintf(filename,"(%s)",file->file);1 Z3 J  @0 r! P
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' t- X0 p! t3 z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }4 H% a; z2 j" s. Y3 P
  251.     }
    9 A/ ?1 N( r  ?$ {5 K
  252.     dwCurrFile++;
    9 o8 d0 G5 G2 D7 J  J/ y
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : c$ ]* z) i  m5 {* o( ^
  254.     {
    $ a7 G9 c( d7 S9 G9 ?& S
  255.       bSilentStep=FALSE;
    7 R. f5 h. H) Q# s7 K
  256.       bCompressed=TRUE;; V9 \/ V. m# C% q3 z
  257.       strExtLocal.Empty();
    - E* l' b* c4 J8 n# K% ~3 v
  258.       strFullName=(*i).second;
    . ?- o6 W, s, A! r( O( P3 i& G# ~
  259.       dwProgramState=AP_CONNECT;
    9 V0 \2 X# a; ]  I
  260.       return TRUE;2 w% l4 L* a3 v& V" V
  261.     }) e9 k8 d: Q' X  k- @8 M
  262.     if(!bRestartUpdater)
    ! O6 o, Z( ?% z6 i: S
  263.     {" b8 Q( i3 q7 C3 G' f+ ^0 k- Q
  264.       int iCurrSize,iFileSize;2 w' a; }5 g5 V1 e  B# f/ q
  265.       iCurrSize=0;
    / w0 m* m4 r) n! L. Q
  266.       iFileSize=UpdateList2.size();
    . {" ?4 u, W. P/ i
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ! O4 d2 o7 A! I! T+ h$ Q, P
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ( w6 l/ R* T4 P$ o" Z8 m
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");9 I" O' Z( i  K! ~, }
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ a8 K$ y: x$ x$ h5 F- H
  271.       Fclearf(".\\update.dat");1 U5 z# Q. E1 A) v* i* K) v2 f1 o
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * z. B  e8 u. j8 C4 h
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)0 z$ _$ O  E# D0 g2 w
  274.       {+ K/ _  y# Y7 N* g% y* l
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    9 C3 X6 B% |9 h9 b3 r
  276.         {2 O7 ^: T! P$ N7 l: p- }. Y) M
  277.           file=(*p).second;1 ~! f3 D& j9 E5 m
  278.           sprintf(filename,"(%s)",file->file);
    $ G! T4 y; j8 {! t, F# l# X
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & r& @" ~5 |4 G+ r! ^2 [5 C
  280.           iCurrSize++;% |* d! F" l$ F+ B: H4 p- T' N0 t5 a
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ u% ^3 Z4 A* N$ t* s
  282.         }# z& T: X/ U/ e, k
  283.       }
    ( C+ z, U$ j# b/ V$ U, C& p
  284.       unlink(".\\update.txt");
    ( |' v+ x$ N+ a0 e: P
  285.       unlink(".\\update.tmp");9 q" C) E' U& N
  286.       Fclearf(".\\checkversion.dat");
    7 l; Q7 j) A$ D
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);3 o7 B3 I  t$ e* z9 T% Q* u
  288.       if(UpdateLocal.size()); G. r0 E0 i; l$ V- j/ R, w/ P
  289.       {. L; {1 X' a1 i
  290.         UpdateLocal.clear();4 C% _! t4 ^7 Q3 J
  291.       }( }4 Q# t8 N& j; s
  292.       if(UpdateFile3.size())
    + s% ^5 b4 ^+ r
  293.       {
    0 Q  t( R3 P: ~) [/ M4 r( ]
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  l( I) m/ K1 ]. V; r
  295.         {
    ( g% L# l$ K  R% P9 U2 N# A
  296.           file=(*p).second;
    * _, F: G  Z! k
  297.           free(file);
      l9 e% _. v; `
  298.         }0 L5 z( E  c2 c8 d
  299.         UpdateFile3.clear();; Q- Y" f4 {6 z% Z7 Q( @$ K
  300.         UpdateList3.clear();( j8 h5 s2 p! V% k( p2 Q% U% q" v9 A
  301.       }
    , X9 O) e# e  _3 s/ K0 b
  302.       if(UpdateFile2.size())
    % `/ S  I- ^: X# H7 |4 ?/ n
  303.       {! ~! j3 ^$ h( w
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . ]' B- d! u" @' _/ }6 c8 c( d
  305.         {
    ( ~. E- M9 |$ C, m' \& ]# J; t0 g
  306.           file=(*p).second;; }- ?. c" A* y0 u& s5 f9 W
  307.           free(file);
    7 G, _( t' C' ~6 i
  308.         }9 [. G* M; @+ ?) J. K; z8 a
  309.         UpdateFile2.clear();& }5 z7 {' I+ S6 ?8 _  p. L: f
  310.         UpdateList2.clear();
    1 e' ~( ^  `$ Y% s0 w
  311.       }
    % a2 Q' A+ v& e; f+ ~
  312.       if(UpdateFile1.size())
    1 ~  a1 F9 b7 C8 l3 X7 B
  313.       {
    $ r7 R2 Z) E: {5 s) U2 }
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) q* n. d5 B# x- S1 q* R
  315.         {
    6 r7 v5 ?+ O1 P& J2 ?0 t
  316.           file=(*p).second;
    % Q+ A: B+ M5 U, g5 V
  317.           free(file);, b6 Q% ?; {$ b" t
  318.         }
    * y* Q3 M  c- m9 X
  319.         UpdateFile1.clear();* C+ A/ z$ q- [' u9 o8 H
  320.         UpdateList1.clear();+ A0 O! `  L/ K: \( t+ X+ p+ `
  321.       }. O/ [! l  V! I3 K0 K
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! K6 Z7 N- ]3 N
  323.     }  \! g$ L- Z6 r$ V  a: Z" J
  324.   }* m$ q- }  V$ G7 @4 G! w
  325.   return FALSE;
    5 `! o( l5 q( I5 V( F; _
  326. }0 @! U" l- F8 t# ^

  327. : j; ^! k( v' b4 p$ ~
  328. void CRevAppApp::ClearAll(void)! J$ g; d* L; p
  329. {
    , U0 S8 Q* b0 S6 h/ c
  330.   LPUPDATEFILE file;1 q, Y& G* e* U8 ~+ ^" @2 Z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;0 s& F. m: B$ h' H, N& Q$ f4 n- |

  332. 7 l8 s: ]9 @/ O3 {. W: w
  333.   if(UpdateLocal.size())
    % Z2 H0 |) b) i8 a& i
  334.   {$ t0 e& z; A% @4 C! Q5 ~/ ?9 m2 O
  335.     UpdateLocal.clear();+ \7 ^/ E( b% F. I. }3 l
  336.   }
    2 k" d9 @/ V) y
  337.   if(UpdateFile3.size())8 [, N& z0 d, R
  338.   {* H( _6 T" G+ }9 E8 D
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( L4 b5 U9 M0 R# P3 O8 s" C: E
  340.     {
    : [# p+ N: t5 E7 c5 y7 k
  341.       file=(*p).second;
    ( `7 F: I  n( W  z
  342.       free(file);0 `" G$ \" ?3 Q
  343.     }. ?; P8 i7 I: H9 v+ O3 {' N
  344.     UpdateFile3.clear();9 P! k; z. `: `1 J2 w( T* y0 F: e3 a
  345.     UpdateList3.clear();
    $ K6 H0 ^2 X0 G7 y5 v& l3 W3 k
  346.   }3 \( {, u: w- k
  347.   if(UpdateFile2.size())
    4 D& [% w7 ]- |6 R# g6 Z; [* h
  348.   {; H; U& L: _) W1 x
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # O6 R; O* m7 T$ ?1 F8 H1 D9 V
  350.     {1 Z2 J! e8 l( K  K' \
  351.       file=(*p).second;
    # T7 j7 F8 Z8 X
  352.       free(file);3 Y, i1 L, F4 m2 N0 d% u3 _( t! I
  353.     }$ o+ M& g* V5 z% |, `" R8 W
  354.     UpdateFile2.clear();8 w! i  T# P/ i. J2 A
  355.     UpdateList2.clear();' b( P9 \+ W9 |) q" {
  356.   }
    " T. k9 N% U: X6 I) u
  357.   if(UpdateFile1.size())
    $ v4 S) q. I1 X5 @$ B# c( q7 D
  358.   {7 u3 ]" ~* ~% y' {* O( d
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 f  N# u% p( ]; v' n( U
  360.     {! Z. O9 m$ U( L( Q; Y; l0 B5 a4 L
  361.       file=(*p).second;
    5 A2 z# P/ `# \/ T7 ]7 K
  362.       free(file);. S/ e5 F' V# u* z
  363.     }! W5 _8 ~( \# X5 N/ |1 h
  364.     UpdateFile1.clear();0 z' j7 f, O4 ~/ N
  365.     UpdateList1.clear();
    : s7 v6 }$ m0 c+ q6 j; Y6 e
  366.   }& H( [& B5 S. q- ?# m
  367. }  
    ; _2 \3 Z; n4 c+ k" f
  368.     F  ^- A0 L2 ?# I$ W
  369. BOOL CRevAppApp::CheckLocalVersion(void)0 N: i" ?2 a2 D
  370. {+ ^" j( R( x, z1 @3 Q. \
  371.   int c;
    2 \6 U6 m7 z7 y
  372.   LPUPDATEFILE file1,file2;
    * q: q3 @6 n$ B3 @) O
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 n* S" U; z# C2 P7 I2 c
  374.   std::list<CString>::iterator l;! m$ b6 x: ~% E4 Y& J6 h" H$ L$ d
  375. 3 a% l- i; W  U9 l7 C
  376.   UpdateLocal.clear();
    ! R/ }$ ~( I. u/ o# B" M- `8 l
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);# S' W& [$ o$ B* v8 m; q: b
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    / _# r' @& ]; t$ i& H$ a
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    5 _/ q! w. V2 e9 p4 C
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);- N9 l2 d8 x2 R) w# Q# u
  381.   if(UpdateFile3.size())) W  l) ]4 W& e5 |% j0 i
  382.   {1 d5 p+ W+ i$ C. z- @" z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    % }, m5 C) _; h7 T1 v1 f
  384.     {
    7 Q, ?) v. S# [! U7 G+ @/ t
  385.       file2=(LPUPDATEFILE)(*i).second;3 v+ f' Q4 {" |+ f/ B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " o  g: g- n- O- b
  387.       {- a8 `6 q; S1 N4 h; ^
  388.         file1=(LPUPDATEFILE)(*p).second;, ^/ A8 E6 ]6 Z7 w( z
  389.         file1->vers=file2->vers;5 T2 i& N; b/ a
  390.       }
    + D1 v4 ~7 y* l4 @. ~* G
  391.       else
    ' |$ i5 ]3 @  c+ C+ }
  392.       {0 [7 @# T0 Z( D
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  Z: B8 v' |2 z8 s* M, q+ K
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));, O3 C5 a; T; W- p( N" f! N
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - M$ ^: u" H+ V% _" n
  396.       }
    2 ^. u9 |! j3 y8 K  e
  397.     }
    ' E9 `  x( |3 {" u6 x" M. R$ {
  398.   }4 ^, b1 o( o2 O) ^4 W
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 J/ X/ q* U: [4 m* _$ @" [* t
  400.   {( c/ W; Z! ?; I& F$ v5 R$ D7 w; k
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    . l4 ]7 l7 w& H6 u
  402.     {, T* K3 V( k2 V
  403.       file2=(LPUPDATEFILE)(*i).second;
    9 L: T9 j9 W9 @- C* X8 x
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 |* \/ R: v" d% i- }
  405.       {
    : \) D+ T( e3 g( @& ^8 ~) u
  406.         file1=(LPUPDATEFILE)(*p).second;$ }" c$ r6 k7 p; I: K
  407.         if(file1->vers!=file2->vers)
    % b, ^  k/ t4 I- E2 Q( t( I1 l
  408.         {0 M) ]$ N( \' k3 h& {( r
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 u9 w' V: [# J- r: ^, n1 I
  410.           c++;! F4 A) A; N( k$ b% Q
  411.         }) d* m4 I. Q0 i, ~; A
  412.       }9 m( S, J8 \. U+ A4 D( c  i
  413.       else0 d' C7 h/ w; c4 z5 m
  414.       {+ v' W" b5 R. U& j, ~9 \' s5 @
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! p2 k, b& _: ?' g0 }7 J) i7 @# g
  416.         c++;
    - {1 ^# q0 ]+ a( J
  417.       }1 S. i: t4 ?* {" f7 ^6 o
  418.     }
    * K2 F  i, ?0 z0 x
  419.   }
    ' N" m: a7 n! l1 m* U4 \
  420.   unlink(".\\DownLoad\\update.txt");3 i6 G) u# K: K0 m& Q/ o3 i
  421.   if(UpdateLocal.size()) return TRUE;; p0 q, T* y; f
  422.   else                   return FALSE;: X  r4 n2 C  p! i
  423. }; `0 [' r' {5 ]2 N
  424. 8 U. [* T4 ]) j6 V; W6 C, O% T6 ~) O: `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"7 W% C3 f" i8 c# ~
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    4 _( |* `) {& y3 }) i

  427. 3 h. a" P( Y; F$ R- x) o* \7 Y

  428. ( m# p8 s* K, u

  429. ; p/ @# w/ h  J/ O: x0 O& U
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    9 \, b, g2 \4 t5 [
  431. {
    & z! s1 o$ _% S" t: G5 W7 x  e
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ! {0 i" X% L& Q7 V/ U% l
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% D5 G' u9 g- f7 m2 \1 n& ~+ B2 f
  434.   {
    ) ]7 T% T: p- e, \) L3 S
  435.     char szLanguage[50];! q1 i" g0 n/ n9 V& U3 K  W
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! R  L2 @  h# ?* c1 P+ l
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % ?% V+ b/ F& P$ k" o4 r1 g
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      T. r/ i: Y5 c& b! n- H9 R6 n
  439.     else                                   m_iLanguage=ENGLISH;% z1 w' w/ a$ p2 x% u6 k
  440.     char szRegister[100];: K) k2 A+ p; E# i) M7 u+ M; X
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # g. c! ]; U0 P: v
  442.     strRegsName=szRegister;- s9 Z. z" V- F
  443.     char szPatchURL[100];  u5 |1 Y: H2 _: f% {* \" l
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- n; V4 \" p$ W& [
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 E3 |& S- C  y; @0 q" t. W" e+ w0 F
  446.   }
    ! a- d- U  n1 x2 {# |# C+ u
  447.   else
    - x5 c2 J; [9 W( c+ L
  448.   {
    . |/ \! r9 S# h$ z" }% f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ }) p; g7 x2 v, D$ I
  450.     strRegsName=DEFAULT_REG_URL;6 T6 Y+ H" }8 ?" S! x
  451.   }7 E/ Z# U! z: F+ k$ ]3 b# q; i. Q
  452.   if(GetFileAttributes("hosts.ini")!=-1)0 Y( W8 b3 I: j  p+ y8 L  g
  453.   {
    3 \( \) C5 R- e, O
  454.     char szIP[50];* X- h" I) ^/ `0 Z! {
  455.     char szDIR[300];; v( r7 |8 Q8 M; c7 r3 G
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))' ], L- ?3 V4 R0 \; X% j& d
  457.     {( L! q: v1 j; S
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    - F8 C& j, F$ E& p# p+ M& b
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# L6 D2 `; o( Q3 j7 E, T# `
  460.       strHostName=szIP;- Q& f+ A1 v& n5 c, z; ]' t2 D+ Z
  461.       strHostPath.Format("/%s",szDIR);, ~* W8 k% ]% U% |
  462.     }
    . `1 m  L9 z  i* S- V6 g) Y
  463.     else
    % w) M+ A* a0 Z0 E5 s! i+ @2 {
  464.     {
      P9 F) ~! g' Q# y- e6 M
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " {! F( i8 M! p7 r3 U
  466.       {* E7 m) y  [( |" E1 ?% d
  467.         char szLanguage[50];
    3 k+ `% z, f# U" d8 \- @* C
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");# ^0 {9 X4 V9 c( E: e
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! B2 `+ p: {% V2 l/ f$ o
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ Q3 X1 ^) t5 |% Y) R
  471.         else                                   m_iLanguage=ENGLISH;: k( M6 {- f5 S% M0 m! S( b
  472.         char szRegister[100];
    , l  t1 v8 ?- d& i. L
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# e% t. G; g" |
  474.         strRegsName=szRegister;
    ' z6 G5 }7 C/ R+ T: O+ A, R0 w7 I  f
  475.         char szPatchURL[100];
    ( B# Y- b5 h  z8 V
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. o% f( }5 h" q( u! E  N" h
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 c9 \0 \: B- B8 h- j
  478.       }
    ; L6 @" B9 T3 X
  479.       else
    6 E1 r9 A% K; |. B! g
  480.       {
    5 n1 h+ M' H4 p% g2 ?$ x3 ~
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 i6 L+ o7 _8 o) M( s6 r4 V+ e  b6 |
  482.         strRegsName=DEFAULT_REG_URL;
    , w5 ~6 n% H, q' J4 I# {
  483.       }
    - Y. B" u1 ?" c0 [' |. `2 D5 p
  484.     }
      G: R* b; F0 u( Z1 Y! v* @% R* R( j
  485.   }3 W7 i5 {# [7 J. ]4 R4 O4 F
  486.   return true;
    4 M: _! e8 r! i5 z4 ?
  487. }
    - T$ n; h6 |3 J7 i; @' N
  488. 4 Y! l: H- }' N( J4 E: z" L. w
  489. #include ".\ZLib\unzip.h": c; s- g! t! ?# z! s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    2 W6 l, L# z% y# i# j" B: ]
  491. /////////////////////////////////////////////////////////////////////////////
    0 M2 z( q2 J' O7 c9 t
  492. // CRevAppApp initialization
    0 b2 n( e/ w+ H1 t& J7 R
  493. 5 v. n& X. r$ K" \. ]
  494. BOOL CRevAppApp::InitInstance()+ ?  |" L9 C  S( B+ r* r! j
  495. {; @* L. u: B3 z/ s
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    / n0 k# Y# O- K0 }5 A1 Y5 P! P  Y  _
  497. . x7 }! R1 ]) [/ e$ v* P. s
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    % ^8 M7 M. K$ P0 E
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ) e7 b) o7 ?+ f' Q, w) Q8 R
  500.   {
    - U* f* g8 j9 G
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    / H/ W; l1 x( \) m7 j# u/ l5 w
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
      v2 Y& {9 ^) N0 t
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))% X' l, X1 K# H% R
  504.     {# u9 `" J# [0 g; u8 `3 |; x
  505.       strcpy(szPath,szPathTarget);* N8 d; o3 p/ r; ^
  506.       SetCurrentDirectory(szPath);6 U' V0 a& n& u4 Y" |
  507.     }, D# K; O7 A) ~" x2 I4 r( C
  508.   }# V& V3 I( K  O% F
  509. #ifdef _DEBUG/ f- E! S  E% F. f
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; L  R4 ?5 }/ X: W
  511. #else/ H# I. Y! \5 w
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 j- Q, |$ s0 S, g7 _4 C2 C
  513. #endif
    ! m  t2 G% `3 |. [7 ?* `
  514.   {
    ' P3 M7 J1 D) O0 |/ _5 L
  515.     char tempFileName[MAX_PATH];
    $ e! k- A7 U; v" I
  516.     strcpy(tempFileName,szPathSource);
    : p+ ]) ?/ i) u) v% n4 z
  517.     tempFileName[strlen(szPathSource)-12]=0;/ Z  C0 B2 F9 \7 N1 a8 b& F* E8 y9 t
  518.     strcat(tempFileName,"\\$CSUpdate.exe");& v: I+ U3 z7 \* N/ Z/ m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);9 k+ e/ G/ i; I" Y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    0 v, M$ H" b$ M- Y/ T
  521.     return TRUE;' A( ^9 L+ ~6 s5 M
  522.   }0 M. s7 U* B) I  V+ C# ]3 P( A
  523.   // Nuke 0118: Delete run.exe
    . B: i9 u" c$ H: [8 _1 c
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );' p: l4 I- Q/ V7 R) O
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");- C5 N- p* u8 `7 |" T; n% g
  526.   if(!ReadCfgFile("Config.ini"))
    - U5 }- ~$ w% R4 K/ X# B% A
  527.   {9 v( @0 [8 ~% q) v# Z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ! k8 `& f# u! x6 B% _! R, s( U/ Y- g
  529.     return TRUE;" K  o6 Y# o' D/ W8 P8 M- I
  530.   }
    , h6 I+ X6 S* W; p1 ?7 t! `7 f
  531.   HANDLE mutex;9 ~6 `3 w: _) v0 J8 b
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))5 j. {/ h. T( b4 V
  533.   {! t3 t" d7 {4 V6 C) }
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ' c! s' r/ o4 }/ s3 J
  535.     {
    , b1 M3 i' }9 P$ _, z
  536.       CloseHandle(mutex);
      s" S* q! u8 l+ Y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);9 {/ E+ k) Q$ k: g* z. f
  538.       return TRUE;; a5 J" P( a/ e2 ]# z4 A" e  r* B
  539.     }2 s  P1 T, N1 \- k( ~# Y+ ]5 S' a
  540.   }  ( P9 M0 I& u* l$ D3 m% O3 y, t6 y
  541.   CloseHandle(mutex);5 ]5 M: B; @* c8 i

  542. ) Z& [( [' p: r
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);4 {* o+ h& I- D4 B
  544. ; M+ l  U8 w' ?* O( d
  545.         AfxEnableControlContainer();* Y( D: W; s/ y- e& Z: C

  546. 6 F/ M! w& V  R, R7 i' Q$ b+ W
  547.   bCanUpdate=FALSE;4 T; X  r! r! l6 t7 K4 D
  548.   dwStartUpSteps=1;
    0 m& K2 p7 ?. B. ^' M0 g3 m
  549.   dwProgramState=AP_NOTHING;! b# J4 h, D# C1 Z" \" h) ?2 c

  550.   Z6 K; y9 n/ g6 {& W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    % d' J$ }4 Z$ X
  552. ) d0 [9 N! p  r7 d
  553.         // Standard initialization
    $ u: |( ^6 x& Y. [4 k. z) E. n
  554.         // If you are not using these features and wish to reduce the size1 e6 y# `  i6 N
  555.         //  of your final executable, you should remove from the following( D  _( m3 L7 J$ r' k7 k
  556.         //  the specific initialization routines you do not need.' W/ R0 |" k6 b& x) g

  557. 7 H4 t% J( n% o) s
  558. #ifdef _AFXDLL4 i# J* }+ L/ r
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    % j) ]' o+ N3 |# P, |
  560. #else' e4 a& k- V9 d% g, I
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically0 E. y, d7 e# R' U% P' ~% b7 e
  562. #endif9 ]6 v# i* w: p! Y! s
  563. 8 r4 o0 t) |  h5 K
  564.   dlg=new CRevAppDlg;) `! L; Z+ h4 Y/ j1 ]
  565.   dlg->Create(IDD_REVAPP_DIALOG);! s  [7 _* b$ h9 U
  566.   dlg->ShowWindow(SW_SHOWNORMAL);3 k0 H9 V" j* X, K, N$ a
  567.   m_pMainWnd=dlg;" D9 \4 M2 L. [5 h9 f: E# t
  568. , Y' G5 p6 p% k) F2 Z
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);- c0 |3 ^" ?8 `, _! D

  570. 7 i* S: [5 H9 }; Z- i' Y
  571. //  GdiplusStartupInput gdiplusStartupInput;
    9 \4 \7 }  y; p( W# \! M1 \
  572. //  ULONG_PTR gdiplusToken;
    ' B# }( _5 H# _/ X
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 A: {' f. ?% Q/ n9 F2 v1 r, y) g

  574. + A! W+ `% E) Y& ^
  575. //        CRevAppDlg dlg;
    ) j# k. ^' i3 ^# J, [! W. p
  576. //        int nResponse = dlg.DoModal();& ?% B  U( v3 L) s0 q
  577. //        if (nResponse == IDOK)
    , d) t% z! J- [' s- V  ]
  578. //        {( C% z  M2 v- h! k, }% j+ T
  579. //                // TODO: Place code here to handle when the dialog is7 y% k- B4 @* @: d* V; a
  580. //                //  dismissed with OK
    ( S+ f4 K3 ?7 o$ Q1 j( ~# i# K
  581. //        }
    * v' M# F1 |5 j" L6 M
  582. //        else if (nResponse == IDCANCEL)$ V* f* n5 d, j4 Q+ y7 `/ y
  583. //        {
    : h+ I5 I/ n% y. K
  584. //                // TODO: Place code here to handle when the dialog is
    ' m- I6 g9 o1 \" g# c
  585. //                //  dismissed with Cancel
    % y$ J4 U0 _1 J/ u
  586. //        }
      D/ x1 F* q, ]" d

  587. # ^& T- G9 K( D5 I5 t( P
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    # V: T7 K7 x, e# `) i% K
  589.         //  application, rather than start the application's message pump.  i5 I, J  U" }% y
  590.         return TRUE;3 K8 x1 L7 _( K3 Y4 r& J& U4 `1 a1 Z
  591. }" E# V7 j) y- P( l! }- ~8 r* A
  592. ; S- R6 M* L, t  C( i5 ^& i$ P
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / G7 Q* N- O, m* `
  594. {
      {$ _8 e6 S1 [/ M8 X9 S  X
  595.   int i;
    ) L5 y. S" w5 l" I; }3 n% s
  596.   char *szRet;0 {& Q' N- t0 u: j- x$ g

  597. * q# `/ ^1 E0 f
  598.   if(pSource) { itoken=0; sztoken=pSource; }; Y- S( R/ @7 x' Z& i" m
  599.   if(sztoken)
    ( u: T, p1 c) D" s
  600.   {
    ' W; d$ n! O, M! X4 M7 o) z
  601.     szRet=&sztoken[itoken];
    - E6 Q' c+ b2 ]$ e8 ], x. h; p
  602.     while(sztoken[itoken])
    6 L7 C0 J! T! n# x$ I
  603.     {3 a# U. ?( a2 g5 m4 W" v  o' W
  604.       for(i=0;i<(int)strlen(token);i++)
    6 B2 h/ l; L, n( }; `
  605.       {6 _2 B* e5 `+ G2 `5 k8 J! n$ ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    / l' Y! D. z- U: y9 p( M/ I
  607.         {( ]$ i/ E  w; p( d
  608.           sztoken[itoken++]=0;8 y6 R+ Z7 d7 N) {
  609.           sztoken[itoken++]=0;
    * l7 O9 J9 z# L* m& ^- w$ I; y
  610.           return szRet;0 o- p4 ~+ A$ m: j' p9 c! i+ y
  611.         }& z1 v, ^  d6 T1 i$ Z
  612.       }+ h9 Y9 z8 v# V+ M
  613.       itoken++;* }: T7 F! p* m; Q  ^/ D
  614.     }) w3 n7 ]" B! `% E5 E( y9 l# k
  615.   }5 `6 T" i6 J/ G2 Q# k
  616.   return NULL;
    3 B- Y* ?5 D( Z, F; G0 G: _
  617. }
    5 |8 \: V, \4 U

  618.   m& j. B" f& Q3 |& W& k8 C8 ^. l
  619. void ProcessProc(long Total,long Current)  v, u3 G" ?) Z1 K# z+ W* I
  620. {
    9 W' D; o) L* a1 C
  621.         MSG msg;
    / B4 I- J" s, [2 R
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);- x- e2 n( s  G1 E/ ^$ U9 N
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    8 D. k" H$ j: E0 F7 C/ q7 Q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))* x3 Y# }) @& f$ W5 r7 o  x
  625.         {
    9 T; j9 ?1 v! w' y) g' r$ w
  626.                 if(!GetMessage(&msg,NULL,0,0))
    0 P5 s# M3 a% v) _+ ?
  627.                 {8 n$ K  x" N& p( @) }
  628.                         return;; u: y( ^' t$ e5 W9 j
  629.                 }
    # ]1 A: K7 B1 b/ F( @  o4 W+ }
  630.                 TranslateMessage(&msg);  i3 R1 }) G" j: H" X
  631.                 DispatchMessage(&msg);' U; l; O4 C  I% {: ?4 j  e
  632.         }        # g+ g- Y; q  u- q3 d
  633. }
    " ^5 P( \: E, N; ?$ m3 R( K
  634. 3 u) `$ d$ n6 S- _+ c
  635. BOOL bFirstChar=TRUE;
    5 B. \, B8 `! r8 P/ I, y4 V

  636. ; W# v& v8 U' N% K# F) Q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
      q! z, ?* x0 _/ c
  638. {
    9 w# _+ H2 j' C" [3 F
  639.         // TODO: Add your specialized code here and/or call the base class
    9 I' e4 ], T0 G2 X$ y
  640.   switch(dwProgramState)
    # j9 l# E! o5 u# j9 m: S! x, I( q; v
  641.   {# e+ i4 s9 D7 I/ T$ v+ k& U( c
  642.   case AP_NOTHING:
    - [& ~, x$ ]* [* X! K
  643.     switch(dwStartUpSteps)
    9 R4 S1 b6 R- y9 g+ v' M5 d
  644.     {
    0 E4 }/ v0 p5 h6 @& n
  645.     case 1:0 Y6 h, M+ Z- Y7 h% q/ Q
  646.       {
    ) u6 Z4 f& {( u1 B6 Z
  647.         int i;
    # Z( R2 U9 W; A- v/ }6 Y9 B
  648.         CDC *pCDC=dlg->GetDC();3 F8 v" R/ V+ w5 h2 ^- ~" ^
  649.         HDC hdcwnd=pCDC->m_hDC;) J6 N& r$ q, U( I3 @9 d/ E
  650. //        Graphics graphics(hdcwnd);. n2 O# v, \/ Z+ R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");0 q) X5 G% E2 Q( l$ a
  652. //        INT iWidth=bitmap.GetWidth();
    : k5 e" J3 w" {7 o
  653. //        INT iHeight=bitmap.GetHeight();
    4 K' s: t. L3 e- N' X4 Q
  654. //        Color color,colorTemp;9 Y+ ]+ ]2 g, I" M: a  ^' P* n
  655. //        for(INT iRow=0;iRow<iHeight;iRow++); t! g# K- [( j& t( V: y+ o
  656. //        {0 R" ^6 C' a# [- D( ~4 o2 z
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % O' i4 U7 b+ @( ~2 I% ?
  658. //          {( \+ X* V. C4 P) y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);) c- y/ U. r5 S7 b
  660. //            colorTemp.SetValue(color.MakeARGB(+ L9 i" |2 t, Z, _* ^
  661. //              (BYTE)(255*iColumn/iWidth),
    * P' o1 c! x" U: `) f7 s
  662. //              color.GetRed(),
    ; u% C1 W: f+ Z) F% L
  663. //              color.GetGreen(),
    8 c7 m6 x( f/ a+ L6 X
  664. //              color.GetBlue()));
    1 @9 D% G( V6 ~- @4 Y. T& c
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    . }5 g) X& X* m
  666. //          }3 @7 o0 P, s* ^9 t) J2 C2 i& P
  667. //        }
    - t/ @% u3 }3 y# b, J
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
      P+ q( t; P. m. A: f/ c
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! o: Q1 M/ H- c8 q7 w* ~/ w
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    $ k+ o7 P: r8 U1 ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - u: u4 T1 Q; m' |; Y. O9 F' f
  672.         for(i=0;i<240;i+=8)0 Z8 ]  S. Z' R; r
  673.         {, d; P! X- w% l
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ e5 u5 z% t) B" Y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 x% A" o* n, }; z& C" a4 F% [) ]
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% }. s# k4 C9 [" {  ]$ d+ V
  677.           Sleep(33);9 o6 K3 V3 o) A, ~
  678.         }  Z) @7 z, A& x& V: W! D; C4 H
  679.         Sleep(1000);
    4 p; A9 j0 W/ }7 e
  680.         for(i=240;i>0;i-=8)
    1 U/ q1 C  R4 a; `9 b  c
  681.         {
    : q: |+ X( L3 m8 c+ Q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # l0 C1 f) u; w3 K/ V9 L
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: x, l6 d. B- C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; n  w" a- X. h) J' s8 K1 E5 t
  685.           Sleep(33);
    5 m) |2 Y/ {4 q( B8 P
  686.         }
    7 E3 {& h' ]2 t2 m( [3 Z+ Y: }
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);- i/ f* n6 U. \  y( q1 Q6 S
  688.         dlg->ReleaseDC(pCDC);9 v  J) U& i* L# G
  689.         DeleteDC(hdctar);3 V+ g1 \: H0 u. L, w( e. M
  690.         DeleteDC(hdcsrc);
    9 j7 l' v# S4 @; d* W
  691.         DeleteDC(hdcorg);
    ) L; R2 D4 ]2 f5 ^
  692.       }' `6 Y# J- {, s" t
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    & x- _4 B6 o) S( f7 F3 _
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");/ @6 b2 V: Q/ u6 t& S6 z  [2 M; l
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");7 F: r& M) i( a. J0 u' Z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 L5 X; O3 A5 x6 V
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ w4 b9 F; a9 ]% P0 ^3 r1 D
  698.       if(!Dn.Connected())
    ( V2 o2 ?, i) a% [6 |  R. d& g
  699.       {7 I+ a9 I2 s: D) F$ f. ~) O% G
  700.         dwTotalFiles=1;
    - y2 A; F0 e5 f5 {3 h) @: x  p& N
  701.         dwDownLoaded=0;
    0 B  j. x% u; t6 t5 I! {* o
  702.         bSilentStep=TRUE;9 `0 \; c1 y( C3 K6 b+ @0 d0 p
  703.         bCompressed=FALSE;; H0 r* v  s. u! C* o, m' {
  704.         strExtLocal.Empty();  ^* e. T( |1 G& L. q
  705.         strFullName="readme.txt";
    3 r! E% E% {9 I
  706.         dwProgramState=AP_CONNECT;, [2 Z3 d- F6 F* A$ D$ [* a
  707.       }+ _6 y" i. H2 g
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    . @. }$ T1 J( E$ L2 \/ _
  709.       dwStartUpSteps=2;" o6 z$ H* F5 Q  P! E5 p
  710.       break;
    $ H8 C- O4 U3 j& U
  711.     case 2:
    ! H2 a7 z% Z6 @% O6 b
  712.       {
    * M. i  \4 e" l! X, \- `+ S
  713.         int iEOF;
    . l# ]8 e+ a( y  W. S8 A
  714.         FILE *fp;
    ' y5 H" W; @( {; E  w
  715.         char szString[512];( ^8 Z. Y) J; e+ D' x
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");  N+ |0 R. a* d
  717.         if(fp)) \$ C( K1 M! g) B' x
  718.         {( [% ?2 s& O4 ^. U
  719.           do- Z! b; a4 Y$ v, K' G3 \
  720.           {, p/ B* w) e% o# L4 }. T1 n
  721.             iEOF=fscanf(fp,"%s",szString);
    ( H+ `+ O  t( b  K, w# F* g
  722.             if(strlen(szString)). z. |% n5 o2 K7 R0 t4 @; o2 H
  723.             {4 X4 \7 ^1 @! N( L4 W6 S# a
  724.               if(bFirstChar)- n8 ~/ L1 h+ t& H- m) ~/ |& p
  725.               {
    # _8 {, Z) U1 q0 ~" x/ {0 D
  726.                 bFirstChar=FALSE;
    - L9 k7 ?( c  c
  727.                 bConnectIsBig5=FALSE;
    $ [: b( K, U. H3 c; K2 _
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;  a2 |9 L. l8 R
  729.               }
    4 Z9 c( w" c$ G2 R' o' B; {9 Y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    7 c. E6 ^3 l& x) K
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    + u% I5 V# _4 D: |2 n% S5 @
  732.               dlg->m_ListText.AddString(szString);3 I% f" e+ A8 X4 V& d7 h* m
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; C: ]5 B$ C- v. c* ]
  734.               *szString=0;
    - V2 v+ r3 J0 f: `7 f* `  j/ q
  735.             }) u2 a9 J( z& Z: S' ]% j4 s. s3 r
  736.           } while(iEOF!=EOF);( F  {. s6 }/ [% i$ @/ G. f" A7 j. B
  737.           fclose(fp);7 @1 b) Z0 x9 K6 w
  738.           unlink(".\\DownLoad\\readme.txt");
    - ^  P, l7 W. W/ @
  739.           dwStartUpSteps=3;: ?+ M/ i$ Q$ B1 ]2 R
  740.         }" d8 w5 Y) a5 |" v" o: R; h
  741.       }
      l* n% K- d4 q6 I0 H$ z# q) n$ f, U
  742.       break;7 h% j$ P6 D: O/ d/ ^' e
  743.     case 3:' C+ d  K' z8 i8 U
  744.       if(!Dn.Connected())- g' y( Y, D/ T5 \7 u6 D$ k- X
  745.       {
      a3 B4 l' F2 j. W3 S
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);2 |/ }# V! P6 {1 r
  747.         dwTotalFiles=1;* A, v. A4 z1 h$ t7 E5 n9 c
  748.         dwDownLoaded=0;5 X7 k( t* m, p0 y1 m# \/ E/ J9 e" N
  749.         bSilentStep=TRUE;# \. V* Q$ Z$ `& C  c$ f
  750.         bCompressed=FALSE;! E. M' `' P9 ~' r3 p! z
  751.         strExtLocal.Empty();. N  \  T9 A) V0 r1 `9 Q3 a, }" f
  752.         strFullName="checkversion.txt";# P, k) g( O; S* C3 f# n
  753.         dwProgramState=AP_CONNECT;- c% R$ U# ]+ T5 x5 Z; C
  754.       }
    5 J7 W# X# N1 J
  755.       dwStartUpSteps=4;
    ; X, g. h# J8 j9 w# E
  756.       break;
    " P9 L) O" }  ?/ u' v
  757.     case 4:( l' O* m- b; ?5 C+ d2 @
  758.       {
    & S( u# i0 A( T6 h$ B
  759.         FILE *fp;) R) I2 i+ o- u
  760.         char szString1[128];
    # ~' ]' f9 ~1 T7 Z
  761.         char szString2[128];4 M- A  X0 |, ?
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    " b( }' Y" M' o- n; {7 F: a  w. e
  763.         if(fp)" b% Z$ W% P4 o& u! K/ L5 H
  764.         {
    : e; ]. [) f7 ^" b& v& B
  765.           fscanf(fp,"%s",szString1);7 W, A; ]  n" U' h+ [6 g5 n
  766.           fclose(fp);
    8 m' M( G6 Q# R; `! y
  767.           fCheckVersion=atof(szString1);
    7 M! n9 R: o+ N9 F. P
  768.           fp=fopen(".\\checkversion.dat","r");; ~* ~" q; g* F# l' U! r
  769.           if(fp)+ b3 m7 s) }9 e$ b' t* v
  770.           {
    , d8 `( u4 y: T
  771.             fscanf(fp,"%s",szString2);. F1 `& ]: J0 A& U
  772.             fclose(fp);* v$ H1 `; C) Y: F; z# p
  773.             if(atof(szString1)!=atof(szString2))
    8 H* K6 r- J3 k+ C8 U
  774.             {
    ' G. `& u+ J. {+ W
  775.               if(!Dn.Connected())8 q5 w# e& |: u+ u, p$ s% W
  776.               {: S  x& a- U( f* ~" `  O
  777.                 bFirstUpdate=TRUE;
    4 ~. K, a' Y" k( M
  778.                 dwTotalFiles=1;6 ^* X4 S2 W) c; @. O
  779.                 dwDownLoaded=0;
    ! u' K& f9 `" M, n& @; A5 b4 u5 E2 }
  780.                 bSilentStep=FALSE;0 ]2 \0 H. L: V0 O" H0 @
  781.                 bCompressed=TRUE;' i* q7 E5 M: [- u3 b0 T- h
  782.                 strExtLocal=".\\DownLoad\";
    $ J" h: p- Q3 q' l- a3 V2 v6 e
  783.                 strFullName="update.txt";2 R8 n" Q+ f$ w' o
  784.                 dwProgramState=AP_CONNECT;( \6 ?  I' G1 \; W0 T& I
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ c8 c6 U. G* K& M0 z* ^7 N% w
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 l  d% u* x4 b1 {' B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 k8 F1 j8 q' b3 e! p& ?

  788. " m& z6 J1 v5 E
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 l( _( p% l% D
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    , o  u9 A" n6 g; q1 [
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    " ~- N7 [3 L; D. C$ K
  792.                 {
    7 }5 g4 l$ B  l# h' v
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");: ^* j: K& h' i6 I9 ~+ [7 a) o+ H
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    : n: }3 Y9 K" d& K" \7 O8 R" F
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 t6 s/ B+ b8 O* V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- y! \: `' c& h' I* r

  797. 2 U. H1 g9 b2 b) Y2 `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");+ \3 A4 o% C+ {0 f( o2 \7 X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      m  k' j, K9 z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");( p1 I0 I/ K+ i6 r
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" Z4 H, U6 a' U5 i$ ]
  802.                 }. M0 g2 J: I4 u4 o" u/ H
  803.                 dwStartUpSteps=5;
    1 _: k& D( @: M" I- c* F$ g- ~
  804.               }+ w, B, S5 f  E
  805.             }
    $ e% [% Q8 [8 w: x! g
  806.             else
    . i& C7 T- O0 s8 N, e7 T
  807.             {
    8 M2 G7 _- A- x4 p5 x
  808.               unlink(".\\DownLoad\\checkversion.txt");" \4 I/ N; z$ P7 [& r- W0 i# o0 L
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");, j$ B3 n$ @6 V8 o
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");1 @  r( x5 O, R9 A' u
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ ]& t8 R: B# U8 @
  812. # E, j2 t% `7 F5 w6 U
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 C# `' n; e/ x! [6 ?; S) p! r
  814.               dwStartUpSteps=99;0 E2 }# ~3 Q+ b% ]7 o: a/ _7 T
  815.               bFinishUpdated=TRUE;1 a1 W; S* j, V/ [+ ^7 M
  816.               bCanUpdate=TRUE;
    $ P! n" q1 C4 m  C
  817.             }* s$ `6 x+ t" b* z) P( ~% j
  818.           }1 P! ^8 {' Q8 W+ b, \
  819.           else' n0 b% n6 T: H. B
  820.           {. ]( A' {8 H+ z3 Q5 ]9 d
  821.             if(!Dn.Connected())
    ! A/ C8 a' [/ j% L9 h9 X" q: d& z  o
  822.             {
    & X5 k( q2 R& W6 x! s: d8 J
  823.               bFirstUpdate=TRUE;& k' E% X/ S; q! Q0 v5 C3 T6 r
  824.               dwTotalFiles=1;
      C8 a" M% W) E: S4 u) j2 S, r
  825.               dwDownLoaded=0;
    1 j/ u7 d# t) h( Y7 n9 f: n  l
  826.               bSilentStep=FALSE;
    9 n# E4 k6 x2 k+ f
  827.               bCompressed=TRUE;! _0 e9 k1 D# b0 _/ a: U# p
  828.               strExtLocal=".\\DownLoad\";
    8 }9 D/ {& B' U# v$ p. t
  829.               strFullName="update.txt";
    6 ^4 p, d- |: M7 e6 Q5 t" F
  830.               dwProgramState=AP_CONNECT;" d/ ~& i4 A: K1 s4 Z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ' k) W, {, x8 N1 R5 E
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  N% l2 P$ Q: _7 Y0 ]
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 T' y' D7 H! u  z8 c, a- j
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 \* I" H3 Y3 p6 k& l
  835.               unlink(".\\DownLoad\\checkversion.txt");
    % X6 K& ]( Z3 g% N) t* v' I" E
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)4 d3 U7 s5 W& Y0 X
  837.               {8 ^' y  Z4 r! K4 B1 M
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");; Q. |- Q* N  Z1 r
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    , E6 I7 q' n! U: j8 \- X" t
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    6 L  T5 F7 B. R$ G6 _
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& f0 _& U! E8 O# Q4 H
  842.                
    7 O) g0 N5 N; o* f+ h2 \& r3 r
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- K2 B  y" V2 \2 a+ q5 f6 b  b. _
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * x! n4 c8 ?6 e8 V7 C5 X% n
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 I$ x1 S3 R  E+ A3 O, r; F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 A1 F- E2 l2 b1 w8 S( V
  847.               }
    # y9 `! I+ y- [' D5 O1 l
  848.               dwStartUpSteps=5;' e7 n( T+ f% N: V- N
  849.             }5 ^0 h% f3 ?& ~
  850.           }
    : t/ n2 o! ?+ @# S3 Q" P
  851.         }
    : g3 J0 L( Y3 v
  852.         else
    2 R1 C$ l$ a" M4 n
  853.         {4 h5 t5 r  A- N
  854.           dwStartUpSteps=3;# w9 a: V1 N6 v; H3 G/ F* q
  855.         }* I+ w1 F' U  o# u$ N' ~
  856.       }+ ^' S& V5 r* ^- V8 y
  857.       break;3 d! x) t8 `/ K3 K5 h4 I! @* M
  858.     case 5:
    . n' {' h2 D+ a+ [- Q
  859.       {
    4 R% b. t2 z+ E5 ~1 ?" a
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)" _" H; w6 f1 ~" h$ Q  J. t/ O
  861.         {
    & l: e6 N  p3 N
  862.           int opt_overwrite=1;
    5 {* ^) f) l! q9 {
  863.           int opt_do_extract_withoutpath=0;& D. M+ ^- ^% `8 b- c
  864.           unzFile uf=NULL;6 B" j" `  G) a2 E5 w6 u- c

  865. ) a, Q1 V/ X% A
  866.           uf=unzOpen("Wsa.zip");
      X. h9 h7 m+ c7 H, T0 R" y  N
  867.           if(uf)5 Y* w5 D3 W2 M6 ^
  868.           {* A$ n8 V- l: R+ o0 d: M2 e. q
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    + f2 K, @6 e( k
  870.             unzClose(uf);- ~3 X; ^6 l- S! ]% s
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");% t0 W' w) T! Z, L1 X
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");1 i0 L3 B9 }1 Z* _
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");! C) f  g7 }* j- ~% W
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 ?1 M$ {$ ~1 K* {( J% \
  875.           }
    % A# W8 i" W) M
  876.           DeleteFile("Wsa.zip" );  f6 M1 U6 F$ q: ]
  877.         }
    . s8 ~9 |" O; A
  878. " a6 Y, z" Y3 B# |
  879.         if(CheckLocalVersion())9 x) `6 {: }) S7 E3 ]
  880.         {! K$ v& k* z8 s
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    8 U" q( N$ S0 b3 i
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    : x/ z* {8 {& [3 q) d0 G
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");2 i* N0 C" Z8 ^, ?& s" }, f
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, n  ^4 s5 J0 \" f' J5 e6 y. n# X
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);9 z, o1 E. W9 u) R7 \9 [
  886.           dwStartUpSteps=99;
    * V" h7 ^9 @# t) F2 f1 ]
  887.         }- R) ~% Q; a! E1 T" b7 S" U8 I
  888.         else
    ' s5 g$ A! O2 y3 |( k
  889.         {- o; e* m9 v! P
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  [' Q, B" J$ t
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' _4 b- s3 e4 k' C2 K
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    , `: @3 c: R* N2 Z1 O. i0 t: k2 e

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

) R2 T: z1 a7 m8 p3 f; j

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-27 06:56

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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