找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
4 q8 U) V9 c- d5 U& b7 Y
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ) b! l  D: }4 T- |! }9 ^3 ~; g! \
  2. //
    % Y3 }5 X' r9 @9 M% |
  3. 9 P2 B6 A3 H1 i- T+ i2 J+ c
  4. #include "stdafx.h"
    ' a! h2 t! h4 Z0 S1 n2 V
  5. " X5 o3 U3 V' O8 y
  6. //#define UNICODE
    6 q3 I2 @8 D2 @3 v: p' G4 q
  7. //#include <gdiplus.h>* `2 k3 g$ J: ^5 H# C6 G
  8. //using namespace Gdiplus;% y+ P5 ?. h$ o$ b$ x: r& F4 c
  9. 1 \  N" I- ^- w" Q' i; r8 y9 C9 F9 q  c
  10. #include "RevApp.h"
    9 U) o! G. z) ^  h2 m$ G* `! f* g
  11. #include "RevAppDlg.h", r- D" V1 m3 P, a. ~: |! @
  12. ! c& C( p! c8 S' i3 [
  13. #pragma warning(disable:4786)
    - j  k+ i" u3 H! K
  14. #include <map>. Y: F3 K( a0 `* C: x7 e7 N
  15. #include <list>
    # Y$ v0 [' w3 ]  c8 E+ r
  16. #include <direct.h>
    % |  K  q7 X7 B2 r  r2 c: o* v

  17. 5 Q2 H: u4 i2 z/ E2 q
  18. #ifdef _DEBUG
    : `* T. d- w' z1 F& \3 f, p* g
  19. #define new DEBUG_NEW
    * |1 |) w+ n4 C
  20. #undef THIS_FILE% n  u, P4 w0 ^& P7 m. B
  21. static char THIS_FILE[] = __FILE__;9 E# D$ P' p" D! c+ j
  22. #endif
    0 a5 H7 k, N8 ~6 }) Z7 l
  23. #include "SkinResDef.h". t7 Z! K5 a, G7 l( X! _) a1 g
  24. #include "ChangeBG.h"
    ) @! A6 H+ u4 t  O7 m# Q: j* u
  25. #include "AFXINET.H"
    / u9 v1 ~$ m5 I9 _+ m+ Q4 a

  26.   N  ^) o- Y. g" h. j( x8 [
  27. #define TRADITIONAL_CHINESE 02 [" ?' J' G; K( g" j1 O
  28. #define SIMPLIFY_CHINESE 1
    / M" e7 E/ L0 F- f6 D. e' A
  29. #define ENGLISH 2
    5 z! F$ u  Q% w8 R+ w* J* f7 P% P
  30. int m_iLanguage = ENGLISH;1 a# m* y2 U* U0 x9 v; g
  31. /////////////////////////////////////////////////////////////////////////////( t5 D. i) b0 v5 y2 ~
  32. // CRevAppApp
    4 @; V0 J' X9 m( e( S" @
  33. ' F  s- P. t) x- }5 g! P
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& w  v2 w- c4 s, Q/ v
  35.         //{{AFX_MSG_MAP(CRevAppApp)' s! l0 G" V  {& [3 K2 j  @7 D, d! u; `
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ( @7 Z/ u! G7 l* e8 @: x; A2 ^
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!9 O8 L) m, P" B7 l- {  S4 |
  38.         //}}AFX_MSG
    4 l) S# _( N# `! Q6 x
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)- Y4 Z) h9 d- P3 g
  40. END_MESSAGE_MAP()8 n4 X, Z& M) P" Y
  41. 3 `8 x2 G+ a% \5 b
  42. /////////////////////////////////////////////////////////////////////////////
    . C7 h2 @) ]9 k. v* j
  43. // CRevAppApp construction
    * B9 c2 B6 c) ^4 U- C! F; P
  44. 1 l3 Q$ o! l0 v' C: }8 A
  45. CRevAppApp::CRevAppApp()8 c% t3 }, m, ?: ?
  46. {; r; s1 b* o! s
  47.         // TODO: add construction code here,
    0 v, g5 x# c0 ?, ~
  48.         // Place all significant initialization in InitInstance
    3 p  y  T% W/ P4 ?7 Z0 _
  49.   bDisplayIsBig5=FALSE;
    ! c& P9 U3 y/ M% `* l# z0 J( K6 p
  50.   bRestartUpdater=FALSE;% q) j/ U! |6 h% }9 G: w
  51.   bFinishUpdated=FALSE;3 r3 u( O, p1 O* S& C1 o
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;$ v" b7 m+ Q9 z$ o8 J. x2 E
  53.   InitChangeDataBig52GBKS();; x2 `# Z! v1 M
  54.   InitChangeDataGBKS2Big5();) k7 `+ m0 e3 c6 p! d! k! ^9 E  G
  55.         //
    $ g& M5 s3 n5 w& K0 T
  56.         bClickRunExe = FALSE;. l6 T* R4 C2 A# j
  57.         //
    8 z* `. \/ d0 r, Y- I3 b
  58. }
    3 i  {8 A/ @0 u( d0 e5 w  }& _$ F
  59. + Q  M9 |; B# Q1 m6 k
  60. CRevAppApp::~CRevAppApp()
    0 D2 ], C# m+ T3 Y- h% `
  61. {+ d: i6 J4 u9 {# f: A
  62.         // TODO: add construction code here,
    , |5 o& E! n& y
  63.         // Place all significant initialization in InitInstance- Y$ A$ d) O  E( S; `4 h
  64.   EndChangeData();
    6 V! F) e$ J: g5 U! ^. T
  65. }" q7 E* a) T. b1 ]0 [+ ?& f( `; f

  66. " y$ [* z6 l: o& t% m
  67. /////////////////////////////////////////////////////////////////////////////
    . W+ C7 ]% K( E- \, f5 T
  68. // The one and only CRevAppApp object
    , ~! _* ]! F0 ~7 b
  69. 8 [5 s& D; d6 W. H' y
  70. CRevAppApp theApp;
    1 M/ ^  y" y, b9 I$ G/ Q# \
  71. ! S( w" ^; H6 V9 {6 C: U9 ^5 H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ' g0 |" ]2 Z' w% c! S3 Z) a
  73. {
    # O. z* n3 k; V2 Q$ ?
  74.   int iEOF=0;
    $ L% E( B' ]2 R- S4 n$ N
  75.   char szTempName[MAX_PATH];1 Q: Y* W: W2 t7 w, x. b
  76.   *szFileName=0;& l% j6 |, M3 \* V
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( j  r$ N2 B7 c
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')- @$ \, l3 J& E  |; {) {- ^. c& @
  79.   {  n" T; R5 w% t/ T* |
  80.     strcpy(szFileName,&szTempName[1]);" M0 |5 s3 E! s' V; O
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)3 s. U. Q" o* d' Y
  82.     {1 l+ Z0 s+ V& r+ q5 g1 [+ Q! C- r
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & g6 Z; A8 W$ |  j# a. A" I' H
  84.       strcat(szFileName," ");" q3 K- @" Z: L
  85.       strcat(szFileName,szTempName);' J* C; m( e# `' Q1 U/ p) u
  86.     }
    / _$ o: s8 E4 O& n
  87.     if(strlen(szFileName)>=1)* e0 h0 |0 j# C' o/ O# V
  88.     {
    6 o) O& N1 F; U, @; I
  89.       szFileName[strlen(szFileName)-1]=0;
    2 _3 e1 D; s1 c( V
  90.     }" ^, Z1 \% P" O
  91.   }
    * _' C- O; T- v  J0 \9 P3 U, w
  92.   return szFileName;
    " E1 R& Q; O- ^/ s* z9 V1 M9 K/ r8 w% [
  93. }, _: ^* z1 E! l

  94. . o; `6 c4 i. Y0 a( [6 W
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    0 d5 [0 _/ F+ b' U1 U& a8 @; J
  96. {* E6 M& D" u- t( b9 @* D! I! h7 `+ n
  97.   FILE *fp;; r) W1 w6 O+ n' A
  98.   char *key=NULL;# c3 }8 F, o' C6 U. V% v8 o
  99.   char version[MAX_PATH];% g. @# w2 w1 ^6 o4 R/ |( |
  100.   LPUPDATEFILE file,olds;
    $ u7 V7 f# \1 H0 o; S
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 z; M  C+ p9 |
  102. ) S1 S9 N4 s# d. n0 p8 _
  103.   UpdateList.clear();
    . h( B# G- k, x* b
  104.   UpdateFile.clear();
    ; [! ]! R$ R# ?/ Z# [8 c  z+ {
  105.   if(GetFileAttributes(filename)==-1) return false;) I4 e2 k  S  O. t: z
  106.   if(!(fp=fopen(filename,"r"))) return false;# g+ S: G8 g$ s3 M' z( Q3 [) T
  107.   fscanf(fp,"%s",version);
    + @6 p: U2 z5 l+ U1 f8 Z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }4 m- H: y! z/ ^" r+ c7 S
  109.   while(fscanf(fp,"%s",version)!=EOF)
    : I; U, j9 ?1 h
  110.   {' ?$ G/ D$ d- K- w8 K
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# g- a7 b( P9 ]! Z
  112.     fscanf(fp,"%s",file->path);* X. {! Z) t) J; `: i) o7 a. u& C4 I
  113.     ReadFileNames(fp,file->file);2 s" o, g) R7 \6 A( d7 a1 L
  114.     strcpy(file->full,".");6 [, G, Z& E7 W1 l3 ^; I
  115.     strcat(file->full,file->path);
    . j: D: S; C- U
  116.     strcat(file->full,file->file);  {9 I: S  \# x) q( z* C
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    # C2 \6 P3 l; I5 u! _# G& ^  X; {
  118.     {. F- o2 i0 C! e, J- L2 V0 \
  119.       file->vers=(float)atof(version);
    $ I+ d' k" b/ j+ t
  120.       UpdateList.push_back(file->full);
    & l+ x$ l! K) y) q+ S% z' S
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; }' y2 ^( l" O1 O8 f- S- R
  122.     }& q7 |, r) ]$ v& Q
  123.     else: N( O0 \+ G* P6 }# u; z# c
  124.     {
    * M9 D) \4 a% j$ {/ u
  125.       olds=(*p).second;7 h/ N% c1 X& I
  126.       if(olds->vers<(float)atof(version))' z; P6 h8 s' B: W" f- z. D
  127.       {, d' h$ d8 @) a: `5 p/ K
  128.         olds->vers=(float)atof(version);
    / }+ t9 a3 X( U, s. G
  129.       }
    3 Z0 j+ t3 V6 i. J& U) c: k# |$ M
  130.       free(file);
    6 B0 h( u# y* y
  131.     }
    / r2 x* @% ?  ]7 n. x7 ^9 a
  132.   }" n0 Z- x: j8 F5 u0 K' i# d
  133.   fclose(fp);( Q8 q- b* V3 e7 I9 z
  134.   return true;
    ) o6 s+ J( Z+ [1 Z
  135. }# |$ _; d( ^" g" [. ]+ `

  136. " d: L& E* T* m# @$ Y7 I" K* x
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)" P1 A/ N7 j0 k, a9 X3 [3 `
  138. {8 v" c$ d* u1 I2 s/ Y, C# W
  139.   TCHAR  szFull[MAX_PATH];& J7 M% e+ W; j; h
  140.   TCHAR *token,*inter;6 ~- G8 s9 O9 V, w
  141.   *szPath=0;
    - j  p& ?' f' x8 b
  142.   strcpy(szFull,szFullPath);
    ; g% {9 r- t# t3 s$ N8 Y
  143.   token=strtok(szFull,"\\/");
    6 b1 I, b+ r% Q1 ?" R# {
  144.   inter=token;
    # g' ~' z( [# m' k
  145.   while(token=strtok(NULL,"\\/"))
    : A& ?+ t- A. \8 [+ L, ]& p9 P; Y" u
  146.   {1 R' j5 p  l  M4 I4 D
  147.     strcat(szPath,inter);
    - b' ?* y; |4 v3 @, _+ b- i
  148.     strcat(szPath,"\");# `8 ?  r$ m7 p( E: t% S
  149.     inter=token;) i2 U5 o' Z) P6 r- |7 O
  150.   }
    ) Y' o1 }, F  H
  151.   return strlen(szPath);" q/ |# }6 M9 \% ~2 @/ B
  152. }6 k$ e! a" V2 e2 s

  153.   m" W( X' `5 X" o# u
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); _6 l( l* I8 w9 y. g) W: l: q
  155. {
    6 K7 _" u! u, [: X9 X
  156.   DWORD attrib=GetFileAttributes(Target);
    - ~& _' [+ k# G
  157.   if(attrib!=-1)
    $ x' p6 J- y8 f6 l3 b
  158.   {6 P. _. O6 W! n
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    : T2 s4 m: s. P  y6 m7 P3 C
  160.     {
    8 V  a, N/ T& q+ m+ O8 c* b
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    0 b* \% o4 l: i8 E/ z+ z
  162.       SetFileAttributes(Target,attrib);' `, B8 V& {4 o% x* C% A/ C. u
  163.     }
    6 l- \, K1 X" w; F
  164.   }; y& G7 u" O6 F8 ~" l; A* N2 A( E
  165.   CopyFile(Source,Target,Erase);
    7 c& r: `9 `0 K8 ]! A$ y+ y
  166. }3 D% }2 }1 L# i. u  Y0 D/ B/ X
  167. . }) C8 Q; A. s/ v0 d" w8 B3 y0 W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ _2 u1 z' Q* G( s& s8 A4 R" W
  169. {0 X6 J. `9 }& L. |
  170.      FILE *fp;: u+ L# Q# [' w( E+ G  b
  171.      char  szBuffer[8192];
    1 M# I, c. q3 ?
  172.   va_list  argptr;
    5 ^5 T. _1 C! r$ I; @1 h

  173. . J% n; {0 m5 o, _) P
  174.         va_start(argptr,message);# g  b3 @! j- O4 s% V! t
  175.         vsprintf(szBuffer,message,argptr);% T0 h8 M% g* ?0 h, [3 |: l3 N
  176.         va_end(argptr);
    / C# [; q- t: [0 [; i2 H
  177.   fp=fopen(FileName,"a");
    * A+ v9 w: T, r( y% i0 Q. X
  178.   if(fp)4 E6 ^- b) l1 Z4 d
  179.   {" f+ b0 D9 a$ U6 w3 u, p+ O
  180.     fprintf(fp,szBuffer);
    6 g8 s/ s* R: L% \0 R, b
  181.     fclose(fp);' ]1 e; ^8 }! u2 v: m9 a
  182.           _flushall();
    ( J- e" r" E5 g' t
  183.   }
    3 M; h8 y8 D# M% {" S
  184. }; @8 s: b2 A5 K8 L
  185.   e, x, l; i% F/ d( J& p3 s* f) }
  186. BOOL CRevAppApp::Fclearf(char *FileName)$ W! B0 B* \. U) b  z, D: b
  187. {
    ! F' J' i. x& {
  188.      FILE *fp;
    9 m  F$ K3 ]+ Y
  189.     DWORD  attrib;9 V1 a- v) `: Y
  190.   attrib=GetFileAttributes(FileName);
      V  G3 A, g! f5 p3 q
  191.   if(attrib!=-1)
    . v, U( p/ H0 W* S7 A. t" a
  192.   {. l6 ~" v4 Z3 c- H
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);5 K$ a+ y( P7 ]/ J# f; F8 V
  194.     if(!SetFileAttributes(FileName,attrib))
    ' X/ S/ U" |# _4 q4 E  ^
  195.     {
    3 o2 k9 S+ a) H$ N* |
  196.       return FALSE;, o& r$ E% I8 \
  197.     }
    / V5 ^# Y' p; h3 [7 E5 ^
  198.   }
    5 [, t: f  V2 c5 E3 J0 `" W
  199.   fp=fopen(FileName,"wb");/ z9 p  Y6 Q* I) W4 E2 j1 O* {
  200.   if(fp)1 B* r0 p' _5 L. i" L
  201.   {, x6 M: X& N: ?+ h
  202.     fclose(fp);
    7 E9 i# U, u0 B7 S) v: ~
  203.   }
    ( o+ x: M' K0 x/ Z/ q# H8 J; f* e
  204.   return TRUE;0 W+ ~2 G" _3 j
  205. }% C5 I5 v7 X' a0 L

  206. ' S2 L: K. K( ?' \! l
  207. BOOL CRevAppApp::UpdateLocalVersion(void)4 v9 V# c' {1 m
  208. {0 K: g6 f) k) g. D7 t
  209.   char filename[MAX_PATH];$ E3 x: R- W5 a/ O# u+ W
  210.   LPUPDATEFILE file,olds;
    , W, f& `' \, ^$ N
  211.   std::map<int,CString>::iterator i;( E/ }3 F" S( K. [- l' ?
  212.   std::map<CString,LPUPDATEFILE>::iterator p;& A9 g4 L& j, k; B
  213.   std::list<CString>::iterator l;) ]- D9 @+ k: \/ v

  214. " A/ @: j% C4 a: k' ^+ w
  215.   if(bFirstUpdate)0 @) u# C$ e0 `; D: b3 t
  216.   {
    4 h9 v/ o/ x0 A$ j2 N: u$ M6 T
  217.     dwCurrFile=0;
    8 _; {: x4 G3 j& ?/ Z
  218.     bFirstUpdate=FALSE;4 d5 ]( b; E6 L( K1 X9 ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " R  s- `8 K* ?! D0 R! z! o
  220.     {5 J: t& K9 Q9 \1 R1 \% g; c
  221.       dwTotalFiles=UpdateLocal.size();
    " F; i4 i$ Y1 V+ F7 x  ?! k9 B
  222.       dwDownLoaded=0;1 [% k! J6 n6 f3 Q4 L/ a% P
  223.       bSilentStep=FALSE;7 A: m6 w/ ]3 m( A. }; I1 c8 T
  224.       bCompressed=TRUE;
    / {1 y% n5 y( W( J4 G, P
  225.       strExtLocal.Empty();
    # K# [9 L% O! b+ d; h( V
  226.       strFullName=(*i).second;
    , S" l+ w) a0 t9 k. C
  227.       dwProgramState=AP_CONNECT;
    # ?) X' A4 g% h' u' B" ?/ Y
  228.       return TRUE;  e9 L) W5 x: W1 x, b& ]8 W3 `
  229.     }
    - ~/ {+ x: v# s4 b+ {6 p
  230.   }+ i. b. A, Z: A) j
  231.   else if(bRestartUpdater==FALSE)
    ' N( u0 ^3 u* G& {& |. y
  232.   {
    ; J1 V. x" p: `
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- n4 {+ Z: b7 y8 L( c
  234.     {
    8 K2 S8 e4 P/ n: d! f- a1 _
  235.       file=(*p).second;
    / Z4 m, B/ o( U0 x
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    & r7 n, M( Q4 c! H0 d+ Q
  237.       {1 P) X, B& x! c
  238.         olds=(*p).second;
    % `& D; d' y8 U6 n" ^& N7 ~
  239.         olds->vers=file->vers;
    0 Q& F% A, D/ ~$ i6 x3 c
  240.       }. M2 Q0 k' {* V, C
  241.       else
      S& E" q+ Y& S& K+ C; b/ B- d
  242.       {7 h- i- M9 r# G4 l* n/ a6 Z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! X% @; k" K9 A
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    1 F. a" ?+ h& G7 r( D# K4 P
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    # U$ h4 k2 w0 x* ~( p
  246.       }7 _! X* O# A, S9 q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    * F4 S$ H/ z, y0 z
  248.       sprintf(filename,"(%s)",file->file);9 \1 x( C8 y# _4 C& U4 p: ~9 V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  }( s5 S/ S- l# f3 i3 p: ~
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    0 F# _/ o- j$ @7 N' I: x9 [6 ^0 M
  251.     }
    $ z0 P2 @' D3 g' x# k
  252.     dwCurrFile++;
    & z! X* m# J( o
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) M* O& s- H# U/ A
  254.     {! w/ g# Y. R  h8 e( y
  255.       bSilentStep=FALSE;
    3 s! ]4 [! K( o4 X5 J* ~: m5 E$ ^5 H
  256.       bCompressed=TRUE;6 o; L5 y! f5 T) [
  257.       strExtLocal.Empty();
    2 {- K- o' n) ]9 P; y6 F
  258.       strFullName=(*i).second;; _# c4 S( Z2 Q9 N. T
  259.       dwProgramState=AP_CONNECT;4 E/ W. ]# h7 p+ p8 T  Z) f" n- }
  260.       return TRUE;1 d. U& }- F8 }, @
  261.     }
    / Y& U' @5 L, }( V$ F/ c1 t
  262.     if(!bRestartUpdater)
      l1 |1 q# i  ?* {# C- R2 r
  263.     {
    % S1 w# \' G! [  b, k/ H) S
  264.       int iCurrSize,iFileSize;5 N9 a: M# W  _
  265.       iCurrSize=0;. [& r' |0 d8 E5 w3 O
  266.       iFileSize=UpdateList2.size();# }/ ~8 x& K* U$ T8 T' O9 i/ I
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");2 }0 `3 S' u8 q; z2 l/ ^+ D% T8 n
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");* O, C8 f0 t0 e1 ~" n1 S
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");% S9 T5 `8 B6 y  r
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * S1 i* S0 {7 z' F3 R1 F
  271.       Fclearf(".\\update.dat");$ o- |+ n9 M7 K# J/ o
  272.       Fprintf(".\\update.dat","Bloodyf\n");+ ?% U% R* W+ u9 s. E! i
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)8 r; ?0 I% Y7 O3 K2 v+ v% x! m% L
  274.       {
    / i/ }0 M* c, U; Y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()): L, J9 q% o) Z, Q/ G4 v) m
  276.         {
    " _6 `* V+ T- Z$ E' b" C
  277.           file=(*p).second;8 Z4 o4 q6 |) p$ W( M$ `
  278.           sprintf(filename,"(%s)",file->file);8 q; p( Y, `4 d. U' _
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : y! h9 b: ~+ R) y! H
  280.           iCurrSize++;
    - y# Y8 v8 t1 X4 Q9 u1 R% f0 p4 Z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));' G3 f) Y/ D, _! e
  282.         }
    2 ~* C4 i+ o7 L
  283.       }' P0 I6 c2 m8 G1 A! Y" @% z3 n- _/ G
  284.       unlink(".\\update.txt");
    5 I- x8 A: H5 J( b# [
  285.       unlink(".\\update.tmp");4 v) |& p  y/ h. d; c8 r
  286.       Fclearf(".\\checkversion.dat");
      d/ Q! a1 i. B" R5 L0 W+ ?, k
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    7 L- L0 W9 F6 Y' \4 r$ j, X/ V; R
  288.       if(UpdateLocal.size())
    ( X4 ?3 Q1 j; I/ J2 d) s
  289.       {. U* ?( E, _& E3 _
  290.         UpdateLocal.clear();
      F1 Y" c1 A) A. s7 Q9 S. f$ T
  291.       }4 z: p; P% K1 c7 }  E- T  `
  292.       if(UpdateFile3.size())& Y9 |0 A, A, E! A
  293.       {
      m: W* A( m3 E7 n' J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 o, X# }3 d0 q$ ?& z7 \
  295.         {
    5 I9 S5 Y6 ~$ }2 g  V1 Q
  296.           file=(*p).second;
    8 f0 q1 f5 N8 g; }) U
  297.           free(file);
    : R5 V1 d8 o6 B/ `0 i. b6 G  ]9 s
  298.         }
    % f5 W" \6 a- Z: U/ w6 @; K! Z
  299.         UpdateFile3.clear();: K5 T' k  P% D% J
  300.         UpdateList3.clear();
    ( D1 D7 k  f( v# ~. g  J, n% p9 T
  301.       }6 s7 C& z2 j0 X2 M. L; X
  302.       if(UpdateFile2.size())' p' S; I$ U$ ^$ k: R1 ]
  303.       {, ^0 l) x' \; J4 t7 W4 h
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % q5 l9 h4 A" x
  305.         {8 e$ ^/ \, b9 D
  306.           file=(*p).second;
    8 d) Q! c1 D* V" }! m" S
  307.           free(file);
    % K/ w4 ^# Y: n9 S( F9 `3 a
  308.         }3 c/ j5 |( g  q9 t4 O! u3 G" Q( a
  309.         UpdateFile2.clear();
    5 Q& F0 k/ L1 a8 |' L" S
  310.         UpdateList2.clear();5 w" q4 d9 g/ e
  311.       }
    1 _' U; K- U; Q# w  H- V2 Q4 @
  312.       if(UpdateFile1.size())
    ' P: O0 S; w; ]1 L. N. N7 K
  313.       {& u# L- f5 H" t+ B8 T) Z5 v: |
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ! y/ y4 \4 ~% \! N8 C5 |9 a
  315.         {
    9 X5 Z5 g1 B% C7 i, c3 U3 }) A! h
  316.           file=(*p).second;
    1 p6 |1 j, a- G# m( Q5 e+ Q
  317.           free(file);# M& Y" K! M4 ^4 m8 @
  318.         }
    ( g6 k- h* [5 z  }& s9 [6 V+ v- b
  319.         UpdateFile1.clear();$ X' ^/ f: K, F& d. [  N  H
  320.         UpdateList1.clear();4 N& g1 Y% v; N
  321.       }
    7 L( F7 F: _) H$ N2 ^
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    1 q) Z) ?/ F7 _: w
  323.     }
    : c1 d* I+ W; F9 F& _2 O
  324.   }8 E4 J/ K$ x- ~
  325.   return FALSE;+ d/ a- z& ?" u, u( X
  326. }
    $ X: s3 y# E7 n& s$ K: B6 O# o* A1 i

  327. 8 v( x7 {- ?! Y( F
  328. void CRevAppApp::ClearAll(void)
    ) g4 i9 i  y# z- W' |
  329. {. H# F3 z9 b8 J0 E
  330.   LPUPDATEFILE file;9 z- k/ X- M. p* t" j( p. X' V1 c
  331.   std::map<CString,LPUPDATEFILE>::iterator p;7 T% f* n* b( a) {5 v2 {

  332. 6 t3 K6 z3 d7 g( \' F" l. _; Y3 j0 S
  333.   if(UpdateLocal.size())& @* H0 A; N' P; t! W1 U
  334.   {7 W; J$ U. g4 K+ }4 u
  335.     UpdateLocal.clear();
    # B1 y. O, w% e( \! q
  336.   }
    9 s" K) k: M% q9 j& D! R
  337.   if(UpdateFile3.size())  S- l/ s% h( X* T
  338.   {7 L  y; r6 p, B( O
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    $ N7 f2 V% W, Y4 E
  340.     {
    ; J% x8 o& p1 E' I8 {$ c
  341.       file=(*p).second;
    8 o) e2 N, S1 l
  342.       free(file);
    3 K: \* {) b5 {+ k; G
  343.     }
    5 e" r& E% a, o, _$ f6 X
  344.     UpdateFile3.clear();
    % s( q8 ]# o) q" t, a
  345.     UpdateList3.clear();
    $ j8 ^$ j0 B  B9 _% m3 H6 Q3 i2 e
  346.   }
    " v$ ]5 v6 x  k" [+ k7 D) m
  347.   if(UpdateFile2.size())+ F- o7 G3 {: z. F
  348.   {
      g) O+ f. t) z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). y* N; [; `+ T; r& [: v8 v
  350.     {
    + K0 d! _9 [/ y7 G* j. _
  351.       file=(*p).second;
    . ?% F! K8 ~4 f
  352.       free(file);
    1 M4 V9 `- ^$ u' ^; a) y
  353.     }
    & J' O: V, _- H4 @
  354.     UpdateFile2.clear();
    * V; U: e) R$ Y2 Q  ~7 x
  355.     UpdateList2.clear();
    . {: f2 x" }# b; B% e
  356.   }
    8 _( f( l+ H. A# C$ n
  357.   if(UpdateFile1.size())0 H$ V) Q3 j# Z9 j6 Q
  358.   {8 S. b/ i* p% g5 W
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): Y! ^* m- d. |1 @8 w
  360.     {
    1 L2 E7 |# L% O: n; l
  361.       file=(*p).second;! a1 m$ _; ?) C. D: e: ?$ p0 @
  362.       free(file);5 D. w+ `) l4 {& [' ]: y
  363.     }- R  s6 l  I$ q: O7 Z. q  ?% A
  364.     UpdateFile1.clear();+ J9 H, u/ s) a1 l7 d4 r
  365.     UpdateList1.clear();
    $ _6 A* z- S! v; N8 b  s; G6 K
  366.   }/ d5 `1 Q, K8 }% G0 R! ?# n; w4 V- Y
  367. }  
    & E# J& D" W  y* ?# z  r1 A
  368.   
    7 x" }2 r3 |3 K5 @
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    0 ^  q6 u# B* }, B+ t5 M
  370. {
    / U/ V2 y3 s2 K3 N' @. y
  371.   int c;9 n# q8 M& I0 G+ {" X" u
  372.   LPUPDATEFILE file1,file2;
    + d7 f% ~6 f) {
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ( T& Y0 }9 \/ A* V  r0 O
  374.   std::list<CString>::iterator l;8 Z' Z/ K# ~$ q9 q

  375. . G$ W* C7 ~9 F4 c
  376.   UpdateLocal.clear();
    4 S/ v! E6 Y+ f. v
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 @( Q2 ^+ Q" ~3 E7 s) Z3 f. L
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);. |& p4 }5 e- k8 H' S3 @5 j
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    , ?: G) C: r  A' \7 Q
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);8 Q- A# X- C0 o' q& t
  381.   if(UpdateFile3.size())/ c# k; q1 a7 M* u* `8 v
  382.   {
    ' K" P# I- a2 Q5 z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 U, c/ A* j1 L/ G) z3 y' u
  384.     {: w1 o2 ^7 Z4 z# y
  385.       file2=(LPUPDATEFILE)(*i).second;6 m' [, b6 ]/ l; c# W. [
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). `, F) d: x* v/ n1 k
  387.       {
    1 q3 h* u1 U8 z
  388.         file1=(LPUPDATEFILE)(*p).second;
    ) I2 r/ k% T, g- J" f
  389.         file1->vers=file2->vers;' @0 j, H0 \/ t6 Q
  390.       }9 x$ q. y7 e& Y* R5 N; P& ?* ~
  391.       else% e+ _# r0 g  g. B
  392.       {. T; O" c4 O# @  S: o3 d6 [
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 G+ _$ f! }) f1 g  U' d
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));9 |" y& C' ?6 e, P, `# I1 z
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));+ s+ A4 D  ~) z) d
  396.       }
    1 `8 S! T( s; I3 l9 h4 D
  397.     }5 U1 g' _6 H9 F: r
  398.   }
    8 F9 i' Q; D' i
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)  M/ i$ U( `' z
  400.   {
    4 c$ x! L% i  w6 U- L0 W: W; ]
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ! w* [7 B3 \7 M  E- d
  402.     {
    $ O# |1 S" ?# C7 r) h
  403.       file2=(LPUPDATEFILE)(*i).second;
    " H" G6 b2 _& G" k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): A5 j* v! C' N/ G
  405.       {1 c/ e$ v9 o& C' M: f% v3 u: G1 \
  406.         file1=(LPUPDATEFILE)(*p).second;$ G$ z6 C. U. L1 t' B+ a* e. v
  407.         if(file1->vers!=file2->vers)2 }6 i- |5 T, ~8 h. W6 D$ q% ^; U
  408.         {$ \0 s( F/ D( C/ A+ W  s, A. D
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 D$ a5 M; q$ S: M4 [8 U
  410.           c++;
    & k% @2 @5 `1 o* N, i2 |
  411.         }
    ( ]) O$ ^5 N% ]" k# F) G2 ~
  412.       }8 q- m* i/ {5 J9 S$ s1 o7 f' y2 }$ r
  413.       else
    0 B6 r/ K( B4 \5 a/ M
  414.       {! o6 g8 X7 K6 v) G1 k0 Y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ m1 \# r/ W1 v; j
  416.         c++;5 \3 a3 h0 i0 Z
  417.       }
    4 N( M0 H0 f9 T, k: _
  418.     }
    7 W# n/ f) u: e/ k0 k3 N
  419.   }
    . s) N$ \2 E7 L1 b7 l) t7 i8 H: |
  420.   unlink(".\\DownLoad\\update.txt");7 y" O+ {! f, h8 Z% G9 t: `6 k
  421.   if(UpdateLocal.size()) return TRUE;& k8 u5 ~8 W% o; ?
  422.   else                   return FALSE;
    / b* [! H  L. v( L' [
  423. }
    , x. G0 N: X) s4 J# v) Z

  424. & p8 k! {& Y7 m+ Q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    5 K6 @# }; `  n  |9 W, ~
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
      C) Q) F9 x! G) \6 b( ~& u$ \

  427. ) e3 w4 F2 d$ t8 h
  428. & n+ V- m$ A3 k0 b" l
  429. $ z4 v  g! T4 Z; u; u
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ( |$ f4 W8 R2 l3 W; _' e
  431. {! G7 ]4 L8 S  ]1 ^6 I
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    # u. z9 k8 ?$ R3 O8 W% b: J
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 c% F0 E* P* e7 S) O! g
  434.   {2 g; |. ^5 g* O0 @
  435.     char szLanguage[50];4 t8 t+ D7 ^* B, ~6 G; Q2 ^2 y5 G
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 E# `8 |. K) t* ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & [5 V! i6 e, [9 y
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! Q3 o% q7 h; |% t0 \  X
  439.     else                                   m_iLanguage=ENGLISH;
    ; C2 g( e7 X1 H/ N; _' Y
  440.     char szRegister[100];: q3 t# ^5 t+ F. H; p/ q% ?
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    * p0 ?4 o2 X6 H2 W2 }4 @* P( g
  442.     strRegsName=szRegister;# r& V( {6 G' a4 ^, ^0 t
  443.     char szPatchURL[100];
    7 f; u7 q- L# O+ J; J
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 U0 _4 M* c9 ?! Z6 H+ e
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : j2 a: c0 l% F5 }
  446.   }6 _: k1 q% T* F# j' i
  447.   else  ^0 O7 L# s! d4 z
  448.   {
    1 G) {& `- z8 }$ b! [1 w! R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 j4 Z3 F4 z9 X" }5 X8 D' J; W8 ^1 `
  450.     strRegsName=DEFAULT_REG_URL;9 Q7 A) M1 E/ E
  451.   }
    ) {2 v9 A/ q+ d3 e/ W
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    % s) m( W$ j$ i  q$ w/ ^* A
  453.   {# w- I2 |% O5 _5 V; E8 o$ J
  454.     char szIP[50];4 @# W7 X/ |0 M7 `
  455.     char szDIR[300];2 @/ L9 Q3 ?# `; ~$ b8 ?  l
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))7 Q$ J4 r: D- o! R9 u* @2 [
  457.     {3 B/ H5 X# {% o8 ^+ `
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    7 o4 F/ ^9 ?$ e2 I2 I; P! z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");) f) X; T9 y$ C7 _
  460.       strHostName=szIP;
    " Z/ q) E3 M+ @# I1 x1 A
  461.       strHostPath.Format("/%s",szDIR);9 j9 W9 C1 i. \; f" y8 D# ~. Q
  462.     }( b( K+ O; Z3 O% E4 P
  463.     else. w+ k9 B( E0 |; k6 i
  464.     {
    $ c$ d2 c- }+ N# p
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 H7 k7 {! L- R, V% Y( f
  466.       {1 J& q; `& x! z
  467.         char szLanguage[50];# s$ K: j- C" }! Z7 P; Q1 z5 K# J
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    0 {1 V- T* K) ^- F- P8 \5 |. l' Q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  ]; [! A* f1 p$ O, @" u
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 s7 u/ j" I2 e) G$ K9 s4 N
  471.         else                                   m_iLanguage=ENGLISH;
    8 {/ s) y+ }; j& i/ [7 b# ?
  472.         char szRegister[100];
    , X2 U; i. y# M9 X8 y  p: I; n) ]
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 ]/ n/ N6 q! @9 w9 B
  474.         strRegsName=szRegister;
    + L1 @" p6 B$ t. F
  475.         char szPatchURL[100];: M% Y' ^( O9 P& A7 k  L1 q( ]2 L
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * t6 @7 Z$ w1 [. h: U3 z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 z8 w$ U; b0 L7 M
  478.       }
    0 h& ~5 S1 k# R$ r* B
  479.       else4 p0 B" ^- k+ l" h# T: s2 w7 F3 v6 o6 `3 ~
  480.       {
    . ~0 c' |" u" {+ V' z  i$ J# E3 C$ e
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. A3 o( l9 p$ j: }  S4 t) s' A
  482.         strRegsName=DEFAULT_REG_URL;
    3 u) t/ `$ M1 X% f" u% |" |
  483.       }
    # s" R( u5 s+ w( u9 ]8 d& L
  484.     }
      F8 L8 U4 C5 w% [# ^% P( A
  485.   }7 }& X2 B9 |$ ~# N, z( L
  486.   return true;1 w' ^! N# B+ e% d2 u4 p6 [
  487. }
    2 n( y( @* b- F5 X
  488. 9 Y# W# V. S" \4 _$ ~$ \9 ]9 v
  489. #include ".\ZLib\unzip.h"
    : U. C8 M1 [9 h) G5 F
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 n0 T: F' }3 O- K
  491. /////////////////////////////////////////////////////////////////////////////
    # n( P4 M& ]6 T6 N
  492. // CRevAppApp initialization
    : R2 L% c: n3 t7 Z; R3 A4 C- D
  493. 8 ^0 \2 L- Y9 s) l
  494. BOOL CRevAppApp::InitInstance()
    ; F! k9 A/ s4 M5 b) f
  495. {- m7 J  _7 a' d3 q0 E
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    * y5 N% r8 J: {( l3 C% K
  497. / g. Y7 }9 r$ I4 K; L5 ?
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);, t9 f" W! }/ K4 \
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)). }3 q" U- v5 p8 x  @7 g( H2 X
  500.   {
    8 T$ G0 r1 a' W' A6 F9 @
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");4 ], a6 d* \2 t0 @5 K
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    - M4 A4 v. A# F, [" m* U
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    & a. s0 W3 o( N* }4 T
  504.     {
    3 x8 O1 f* Z" N; c# ~
  505.       strcpy(szPath,szPathTarget);( y3 n" B5 F% ]% a0 Y: Q
  506.       SetCurrentDirectory(szPath);0 g+ r, F) Q5 ]# C0 E  W
  507.     }3 S# }3 X9 v2 z" Y# K" O% V
  508.   }
    ! A' a# a6 c0 \' n. c8 h3 E
  509. #ifdef _DEBUG5 v2 |- N% n# I8 ~* N
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 E( y& J: \+ ?8 q2 E  \
  511. #else! k' u! ~$ j8 k( a' i
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) E! u0 E4 A+ M8 u+ u( x. m
  513. #endif9 c# ]# l; \; Z' \; l
  514.   {0 N2 c) Z: M/ ^  J. S$ e
  515.     char tempFileName[MAX_PATH];# M& y/ d' r. I# p# M
  516.     strcpy(tempFileName,szPathSource);  Z6 s% G" j+ g" A& d
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 T# v7 k2 Z) B" x, s7 r4 Z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
      S$ [" ^# x) B3 e  P+ b+ P
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
      s& Q' O8 Z* t7 ~. [7 n, [3 u
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    1 H9 L# X, x2 w3 h8 S1 o/ d1 b
  521.     return TRUE;0 x) b6 N6 z  ?/ J4 x5 F
  522.   }5 s$ M. w: F9 C  P7 b0 w0 [
  523.   // Nuke 0118: Delete run.exe
    : A  a; O* g  D9 v9 |
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    % f% ^7 F* U7 S6 B7 `" ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    5 H5 g$ v: n# w; v  W
  526.   if(!ReadCfgFile("Config.ini"))
    % M2 f5 h3 Q. }
  527.   {
    / V2 E, t# l  z4 W
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    5 f+ y6 z- ?" y, v) K" x5 q
  529.     return TRUE;% \+ U% E; K- ^2 H/ H
  530.   }. u- e2 t$ n1 g" w$ F* i( s
  531.   HANDLE mutex;, \, Z8 J# Z% x2 S( c
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    : u+ t- C, [! v. ^: \# ]
  533.   {
    ' |; P- z$ s7 D, A) p
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    6 G( i& X9 S) Z& X0 v4 Z
  535.     {% H4 s6 g; Y# h' d1 Y; \
  536.       CloseHandle(mutex);6 A: ~. g/ d9 x+ f
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);$ r+ D: k. X0 Q" _6 k+ t
  538.       return TRUE;
    + Q5 q. S+ M! H/ T" E: ~
  539.     }
    3 f$ G( W: o% E: u# X8 H$ X
  540.   }  
    / c" K% e2 h9 w4 A
  541.   CloseHandle(mutex);
    ' j8 M5 a9 S. J% w( ]7 y* J

  542. , P: H5 F0 C0 b2 E, A
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);- F8 E- I) C$ V9 n! F! a

  544. ; E# {9 I: S0 R9 E' `7 j
  545.         AfxEnableControlContainer();
    ; }% O* y3 T% r; @0 [3 Q

  546. ; s! L( G' d5 E- ]3 p7 W. S# s
  547.   bCanUpdate=FALSE;
    4 Y* @' s+ o! l! H# _$ O
  548.   dwStartUpSteps=1;6 j& ?4 w, C2 G! v5 `! I8 j1 Y
  549.   dwProgramState=AP_NOTHING;+ W0 i7 c; N7 h" H8 _9 h4 y
  550. 6 {- r% F& ^! J) v- ~  i/ y5 c
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);# {0 l: a9 \& H7 [, T# _
  552. 1 K. W% d0 }3 M+ u
  553.         // Standard initialization
    , a+ \5 h0 S9 f$ X
  554.         // If you are not using these features and wish to reduce the size* G9 @6 l- z+ e! N" n" {
  555.         //  of your final executable, you should remove from the following
    , E4 e7 ^- A/ o4 Y. `) p
  556.         //  the specific initialization routines you do not need.
    0 E8 c5 T# O% h! u# q, D

  557. - n1 V5 ]2 v* H1 P) F& V5 ~
  558. #ifdef _AFXDLL! [  W  o# ?0 l# M
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    5 d9 P. u1 ?; l! u# }' W0 C
  560. #else
    6 s( h2 n4 h2 k/ G- D7 b
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically1 I, j, P1 y$ q7 b8 z; D- ~4 Z
  562. #endif
    + E( L3 X$ I* _9 i. ]( f9 \+ ]

  563. 8 Y  r( r) D: Y. B6 A+ j
  564.   dlg=new CRevAppDlg;
    & Y& k" M) {. a4 `% d  Q
  565.   dlg->Create(IDD_REVAPP_DIALOG);0 I! N- i) Y9 B+ V5 g& R$ |3 ^
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ) U1 h: s' A. E7 f9 Y
  567.   m_pMainWnd=dlg;
    3 Q3 ^+ A* H& i. o

  568. ! q5 ]: e# N0 [2 \" Q5 A2 c! X$ X
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    - @9 E" V% Y! z- H: [! n
  570. 1 C( b9 B9 F- ~( u  O
  571. //  GdiplusStartupInput gdiplusStartupInput;: P  B6 j" n5 y' {% r6 n
  572. //  ULONG_PTR gdiplusToken;: m' C6 y  m8 T5 E" ~* o* q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    2 E7 r% J4 l6 W4 q& x: `

  574. % Y* k' [" z" B; H( {, w2 Q
  575. //        CRevAppDlg dlg;) @8 x" Q  ^0 {) ?* P( v5 U
  576. //        int nResponse = dlg.DoModal();  w  N+ |9 z& k2 M! k, \
  577. //        if (nResponse == IDOK)
    9 u4 G' }$ d; i; m  w
  578. //        {. Z3 b  [: O1 [5 |
  579. //                // TODO: Place code here to handle when the dialog is
    + _; D9 @# n8 Y2 C- ?$ L- a9 R
  580. //                //  dismissed with OK" C0 ]! C4 U' b1 I4 Z
  581. //        }
    5 x4 x% W+ r+ d; K# V
  582. //        else if (nResponse == IDCANCEL)
    4 k9 e9 `/ X. r: C
  583. //        {
    ' }! C8 n) i3 K* r4 b9 P# U( m2 E* p
  584. //                // TODO: Place code here to handle when the dialog is. G% }8 E' h) {; K0 @2 F
  585. //                //  dismissed with Cancel
    3 \& D' V4 L8 {  \0 Q
  586. //        }7 q. P& r! y: z! w

  587. 4 M! W7 @' V3 U. K/ |4 B
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    # j& S+ g& n7 y
  589.         //  application, rather than start the application's message pump.
    - v6 F9 ^+ ?4 \- d: ^+ y$ a, |
  590.         return TRUE;
    $ ?& t: l7 X' [, C( R$ Z+ o
  591. }: d# u" J3 Z* f
  592. 2 H! M* Z& j* _0 N( y, f
  593. char *CRevAppApp::strtok3(char *pSource,char *token)( u* ?" a1 A3 G$ p2 c
  594. {  ]' i4 N9 A& Z% N# D& B; Z0 H
  595.   int i;+ F. r1 n5 r4 a
  596.   char *szRet;
    , ]" A1 }2 D! h3 f7 [; E# z
  597. 0 V. M( f5 G3 g' e0 d# M, G$ ~& P( X
  598.   if(pSource) { itoken=0; sztoken=pSource; }& X" V  [) O( O7 }% W0 {) h" o
  599.   if(sztoken)
    7 h! y4 w) j4 k- h( x
  600.   {
    4 Z8 J: t7 q2 m/ v
  601.     szRet=&sztoken[itoken];& s; O- ^6 c1 t4 B. S7 X1 N+ g
  602.     while(sztoken[itoken])
    * r* c2 [" o" ^2 G
  603.     {
    ' o8 v$ d2 G; d0 [1 q
  604.       for(i=0;i<(int)strlen(token);i++)3 D, M( B$ a: g4 ~  V
  605.       {& T) e% Q% ~/ V7 _  ~" X) G+ B' y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])' }1 K4 I* t- U$ s; e) q, G
  607.         {) I+ R2 C) u, g4 u+ ^/ e" Q
  608.           sztoken[itoken++]=0;
    3 m& V" c) ]+ x$ X. Y8 U( ?4 ?
  609.           sztoken[itoken++]=0;
    ) \# |+ C$ A. u$ l. D
  610.           return szRet;
    : J/ t2 o' p. @- z: V5 J
  611.         }3 P. c- [5 N$ A' j: w4 j8 V
  612.       }+ P4 v+ m3 x* q. l9 f- P: y
  613.       itoken++;1 B+ E0 h8 s% `0 k2 ~
  614.     }
    , L/ X: z% b) A
  615.   }" d* l4 g: w' \' [5 R/ z
  616.   return NULL;3 j" c0 C4 k3 }: B3 @1 c% l
  617. }
    6 m, l3 U( a% R

  618. 1 j' l+ }( z; I# j/ `' B
  619. void ProcessProc(long Total,long Current)
    1 F; o4 [0 p6 Q' E: e  e
  620. {
    % }1 r: e" N  Q8 }* S0 D: b5 d+ y
  621.         MSG msg;
    ' y8 j( t2 a) d0 z1 `8 z
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    0 o5 n. l* Q, g$ Z* B4 c
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    7 y7 I, D7 ^% ~- S; M. h) j% O
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))6 q/ ~* j% g* D1 H) r
  625.         {
      M% t; K- E, E* g
  626.                 if(!GetMessage(&msg,NULL,0,0))4 ^: \* j! W" H7 W' I
  627.                 {4 b  s# m% O! F% G( D* J; E# w
  628.                         return;- o* W. @- H: e/ o8 U
  629.                 }+ B+ L( c1 E  ?
  630.                 TranslateMessage(&msg);
      S$ D, {, R. `- m) ^
  631.                 DispatchMessage(&msg);
    . P: t# C6 D, p& V
  632.         }        - N8 ~  ~/ j+ h9 f
  633. }' ]# D3 g/ W( i) o& w; K; h

  634. * M2 [! D" B! w4 V( u0 G# t8 h' H
  635. BOOL bFirstChar=TRUE;. E0 ]- s/ S: u+ T0 p' [4 k5 r

  636. 7 A& q9 M. @* x. C2 S% {( q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    1 Z+ b+ v/ ~* t* X* h1 }
  638. {5 G- v! O4 [# s
  639.         // TODO: Add your specialized code here and/or call the base class
    : _: x. g& ]2 _: n4 _
  640.   switch(dwProgramState)$ @% e0 T% {0 w( n5 ~0 r4 e
  641.   {" g& O6 {! r" \4 v" S1 G
  642.   case AP_NOTHING:9 y; V( I( u9 d# t$ r6 ]& I, n
  643.     switch(dwStartUpSteps)  X# @% l8 z3 d# ]/ k) C/ S6 k: u
  644.     {
    , @* C9 l4 ~; I- p0 U5 i7 V: z
  645.     case 1:
    4 N' {* b$ Q; |" y$ n8 n% M8 S
  646.       {
    1 {# K' e5 O1 Q! I
  647.         int i;
    7 ^+ n4 N$ w  w6 @& p
  648.         CDC *pCDC=dlg->GetDC();
    1 x6 @% @- h6 p8 I4 R
  649.         HDC hdcwnd=pCDC->m_hDC;
    ! _& h+ @/ o! z
  650. //        Graphics graphics(hdcwnd);
    8 t: y0 w) X2 {
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    4 ^& h; n- `7 W
  652. //        INT iWidth=bitmap.GetWidth();
    % j) _% ]( {1 V
  653. //        INT iHeight=bitmap.GetHeight();' w' J% [% a  _7 t( u
  654. //        Color color,colorTemp;
    7 w4 j+ U5 R! v" f
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    / M6 b4 \  U' a0 b. a4 ?
  656. //        {
      ?3 T1 ]+ k6 m* `
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)0 T3 x( u+ d( s
  658. //          {! F0 R( m; ]1 `( J+ ?
  659. //            bitmap.GetPixel(iColumn,iRow,&color);, p! r, U6 j9 T6 K
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 e/ V! r1 o5 w# r
  661. //              (BYTE)(255*iColumn/iWidth),. [: q7 o  s) S2 z* T/ q
  662. //              color.GetRed(),6 D/ s( C9 V- V( ]9 f+ J7 c3 W2 [: z
  663. //              color.GetGreen(),4 @( P" u6 V( ?
  664. //              color.GetBlue()));
    - F! w6 I2 V  P$ H& G& O
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);* D2 J) Y( ^/ e1 O% `8 J
  666. //          }- I1 Y& j* g8 H; Q8 a, z$ v/ Q
  667. //        }
    - b9 {2 z# {( V) i8 O
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # G& I' `, O/ \0 S- _# C8 c  Z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 x; h2 J+ R% T2 j" z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");" }7 a1 A) x5 |1 G3 j* I( y$ j
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" i& ]/ H0 w) L5 v. }6 C( z
  672.         for(i=0;i<240;i+=8)
    ) Y; Z4 ~/ B! {9 F$ O$ Q9 w
  673.         {) `5 K2 H; X, j+ m
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);, @* S: u6 D3 ~' T
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: Y8 r( R2 }) L( @9 g# H
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) m% G6 S, S, v! f' i0 p) n
  677.           Sleep(33);
    $ \0 S' J6 {+ p/ `/ u
  678.         }
    & g" C/ j2 |/ G2 i# S& @+ `# h
  679.         Sleep(1000);
    4 z8 [0 _- ?$ B* M& z: B- |
  680.         for(i=240;i>0;i-=8)
    & `0 ]5 C' ^: W
  681.         {7 ?/ j5 {8 L7 s: t6 b5 k& p. c4 s; |
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);, q, b' P. T4 T3 ?+ H: X7 T3 l
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 O# T- C9 n& M: b
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# ~/ d# {5 y4 N/ y
  685.           Sleep(33);: i1 `* H( t( k/ v  F9 J
  686.         }1 k$ p$ d. H/ O6 U
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    $ `) Y3 Y; B5 `. R4 Z; T) ?
  688.         dlg->ReleaseDC(pCDC);0 j1 e7 y: J6 N2 i; g* i& {1 u
  689.         DeleteDC(hdctar);% P: G& _% f0 X6 B: K9 w# T, r
  690.         DeleteDC(hdcsrc);2 ^$ u4 B, I' J; M7 R% \3 K5 O8 T
  691.         DeleteDC(hdcorg);
    9 D, r# j, Y. }
  692.       }
    # v1 \* j% X9 T- e
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 S3 R& w1 I2 Q! F+ Q% A& _( @
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");& ?; y; T5 n2 v% o$ k
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    1 b. D* W4 w. y$ ]( |" I
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
      [& h2 C8 D# M5 F4 d% ?! ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : y; c2 {' T, G; ]
  698.       if(!Dn.Connected())1 H/ t3 U; P+ V( k, ]: z
  699.       {- G: T. L* `, d0 S
  700.         dwTotalFiles=1;; K" Y& Q# t  A: b* i
  701.         dwDownLoaded=0;
    ( w. e2 B+ h7 V) f3 `
  702.         bSilentStep=TRUE;
    ( J' x5 @, X9 q
  703.         bCompressed=FALSE;6 b- l3 `+ t1 r  T2 o! ~  t( f
  704.         strExtLocal.Empty();2 n: s5 X: s4 b2 P9 ~3 Q
  705.         strFullName="readme.txt";1 Y, \8 W/ V+ Q0 u, E
  706.         dwProgramState=AP_CONNECT;
    6 x' o4 ], a( B, z' R: U& Z( w+ e
  707.       }
    % z+ A+ P/ a! J" Y2 {' {
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();( p8 }  K! _1 C# `- s
  709.       dwStartUpSteps=2;- p9 f# O' L8 S1 B" c( Z& H+ U* R7 l
  710.       break;
    0 m+ \5 ~6 L9 j7 J  w- B
  711.     case 2:
    7 P/ W) O! z+ {' a; {: _
  712.       {
    ! V0 C+ @- J7 s; k& W% ~
  713.         int iEOF;
    # J5 [' V, f& p, L$ X
  714.         FILE *fp;! y0 m( c+ C; a# h, B; j% t- ~
  715.         char szString[512];6 I. j, Y5 Q, ~0 O/ a8 q* L
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    & p7 G, r& m/ O# i
  717.         if(fp)
    . Y5 u+ a) }4 f3 `4 w) T
  718.         {6 J$ I* S6 F# B$ H$ D
  719.           do
    " w! r. N/ q' B9 c/ V( L7 i6 f- b
  720.           {$ f1 D# P( r( \  K- b5 Q
  721.             iEOF=fscanf(fp,"%s",szString);
    / W7 L, h# @4 i. q
  722.             if(strlen(szString))
      R! q# r+ d! c) [- G1 x: ]
  723.             {
    7 e# {4 V; j5 H7 E; T+ k
  724.               if(bFirstChar)
    & }$ b- C, s( S
  725.               {2 a5 m0 Y4 ?: N5 J4 x2 R
  726.                 bFirstChar=FALSE;6 R- q) B; V: o8 f+ X* r
  727.                 bConnectIsBig5=FALSE;
    & s, ~2 V9 ~, f! S* M: n
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    0 Z  E5 V8 B. \1 s
  729.               }3 z! z) W& ?& X! \; x$ h4 `% L
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ! i+ z1 X% O; h6 A: u! c
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));* a& b2 Q* R4 U; \
  732.               dlg->m_ListText.AddString(szString);, p3 I0 M0 p7 Q6 h$ m2 f4 Q9 U
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 f/ |: I: i3 l( V8 m+ r
  734.               *szString=0;
    ; a  F' V9 @5 [
  735.             }3 |7 @1 N. a7 m- X' J  L# F
  736.           } while(iEOF!=EOF);+ F5 ~+ t6 w9 @3 h$ Y/ Q5 k: m- C3 {
  737.           fclose(fp);
    1 ~8 p+ t( w# t/ g4 R9 q4 I
  738.           unlink(".\\DownLoad\\readme.txt");
    7 A1 F0 i4 U' w, `& V  [
  739.           dwStartUpSteps=3;' B9 V" y6 S, Z0 g* Q
  740.         }
    ) d( _6 G9 ?$ `: i2 Y- Y5 M5 K
  741.       }
    . h) \, {7 L# |9 C' V
  742.       break;
    + R8 q: z4 A6 P3 f' X7 Y2 v' P
  743.     case 3:% T& `+ v' J2 p" F% m
  744.       if(!Dn.Connected())
    $ a9 v* C) f% H$ W9 E) j
  745.       {
    ( V: S6 M/ X8 y0 d( `$ K$ w* U
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);- {6 [% H  [& [( G  @" D
  747.         dwTotalFiles=1;
    5 f! c: [( l, N0 c; D# f6 Z) C: \
  748.         dwDownLoaded=0;
    0 i9 h# J2 \- U
  749.         bSilentStep=TRUE;
    , [, V7 c- g% p
  750.         bCompressed=FALSE;3 E( l; Y7 j) m" w
  751.         strExtLocal.Empty();
    % t6 J, W5 C# l2 L) W
  752.         strFullName="checkversion.txt";
    $ l0 D. t; q$ v' ?+ K" A
  753.         dwProgramState=AP_CONNECT;; r2 j2 O3 z; Q, R
  754.       }! \, U3 w! x3 t: B) O# J, x1 t
  755.       dwStartUpSteps=4;. M4 v, K( [$ a5 v9 j4 P& W" g
  756.       break;
    * \3 L+ i9 V0 v
  757.     case 4:
    $ [  M. S- t; o6 a: S) g" I3 Z
  758.       {
    2 n$ T0 d- @1 o. f& G; D2 o2 w
  759.         FILE *fp;
    + [8 j) G4 R: ^% j& H, w$ i3 `3 |
  760.         char szString1[128];9 }% c/ M- x1 I0 C- p2 s
  761.         char szString2[128];7 k/ k' ]5 [" a
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");3 O: e3 }, W) y1 a. ?0 D1 ~
  763.         if(fp)/ W% U! A9 ~# o
  764.         {
    4 ]% }( r# C% @( h
  765.           fscanf(fp,"%s",szString1);, z, ^) `7 F, G
  766.           fclose(fp);: L# q1 E  H4 R% H
  767.           fCheckVersion=atof(szString1);9 O7 z5 w! p) f" t7 l1 h/ ?
  768.           fp=fopen(".\\checkversion.dat","r");% @* h, D4 s( }8 N0 S: C7 L
  769.           if(fp)6 w' g5 I* k8 @5 c' e
  770.           {/ \1 Z) N) t1 ]- K
  771.             fscanf(fp,"%s",szString2);
    ' y+ ^# N! Z3 B" E: \( Q
  772.             fclose(fp);
      A( x  C( O5 i. O8 f+ H& g5 q
  773.             if(atof(szString1)!=atof(szString2))% M3 R* ~% h. g" Z
  774.             {
    , N% C% O1 H+ i
  775.               if(!Dn.Connected())! X- l. @0 M& s9 Z6 E% R
  776.               {
    2 q. P+ ]. b, M& S3 P, p! o% ]
  777.                 bFirstUpdate=TRUE;
    " `" j7 l9 m8 \8 t* \( P
  778.                 dwTotalFiles=1;4 d4 W  `2 R- P) w
  779.                 dwDownLoaded=0;$ p) s- g5 ~' F
  780.                 bSilentStep=FALSE;
    & S3 R+ Q: v, O3 m$ u3 f
  781.                 bCompressed=TRUE;
    - r; t% w, e$ G8 x4 V
  782.                 strExtLocal=".\\DownLoad\";
    # \3 _/ X' C* K8 C
  783.                 strFullName="update.txt";3 e" _" N0 O9 a' }8 [# B4 I
  784.                 dwProgramState=AP_CONNECT;& O& s5 K  n" |4 `( t
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ y4 y6 W% g& s# H) d% m
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! j+ k/ O4 W) F/ v  Z. b( @
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    7 t: B2 o! K6 s8 E" ?9 D4 `9 v

  788. ) L1 ~# `- ~3 D' l' d8 v! b
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 J% A  \7 q/ i( D) G: C' ]1 g2 I
  790.                 unlink(".\\DownLoad\\checkversion.txt");+ ~) ?0 {! Y2 _' _# Y1 \/ J
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    % F' |! f! B- b; ?) `+ j$ i
  792.                 {7 F% I' u" s/ c! i* q+ r  W
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& T) V/ D" A7 i6 g/ L/ c7 \
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    # v/ p2 b: w, @5 y5 B" z# J
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");' b; k6 J4 H6 _  X2 f
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : ^# j; M* K2 `6 {2 D1 |

  797. 2 m7 Z% e! Y' T1 j. o( V
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 B0 w9 U- }3 D+ y) q; P
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 X! R- ?. X. T$ N" ?" ?2 E
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    # B9 W0 p& _( W5 e# M% U7 d# Q3 S# X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  n4 F0 Q5 D* D1 _
  802.                 }
    6 U* o) L9 t* N# L8 Y. h1 t3 w. j
  803.                 dwStartUpSteps=5;
    . z% K. C9 G' |3 `
  804.               }$ L8 a1 y+ S+ G$ T; v7 B
  805.             }
    5 D! `! C3 m3 V- w; @
  806.             else
    1 m& E, M$ E% F, b
  807.             {# ~3 B' R; n2 R4 b# P$ q( i6 U
  808.               unlink(".\\DownLoad\\checkversion.txt");/ I' j4 m; V1 w: Z& L% n2 w
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");; {5 ]& T0 T- z: T9 k
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 Q- h! F- n, N  `" P4 |
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    / V! S% O* y" l4 D: m( I

  812. ) w. S4 N8 ]0 {4 C4 T4 n+ z; u
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 |. ~  P) y+ ?  Q9 y
  814.               dwStartUpSteps=99;8 y6 G+ e0 D8 N+ p- ]
  815.               bFinishUpdated=TRUE;1 [6 E, p& d8 ^5 p! Y( [
  816.               bCanUpdate=TRUE;* Q7 S2 C) Z6 W# C; k. v2 [
  817.             }
    % i2 B# t; q( `5 a- d
  818.           }
    - ?- y0 V$ ?! F7 X3 L. M0 u8 L" ~
  819.           else
    ! g& h8 j- i4 r/ x' l
  820.           {& F+ [! [$ d6 n: Z6 a
  821.             if(!Dn.Connected())  d. a3 N' b; \' i$ `; |; [( k
  822.             {3 n& [0 [5 O1 p* ]) H& l
  823.               bFirstUpdate=TRUE;% z+ }0 T( H5 {( d
  824.               dwTotalFiles=1;
    ' y3 e9 E2 P7 W% D- z) m
  825.               dwDownLoaded=0;
    $ \' m# r# `2 F
  826.               bSilentStep=FALSE;
    " ^3 g; Y& n! _, S
  827.               bCompressed=TRUE;
    , r4 b& l, G& E! i0 P6 Y2 m
  828.               strExtLocal=".\\DownLoad\";
    * |, t/ I* W$ ?. l
  829.               strFullName="update.txt";
    8 \% r# j  p) b" A$ e4 N/ ~
  830.               dwProgramState=AP_CONNECT;
    6 F# E3 L5 N3 {: D6 D1 _- w
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");# C$ E: _  F- T+ @2 L/ s
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 D: P- h  n) e& X# k5 r/ B; u
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! `/ X. X$ R) ~+ d5 P
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 X5 F( T1 M. ?- q: s# T
  835.               unlink(".\\DownLoad\\checkversion.txt");
    1 r& i& ^+ J+ S+ `( o
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    9 }- M9 p7 A& p' ]5 u+ C
  837.               {
    9 M3 k2 B  P& n6 k
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 e1 r8 m+ h2 b3 X) M
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");/ n; S7 X+ z: r$ ?: {2 H/ C! j
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    - w* ]( ]* F" B/ t3 E$ P
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ W, H6 a* m3 `) \( C9 d
  842.                 4 _& C8 T3 a. U3 e" ~
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # q, B+ s7 l5 o5 K% h6 _
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ ~" _$ ?) {. |! o% ~
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");; B- Q; z( F) M0 [9 y; m
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. _" e2 N0 B$ b7 B
  847.               }
      Q4 u" @  K$ I' }- Q8 r) r
  848.               dwStartUpSteps=5;: ], ~' N' N$ Z& x/ D8 s
  849.             }" h: O0 e. K) m. v8 F* C$ E
  850.           }$ _+ m6 G; L$ K  ~1 ]
  851.         }
    2 G+ u2 G7 u' X  A6 c% ^, ?0 e
  852.         else; x' ~+ h8 x% S" V
  853.         {# K5 L1 W1 [/ K& c
  854.           dwStartUpSteps=3;8 h/ d" Q/ o- n% Z( x* Z$ M
  855.         }
    ! D2 U; A: x3 T) H1 K  [2 f
  856.       }
    . m/ |9 p- ?& e- I3 m
  857.       break;
    * C3 G1 r3 P1 ?6 q# X
  858.     case 5:& A  E8 |/ d0 e2 v4 b3 k
  859.       {( t& q+ {) C3 o$ ]% P5 s: h# \
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)3 l4 E; V: k! P6 e0 C6 R
  861.         {
    9 l  |/ u7 C8 h' a" @
  862.           int opt_overwrite=1;/ Q8 f5 G9 b5 ?
  863.           int opt_do_extract_withoutpath=0;" V% c" V; s9 u5 t' s
  864.           unzFile uf=NULL;' w3 q  O# A0 q% t; t

  865. 3 j7 e. C; }+ `- ?0 j
  866.           uf=unzOpen("Wsa.zip");. Q, Q4 _! V' H" [" r" I2 X
  867.           if(uf)) i5 m' Z, E1 w1 [6 R# m6 K
  868.           {
    2 a. F1 T' I* ]" A9 w
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);1 {1 M# }0 x0 f" j) T, U
  870.             unzClose(uf);
    6 R; G  u% Y& Y; m( r
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 w2 w' X- i' U7 A. y1 G
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    . p: D" J: _5 i5 D
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ( U6 I) i3 J+ E2 ]3 W7 {& u
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ ~8 S, s6 ?3 J) T3 S
  875.           }
    ; S$ o3 S! p' z4 m) G
  876.           DeleteFile("Wsa.zip" );
    3 I9 n4 Z# x! T7 p- }( l
  877.         }% [6 J, q. U8 Q1 B+ d0 }# U

  878. # b3 T$ g& W. w. g9 b5 i  ?
  879.         if(CheckLocalVersion())" P) {8 O- K7 {& l+ x
  880.         {
    4 Y2 J5 U; h$ D
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    , [5 n! ^  ]+ h% r/ [8 b
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");9 ]$ n0 @" H1 q" V! ]' w& r2 ?8 X$ B/ g
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");7 h/ U1 j) v- _* l: c2 F( i, ]
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . R$ _" M7 k: R. j3 }5 F& q. i
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);  D' {9 u& e% u# v0 W* T7 A6 q
  886.           dwStartUpSteps=99;
    0 X& c9 W" q2 b! Q9 f9 c5 y
  887.         }
    4 f5 N" z6 b( V
  888.         else
    & K1 Q) k( @0 ]/ J- W
  889.         {
    ) F5 A% `: a' X7 n2 O5 r
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");0 h( P8 |, O& p5 l0 ~* z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# D% X1 a7 ^- R5 g( I5 m
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");# S; _4 j+ ]& w9 f. q2 i5 P; V; ~

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-27 23:01

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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