找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
% u$ O0 s4 x2 h0 R
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 i3 F0 N+ {6 ]1 H
  2. //* w3 m- y* w% Q$ j- F* P9 @
  3. " }. k; q5 @6 z, i/ q3 z
  4. #include "stdafx.h"' Y& b$ r% z9 i, l
  5. $ Q& S$ {- I0 n/ T
  6. //#define UNICODE
    , [9 J9 E; T, q5 c4 {- B0 q
  7. //#include <gdiplus.h>3 b( s) y+ ~" w6 x
  8. //using namespace Gdiplus;
    % z* x2 }: |! w- o# ?% j- C1 B

  9. " W* B5 K, u5 e" o# {  ]
  10. #include "RevApp.h"
    % E* w9 g  D* q: d$ L& @- s
  11. #include "RevAppDlg.h"
    * R4 q3 M2 F# ~5 r

  12. : ?6 \5 [" \/ \' u2 W0 S
  13. #pragma warning(disable:4786)
    # w- K/ H3 N" y5 }3 d; D: K% q
  14. #include <map>6 A. O' W0 w% _1 Q& J4 A7 d% }3 t
  15. #include <list>
    - T) i; V  i' q1 A% I
  16. #include <direct.h>
    " f" b* L% i4 Q6 i

  17. 1 t. A$ Y4 i/ }) c9 c: ^! ^+ c
  18. #ifdef _DEBUG! W$ C3 Y: z; k; F/ j* Z
  19. #define new DEBUG_NEW$ U. E; `1 F! X2 ?7 r; U! x$ R
  20. #undef THIS_FILE
    2 j5 ~2 W! W: q4 Q. r4 v
  21. static char THIS_FILE[] = __FILE__;4 Q8 w! C6 _8 x' M
  22. #endif2 |$ T) y+ Y$ H- e2 h9 b9 s
  23. #include "SkinResDef.h"7 `6 @: z$ r  z, Y$ I9 V
  24. #include "ChangeBG.h"
    $ j* Q6 p6 Q3 m$ o. j6 Z
  25. #include "AFXINET.H"
    * y6 `# h1 g$ Y* I

  26. " y' e1 Y3 m4 }+ @: \
  27. #define TRADITIONAL_CHINESE 0
    * R' x& H2 ~. w1 L$ b! u
  28. #define SIMPLIFY_CHINESE 1$ R+ R+ I% p. Y$ F* N- _2 p& N3 O
  29. #define ENGLISH 23 L3 s3 F* q- {4 G* O
  30. int m_iLanguage = ENGLISH;
    7 B! U8 q" G) J: z6 ]
  31. /////////////////////////////////////////////////////////////////////////////
    7 e9 ~9 }# M8 }) h% i3 f5 Q
  32. // CRevAppApp) L: r. b) t1 E- W

  33.   w( b- y& _/ Q2 J! j  h
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp); Y+ z6 E' ~, n/ e
  35.         //{{AFX_MSG_MAP(CRevAppApp)$ j; r5 I+ w! ]. p2 {( ?" I: J
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here., u3 k8 ~  X' U
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    " P) t: ^) G# G3 N, W8 X1 @/ k
  38.         //}}AFX_MSG1 z$ T9 P7 R7 U8 K9 s0 i) s& i
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    4 Q5 z2 w/ {/ w
  40. END_MESSAGE_MAP()/ {0 i' B8 q6 F" i- {8 t" T
  41. & r3 g  e& A6 g9 O
  42. /////////////////////////////////////////////////////////////////////////////; V" f3 o; z( g( R. u7 b( H8 c
  43. // CRevAppApp construction' O" P( L3 _1 r! G$ C4 S
  44. # {$ \* W; a9 G# ~8 ^" V: M  g
  45. CRevAppApp::CRevAppApp()
    $ o1 |2 H8 X. Z0 k
  46. {2 P' R  I! L' ~; o2 Q+ P) W
  47.         // TODO: add construction code here,  y; L% K: x0 n! g
  48.         // Place all significant initialization in InitInstance0 v. L2 D1 b* Z
  49.   bDisplayIsBig5=FALSE;
    & B- W! d5 b$ V, J, f
  50.   bRestartUpdater=FALSE;
    3 c) Y" v5 t* W7 m, H
  51.   bFinishUpdated=FALSE;& Z0 x0 C% C6 t  z! U5 [/ W5 L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    # P6 L( r, x1 r2 k) Z8 x
  53.   InitChangeDataBig52GBKS();
      W  i4 c  d3 A$ J, \
  54.   InitChangeDataGBKS2Big5();% o( ^0 q) G/ v' E" t# e9 X
  55.         //
    $ d; A! y; u" D. u, V! ~* K0 m
  56.         bClickRunExe = FALSE;% V$ h) y; x2 t! F* j+ v
  57.         //: G. Y4 D3 _! q7 }. G; v' l
  58. }
      e. c( c/ D0 _6 Y# q

  59. # f* I2 W1 O+ j; X( v. T) f
  60. CRevAppApp::~CRevAppApp()
    9 C& `" d6 V' s, J
  61. {0 I' g7 M$ S8 W
  62.         // TODO: add construction code here,- b4 S4 S% o! p5 B4 @  R
  63.         // Place all significant initialization in InitInstance
    5 k6 p, S+ w7 ~! }$ e1 ~
  64.   EndChangeData();
    . i/ B' x3 }' A" ~' s) z/ ]- {
  65. }( A- O7 K: d; W3 E
  66. ( L+ @$ S7 T3 o3 {6 D2 {
  67. /////////////////////////////////////////////////////////////////////////////$ y$ Z& E' t) Q# x* e
  68. // The one and only CRevAppApp object, ^( M% a( |* }+ }8 s
  69. 9 z" b: f& v# t, X
  70. CRevAppApp theApp;% e+ R7 h' `9 _3 @# A& G1 j4 k$ w

  71. 8 _) I3 f& T7 y& r; ?( s6 ?
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 h: s7 N  R! f
  73. {
    9 V& F8 c9 X6 O# h
  74.   int iEOF=0;1 K- H, Z' Q; J% ]& t
  75.   char szTempName[MAX_PATH];
    ! }' N$ r2 _' a2 c. ]0 N
  76.   *szFileName=0;! Y. Z2 ~: q9 X0 e$ P
  77.   iEOF=fscanf(fp,"%s",szTempName);
    " q8 ?8 W2 ?# O, v; l" I
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& E4 G) @, P' @" H2 l
  79.   {0 _6 S7 F. [3 I8 D) S: x* O) N
  80.     strcpy(szFileName,&szTempName[1]);
    1 O1 S" n7 e4 T$ a. J  P* `
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ( L- i9 B8 r  v) Z8 @
  82.     {1 J! ~. l0 a1 z0 l
  83.       iEOF=fscanf(fp,"%s",szTempName);
    . U9 x3 J8 |1 o. m" L
  84.       strcat(szFileName," ");! F$ d' x  `' o7 Q8 J
  85.       strcat(szFileName,szTempName);
    6 I' [7 z9 r0 d9 {
  86.     }
    ; h4 q2 f7 Q. F5 n8 Y' Z  C# j
  87.     if(strlen(szFileName)>=1)4 j7 h. v" C4 y& @
  88.     {( y. q. Q6 G2 i! }: ^1 r4 I7 E1 ^
  89.       szFileName[strlen(szFileName)-1]=0;# N) b0 E6 z% }- `
  90.     }0 m4 r# r& W& r, A7 g- A4 E0 h
  91.   }, E; V/ N7 Q' C; H+ _( i/ p! V
  92.   return szFileName;4 o; ~8 o/ t, b: q
  93. }
    3 W3 E* Y/ q/ \% v) G

  94. . g5 M4 T0 [5 W/ A3 z: g
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    . h! j7 _% u1 E7 F
  96. {. O! Q# T, u1 L
  97.   FILE *fp;
    " f% a6 y: f0 }; s' T" L9 l
  98.   char *key=NULL;
    ' Y- V0 I. p  X1 W/ d1 K
  99.   char version[MAX_PATH];  M& e& w2 ~8 k: r6 r( M- c
  100.   LPUPDATEFILE file,olds;8 A9 g/ ~' b* |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & @! i0 ~5 i! K) l

  102. 2 E$ }0 J2 x: p% N/ I; n
  103.   UpdateList.clear();9 z" g) A" k1 B
  104.   UpdateFile.clear();
    : U# F# D! K8 N1 V3 @3 E; i
  105.   if(GetFileAttributes(filename)==-1) return false;  j& ]1 x: `+ z! V8 Y$ F3 |  k
  106.   if(!(fp=fopen(filename,"r"))) return false;
    / C5 ?* L8 q6 b6 U
  107.   fscanf(fp,"%s",version);
    9 ]. n, N1 `( {- C# ^
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }; J" k, k/ Y" M0 t% R
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ' t5 H& f/ T( U0 ?- ]% Y4 ~) y
  110.   {
    + b/ s1 T- R& z0 m1 p/ z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 _  E5 ^* h$ N+ y$ [. i
  112.     fscanf(fp,"%s",file->path);
    5 c" }7 o0 `* K" d
  113.     ReadFileNames(fp,file->file);
    6 D! W  @. J4 R) ?. ]
  114.     strcpy(file->full,".");
    9 S$ m" T/ U  y  t, I
  115.     strcat(file->full,file->path);
    - H/ T( p6 L, X5 B. D5 L
  116.     strcat(file->full,file->file);3 L1 E/ Z% \+ D( `6 s/ f  Z" k- v% x
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    % _# X1 V: D/ [7 F
  118.     {
    5 O8 t* I0 _  ?  m' N# w# N
  119.       file->vers=(float)atof(version);
    - p) O- `8 B( k+ y
  120.       UpdateList.push_back(file->full);
    5 v% r: ^- n3 l( T  M0 T
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));2 a( f$ O* _8 s, A) n6 x
  122.     }
    6 c; j3 W0 `7 L  ?3 P/ r5 O8 {& J5 ]# ^
  123.     else$ O( j6 F- X' U% k# B
  124.     {/ Z0 d; }/ S/ k, Z( G
  125.       olds=(*p).second;. _: X$ w. X1 [( E/ @
  126.       if(olds->vers<(float)atof(version)). g8 b0 z1 m: L# Z
  127.       {
    # X  p6 u, J, d
  128.         olds->vers=(float)atof(version);
    9 I2 {1 I+ v% l# z) w  }! [2 v. f
  129.       }$ k( {& z9 X. V. z! V
  130.       free(file);+ }) B# L, ]; N% |2 G
  131.     }
    # `$ B" G7 K: I" w4 t8 M
  132.   }/ A) B2 \& e; H9 C/ R0 m
  133.   fclose(fp);
      M9 Z+ s$ G" g0 d
  134.   return true;! `- _3 Y/ \, F3 ~; k/ X4 u  t
  135. }: G+ r! y0 |- M' g4 x* z3 {/ n
  136. " h5 F: T, S1 c) v" {7 l! P
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath), B4 T: M% Q& q; F' V, m
  138. {+ Q* J2 V1 I4 S. z
  139.   TCHAR  szFull[MAX_PATH];) x, R% S  Y& o: V. I2 w- v
  140.   TCHAR *token,*inter;
    4 e3 q" w7 P5 o; _" q$ `
  141.   *szPath=0;8 D. L5 F; _. h5 o! V1 A2 N* B
  142.   strcpy(szFull,szFullPath);
    : c- S& \5 c7 K$ E; a
  143.   token=strtok(szFull,"\\/");
    9 }% ?( c! `$ c( W# G* o( w
  144.   inter=token;
    4 S: h) q: N: e8 M2 {8 K3 Z
  145.   while(token=strtok(NULL,"\\/"))% |. c" q/ @. F
  146.   {
    * S0 p8 O  H2 }% W- C
  147.     strcat(szPath,inter);7 x! L. |7 h! P& O9 L+ X+ a# g
  148.     strcat(szPath,"\");
    4 V0 B* I2 E) L- l
  149.     inter=token;
    & q5 ]* h8 Q. y) m
  150.   }
    1 y; @  }7 M: ^) H
  151.   return strlen(szPath);
    7 |4 g+ z! L# P* G, Q1 V: V% M
  152. }( }1 ?8 H9 g2 p* v4 e
  153. % m1 _/ ^) J, i+ u# e, E  m
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) E* {1 y6 A+ G4 y
  155. {
    0 i6 a, `1 C/ H2 _7 G
  156.   DWORD attrib=GetFileAttributes(Target);
    2 u8 V( P0 V3 D! O: [
  157.   if(attrib!=-1)
      g% i9 U- X. p: ~* c7 x
  158.   {
    & M, v7 h2 J4 G, \7 ]
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    - U; x( I. }) K  F
  160.     {- H% P2 B3 b8 D7 {# V9 p
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    * Y$ A. K" R/ ?# h: S4 u
  162.       SetFileAttributes(Target,attrib);5 ?6 K' j  L) ^& s! u8 S  H1 C
  163.     }! c( D5 q) A7 ?' G8 s) c7 P
  164.   }# [! J9 p, n2 O
  165.   CopyFile(Source,Target,Erase);
      a+ `& f2 v; @- ?2 Q6 a0 _
  166. }
    1 |6 b0 u9 R! h) m% J4 B* `

  167. 1 r, B3 J( x/ C, S: H4 [3 e
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)# s0 X  y- M6 @/ s9 y' ?" I0 @
  169. {9 s' w- L& s7 R  a8 O) w  W
  170.      FILE *fp;* K$ }, r$ Q+ o/ x! Q
  171.      char  szBuffer[8192];" @! s9 o+ X% C0 |" l$ u. a8 S
  172.   va_list  argptr;
    8 U: W0 R  z- E/ Q1 p3 s3 |0 E4 m
  173. 5 r! h. r9 c  r6 o. l2 B6 K
  174.         va_start(argptr,message);
    5 d7 a( e. A4 W% U  Q7 d
  175.         vsprintf(szBuffer,message,argptr);
    8 i/ V8 `0 b. }9 ~$ m4 j
  176.         va_end(argptr);) z% p* K& Y6 R" V6 V. z& w0 B
  177.   fp=fopen(FileName,"a");
    " [! v) m4 E, e% q# M5 Y6 \
  178.   if(fp)3 Z, I1 K: m0 h3 a0 M/ S. w6 s
  179.   {( P& o# H0 v. W( W; J
  180.     fprintf(fp,szBuffer);
    0 n3 \" `  w! N2 H
  181.     fclose(fp);
    * V! p9 [2 l. ~9 ?; E0 o: G
  182.           _flushall();; R% G" w: l, B! F/ Q
  183.   }" s0 r% [5 |  z9 y1 l2 @8 g
  184. }
    5 }! l2 @2 A9 o6 K( o+ F; R$ i

  185. # o& k$ b# ^) [9 j( u
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    " e! A, g' C7 ~
  187. {
    3 t1 e7 U; k+ O1 l) e
  188.      FILE *fp;8 G, I1 `0 U$ ~- O6 ]
  189.     DWORD  attrib;: b& q" Q* Q! ?' m$ O# Y% j
  190.   attrib=GetFileAttributes(FileName);
    ) L8 l4 x* E; ^" U
  191.   if(attrib!=-1)
    " p# Y) P0 E* _8 M; }0 i
  192.   {
    4 N  ]7 ^4 L9 d! f  v
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);- Y* m; N' P6 B' J7 l" ^
  194.     if(!SetFileAttributes(FileName,attrib))
    : r6 _  V( N* u- M6 Q
  195.     {5 x2 d1 o2 ?" C7 N; m+ q
  196.       return FALSE;
    ! u' C& U) c. V- p5 ?: b1 m/ z  N
  197.     }) }& P+ o5 V/ D3 C
  198.   }* N% w9 m% b+ y% O0 h4 ]( b
  199.   fp=fopen(FileName,"wb");6 u& K# E; ~5 P( w! \
  200.   if(fp)' q! c7 Q8 K  ]. x  T/ M
  201.   {1 f, d1 @* `8 R4 D9 G
  202.     fclose(fp);
    % g  E. }% v7 v5 x* `
  203.   }" d1 l& }4 ?* `  b0 R. v% z4 V
  204.   return TRUE;, u1 t5 a! u# ]
  205. }
    ) \0 M7 W1 R: L- h

  206. & Z8 g% k0 x5 ^# y3 U# w# Y1 d' X! ~4 f
  207. BOOL CRevAppApp::UpdateLocalVersion(void)6 Q) j; J( V, V$ @5 A
  208. {7 M+ x' ~" G0 n( f. u8 X
  209.   char filename[MAX_PATH];
    ! V0 a3 r3 a& D
  210.   LPUPDATEFILE file,olds;
    6 z5 g7 N* `4 A  [1 P
  211.   std::map<int,CString>::iterator i;4 b$ p, w7 o: G1 G
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 [; X" _0 j9 ~
  213.   std::list<CString>::iterator l;
    4 r4 `+ J0 Y- z
  214. # r. ^1 o, }2 Q/ B9 z
  215.   if(bFirstUpdate)
    5 `7 _% o" S2 _
  216.   {
    . d, o! q$ V# X# I( f- g) O" x
  217.     dwCurrFile=0;
    - P* m6 x1 \  t: t9 F: C- |* E
  218.     bFirstUpdate=FALSE;- k: Z; |) g6 s1 f, L
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 k+ n" {: o! r( |  u, ?( K8 |
  220.     {/ K0 s' v  z% Z/ Y4 c
  221.       dwTotalFiles=UpdateLocal.size();/ M% p1 n4 g" k7 o8 Q& o
  222.       dwDownLoaded=0;
    # B. z4 ]( P4 ^+ }. `
  223.       bSilentStep=FALSE;
    3 I4 \) J2 b/ s
  224.       bCompressed=TRUE;
    $ X7 L5 ]* [6 ?; c7 d  u
  225.       strExtLocal.Empty();
    9 `9 `' V/ m8 K9 |, M
  226.       strFullName=(*i).second;
    0 H- k2 V2 x) C' d  y
  227.       dwProgramState=AP_CONNECT;' z# g0 G: }+ O/ \  L
  228.       return TRUE;
    . \: Q( y; u7 f$ t5 D$ F
  229.     }
    2 P7 k8 e2 g, X* c4 \
  230.   }
    8 m3 p; o. b) X0 g) w) `
  231.   else if(bRestartUpdater==FALSE)6 K2 \! \4 G( x$ M) m+ s
  232.   {
    ; n9 }/ l6 `& T* ~
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 `9 I0 D" c: x6 L
  234.     {
    / j& u9 g+ }0 h% f* H! p" Q
  235.       file=(*p).second;
    & L, D' o& o: f7 g' }' P' I
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())* M% e5 |2 H2 T" K( q
  237.       {
    2 f0 M: r8 d" J
  238.         olds=(*p).second;
    ' W: t  i( Y! {
  239.         olds->vers=file->vers;* J- U( Q% D% G; S8 N0 F! B! c( L
  240.       }7 {) `. d1 k) g
  241.       else% O, k& o' v* C) e, A
  242.       {
    * f6 q. k% H9 W" m/ G& e
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) Y6 q1 q  K7 f6 e/ i
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ! |4 i9 `! i' X4 q4 z8 v1 D
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    * g# q( Y4 U, p9 O7 ]
  246.       }" s+ n+ Q5 X6 t: V! f
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# G" {; z* \2 M6 S+ |/ j
  248.       sprintf(filename,"(%s)",file->file);  M; u8 H! \% l" J2 ]% G- Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. K( r* n) e5 w' P
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }- ?! @( d5 C+ V% L: S5 V
  251.     }( s. W. u7 h8 r+ |9 B1 e
  252.     dwCurrFile++;
    ) d" \  T- \' g5 \' S$ r' @
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * j( l# w9 d/ V# g
  254.     {+ a& W- r' V  V0 |+ d$ l5 T
  255.       bSilentStep=FALSE;
    : ?% W* h9 j+ _5 G: u
  256.       bCompressed=TRUE;
    ! a/ [3 z% ?7 V4 {, Q
  257.       strExtLocal.Empty();# I7 D3 h4 y- G6 K5 h5 J! Z
  258.       strFullName=(*i).second;/ C0 \. e: K, w8 o) A9 P& Y
  259.       dwProgramState=AP_CONNECT;
    / P/ m' T( l: G8 o& w
  260.       return TRUE;" w+ P3 y3 W, |8 F# r
  261.     }- X6 M; |+ g' U( E, z
  262.     if(!bRestartUpdater)
    2 i+ [: P9 {/ O4 i1 R, O
  263.     {" P% }# b: u8 D( j8 R  A
  264.       int iCurrSize,iFileSize;; r) ^% f8 h3 H) Z8 M) `
  265.       iCurrSize=0;3 |0 K( N- V8 V& _- w  m  h
  266.       iFileSize=UpdateList2.size();( Y. Z- A: v: U2 I: }
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    0 U' ^8 y! l3 q. u
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");( h% N& R; g$ |$ u% D; `% Y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    / g( E7 n# y# U* G  j$ i$ i
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) X: y0 v9 g& ^' X; i- e- _
  271.       Fclearf(".\\update.dat");* C+ X  ?3 C3 f$ p2 \0 G
  272.       Fprintf(".\\update.dat","Bloodyf\n");% D9 E# V+ R. P
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)9 D9 C6 B0 K0 d  ]  G  ~+ J
  274.       {0 V9 @; P. q% y" P7 s) f: B! B
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 F- ]0 N/ h1 z. N# D, K- X! b0 w- ?
  276.         {3 X0 p* n  S; f4 [$ r
  277.           file=(*p).second;
    7 T9 Y" B5 R1 e3 v" r! ^4 C0 D: m
  278.           sprintf(filename,"(%s)",file->file);
    / ?4 R0 o6 E$ c) J. m! L0 H
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 c# {5 n2 ~" w4 e) z4 z
  280.           iCurrSize++;
    ! `( e& Q& {$ ?7 d7 q( n3 I% w- Y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));, z' p, M( p% D  v$ b
  282.         }( C% Y1 _' n* \' o3 B" }  j: f
  283.       }4 L3 t# }# ^4 h+ ?
  284.       unlink(".\\update.txt");
    : M0 j1 \/ W# e" x
  285.       unlink(".\\update.tmp");5 b- }9 l1 B$ z/ L1 c
  286.       Fclearf(".\\checkversion.dat");
      Q; t3 R+ Y2 N: A4 M, \; J
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);4 {# l6 m+ c1 ?
  288.       if(UpdateLocal.size())
    ' h" F1 b2 Q: ]& |6 u, q0 I
  289.       {
    % q4 ?( A0 m$ q% h; C, _( z2 e
  290.         UpdateLocal.clear();
    ' a3 ~! Q' ^* d( r
  291.       }! D: [4 L+ d% P& [6 V9 Q8 L# F' `
  292.       if(UpdateFile3.size())* q# A1 V: K, o; S7 [. K
  293.       {# ~: a& a6 q) p2 x
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) S1 G$ U, O3 F6 ]  }: M  B
  295.         {
    " S7 q' X! `/ s6 W. f% o
  296.           file=(*p).second;
    ; j+ h8 i7 `5 }7 ]: S9 U2 N. ~
  297.           free(file);
    ; i9 o. o& `7 _: C1 N
  298.         }
    7 p; R+ Z7 D7 Q2 a
  299.         UpdateFile3.clear();9 M' V% Q1 w) a  T; l0 q! b
  300.         UpdateList3.clear();# {4 ?8 y& e! N2 ~1 k7 i- a
  301.       }
    + q1 R& r% G3 E3 C9 H
  302.       if(UpdateFile2.size())' G0 [- M5 l& F4 P) H, w
  303.       {
    * {8 d7 J: @' K
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 I- Y; W% B9 V# a3 G
  305.         {9 J8 x  L6 {) a1 I9 G
  306.           file=(*p).second;1 J: t) }* H. \; U5 i
  307.           free(file);. @( W" W/ W2 k8 v
  308.         }
    , c$ F- m3 T, A" Y5 i) [
  309.         UpdateFile2.clear();- z3 L3 G9 c/ {& c, _9 U
  310.         UpdateList2.clear();
      z8 z. u4 W: C3 A! |( _0 E0 T7 A
  311.       }
    % k0 D5 m* V2 [$ o3 q* f
  312.       if(UpdateFile1.size())
    0 Q% J1 x8 d# S5 S! q
  313.       {
    , L4 A- @0 z. g! b
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( j  f% V; M1 {& M  ]) j
  315.         {
    - Q; p7 C( d, h9 s6 Q1 H; [
  316.           file=(*p).second;
    $ p5 @8 M. w: ?2 D
  317.           free(file);) m/ s/ S/ P& p! u0 p  o, F4 D, q8 }
  318.         }
    " M/ T( }* }( }2 ~( W0 n- V' ?
  319.         UpdateFile1.clear();
    : g3 i6 C. o0 y4 f
  320.         UpdateList1.clear();
    + j7 m$ w% ?5 B$ }
  321.       }* f2 s4 M$ N- X6 [. F
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));1 ?9 `9 `: ^  E4 p
  323.     }
    ( C# [. K& H; b
  324.   }
    " e' ]9 B7 q! Y- A& s7 _9 G+ P
  325.   return FALSE;& P$ O; e8 Z! i9 N& N
  326. }
    ! D/ `9 k; ~9 J; M- m) X% O
  327. + A- G4 ^, P* z* I& b
  328. void CRevAppApp::ClearAll(void)2 l7 v0 z: A, X/ ]$ U, R
  329. {
    / q8 m: |2 D) ]# U5 M
  330.   LPUPDATEFILE file;
    0 w5 H1 \5 u0 U5 ~5 v2 F3 N
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    , z& \& c  d1 Y: E# t& \

  332. # l* V/ k7 M9 R. u5 M' {7 M0 K
  333.   if(UpdateLocal.size())! R9 b' q$ M5 g! p% P, I3 y* \
  334.   {
    ) p4 t9 [& r  l
  335.     UpdateLocal.clear();
    7 m; D8 G7 k# [5 Y3 f
  336.   }
    " [* n1 N5 I2 O+ U) x. `& h+ X
  337.   if(UpdateFile3.size())4 W8 E/ e' b+ ~# i, s
  338.   {
    % B. Z( \: O1 K- u
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 u8 o. _! u7 x0 y
  340.     {- M: i1 p* C$ u
  341.       file=(*p).second;$ {; T  A3 p6 \6 Q" I3 c
  342.       free(file);7 r" @9 i0 {! b  N1 X2 b3 X9 E
  343.     }* r0 Y/ C! N) E6 v* X. |+ X8 I
  344.     UpdateFile3.clear();4 u+ T$ m( t( T) p* Z& j
  345.     UpdateList3.clear();5 X- ]5 D8 j( w1 Z4 y; @
  346.   }
    # D9 O5 w8 y7 w4 [5 x' e
  347.   if(UpdateFile2.size())5 [0 [8 M* T; J! x
  348.   {4 R. m  M4 Q' \# B/ l1 o* o
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); f; F. J5 \* z9 B, d
  350.     {( [9 w5 @8 e. x* q" v( o
  351.       file=(*p).second;/ h# ?; C5 G% N0 `$ m
  352.       free(file);& b! ?5 n$ [! r
  353.     }9 c: c# `, c: n" v8 D3 j
  354.     UpdateFile2.clear();
    ) ]) i, N2 [. M" V# f, \
  355.     UpdateList2.clear();
    % c+ L% f4 _  B, `  m# t1 @8 s' {
  356.   }
    $ z, _- u$ ^; {( {
  357.   if(UpdateFile1.size())
    - m  Q- L- C% F! H  y- m/ A
  358.   {
    ! `9 q+ a. U" \9 V
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - G# m) S' X1 z5 v
  360.     {' s! f( H7 E5 {" ^) z. I1 T
  361.       file=(*p).second;
    2 E. D1 f$ y# Q; @) v# _
  362.       free(file);
    9 `. C* s) _) T
  363.     }% P1 X& @( U  ^' P$ x6 S
  364.     UpdateFile1.clear();/ |, e3 c3 d8 i9 w2 w8 B
  365.     UpdateList1.clear();
    * Y5 \8 b. c) e5 Y# w0 J- z
  366.   }8 t1 y' O/ Z' b7 D, e
  367. }  
    % S+ s" O7 Y1 E8 y* Z
  368.   
    $ P3 H5 k9 x  `; q( t. I
  369. BOOL CRevAppApp::CheckLocalVersion(void)# |5 L5 V6 g" ?9 @
  370. {
    9 J9 z8 \1 p8 z3 z- I1 Z
  371.   int c;
    1 z0 m: B# q( a$ D. m
  372.   LPUPDATEFILE file1,file2;  t/ |/ M1 ?1 U3 S3 m! v  e
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 \" F9 c, [! w
  374.   std::list<CString>::iterator l;
    * |5 x7 I7 e. {5 Y. S" V

  375. / h7 z1 D5 s6 x6 D1 u% e* M
  376.   UpdateLocal.clear();
    % _! R% Q- z8 A' j# z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ' t2 f/ Z1 I# N- |5 G& ?3 f
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ V+ _8 y- N2 F( x- U
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);% r, J6 R: }5 e0 m' C1 Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);+ n9 d9 u7 N9 r3 Z7 ?  A( N2 O
  381.   if(UpdateFile3.size())
    8 J8 W$ N) D" R! B% D7 Q
  382.   {
    5 C4 M# J: m5 s
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    4 }( q& O! {7 F- `# x
  384.     {) Z( W$ i' O2 ?
  385.       file2=(LPUPDATEFILE)(*i).second;/ c& ]( ?2 E3 x9 Y; u) c
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / j( |4 ?: {1 C% @8 k6 {* Q
  387.       {
    & t: p! S3 H/ F. h" V$ ?8 F" K
  388.         file1=(LPUPDATEFILE)(*p).second;$ S' b3 h# J( f8 `
  389.         file1->vers=file2->vers;. Y' ?$ W( G# |' v3 n. E% H& h
  390.       }# j2 [7 ?: m8 O% o$ T5 T
  391.       else
    : ^! B( f- W4 }4 f: \
  392.       {$ u& u: |4 T6 Z, t
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - ?: G+ l8 v. q( \% s8 ~: I* ]/ ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 A( g/ L" l( t; N9 N( I/ [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ) m) ?; {/ E7 B; n7 M/ v# u
  396.       }+ `4 \' f% Z2 O0 ?1 t2 Z% p
  397.     }
    " x. R7 ]  A# l, P# S) l, D! J
  398.   }
    2 u8 o5 b: b9 u6 T5 J1 D$ r& {% o. A
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) T- {% O5 y- O( x4 H
  400.   {! Q; H$ x$ u: G
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())6 v+ [, G9 v* W6 T1 v% |& @
  402.     {3 l2 b. ~, i, a* \
  403.       file2=(LPUPDATEFILE)(*i).second;1 \0 h! w! }2 Y2 `2 r, h
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 l7 k; z; ^- X- _
  405.       {5 R, }+ ^  H' j' x& X0 ?
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 _" z- o$ h$ i) D
  407.         if(file1->vers!=file2->vers)1 a5 a5 S; u: _. @- \: E5 x9 ?" r. q
  408.         {, Y1 T9 \) R+ |
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ j* K) H( Y% W4 k- j
  410.           c++;) O: j# w$ r; |8 P4 O% w
  411.         }
    4 [* L- s' _# q) p( i! g, ~. g  R( `
  412.       }
    & Z0 E& @4 W% k
  413.       else
    * r, G+ f7 Z, y' f2 K9 p+ c: b
  414.       {
    ) Q' L0 @2 A3 J9 J9 K7 l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 F/ u. [3 u9 J5 F9 q
  416.         c++;* i4 c" H; i3 Q& `  y, N- @
  417.       }" k0 H# Z8 @2 w5 |1 ~3 c' X, z
  418.     }
    $ |7 p  `4 L4 X8 n
  419.   }) [6 W8 o2 L9 t! i! ?$ s
  420.   unlink(".\\DownLoad\\update.txt");
    ! p9 D/ o% j/ k  Q2 {; F8 d% W& k
  421.   if(UpdateLocal.size()) return TRUE;
    7 v# _3 N  @! |% A( f: ?6 v9 [
  422.   else                   return FALSE;
    1 x* e2 s" E, L  ^/ i
  423. }
    ! w  o3 d9 K, w
  424. # \, u5 y5 I( s( y! [3 b# F- K
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    * ?) I0 u5 G* A1 P9 r" c3 \" ^, X) F
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  _0 V2 P' E& h% J$ \

  427. 0 ~( I: l% I5 x3 y- n

  428. ( d, @* _6 @( ]& _+ F) D- M. ~
  429. 0 c3 \$ d$ [: a! F6 `# h
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ) w" D8 A" H2 Y1 t2 M. Q
  431. {
    3 O, J: c& ?' c  R3 A. @# f
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;; Q, r3 ^- E# j9 H# d* L: |
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# I4 Z8 j2 @4 J  m1 {4 p
  434.   {' n1 b9 I7 w  z3 P8 p7 F# d
  435.     char szLanguage[50];8 B* [) Y, N9 V' I3 ]
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");. ], v( m* J' `( d* n4 [. |
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    1 l( ^5 K% T- U' b$ g. v( Q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;: x3 \0 X# F& x0 `$ `* O( |
  439.     else                                   m_iLanguage=ENGLISH;
    ; y  X. O; N  t/ U( O; w! n4 ?2 A
  440.     char szRegister[100];
    " g: }; F, Z# E* U
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & ~5 B$ F) F( T: N& D, A0 }
  442.     strRegsName=szRegister;
    . m2 Q2 E- Y: b8 K7 A
  443.     char szPatchURL[100];
      M# K# ~1 R2 N7 q1 L7 Z, u3 \
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ |7 _/ d, Q' M& T# q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ j4 \3 U, r9 W
  446.   }
    - M7 a- E  q6 x: n! c
  447.   else" z5 \3 R7 s6 h+ j1 Y. |
  448.   {# s, W2 ]9 M7 ?9 R6 @. e) D$ \1 [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! C; I6 G) e: a. s" [; I4 ]
  450.     strRegsName=DEFAULT_REG_URL;" _: @! Y- R  {5 l' j/ w, p" F
  451.   }
    " _8 L  t) i9 e3 L* r
  452.   if(GetFileAttributes("hosts.ini")!=-1)0 Z: |" E, j# `( _8 q9 Y6 l# X8 p
  453.   {4 L& }- |7 }9 q4 g# D
  454.     char szIP[50];
    $ V$ q0 v' e" V
  455.     char szDIR[300];
    5 p; D4 q& w! P7 q" S
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))9 N- R. u) A% Y2 t' Y& N% b
  457.     {% q* ?6 b* e7 W( j( D( ^7 V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    5 [+ R2 |# q. [& ~) Y) A
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");7 b$ f( f, h6 J2 V9 H
  460.       strHostName=szIP;
    3 @& u  v0 P3 D" v
  461.       strHostPath.Format("/%s",szDIR);) f+ r4 F+ F0 K' H
  462.     }
    ; K7 _7 s2 L5 e9 [6 e
  463.     else) r7 W$ R( p: `
  464.     {
      R, Y0 X) b9 g4 `
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : ]9 V% f! S7 |( }: p
  466.       {4 B4 l5 p* c8 ~+ [% x: Q  |: I( {
  467.         char szLanguage[50];
    1 _: L" {+ u- r+ C4 ]" X- u$ A* n
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 t. k, }/ n' h. g' Y. [1 L5 Z* h
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 l4 {$ R6 i7 y  z- U7 S' h
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ r2 P. W7 H& j  d3 }0 |  R9 p1 e
  471.         else                                   m_iLanguage=ENGLISH;- [4 G& W3 F* |% d& T
  472.         char szRegister[100];
    0 K( @, m/ y  U6 H6 n
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");3 x0 }5 ]4 \4 d0 S+ Y$ h
  474.         strRegsName=szRegister;
    7 {9 {* Z: ~& E1 g- l  E
  475.         char szPatchURL[100];
    % \: @! |' F  X8 U- P: J7 F: G
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 n" Y# y' Y) |7 w% Z4 T4 L
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( H. S3 D' h" p. f
  478.       }! {( Y* U; i4 n; G  V
  479.       else
    2 X$ {7 V/ r' t9 B5 x8 c( E
  480.       {1 ]) m$ q0 @0 b0 G  \. U
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * t5 j6 I& l, G# E/ {3 {
  482.         strRegsName=DEFAULT_REG_URL;
    * r7 N. v+ I" [5 d
  483.       }
    , N1 t; `. q! o& K0 Y( ]; k
  484.     }/ x- J& A9 X  z
  485.   }
    ) b  t9 i+ G1 b$ o2 P# M
  486.   return true;
    1 P" s" _9 [1 I# P
  487. }0 E1 C- [. ]# l% d, x

  488.   ^) m% @/ V4 ]; q. ~% u
  489. #include ".\ZLib\unzip.h"
    4 u5 J" D6 Y, C$ V/ D6 t  n
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( H# F9 d9 m: x5 k( e1 Q
  491. /////////////////////////////////////////////////////////////////////////////( {- U' {; e5 f: y
  492. // CRevAppApp initialization5 J0 a0 C& O. O! o& Y  m2 R

  493. 3 E* J; ?" O( E; o' f$ @: s* V% x  W& D
  494. BOOL CRevAppApp::InitInstance()7 M6 Z0 X  v1 z6 A1 T9 k
  495. {
    * ?4 ]6 \* K! I
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];- T' w1 ~% W9 e' C& f8 x+ @

  497. & B4 T4 g, Y: W9 B% Z5 b" _
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / w) ]3 k. s' y* `8 J7 |$ W
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    * b. o9 P) j1 W/ `6 `1 d
  500.   {1 N9 @" g: g2 C) _, l& W9 c
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");6 ~* O  w/ g* n2 e
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    # q' w# X8 `% \3 v) ]9 q$ I8 _  a2 Z" E
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))). x, A7 j: G' A+ B
  504.     {
    4 L' j* K( k" @' M; c& E
  505.       strcpy(szPath,szPathTarget);  P( }$ m8 y- Q5 L
  506.       SetCurrentDirectory(szPath);
    % P9 x: _* F0 \" q
  507.     }
    # |3 q  Q5 d7 W' A
  508.   }
    + W; z, N3 O5 E2 V3 v- p4 @; x
  509. #ifdef _DEBUG
    # _+ c2 _8 R( _8 }5 \( E/ z7 A7 E9 n
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' Z' i! ~6 e8 V$ H& @; M, g  k
  511. #else
    2 T+ m. W" s% F# P) b$ V( A* H
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * P& G- O# \+ l+ H# b/ C+ v
  513. #endif0 P8 v$ l# R" Z+ p- _
  514.   {) m" _# F% A6 _6 ^
  515.     char tempFileName[MAX_PATH];
    ( G: l6 r1 S4 e, o6 L6 }" }
  516.     strcpy(tempFileName,szPathSource);
    1 J! f' [5 V3 H/ x% `9 e. K
  517.     tempFileName[strlen(szPathSource)-12]=0;: n- p0 m# ^- r( C# S
  518.     strcat(tempFileName,"\\$CSUpdate.exe");, _6 I: c, g- X- D% ^
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    / ^, q  C* s) a( A# Y! L
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    8 K% n7 l0 c* ~0 X
  521.     return TRUE;
    . q4 Z9 x/ O- ~6 p* c, d
  522.   }
    4 e" N. p' z8 W: e& \- ?. q5 F
  523.   // Nuke 0118: Delete run.exe% }$ `/ ?% E% H8 |' p6 O" j
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );/ ~' f) H5 I6 v* [( h
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + x. q2 E: y* v5 J
  526.   if(!ReadCfgFile("Config.ini"))
      ]) g6 ^$ m! y5 m# K( t) _1 I/ I
  527.   {" P. d3 f9 Z. n: l6 I( y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: f/ u/ q  E+ i5 N
  529.     return TRUE;
    8 M: F1 U& ^  R' ?  i, g
  530.   }. X: K! {# c+ ^' T  w5 n$ b; Q
  531.   HANDLE mutex;
    7 l2 k8 i/ g) o7 F# I: X: M; I0 k3 M
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 G2 Q( ?! ~3 q# D! C8 ?- K
  533.   {
    : P8 E; {; G0 t* A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)5 a; ^. G+ j% G- m5 c( i( {& I3 e
  535.     {
    # A  k( c: c! ~
  536.       CloseHandle(mutex);" Y4 [1 ^5 u8 ]- `4 [, ~4 B; @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    . _) D" F% H' H* v
  538.       return TRUE;
    $ f& M% h1 V# u* T/ w
  539.     }5 u4 O" j- x( v5 x+ ~
  540.   }  
    * j) t" t/ {* ^0 N" O: o4 o8 n
  541.   CloseHandle(mutex);
    9 m5 a6 v- K, G( b& }
  542. ) }2 r& d) }' W' H5 V
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);# z0 k" w- j8 [2 [3 F$ D' |6 v8 D9 a
  544. ( R: y+ g, p& ], t* ~
  545.         AfxEnableControlContainer();% E6 [  O* h! V0 ?2 l! V
  546. , N, L' `, e5 [1 S# G- f, Q
  547.   bCanUpdate=FALSE;
    ! j7 @% f7 h2 [* N4 v: W
  548.   dwStartUpSteps=1;& p; T1 O3 O  [+ G4 y1 h3 f6 |
  549.   dwProgramState=AP_NOTHING;7 p4 _, E* U% H! s' ~! n0 a$ e  M
  550. : M7 P1 P! k( P( ?
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    , u* U$ C7 ?5 x
  552. ) D. y/ G, H: Y# k: w
  553.         // Standard initialization2 U" U0 ?1 e# C: s5 C( i9 q) J
  554.         // If you are not using these features and wish to reduce the size
    7 v2 z) y# Y* [6 l- z
  555.         //  of your final executable, you should remove from the following
    % D6 z. f) f& T6 N/ J4 n
  556.         //  the specific initialization routines you do not need.
    ( i1 z' ^7 O4 Z% @3 Z5 L

  557. ! N! `# s* Y# M3 L, {% R( B+ M. l& |
  558. #ifdef _AFXDLL
    , v0 ?2 g* g1 l8 v
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    % L3 p6 q' j! o
  560. #else: B- ?" p" R3 G* U6 u
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ' J0 }- u$ z, q
  562. #endif
    0 H1 `3 A/ {8 x. B% L( m

  563. 5 C8 r6 q, |+ r1 X% \( b, N
  564.   dlg=new CRevAppDlg;
    # G" l( C3 `3 S" [0 A6 y$ k
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    2 R7 t: t. u& F0 p# A  |! H
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    5 c8 T) j- E$ ~1 r) m: z
  567.   m_pMainWnd=dlg;
    ' G5 _+ d  ^' t
  568. 7 u  \: N( w+ x& @6 u8 T
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);' K! }* o- p0 N/ R% D( ~( E0 N  d7 z
  570. # Y+ E; }) N/ f$ b
  571. //  GdiplusStartupInput gdiplusStartupInput;' K1 ]3 k0 |: ~6 [; R% p
  572. //  ULONG_PTR gdiplusToken;( ]) @( k! d* D: Q0 U# ^
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    + t1 A$ I/ B. U+ J/ |2 u

  574. / [! g! R% W) _0 P
  575. //        CRevAppDlg dlg;
    8 n/ E$ X! q! @/ E( v9 e- P# v9 ]
  576. //        int nResponse = dlg.DoModal();' a7 Z# [2 \; s
  577. //        if (nResponse == IDOK)5 i0 |) i) F& H) F5 w+ t
  578. //        {
    3 n+ _& _) u9 z4 j! X, a
  579. //                // TODO: Place code here to handle when the dialog is  }7 F6 X7 [: ]4 e) K( }- E
  580. //                //  dismissed with OK4 N* b- B! E: B* `$ l- N
  581. //        }2 w6 A! K, @* C- k( z7 x3 g
  582. //        else if (nResponse == IDCANCEL), w8 H5 @& G0 i8 c2 |6 [; K( e* O
  583. //        {
    # A. r. {. i+ x1 S& {- q0 a. \
  584. //                // TODO: Place code here to handle when the dialog is% c  M& U4 n4 a/ ?& X5 F
  585. //                //  dismissed with Cancel$ c2 W' d: u1 `2 X* T0 m
  586. //        }, b2 c9 x) a7 \/ g7 Y- N5 ~& f
  587. 7 e* g6 R4 q% ]4 m2 j9 O9 F
  588.         // Since the dialog has been closed, return FALSE so that we exit the6 K# @/ W( J* b4 w8 b* A# x
  589.         //  application, rather than start the application's message pump.1 z8 Q  g  C; N% s; A; A; x
  590.         return TRUE;
    ) n+ ~+ Y# E, {& g+ N* k- t
  591. }
    , ?& w8 H: q) f) |+ u
  592. 2 b1 o, ?' u! y! g7 L! P. J' f( M
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    9 b$ L2 k1 W* o% v4 n( u
  594. {/ B0 R  Z- ]1 ]
  595.   int i;
    * n7 _' W" U5 K# q5 J
  596.   char *szRet;6 M  K0 A3 ^3 G) Z3 |2 y* f

  597. 3 U' |& A. h% k) Q( _$ T( f
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    - z3 O- I) W+ d
  599.   if(sztoken)
    & f& t  {# i2 v4 N  w; g) c" a1 y$ i
  600.   {
    % Y3 I1 N9 D1 r' b# v! v# s& A
  601.     szRet=&sztoken[itoken];
    ' [* n6 q/ T2 x# K
  602.     while(sztoken[itoken])
    0 `0 Z. m6 o% w/ j  N* v" L
  603.     {' g9 ]* k9 ]  o% R" x9 S
  604.       for(i=0;i<(int)strlen(token);i++)
    3 v' s, q$ Z7 S6 s# Y1 ^
  605.       {* ?/ k* Y. Z! [
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    : H# d% K4 v- d, h6 \8 y: S; c
  607.         {
    ) C. j" b. ?: m, e
  608.           sztoken[itoken++]=0;5 v0 E! K( n; B1 l/ ~
  609.           sztoken[itoken++]=0;# |, p% _) r0 ^* i
  610.           return szRet;
    7 ^! g5 v$ o- V7 h
  611.         }" j/ f6 `+ h! n% C3 h0 i
  612.       }/ z9 K5 W/ V. I" T; x+ }
  613.       itoken++;/ C8 q' Q6 `7 M+ l  n. F4 c
  614.     }
      S% ^# D/ g; K& m
  615.   }
    . p! Y7 P" M7 R! v- {" x
  616.   return NULL;- p+ Q& s5 k8 P1 j  V' [
  617. }/ y5 b; x9 q, u" \! m8 a, @7 B

  618. : P& _, J9 ]2 X; m) [) `6 t
  619. void ProcessProc(long Total,long Current)" y+ O( n2 ~6 B. K9 H) i1 e4 p3 _
  620. {! Y! I/ z  l; P$ i4 V
  621.         MSG msg;5 s9 w6 k) N) i7 U5 }% K& N9 n6 C
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    * v, {4 D- G9 u# }- J& X9 I6 Y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));- G6 I9 S+ u% I% q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))6 D9 w1 W7 h# G9 F/ V
  625.         {
    " s' P, _: g. u
  626.                 if(!GetMessage(&msg,NULL,0,0))2 ?5 u0 c& _6 I. J( o1 r
  627.                 {
    ) {4 R" i1 m( Z8 t
  628.                         return;
    . u2 W+ X0 Z" B. _0 K" ~
  629.                 }6 n- A0 ]  V% r  v
  630.                 TranslateMessage(&msg);
      E( G0 h. O5 G. A8 G  X
  631.                 DispatchMessage(&msg);
    9 n  `5 p9 M: u: E( A) `/ F
  632.         }        ; t$ X: T+ H! F+ g8 I
  633. }
    1 G0 K8 J. B; U8 E' \

  634. 0 L0 q0 W( }0 \* R0 n3 O5 b( L
  635. BOOL bFirstChar=TRUE;+ A/ M) ]2 X0 B( U

  636. # F! G, d5 u" G' \1 A$ m
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    9 V& U7 w2 S' B6 i8 z
  638. {
    ' {1 P6 h" r, ^1 u5 F
  639.         // TODO: Add your specialized code here and/or call the base class
    $ ?( ?4 q2 U, G/ p4 S/ f0 f
  640.   switch(dwProgramState)7 X2 w+ p/ W& |1 \8 k
  641.   {% {& }4 Y' r1 u
  642.   case AP_NOTHING:
    3 v1 J% J- N# G! x6 `: A0 ^
  643.     switch(dwStartUpSteps), J( |) F: u5 ~4 Z3 R+ _( \4 ^
  644.     {
    0 p4 ^6 |% T8 M3 j# ?4 U/ `
  645.     case 1:  r! H" V6 @! X& R4 H
  646.       {
    7 Y: l$ ]: D' R1 I
  647.         int i;+ u' x4 f0 A; D: ], B$ \4 M
  648.         CDC *pCDC=dlg->GetDC();- {% @  M: W5 D7 p& x- `
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; f7 s6 ~% j' f: `7 H8 X
  650. //        Graphics graphics(hdcwnd);
    ' ~  L) {- Y1 f' w' q3 B" f+ C2 f
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    # M) K! |4 F6 r+ k
  652. //        INT iWidth=bitmap.GetWidth();/ Z  k, O$ t# F' k+ Y, {+ f  Y2 `& K
  653. //        INT iHeight=bitmap.GetHeight();
    5 W  C8 W) a4 h% z$ K" }* R
  654. //        Color color,colorTemp;
    7 O% D/ {0 n; s  m7 K3 l. E) J9 T
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)0 {: Z3 E  J* [+ c. F# \+ [
  656. //        {  T/ v/ l9 r( G+ Z
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)$ T1 L/ D: y1 G' ^% ^6 u% G# s# {
  658. //          {+ z" Q$ @- d" n5 }2 V  f* D
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ! h+ n: A" M7 v% m
  660. //            colorTemp.SetValue(color.MakeARGB(1 b$ }6 [% }1 N9 {( E, X' ~
  661. //              (BYTE)(255*iColumn/iWidth),
    4 G) C: R$ Z; d- e
  662. //              color.GetRed(),$ G& o1 U) ]+ K+ J* _3 A
  663. //              color.GetGreen(),
    . Q. h1 ]/ M3 O
  664. //              color.GetBlue()));) z$ n4 o/ Z$ F6 z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # \( T3 _* m4 N" N: B8 n: y
  666. //          }
    ; h1 F3 [& v) N
  667. //        }
    " G4 a; D  Z" L8 ?9 t2 v! ]. D3 [7 z
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 a; _4 B! }7 V$ @
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 m- F1 _5 C4 w, D$ f/ R
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");2 f0 ?  I' Q) T2 n0 Q0 z3 u
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 E- J6 ^5 o- a% r( {4 {3 @
  672.         for(i=0;i<240;i+=8)3 ~, [: ^7 a( t5 }  P- S" \1 V' P
  673.         {
    : I5 g+ y5 y+ p, F
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ C7 V5 c- }7 p! E
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & i0 Z; P3 w4 l( [, `1 f, l: G
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 p. r- p3 f: u3 B+ w& h2 C
  677.           Sleep(33);
    5 `. E! ]6 b0 M, M8 E
  678.         }
    6 v# g# D$ v$ b! Q
  679.         Sleep(1000);' t5 R" }! e1 s: f0 @% \, z
  680.         for(i=240;i>0;i-=8)$ h- D1 ~% p& v! G8 R" J
  681.         {
    9 P7 q& ^5 I. X( G
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . F4 A- x4 F# E; n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);$ R, N, r; Y  @+ X6 r
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 Y( W) ~8 d6 P
  685.           Sleep(33);* `6 Y- `9 a9 [# i. l  x
  686.         }
    . k; H- Q% r  R6 k9 V2 q. L
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( ]' r/ d8 W' F4 z* W" x
  688.         dlg->ReleaseDC(pCDC);. w* s6 n6 [  F( q0 C) j8 a5 o
  689.         DeleteDC(hdctar);% b; \3 R; C& d, \6 H
  690.         DeleteDC(hdcsrc);5 Q, P+ P$ P  }
  691.         DeleteDC(hdcorg);
    7 H; w5 X: K$ ]- h: S0 h
  692.       }
    6 ]7 R1 U% @, |* g
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    8 m) j% \; x+ c( j# ]3 D" o
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    6 @! Z7 J! D% S4 c( n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    / |$ ]5 O/ \2 X% w* K1 ~1 m3 u
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");0 K" O! }7 m1 J  e
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 i) Y4 w2 P- U( g; J' W
  698.       if(!Dn.Connected())! R" A, [# |2 t& n2 a# P
  699.       {
    " ?% \& {; v7 f' w/ [. D3 {, R
  700.         dwTotalFiles=1;
    # m8 E! h7 K0 H) H% K2 ^
  701.         dwDownLoaded=0;
    7 @4 g6 e4 F0 n* L
  702.         bSilentStep=TRUE;  V5 n: J( }  [3 K% Z5 c! B, A; D
  703.         bCompressed=FALSE;
    ' `( G2 a/ d. m  W3 L
  704.         strExtLocal.Empty();2 _/ y& u# v8 Q$ E
  705.         strFullName="readme.txt";
    . L, _! H" z) i& |$ q% X
  706.         dwProgramState=AP_CONNECT;
    5 O  A- b7 T( g1 Q
  707.       }
    . V% {( O0 r' {3 k
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();- E  P8 Q2 Q  L
  709.       dwStartUpSteps=2;2 o' [3 h% ?# {/ e! }# |
  710.       break;
    7 @8 [( @8 Q  E  q; W
  711.     case 2:
    2 S- Q6 `7 q' m, n& M
  712.       {
    8 S5 W4 r* Y$ J; N' p3 h
  713.         int iEOF;
    # U% L: Y7 k" w
  714.         FILE *fp;6 O: M8 |- i  q
  715.         char szString[512];
    : E* I3 s$ l3 f# c6 J5 q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");# U+ I3 P+ g( r& R8 D
  717.         if(fp)0 Q  w  Z( }" p0 |9 K4 F2 ~
  718.         {
    ; W- i1 [3 N# q) S9 j
  719.           do
    8 }1 ?6 N/ K, @5 u$ E. w
  720.           {% l* `4 [) S6 _0 L- L
  721.             iEOF=fscanf(fp,"%s",szString);
    5 x# Z( F% g2 W- J; u- Y
  722.             if(strlen(szString))
    1 V4 D6 m- ^" c+ r( X
  723.             {
    % l5 o9 U. p- N1 }" o# Q" u& S
  724.               if(bFirstChar)
    ( m3 h$ p( L4 J* P+ _
  725.               {
      b7 C% ~2 R/ o  g. \" t3 w
  726.                 bFirstChar=FALSE;
      ]2 s$ y; `8 n3 C& H
  727.                 bConnectIsBig5=FALSE;" ^; m9 w7 z" e  p( q6 I7 ^
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    " C( {+ b. H) j1 z+ ^; ]$ O! K
  729.               }
    $ M  P! \  p5 N8 e
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));% ]9 W" b" [  z0 |2 F
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));5 U. F2 A4 r) E
  732.               dlg->m_ListText.AddString(szString);$ I6 p: v* ~0 k  L& p5 @
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 N6 e1 s; ?$ `( l: }+ I( D+ j
  734.               *szString=0;
    5 J! J. _& V% `- L3 c  h0 _1 U% Z/ g: ~
  735.             }: W) d+ Z4 ^3 k
  736.           } while(iEOF!=EOF);+ K- f. m! U7 ~) X; s5 T+ Z5 [3 V
  737.           fclose(fp);
    : ~9 |1 W3 O3 t5 I% G( D" S
  738.           unlink(".\\DownLoad\\readme.txt");( Y7 E/ c1 }  Q  T5 M3 x
  739.           dwStartUpSteps=3;
    2 H4 l5 p9 B- S) w5 T$ Z6 z# ^9 g5 D
  740.         }7 u6 Q" ]1 a+ e4 u
  741.       }
    / A9 G4 ?  M/ c& n
  742.       break;
    , z; X) _, h( E+ u( V& h, b, H3 w
  743.     case 3:
    9 t1 g$ E$ Q- X9 ^
  744.       if(!Dn.Connected())/ _/ p$ x8 u/ J8 L
  745.       {
    ' n' ~1 g! R1 h/ [3 P  o
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    $ e7 t" U# s3 ?+ G# e, y/ S
  747.         dwTotalFiles=1;
    : b4 T* h, e- `3 [, \8 e; A+ U! p5 ~
  748.         dwDownLoaded=0;
    7 C, n; ]% O# M# U0 y4 g
  749.         bSilentStep=TRUE;
    6 h; K$ w9 u" J" Y* `: }
  750.         bCompressed=FALSE;3 s' l3 \( G. O" ^- v, @
  751.         strExtLocal.Empty();$ V6 l( K- W" P, }7 v  ^
  752.         strFullName="checkversion.txt";$ k! p2 X. G. Q4 i* @- Z. o' U
  753.         dwProgramState=AP_CONNECT;
    1 L! I$ B1 e8 k4 @( O3 O3 M- Q
  754.       }
    / M! B, p. o6 F4 E. K. e7 K
  755.       dwStartUpSteps=4;
    1 E$ E# l7 X1 W/ }/ F1 v
  756.       break;
    " l8 d! n+ R% U+ {  z
  757.     case 4:
    8 e5 @! ]- y6 t/ r8 Z) `
  758.       {
    5 q% G$ u# j$ ]; d
  759.         FILE *fp;9 |, ~0 G' M" n+ R7 b
  760.         char szString1[128];$ D; t0 L" @) t. d/ z9 T
  761.         char szString2[128];. J! L  \( R2 I% g( D% @$ u
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");/ h4 b/ ?+ r3 ]
  763.         if(fp)1 H; y0 u' n2 @) N; B
  764.         {2 m8 n+ G6 Z% _4 i/ k: y
  765.           fscanf(fp,"%s",szString1);5 x8 p$ Y* g. f( b) _
  766.           fclose(fp);
    - y9 d$ H/ O8 J2 b" N6 r6 ]
  767.           fCheckVersion=atof(szString1);1 _. T% h% p  z
  768.           fp=fopen(".\\checkversion.dat","r");) g3 R1 k" y. u3 \  E: |1 J- X; F
  769.           if(fp)
    4 f  _4 Q4 N( v8 g: L5 m0 \0 s
  770.           {5 z: N: t8 A* I3 S$ Z. G+ @2 I
  771.             fscanf(fp,"%s",szString2);
    8 R, a$ K4 e0 t' C8 u
  772.             fclose(fp);0 s% Y: Y. o- n* D( q7 y. z8 Q
  773.             if(atof(szString1)!=atof(szString2))& W$ R* U/ E2 Z& Q  E. y  t1 n4 r$ b
  774.             {4 z! i/ y1 w. ?- ?6 R! }! K
  775.               if(!Dn.Connected())
    ' w& \$ n, g) ^% X3 W
  776.               {; Z6 b6 w2 d: B& \& l2 ~
  777.                 bFirstUpdate=TRUE;
    ' D0 A. L: P4 r2 t& K2 x7 R
  778.                 dwTotalFiles=1;
    5 |. P" u& H" B7 D! j
  779.                 dwDownLoaded=0;
    " y5 L& f5 u8 ]9 c, a* n
  780.                 bSilentStep=FALSE;
    1 r8 F1 Z5 w+ x- Y4 L) E- M
  781.                 bCompressed=TRUE;( Y0 C) N+ U5 X( d
  782.                 strExtLocal=".\\DownLoad\";7 z8 \" _$ c% ~$ e* E& j! P( n
  783.                 strFullName="update.txt";+ t; I7 {, f2 L# I9 d
  784.                 dwProgramState=AP_CONNECT;7 B; i) D7 Y. g3 v
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" ?3 h4 H7 P- O8 W; j
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / E, T4 `0 C: J* |. m
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! y8 {: y8 [2 X9 I) @% F
  788. ( V5 a& [$ O: j2 E: G" a* r
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & q  L7 p) {; i! z  W
  790.                 unlink(".\\DownLoad\\checkversion.txt");& r- }4 g9 ]5 L3 l/ ?" L  D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)2 N8 t/ R2 {4 }/ c/ l$ g4 b
  792.                 {
    1 x0 B3 A  l4 z4 o+ m# ~1 t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    5 V' W2 R. V  S; N
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");8 Y# k; f2 ~( R
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");5 ~& r2 Y$ K: Y4 {8 ~
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 m7 }' c$ u- U9 R: y) m! p& x

  797. . ]: l8 J2 f1 Y/ U6 a( _! F, q8 M
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      C9 O  v% s" U- y$ g4 L
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 _& H; j9 @) S9 ?# F7 ?% l  p
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    9 X+ ^$ @. D9 Q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 ^2 g! f( w; N6 a2 x
  802.                 }
    0 f8 ]  v) K* n& w, F7 V( N
  803.                 dwStartUpSteps=5;
    % K/ p1 n' p" c: M6 p4 t7 u+ Z4 h
  804.               }
    ' ^7 j- o/ L8 x
  805.             }& v1 ?" c2 J% {" a0 b0 G: v
  806.             else
    1 s5 A' O1 v% Z1 U4 B$ |6 F1 K3 i) t
  807.             {
    / h$ F& k1 ^  o+ t2 W" |5 p# {
  808.               unlink(".\\DownLoad\\checkversion.txt");# Q. O7 J% N* m4 Z  c0 b
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ `- r) N& i4 k- F# m
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + D* J- v- x. u) t
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 ]1 S  {$ L+ V- E
  812. / H; H& T, ?0 E6 Q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! {' }2 R% h( m: s9 e3 r! o0 u6 h8 k
  814.               dwStartUpSteps=99;6 G# ~! K. Y1 W. u2 a$ \
  815.               bFinishUpdated=TRUE;
      r9 q5 g4 O0 U5 N  s
  816.               bCanUpdate=TRUE;0 {4 T, I5 e5 M, Q
  817.             }0 w% E. B( l1 w+ V" V8 K: q9 W  _
  818.           }' o/ `, X6 d: X  a% M9 O
  819.           else: X  A7 O; p( c
  820.           {
      a% }" s  F. i2 R7 c3 V1 _
  821.             if(!Dn.Connected())
    $ t3 w* G# R) o- F, m' s
  822.             {6 Y- L5 k  Z. J; n& [
  823.               bFirstUpdate=TRUE;% y8 w. i: Z( K( R, k. {* k
  824.               dwTotalFiles=1;9 ]4 n5 d! r( M
  825.               dwDownLoaded=0;
    & `' E/ @1 e9 Q5 a- V, K
  826.               bSilentStep=FALSE;
    ) m- D5 R8 L$ b+ f
  827.               bCompressed=TRUE;, k5 J: n  u1 Y3 Q9 @0 [
  828.               strExtLocal=".\\DownLoad\";; U% }$ |6 ^2 W
  829.               strFullName="update.txt";
    ' i9 z8 C. A, w7 j6 u8 v9 z4 l. w
  830.               dwProgramState=AP_CONNECT;
    5 J0 d7 k/ b) n+ \0 `
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 Z' @' @8 M1 y# b; ^
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 l4 e& W0 h1 C: e  Q' E( R  p
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' y. `9 P1 b/ D; j: ]
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 p- v* ~2 q% @5 n1 d" \+ ]" k
  835.               unlink(".\\DownLoad\\checkversion.txt");
    1 m9 f% Z8 z9 E) W: y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1); c( i) E0 _9 l$ l/ r+ s, O& z4 C
  837.               {
    % ]! ~& Y- u8 b/ S
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");  Y) r6 W1 `! s! v6 D
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");2 M1 c; I& Y6 @2 p
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ! k. q' f2 w0 p) W1 Q6 \9 y9 R7 g) q. J7 v
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; ?" \" ~, Q7 p8 T0 i
  842.                
    & o+ t, C, p6 K3 o% X! a
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 C0 e. U; U+ C7 c- N
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 N, ~( y. n/ j& u0 ^7 f
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
      N& q; W  V* S- `% ~& e
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ N2 i' s* I8 |$ l5 C
  847.               }
    & d# X' s' O+ r5 ?! M; h
  848.               dwStartUpSteps=5;
    ( G6 i; C- z8 N4 w2 V/ X3 b5 z
  849.             }
    9 a7 `" s* W' \: \3 K0 I, Y
  850.           }- w! @6 b' _0 d; r# W3 @
  851.         }
    " H  C0 G% Y5 `/ k$ ]- B6 p0 J
  852.         else; V3 g! q! S0 S7 \; N
  853.         {/ ^6 u, c" k! m4 C8 i3 v" d
  854.           dwStartUpSteps=3;) _% R( ^' m% u: a8 J
  855.         }
    2 |  ~6 N* J5 @
  856.       }- C; g4 v4 f0 M1 R4 R- Y+ Q; \
  857.       break;7 V+ q+ G3 k' Z+ L
  858.     case 5:
    $ D4 Z/ K/ r1 G
  859.       {
    5 F' p' ~5 _+ Q' q. \& B4 Q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)$ j  Z7 K; A' a: ~
  861.         {
    . N  U2 m' n/ `4 c$ z) ]( ]* ], l1 O8 J3 |
  862.           int opt_overwrite=1;
    ( I4 {0 q8 u: b: N, m
  863.           int opt_do_extract_withoutpath=0;
    ' ~  e4 Z6 f. r% }
  864.           unzFile uf=NULL;/ t" b; }8 [+ F: A2 j1 t
  865. 9 G- T& `; _% v- ~" U8 Q+ a
  866.           uf=unzOpen("Wsa.zip");
    5 B$ C6 v. y  Y) x2 G& l
  867.           if(uf)
    $ g; n6 M# o4 T$ H. s. E; B
  868.           {
    . W1 c7 z1 u) x! ^% b' b8 }
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);; O7 R; [' r( s6 ~- i3 k$ p
  870.             unzClose(uf);! u+ D. h3 @4 z! d3 S) \; n% X
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    : z& W; b$ `2 A3 [
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");2 z- E2 H0 g2 {) z1 U7 n% V$ p5 i
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");1 i6 A4 b2 t+ {
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! }- r- f* N6 r: t, V
  875.           }
    : ?) y+ l6 p1 Q
  876.           DeleteFile("Wsa.zip" );
    5 J6 r% k4 r- o/ O+ ]  P" P  L
  877.         }
    . F4 @  P9 N4 E4 l% z( Q5 E+ d

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

8 B: X0 ]- C4 T. U& L% c( b  R3 k0 h1 X, o, [& c3 E5 p. z2 U, f5 }

評分

參與人數 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-14 03:19

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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