CSUpdate.exe源代码

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

; M. B; d3 t1 b4 D1 n4 N
  1. / RevApp.cpp : Defines the class behaviors for the application.) Q' M4 ^8 q: H  Q1 g( L: `
  2. //
    6 W4 a. T  _+ S& A; Q( A, d

  3. / a, ~4 a  w$ y  H+ [3 {
  4. #include "stdafx.h") B! k; O' f1 _
  5. ; I1 g/ l' ^, z9 O$ K& b
  6. //#define UNICODE4 a5 v+ e$ A6 [; h: O" a! x# D! g
  7. //#include <gdiplus.h>
    2 z+ {' F2 l" l
  8. //using namespace Gdiplus;4 z, [+ p5 ?* m" w$ l; |3 L% f

  9. * ~1 a: d5 Y( W) y/ @: a* Z
  10. #include "RevApp.h"
    ) c& t! W$ r( {. l: W
  11. #include "RevAppDlg.h"
    : d6 C% E# G+ e2 k5 o1 ^& `

  12. " R1 Z4 U$ N: j/ z/ c
  13. #pragma warning(disable:4786)
    ; {: e9 V+ Z7 X. g8 G
  14. #include <map>
    9 b0 u6 J2 A+ @! X
  15. #include <list>
    % A* \, {3 ]- J- [3 n- M4 Z+ @  q3 C
  16. #include <direct.h>5 s7 u" }9 f8 o) L

  17. . l4 t) X# W+ v( l
  18. #ifdef _DEBUG7 a7 \' ]: M! i. L8 l8 f1 J
  19. #define new DEBUG_NEW/ N3 Y9 q; C  g
  20. #undef THIS_FILE. f, ~6 f' P3 I+ o* U. W+ J
  21. static char THIS_FILE[] = __FILE__;
    6 z. w$ v" c0 ]2 w- E
  22. #endif
    * f: q( Z% O9 `+ F3 u
  23. #include "SkinResDef.h"4 ^/ k2 E% s4 f# n8 C/ {
  24. #include "ChangeBG.h"2 k( Y' H8 x8 ]; A7 d# C# K4 }
  25. #include "AFXINET.H"$ F+ X9 n  ?; _0 }0 o3 Y! V

  26. $ f, C4 L. N, \' c
  27. #define TRADITIONAL_CHINESE 07 c* Z% T, S8 b* J
  28. #define SIMPLIFY_CHINESE 1" b. ~. D! K: H) S2 F
  29. #define ENGLISH 2
    ' M, d/ _" z, E
  30. int m_iLanguage = ENGLISH;+ P4 e7 \2 j% s1 j2 v" l
  31. /////////////////////////////////////////////////////////////////////////////
    , W0 \' N& }, j; v
  32. // CRevAppApp
    ! d: ?0 s# [6 S7 W; x- t- |
  33. 7 ]. C1 t; X+ v
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    . e0 ^, Z. K+ Y
  35.         //{{AFX_MSG_MAP(CRevAppApp)9 O1 k7 n# z6 S! V- G( x% H
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    # `* m: S, a  M% R) x
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    * j5 j6 c- V9 J: M1 C: q: a
  38.         //}}AFX_MSG" a8 `; G. b0 q4 }! h
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)' n5 V9 _3 e0 p9 a
  40. END_MESSAGE_MAP()
    + E7 b( d  A2 v1 z
  41. 1 s4 U- Q2 Q  X+ M. ~0 n' ?$ i
  42. /////////////////////////////////////////////////////////////////////////////- V, t/ E0 {7 X; Z) t0 z$ o
  43. // CRevAppApp construction
    0 Y5 M! g, Z* _, @9 w8 \% p4 r

  44. ! _5 W8 `: Q! L. d7 K- T# U
  45. CRevAppApp::CRevAppApp()
    5 |" q$ _" T" t# ?7 `! E6 H
  46. {
    & `' k/ ?& x% {( E' }  b5 `6 n
  47.         // TODO: add construction code here,
    ' r9 o& \( R8 k* @4 j% `9 o5 O6 l
  48.         // Place all significant initialization in InitInstance
    3 t1 f, ]3 W% }1 {
  49.   bDisplayIsBig5=FALSE;
    ( P! c8 `. F- N. L# E
  50.   bRestartUpdater=FALSE;9 t& G  x! \4 J& P, a9 k
  51.   bFinishUpdated=FALSE;- W# E. ]& Z3 g2 A, G
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;6 L2 x" u3 e* d0 u# X
  53.   InitChangeDataBig52GBKS();" Y' Z! b9 ?1 |- q6 R' ]
  54.   InitChangeDataGBKS2Big5();
    4 L! z& A, n& I, a0 |8 C
  55.         //
    5 b, r; C- j9 k0 A1 y
  56.         bClickRunExe = FALSE;
    ' k* m1 u" Q! i* G' H, X& u0 C
  57.         //8 o3 Q: i  P0 h& W
  58. }& G/ F" e7 b0 R2 I. S

  59. " q% X$ J) Z8 b/ r6 L  T
  60. CRevAppApp::~CRevAppApp()' z: L: k/ B( f1 k; U
  61. {
    , h& @3 `, K  G1 `+ W! X% x# W
  62.         // TODO: add construction code here,
    4 W( ]3 q$ Y3 c  @( Z0 a4 S! @8 p9 s
  63.         // Place all significant initialization in InitInstance. `7 z- m+ G/ X/ k, a
  64.   EndChangeData();
    ' j. D2 ]( e5 h+ a4 j. u2 S
  65. }
    ! `) N  X& U$ G- w$ H6 S

  66. $ x' F6 }$ @4 e  q" q0 u) h" f
  67. /////////////////////////////////////////////////////////////////////////////
    , _3 ?6 B4 [3 J/ @
  68. // The one and only CRevAppApp object
    / D  Y9 E! H. k; H

  69. : n& g& O4 S5 l3 r- p' A$ @& \
  70. CRevAppApp theApp;: z* Q7 k  Z6 A9 y. y" U8 B

  71. 5 f% s- g! v- t+ T$ V
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName). W/ c+ Y; r9 E
  73. {
    9 D- |3 f1 Q" c% U0 x
  74.   int iEOF=0;
    - y' J3 s/ o$ S- S0 [# K$ G
  75.   char szTempName[MAX_PATH];
    3 L: T- V. t8 ]' `  }! o+ D
  76.   *szFileName=0;
    : }' ?  o# p- s! W  q0 \! d
  77.   iEOF=fscanf(fp,"%s",szTempName);
    2 S$ y4 U' k0 ~9 B
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    2 k; K, v! l8 X% j- Z9 O
  79.   {& D. n0 J& F; f3 u- F
  80.     strcpy(szFileName,&szTempName[1]);
    # t, x, M' H( h
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    $ k$ p+ `' D$ E8 T
  82.     {
    6 ~7 n* Z- f# L
  83.       iEOF=fscanf(fp,"%s",szTempName);
    7 Y- T+ i! C1 c) {
  84.       strcat(szFileName," ");
    2 c) X" }' O/ r
  85.       strcat(szFileName,szTempName);3 g$ h; b4 M+ d% H: o
  86.     }' S4 s3 n! A8 u" ~4 B
  87.     if(strlen(szFileName)>=1)
    - r% u3 m5 y! t7 e, L5 s8 D2 `
  88.     {2 |  w  y  t6 L  [( M0 F( c& G
  89.       szFileName[strlen(szFileName)-1]=0;2 x" o3 ^6 i4 {
  90.     }
    & V, z# M, ]- |6 n; r
  91.   }& ~. U6 b+ a: h# U; }
  92.   return szFileName;+ [* J0 A$ g2 s- x% |) x
  93. }# L- X! z3 m+ w& H
  94. 7 q7 p" O, @/ h: P- c1 {; u
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)8 e2 o. V0 o+ U5 d8 Q1 A3 h# I& y
  96. {- C! I6 z0 V" A
  97.   FILE *fp;
    2 T0 n" X4 r* u& R$ i8 O
  98.   char *key=NULL;
    + T( I: F+ l, I# L6 m- ~
  99.   char version[MAX_PATH];
    0 O* s7 Y5 K9 W9 C9 U7 [# L2 o- U
  100.   LPUPDATEFILE file,olds;
    3 S# k6 e: K( c1 B" \
  101.   std::map<CString,LPUPDATEFILE>::iterator p;( r2 w5 G6 j2 @: {' x! c# T' \; q
  102. 7 g9 }  t  o9 ^5 g' R4 K, b
  103.   UpdateList.clear();
    - R" T/ ?! b0 i% b- x  c& v4 @1 d, z
  104.   UpdateFile.clear();! I8 K  g2 J! L/ _# B4 _
  105.   if(GetFileAttributes(filename)==-1) return false;" K  N/ P- S5 c0 Z- I9 R
  106.   if(!(fp=fopen(filename,"r"))) return false;! ~5 j$ Q) m) Y& X2 k( g3 g! j
  107.   fscanf(fp,"%s",version);5 o3 a8 ^4 T  O; F4 J
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ' w3 W- M# J$ |) F
  109.   while(fscanf(fp,"%s",version)!=EOF)
    8 i- }2 R7 {- U1 O+ j+ \) X
  110.   {
    * `! g6 t& D8 @' T
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & ]2 g. a; H2 }0 e  Q
  112.     fscanf(fp,"%s",file->path);1 O, v/ n9 W) Z. o* l
  113.     ReadFileNames(fp,file->file);8 f' D  H( ]! A$ k/ @/ S" @6 e
  114.     strcpy(file->full,".");" h' D6 C3 Z6 W9 N* q
  115.     strcat(file->full,file->path);
    & i3 V8 t" `  z
  116.     strcat(file->full,file->file);5 c; p7 k( ~9 O# J0 `# J7 H& e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())% q! W4 P( _7 S6 Q  R/ I- E
  118.     {: m7 P( U7 t9 }5 S  u1 X. `: F9 h
  119.       file->vers=(float)atof(version);
    ! S  `$ C8 Y, `' [8 l
  120.       UpdateList.push_back(file->full);- j% M# @7 K$ q/ {. F, f( ?
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));, B- ]( S7 M8 `1 c7 n  `0 X& M
  122.     }5 Q; m  Z- E2 }9 F( H
  123.     else
    ' u+ ~4 f3 ~, d! ?! {
  124.     {
    1 V! L$ T2 L9 d$ o9 E0 D
  125.       olds=(*p).second;& `! u/ V* h7 U' M3 E& i
  126.       if(olds->vers<(float)atof(version))$ C$ p! v" s. f* T$ t9 R% o! e( `- Z
  127.       {1 N( Y' A% f8 _
  128.         olds->vers=(float)atof(version);; ]2 b7 B0 I# j2 M; F5 g4 R# U
  129.       }
    0 y) M; F0 b+ g1 e8 C9 N# v
  130.       free(file);
    + G# P. c& {" R. Z
  131.     }9 ]5 P. I- \5 Y* W/ R! A$ j
  132.   }  G8 c9 a2 u6 Q+ _+ S( D
  133.   fclose(fp);7 m$ M5 j, p: ^! [
  134.   return true;. _4 I4 V: |1 D; C. b
  135. }
    0 y) a' P" f  ~( z& M3 f

  136. 3 C7 c2 W, r, E  Q* P
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)' {- {. ^8 v! t* `; H
  138. {5 c1 ]& ]" N$ q$ K
  139.   TCHAR  szFull[MAX_PATH];
      Q7 V3 ^0 i5 [+ y: t
  140.   TCHAR *token,*inter;
    1 V# j) Z: Y7 h. v+ r& i( o! J" M
  141.   *szPath=0;
    ( C; f7 s) d; j1 n
  142.   strcpy(szFull,szFullPath);, m9 R$ y# K# @' q
  143.   token=strtok(szFull,"\\/");
    $ ]% y0 L' M: O
  144.   inter=token;" j. H  V9 a/ I( P
  145.   while(token=strtok(NULL,"\\/"))$ |# g2 e6 Q2 J& m; T% p6 {0 O
  146.   {
    * p  i3 G( v" z
  147.     strcat(szPath,inter);
    ' D+ Y4 k5 ^. Y6 R# F7 d! ^$ K
  148.     strcat(szPath,"\");
    0 O- ]/ d: S* \6 A
  149.     inter=token;* c- L" T0 i! `; a9 N) k6 }
  150.   }
    * Q5 N6 g& n+ p8 Y5 ?# C7 W0 \
  151.   return strlen(szPath);
      w+ J/ l, |  V( Z6 b5 U, X, F. z, q
  152. }* y& y5 B: U( F1 K5 l+ G

  153. + p: p/ f/ G4 L. a! Y; `/ ?
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase). ^/ Z) B2 F  K
  155. {
    / w, T7 f! c0 k3 b8 W( W0 e
  156.   DWORD attrib=GetFileAttributes(Target);
    % [$ d9 a, S* s3 ]* i8 F; J
  157.   if(attrib!=-1)
    + c& g% b9 p9 D
  158.   {
    6 U0 @. Z/ T8 |& v1 Z4 Q5 X
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' Z* W( ], M0 L0 b  s
  160.     {
    5 y: p$ ~. V$ I- o: Y' \: b5 A; r
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);2 x# I; s* v4 J  y% u
  162.       SetFileAttributes(Target,attrib);% G+ }7 d8 y& V7 R/ t' y/ C! B: B
  163.     }
    : t: O$ |5 S9 ]
  164.   }/ D. W7 `7 c; ?4 A
  165.   CopyFile(Source,Target,Erase);* q7 _/ g7 ?: s2 z; J
  166. }
    9 h' O- k* P; j% J% Y

  167. 1 s8 S- j( H' z+ N  I
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ) a8 M. {9 C6 V4 Y, W
  169. {: A! f- _) A& E
  170.      FILE *fp;$ k" D- z0 a% D6 n! x! D
  171.      char  szBuffer[8192];
    3 a$ h, b1 E) Z, e. v! i' x( K
  172.   va_list  argptr;: Z# g' a8 Z3 ~! ~" p  C- |. S
  173. , C1 F! T& B/ ^
  174.         va_start(argptr,message);
    % Y- c7 v. c7 O0 e% [
  175.         vsprintf(szBuffer,message,argptr);
    * o1 D1 L: O3 b; ^' e% g
  176.         va_end(argptr);6 @& O  L1 S7 C: R
  177.   fp=fopen(FileName,"a");
    - Y, m2 C$ [' H$ H! f; ^
  178.   if(fp)
    8 ~. ]3 s3 S2 S9 d* K
  179.   {3 Y) }8 v% _$ T5 \
  180.     fprintf(fp,szBuffer);
    . k6 }) z0 X5 P, \* L
  181.     fclose(fp);
    0 X0 {; h2 p; P' |* f8 D
  182.           _flushall();& x# M0 @: F/ p7 O4 w/ X' M2 b% J
  183.   }) S" d' K" g3 |' {' U1 b5 h
  184. }( J7 P* ]! x3 P5 X5 ~- c

  185. 5 j  v7 X7 ^& _2 P: U7 d! w
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    8 W0 ?1 {) E7 b1 m( C& {
  187. {
    8 \2 H; H/ t4 f3 K& p7 U, `6 e
  188.      FILE *fp;
    - I( }+ P6 {" q; W8 b
  189.     DWORD  attrib;
    7 o- j0 E: m8 q8 Z5 O1 o
  190.   attrib=GetFileAttributes(FileName);
    # F: X0 t1 w2 h" O
  191.   if(attrib!=-1)
    0 C3 H8 E8 S6 `
  192.   {
    ' B1 u. Y/ L/ e% u5 O+ |
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    7 K& O/ K" q2 z3 ?3 V4 [
  194.     if(!SetFileAttributes(FileName,attrib))
    ! ?) ^2 m; ]6 R4 ^) ^5 u6 i- i5 ?
  195.     {! h# Y( Q! l+ K% e3 U6 w7 ]2 _7 o
  196.       return FALSE;
    6 ?% v3 a) c0 u. D/ N. n- ^
  197.     }+ z8 A; u' M) v8 `/ X0 ]
  198.   }& g! f7 |8 v, k) f: ]; D
  199.   fp=fopen(FileName,"wb");
    & U; V3 P# V/ ~0 t+ R0 E
  200.   if(fp)
    4 q; G' G- }2 u* m
  201.   {/ S' L6 M1 k/ p" x
  202.     fclose(fp);4 m# C8 m2 K+ x' z7 J; o
  203.   }
    + p" U. J+ {1 f
  204.   return TRUE;
    ( q- }" d; d5 K6 D) Y/ u9 z
  205. }# h# W2 r! ?' }" G! @1 T
  206. - X9 w4 u3 c, ~
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ m0 C% ^# x4 ?* b# c' k6 {5 G
  208. {  v! `. L% [; w5 z
  209.   char filename[MAX_PATH];
    9 o, y7 ]/ O( m9 H2 W) d. e
  210.   LPUPDATEFILE file,olds;& w, g5 |& G8 x6 T
  211.   std::map<int,CString>::iterator i;
    : v7 w1 n- c) r3 v6 F3 B  a
  212.   std::map<CString,LPUPDATEFILE>::iterator p;% }! g3 A- K' j& y# X6 E1 ~
  213.   std::list<CString>::iterator l;
    4 W5 X7 i9 P9 n6 B4 z

  214. # a7 }1 ~& t# \' Z
  215.   if(bFirstUpdate)
    6 F& q4 B. x  q0 R  _% X
  216.   {9 p. J3 _4 k, R! [7 ]
  217.     dwCurrFile=0;7 C3 m+ o! E& i8 S! a
  218.     bFirstUpdate=FALSE;7 S5 D1 s2 a' `8 x. F0 b6 I8 F# g, J
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())( [, ?; d: E! Z4 W) A0 s2 R. Z
  220.     {8 a$ E1 V* a9 R& G3 ?
  221.       dwTotalFiles=UpdateLocal.size();; d8 s% I' f, D- u% I# X9 s1 B6 `
  222.       dwDownLoaded=0;' ?' |8 s, Q" X* `9 i
  223.       bSilentStep=FALSE;
    4 L6 |; b! f$ @' F/ t' e4 s+ e3 \
  224.       bCompressed=TRUE;
    0 t/ G9 L7 o! e& m# v5 g
  225.       strExtLocal.Empty();
    6 i3 k4 T, z1 [( T) G
  226.       strFullName=(*i).second;
    4 L  P: o2 _4 h( k* E; i3 k# m
  227.       dwProgramState=AP_CONNECT;
    8 s& q! y3 x8 c/ R/ }/ Q- x. d/ E0 u
  228.       return TRUE;
    : [& f8 y. y* v7 b/ ^1 W
  229.     }
    - r# b$ x1 I/ R  z; V9 `, x) Y
  230.   }* J; q& Q& f( b2 o5 a: g& y
  231.   else if(bRestartUpdater==FALSE)
    - }  @0 G( ~, n; b
  232.   {3 C' L, y8 D0 c. [) j5 q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())( ~( f1 b; w$ m8 h
  234.     {
    % ^2 z3 l/ {8 p: Q- n# m
  235.       file=(*p).second;, U' `  G9 a6 O1 k2 {
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())! o/ m( Z* j6 ]' P
  237.       {: K# p* m2 J% \) M+ [# ~
  238.         olds=(*p).second;
    0 r* l( W4 c. ?
  239.         olds->vers=file->vers;2 j2 L' _, [- f$ u1 P
  240.       }4 z, ^' m) b/ `! _$ F
  241.       else
    ; ^+ O% V2 L: ~5 O0 K% A# A
  242.       {4 w5 }& R0 ?) v' u
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 ~, ?# i$ g- _4 t. g
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    9 k( O' c; N( z* ?) I- L
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));4 U& P0 }: c( S; Y3 A  G
  246.       }! M$ n8 F3 b0 P  F
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    0 J2 @2 O) x/ T+ q3 v, @" K
  248.       sprintf(filename,"(%s)",file->file);9 ]( e' l; ]5 S& G: |
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # \# ?3 P7 u9 B
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : i) V% E) |, O1 j- g
  251.     }
    . v  F' P- E; j' A; Y; H
  252.     dwCurrFile++;7 `! Z. O- F- T  K3 @0 Z0 W
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 E8 b! J: v. V0 j
  254.     {
    8 K. e' N5 D$ t5 Y9 k* i
  255.       bSilentStep=FALSE;  m5 P7 {0 J" R6 t8 F. I$ M, z
  256.       bCompressed=TRUE;0 a- a. ^  [" X
  257.       strExtLocal.Empty();
    : C+ N0 Z+ @8 `+ d2 p' |/ z5 i9 ^. d
  258.       strFullName=(*i).second;
    " ^" i: r4 p5 h3 j" n( c
  259.       dwProgramState=AP_CONNECT;
    * `( A. s: b( ?6 |
  260.       return TRUE;  X7 l" L+ e# m+ ~
  261.     }
    4 H/ u4 |% Y$ U* a% M( x  U
  262.     if(!bRestartUpdater)1 i1 z0 R; I0 m7 g( u+ y7 ^
  263.     {
    1 Z0 s0 ^1 _: i/ l9 K8 b
  264.       int iCurrSize,iFileSize;
    9 `( {0 R" L9 i# r/ k9 o* i( z& D4 y% u
  265.       iCurrSize=0;/ i+ t% O& m* M6 \9 o) i2 j6 @
  266.       iFileSize=UpdateList2.size();: `: u+ `1 B. Y$ n; H) D/ h
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");9 i- M" Q& t( J' s: ~0 J
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");7 o' ?  X' c* D- a" d6 h
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' E' x  o6 R6 [  A  @& R- S
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& ~; g1 F" G, w) F" g5 I6 b
  271.       Fclearf(".\\update.dat");! f5 m. H% S( l& W
  272.       Fprintf(".\\update.dat","Bloodyf\n");1 m9 z* }" |, S% `; i7 s
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 x+ ^; R  F3 E9 I5 m
  274.       {
    ' w* l" [( q3 P# ]
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())* K; S) G5 @2 B! n& i$ ?' @
  276.         {0 ]+ _. _1 D$ {, |, ~. m
  277.           file=(*p).second;
    / y! f% L* u& ~1 p" L
  278.           sprintf(filename,"(%s)",file->file);; q  }+ f0 `3 K/ t& U
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: O! {0 R4 [- M1 H+ r# S$ W0 l
  280.           iCurrSize++;
    , b7 {2 ]& ^" m) y2 M
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    6 I0 Z; K; P# l& ?8 E  f3 I4 F
  282.         }
    ' K  |+ ]# h) \5 N6 `
  283.       }9 C$ X2 H0 Z* I, W4 S& ~- p% O. i
  284.       unlink(".\\update.txt");* B4 P: h& y4 b( X
  285.       unlink(".\\update.tmp");
    : q) \3 T$ [' V% c
  286.       Fclearf(".\\checkversion.dat");
    8 t& H* Q% \$ U& ?" n5 I" ~$ D7 a
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
      r  m/ I1 X) z& [1 e
  288.       if(UpdateLocal.size())
    * a. j; Q: b6 [! e4 q# t6 x
  289.       {* h. j' W" b9 x! ?/ P/ l( v
  290.         UpdateLocal.clear();
    ) l6 H% u$ d8 {6 k. G& j# v
  291.       }) D; H- N1 N7 S6 h, ]! q
  292.       if(UpdateFile3.size())
    2 l4 f$ m  b% v7 {) ]) X
  293.       {- m8 g& u" N- ^4 g' r/ Y; C; g6 j
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 U/ N6 n( M( C0 O! U7 h
  295.         {
    . O+ M# c3 w0 h
  296.           file=(*p).second;6 V" g! `* y9 ^, z/ z$ f+ u; ^
  297.           free(file);- G; W( D' K! U' L
  298.         }
    * w) ]3 O" t% c$ r4 N- F
  299.         UpdateFile3.clear();
    0 q0 V6 p; ?, B6 h6 }
  300.         UpdateList3.clear();6 H3 P5 j0 t, v+ N: U0 I/ F5 J: i' Q
  301.       }5 ~! X: N0 D; M1 @9 t* ^5 C" H
  302.       if(UpdateFile2.size())( ]0 X) t. }) t( `9 ?4 F* l
  303.       {- g/ m1 k+ j0 @- U, s/ W3 W  c* Q
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! Q# n8 T. p5 p2 n3 T, \9 G
  305.         {
    / B- }2 u5 ]1 g  I5 `
  306.           file=(*p).second;
    1 v/ o: x1 [& e$ h# W2 @" F+ ~
  307.           free(file);5 k: O8 p5 t, F* T) a
  308.         }% s# j# D: D* p% y7 f" k9 ]
  309.         UpdateFile2.clear();5 M3 ?" G! b3 T+ I
  310.         UpdateList2.clear();% b6 H& ]! s- @. l# f% r2 Y
  311.       }
    3 G: g( `! q2 |; R- V
  312.       if(UpdateFile1.size())
    5 S  |* O3 \6 _$ N. R
  313.       {, s* e2 n3 Q2 c8 n
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) x- ]8 |) @* z! ^% X$ j! m
  315.         {/ C8 @$ v  T: e
  316.           file=(*p).second;' U% r3 P" u8 a" S3 k$ C
  317.           free(file);7 i* [5 h( N1 L4 [( H
  318.         }
    7 t: C" I/ \% ^9 k
  319.         UpdateFile1.clear();) r/ a4 u5 Y0 B  X/ \5 M7 j4 `
  320.         UpdateList1.clear();1 o! i0 y5 j9 ?9 a
  321.       }+ x% s# o. L0 a$ O
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));* C) i6 q8 D' q) \. v& `; _
  323.     }, f* V3 X6 N9 E1 u/ J: c) Z: y
  324.   }8 T7 Y3 ]' _* J0 j. q
  325.   return FALSE;" I9 s; K, G$ Z- H+ n
  326. }
    0 o, F8 n9 N: @; q

  327. & L- @& j: z/ h) E& s& P& T( G1 w
  328. void CRevAppApp::ClearAll(void)7 A, y% S( W; f, |
  329. {
    " ?  ?% r' D% q. C0 i% l
  330.   LPUPDATEFILE file;
      O* B9 o- U4 b8 n5 O1 y9 K/ v
  331.   std::map<CString,LPUPDATEFILE>::iterator p;9 R. z  S% D- b( a- p7 Q0 c

  332. & }$ w; Q6 _5 C3 l
  333.   if(UpdateLocal.size()). r6 X7 S% Q* T* M% R
  334.   {$ a$ ~+ X7 ^6 C. k* Y! n
  335.     UpdateLocal.clear();
    : B5 ^& P2 U6 X: _4 |" m+ o# ?
  336.   }; I2 n3 Y( Z+ R% ^$ p: v+ V
  337.   if(UpdateFile3.size())
    7 S( v% K1 Q( O/ y; v$ X
  338.   {4 u# h( `: [5 Z% {
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)1 E$ T& [, P2 u2 |, l6 `
  340.     {
    , k5 A) K/ ?  ~6 m1 k; R2 l5 E
  341.       file=(*p).second;
    0 H4 \- F! t# v+ y
  342.       free(file);
    : ]5 u. @6 f- k! u% O  U4 u/ e
  343.     }6 @" I/ Y* i1 Z7 @
  344.     UpdateFile3.clear();
    # V( d9 R1 B/ i0 u1 W- C
  345.     UpdateList3.clear();' N6 l" ~( Z0 u1 h: C  w& A0 [
  346.   }
    7 Z/ Q/ g+ T4 k$ s
  347.   if(UpdateFile2.size())
    " M3 f4 `5 q% g6 n9 A/ \
  348.   {) h* p* Q/ a0 b5 S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), v4 b7 q. o- z$ M+ K9 o4 F( n
  350.     {
    ! J& r3 _- ?6 b, ~5 m  O$ @& G0 K
  351.       file=(*p).second;( V/ K3 g  p8 k# q& x* l( J5 K
  352.       free(file);1 C& o$ |' k* L8 q4 i1 M
  353.     }3 G. {7 u( C1 d* N, ?6 i9 b: |
  354.     UpdateFile2.clear();1 Y! [. V, P3 L1 A( C* L
  355.     UpdateList2.clear();* o5 x' r/ S( W
  356.   }
    2 L! n: T, y9 J$ E4 j
  357.   if(UpdateFile1.size())1 m% X3 Z4 T& ?( o. N
  358.   {
    9 N, N8 F2 O8 B/ g2 h% H) f
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . ^2 c) h/ g5 _" z; e
  360.     {* r" v# P! u0 W! q
  361.       file=(*p).second;1 t' q$ {3 {0 n+ s6 i$ i
  362.       free(file);
    0 M% T9 i. |" H3 a5 K
  363.     }7 g4 _/ L. v5 h
  364.     UpdateFile1.clear();
    / s9 ]: d, s! t% H- w+ {2 i
  365.     UpdateList1.clear();
    $ Q2 O  \/ _  \+ u0 y
  366.   }
    # l2 j% @. Q8 {9 @' s% S
  367. }  : g& }, f/ w8 j* _
  368.   6 s8 V; \7 k! ~1 }
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ! X+ Y% ]  }9 u1 t  t7 v
  370. {% L0 u- r3 l( r9 A5 Z  p
  371.   int c;6 {/ F6 d% B( C& K8 u2 G+ y
  372.   LPUPDATEFILE file1,file2;
    9 R1 N' B2 \% ~* C3 i
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    8 Y. |, w4 C+ k
  374.   std::list<CString>::iterator l;
    + ]4 F# X  {8 |5 z5 {! H( N
  375. 4 _9 B$ c: g1 ~; X7 W9 g
  376.   UpdateLocal.clear();  H  l5 |- {  ]. e. G' ?# e# D1 Q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 Y* E; B1 i9 n0 ^1 W# I
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);2 ?# [/ g1 y( U, S) p1 |! N
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);. j& [; B# S2 b' I" i6 C% X6 h0 H7 k7 U
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    2 d1 j& S$ }$ r, E9 y
  381.   if(UpdateFile3.size())3 l2 a* C9 m* o6 Y' g. T0 _
  382.   {8 ^7 z2 k$ Z( P5 D1 f
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++). I- L. {+ K) n1 v
  384.     {! k( C' i! n5 P3 R2 E, L7 r
  385.       file2=(LPUPDATEFILE)(*i).second;+ g2 d) I. j+ D/ r
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) K% t0 u& }6 L
  387.       {
    $ s) k& f+ L3 u9 ^5 \
  388.         file1=(LPUPDATEFILE)(*p).second;
    ( m9 a9 m9 }4 ?* d& n6 A5 \
  389.         file1->vers=file2->vers;
    : Y& s& T" A# R; e
  390.       }
    3 g+ y( Q# T7 y+ k
  391.       else3 N7 U9 C; f: C5 {3 B
  392.       {- b/ D; g3 J- u6 N) z( k
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! L; t$ p! e8 r1 O, y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ! d; g6 T  `6 O& C, P
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));+ x0 Y! f- ~5 B1 j
  396.       }
    $ {' d/ X& y: {; f; S6 J" F9 X
  397.     }) _- n1 a8 Y6 \* Y+ {+ I7 b
  398.   }. \" B- \1 q" |6 n$ ~
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++): \, ~6 U" c& R( N% _
  400.   {+ m/ @$ F/ n- h8 f  c/ Z" O
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- `. S: t. _( q
  402.     {
    + D& ~, r- r" \0 v* f% N; ?
  403.       file2=(LPUPDATEFILE)(*i).second;' }, l9 @. Z5 x+ m5 T% B6 G
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' @  d* ^0 N! q
  405.       {
    9 L. Q  ]  T% o" W. ?
  406.         file1=(LPUPDATEFILE)(*p).second;
    ) j+ p4 i% M( ~# i6 e2 E
  407.         if(file1->vers!=file2->vers), A( _7 b/ p% y5 o/ w. r$ F
  408.         {: }/ T1 V7 j, k# g1 y; k' N$ M
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * \3 T; J- D) p7 N. `, n
  410.           c++;+ ~% B4 j; E& @$ N# y, E$ J
  411.         }% m( o5 d! R3 v! y
  412.       }
    & T* d9 D& _  T- k5 X) W
  413.       else
    / b6 R9 o! E- N( N- ^5 t
  414.       {7 s& u, F( i4 y+ y" E6 M2 Z
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " W2 J& v- J: ~/ u
  416.         c++;1 S- U& D( x' G: D: r
  417.       }
    - Q3 O# I3 `% [" w
  418.     }9 d* e- b+ r* k) Y, U3 P# Y- j
  419.   }2 T, z! a6 T4 H2 b4 I
  420.   unlink(".\\DownLoad\\update.txt");
    5 f2 M  |! Y6 t5 p) {
  421.   if(UpdateLocal.size()) return TRUE;
    1 M  s" j1 b, E3 @. S, R
  422.   else                   return FALSE;
    1 d5 D# Y* m, O* X
  423. }
    4 o; p1 [" Z7 ^- i5 h9 W( q
  424. ( [+ S* A- e8 X& T& Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    9 F% R  Y7 \, T
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    6 [" v& o9 A( m( s7 f" o  k% s  J! _1 I( L

  427. 6 r5 s! f9 k8 s0 I
  428. ; X/ j0 a  X0 |, `  f! Q  m( b  s

  429. ) a0 l- [* R5 n' O
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    3 O; J2 T; v0 Y
  431. {
    4 `8 R! H$ }7 B
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    1 M1 S( i! N' T* K6 s! H9 P: y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), y# @% W5 v& K
  434.   {
    ( O8 A& `5 a3 z7 m6 ]( a
  435.     char szLanguage[50];
    & z2 }! l2 I, p
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 i0 h5 ]9 L( s: I- O
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. _1 t* q# {& o( g( E) L, |7 p
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ k; R: r* i$ R+ z. ]) V( d# J" J
  439.     else                                   m_iLanguage=ENGLISH;
    ' ~! B' E0 B% R: u2 J
  440.     char szRegister[100];  n" S" d5 P8 r4 K7 M7 z/ a
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 J9 W& v: O$ f: P; i. b1 e0 g  z
  442.     strRegsName=szRegister;
    ; k# O4 i# Y$ `. O: R. d& D& a8 h
  443.     char szPatchURL[100];
    # E1 B+ N# B# x& _5 B
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , q) _$ [, k" c# ~) `" n
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + [* M0 ^% x; f9 I! P
  446.   }- J+ a" V4 N7 ?9 d+ I! G
  447.   else/ |* ]1 O9 @- z+ ]" K) W2 t' A
  448.   {7 b% b/ d& W( P9 V/ M) |6 d$ [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" [! u0 u0 E  [0 g2 g) m
  450.     strRegsName=DEFAULT_REG_URL;1 N9 z& Y6 @  u. C
  451.   }
    ; s8 d2 j; i" O& R5 P. r
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 p# c/ i; X; b/ P0 ~5 ?1 M
  453.   {
    1 h" X# F' b% h  X/ U3 ^' Z- I* X
  454.     char szIP[50];  ]4 D0 R5 p8 f1 B4 W. @
  455.     char szDIR[300];# z: y! X" L. _2 @5 |" ~
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))- J2 ?. L$ q1 |% m2 v9 r
  457.     {
      h( c. o: r3 [/ I/ D
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    4 P! }& m8 ^8 y) k0 q# f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    & I0 P1 Y* i, e7 i# R
  460.       strHostName=szIP;5 b$ ~# O5 j- {1 j$ y# r0 s
  461.       strHostPath.Format("/%s",szDIR);( [( R; Q0 I$ s, y5 E( m. ]
  462.     }
    " y" S. U0 s) V8 n: E
  463.     else& @, q. m3 \1 C2 b* s+ p
  464.     {9 T6 S0 V8 b( F1 L0 t0 u& @
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      E' X  f+ M9 d3 K7 a
  466.       {
    ( n+ b7 H5 l+ ^1 `
  467.         char szLanguage[50];
    2 B2 \) d+ R4 ~8 {
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* v. r; o3 g2 y: O* H, y+ p9 `5 S
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) G8 @9 J0 u5 f" S$ i
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . m% ^. I+ D1 b, f
  471.         else                                   m_iLanguage=ENGLISH;: g! j% q1 s; O8 v0 n% t
  472.         char szRegister[100];
    ( p6 u; {6 s- O! m
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ N3 B8 k/ Y" V3 a' g& M
  474.         strRegsName=szRegister;
    * ?% s% \0 A/ V! B+ g
  475.         char szPatchURL[100];
    $ v  i  h: d" x" X7 G/ {# ?
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 _& j/ E& O/ n6 o5 m
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( ?* I$ J$ C+ T# y, {
  478.       }
    5 b1 g1 a( Z& h- D8 O4 c3 M
  479.       else
    * z% C9 w! L% |% T
  480.       {
    % m' G8 e: S3 j8 G8 h$ a
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 _8 c% A/ j3 X5 Q- M' L
  482.         strRegsName=DEFAULT_REG_URL;
    # [, }' o5 R7 i% U
  483.       }
    / H  @/ U1 x! L0 T8 }
  484.     }, c' O: m; r+ g! O" G! E
  485.   }: c& C1 I$ ~) v& J( w- w0 w: F. c
  486.   return true;" w8 d. z4 ]5 V. \* C+ i
  487. }
    ; ~/ d1 u. u2 Q, N5 |6 T
  488. ( \1 a9 J% q: W" R* y* E
  489. #include ".\ZLib\unzip.h"# E$ {5 A0 O/ K$ f. k
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);7 m. b# n! l6 B) \, Z
  491. /////////////////////////////////////////////////////////////////////////////! @  T0 E; v' x+ S
  492. // CRevAppApp initialization# B. w; _! O% \$ @" V

  493. " i" @' ~2 z1 R4 ^7 C3 K( O
  494. BOOL CRevAppApp::InitInstance()% q( S0 t. O: l& Q6 e, c
  495. {
    ! }7 l1 M6 g4 P' C
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    3 G: }/ |2 A2 U
  497. 9 C6 S* h* D2 a! H6 Z! w6 O8 U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    2 t; `4 ]3 ]$ s5 p* j. ^6 B$ w9 A
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))% ~8 H% A. J7 a; Q/ B6 x$ s- [
  500.   {
      L0 ^* T7 e& o6 l, S( ~
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");  ?6 f3 m% p- S/ _; ?' o
  502.     GetPathFromFullPath(szPathTarget,szPathSource);* f. H6 g2 o' {
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))% w0 {: |6 g/ A
  504.     {
    # f8 @# t  _' a* o, n8 Z
  505.       strcpy(szPath,szPathTarget);
    * s9 S) U2 B$ D; @! W
  506.       SetCurrentDirectory(szPath);
    2 Q! I" z: p! I5 Z
  507.     }
    - z; h% F  F3 N5 v/ s
  508.   }
    $ o# j3 K( k* h+ m
  509. #ifdef _DEBUG
    ! x4 K5 b1 G' O: J/ H- j
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 f: J( k: {1 Z) P% Y' Z- T( m
  511. #else
    & O3 r- c0 P" Z( D; [
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 h) h  K* Y) w9 S
  513. #endif& q8 U6 C& f! S# p( c) `
  514.   {
    % h0 m+ H5 x% k$ G0 ?( l& a
  515.     char tempFileName[MAX_PATH];2 b1 u( k( }, J3 `2 r. U+ q
  516.     strcpy(tempFileName,szPathSource);) N7 j7 q$ y& L
  517.     tempFileName[strlen(szPathSource)-12]=0;
    8 j* Z9 k& L* m7 Y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");$ F4 j/ s# H4 i/ W  T
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ! e, x) V% O6 b, v' E0 ]
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ' Y3 ^- ^1 b( F6 g# s$ [* o2 y
  521.     return TRUE;1 k4 f+ A( ?! J0 b. i, ^
  522.   }
    ( P: R8 m6 z& I$ o
  523.   // Nuke 0118: Delete run.exe) d% I2 K/ f; ^/ t8 \) d6 j
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    & y7 f' T& N, E  U' V
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    3 `# t# w  D3 i" V
  526.   if(!ReadCfgFile("Config.ini"))$ P2 C( _/ b9 S6 M$ b
  527.   {. [( n) V  G- N& ]
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    $ ]$ Z+ D8 ^9 }1 c1 u  `' O" e2 G
  529.     return TRUE;
    & {+ D  R0 v; V/ G7 v4 x7 m
  530.   }; k$ F' i* j9 c. e/ V+ `/ K
  531.   HANDLE mutex;
    8 ]/ \; p$ n+ T2 Y7 w- {4 f$ a
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))) [5 Y( b- Q8 }7 Z9 {4 T% {
  533.   {1 ^- F2 V" s$ a; N0 X1 b8 t5 i
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    $ i- l" @& h  ^+ C- k
  535.     {
    4 P" E5 h6 u4 g7 V
  536.       CloseHandle(mutex);
    ( k! ?2 ], D! @0 D# ^
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);1 j$ c+ W! Y8 h" L. T9 w
  538.       return TRUE;
    2 X4 U! y% k6 P
  539.     }, m" P1 L. X) t5 j% ~. R
  540.   }  
    3 R( D1 _* r) T: [* Z* j
  541.   CloseHandle(mutex);
    4 N* c+ n7 ?: j+ G5 ]* v6 M
  542. 5 [. V# n' B# E0 d& x/ K
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);/ S1 t2 q6 B; \1 M6 E
  544. + G- M0 W2 O1 d* l" c  T
  545.         AfxEnableControlContainer();: H6 g* p( Z5 R6 z
  546. ( S2 B0 j) [/ [: |( K2 t
  547.   bCanUpdate=FALSE;" ~0 o; j1 |8 O% w; L
  548.   dwStartUpSteps=1;
    # l6 J2 T6 T9 \$ |  Z
  549.   dwProgramState=AP_NOTHING;6 c$ t9 ?" x( a2 ~" E
  550. * u) C; o; O4 h0 c! H7 Z+ G! q
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. _2 Z) x# t3 d

  552. : b' c0 G% @2 j, @  c% T: n: N
  553.         // Standard initialization
    , n9 J. p) q" G& Z* V1 [6 A  N
  554.         // If you are not using these features and wish to reduce the size# X) c$ J9 G8 Y/ p7 K
  555.         //  of your final executable, you should remove from the following
    4 t1 c8 Q+ l( |1 K- k
  556.         //  the specific initialization routines you do not need.3 j+ v& l- P6 L1 M/ j# ^. \

  557. - T: J$ ]5 K, M$ Q% P4 H- k
  558. #ifdef _AFXDLL) ?* i; t6 }% H: A& J# A- Y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL$ m8 h7 M) p8 K8 e7 e7 z
  560. #else
    - @3 [: o6 f/ p) ?; g' \/ v
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    * P1 c1 B2 G0 a8 d& T) ?( Q
  562. #endif8 M! e9 F! p& a& L$ A9 b% Q' z6 Z
  563. * v/ E  B$ b1 ^
  564.   dlg=new CRevAppDlg;
    # e' |4 {+ _7 K+ F. B0 h
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    5 y- @- p* P' j$ Q9 ?
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    . K4 w" D8 v& X9 `9 x
  567.   m_pMainWnd=dlg;) D5 N' z3 p3 a3 V: o
  568. ! E) e" q; V1 t- S9 A
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 _- [3 ]2 n# l0 q5 c

  570. : Z. x1 Z9 V+ N2 x) W
  571. //  GdiplusStartupInput gdiplusStartupInput;
    # T0 X1 C- R5 ~9 x/ R0 U8 ?
  572. //  ULONG_PTR gdiplusToken;7 b. v! g8 ~7 B% M+ |) m
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);# M. D" n& P4 m5 ]3 F

  574. 3 d# Y) v% |# p
  575. //        CRevAppDlg dlg;6 Q; J8 w5 `+ W; S! v* ?: m5 b; U
  576. //        int nResponse = dlg.DoModal();
    % f6 W% @- h% S+ N
  577. //        if (nResponse == IDOK)" e; \: @4 u  k4 T
  578. //        {: P3 w+ s! J" f4 I) H
  579. //                // TODO: Place code here to handle when the dialog is
    : M  K/ ~4 p% [- l
  580. //                //  dismissed with OK
    % s. Z. v8 x0 P( _
  581. //        }1 F2 _5 r* Y/ A# i0 T  P
  582. //        else if (nResponse == IDCANCEL)1 e9 a& b; _+ m* W
  583. //        {7 C, H6 A$ p6 c1 c( ~7 u7 h
  584. //                // TODO: Place code here to handle when the dialog is7 b7 D8 h3 u" ]% W9 e3 _
  585. //                //  dismissed with Cancel
    5 i  q" L2 W  w. Z9 J
  586. //        }$ I. x( q2 y3 _; m  s& A

  587. 7 F2 B8 T/ Q  t& z% I. T5 k: r
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    " C9 O3 H$ N3 g" A6 V4 {* v" w
  589.         //  application, rather than start the application's message pump., Z; D/ }: g/ z2 z% ]0 _* y4 H
  590.         return TRUE;" C/ D8 g$ i' M- E2 _# B
  591. }
    * K5 J. g+ ~& f; F7 \( Y

  592. - c& P7 g# R! }1 R
  593. char *CRevAppApp::strtok3(char *pSource,char *token)2 V) w0 ^5 b. \
  594. {% U: R1 p6 n6 r7 ?1 ^! N, u& g3 p
  595.   int i;
    - G! N0 B  S9 f; U
  596.   char *szRet;
    7 n! O0 \! M! Y' T  \
  597. 4 |# D# U& G9 W  s. ^$ v6 K9 f; V3 ^
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # \7 A" k4 g, |* i
  599.   if(sztoken)
    1 o9 C( h: X# n- U( P% }* J
  600.   {
    , a: U& J) F& w1 A. w& P
  601.     szRet=&sztoken[itoken];
    6 ^0 ]" b* v( C$ X9 c/ o$ }: T
  602.     while(sztoken[itoken])$ E/ u3 [7 y% f
  603.     {% d5 Y( o! u7 L! w, E
  604.       for(i=0;i<(int)strlen(token);i++)
    % @2 h6 ~9 R3 |
  605.       {
    & b+ p2 d/ W; b6 c8 `
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    . D- C8 X' _7 [* c
  607.         {! ^, W% r" m6 A2 e
  608.           sztoken[itoken++]=0;
    : G9 X8 y" `: g& I" b1 }* B
  609.           sztoken[itoken++]=0;
      |% t5 P9 d9 B- P3 G6 L: V
  610.           return szRet;6 ?( g. \7 M) {% h7 G
  611.         }
    5 e. v  r6 {" P% o7 o8 X$ k
  612.       }( l, N+ y6 G8 g1 W4 h
  613.       itoken++;/ |0 N- ~  {& r  n1 @, a( j
  614.     }% J" v/ |8 H  m6 `
  615.   }, U( ?$ R. n+ \
  616.   return NULL;3 V' d9 G  E* r; ]& P
  617. }
    6 @  Q- [9 [+ N2 j2 B
  618. / z! R8 z# U4 Y' r! p
  619. void ProcessProc(long Total,long Current)' K% w3 M6 G: x) \9 Y
  620. {4 }2 M. g+ I1 s# n  j3 Z, g
  621.         MSG msg;
    ( n, W( _3 y: U; T) c
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    3 y' d: p( U. s
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " M  F! R3 ~; u9 @; ^/ f/ G
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    8 q9 n! }: F; o. g# _0 D/ B
  625.         {1 U0 C* y5 H- M# {% P
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & l% i! E! a8 C6 S
  627.                 {
    ' }' [, d9 y& S4 n6 l. n! N6 C& {
  628.                         return;$ f; Y& z/ K( A
  629.                 }0 j. u! D& C, ?
  630.                 TranslateMessage(&msg);
    4 a& T9 g$ x; G, J, d* P! v
  631.                 DispatchMessage(&msg);
    * Y' L9 [) B; C
  632.         }        + w+ r5 F" e" U0 m2 x* j" M
  633. }
      A. J9 w( ^. i3 m4 A& S# q4 p$ U7 \

  634. - l3 e% Z) c2 k; Q
  635. BOOL bFirstChar=TRUE;
    - ?: _0 m! i- I/ }# r& h  o) L4 L
  636. 9 R  B' Z* {  m+ y' c5 g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)0 E! K8 a/ j1 W
  638. {
    ! J" O' I8 m9 \1 A. K
  639.         // TODO: Add your specialized code here and/or call the base class
    / v# K7 i% O: m2 p% C
  640.   switch(dwProgramState)- f  `* o4 s  G- [: S$ m! {8 |: m3 I
  641.   {
    9 i/ a7 s; P% q  {8 g% w% P! A
  642.   case AP_NOTHING:
    5 r! b7 g: a2 l; \8 p
  643.     switch(dwStartUpSteps)
    2 ^  n: K$ \6 m/ l9 {2 v5 \2 C
  644.     {
    6 E: M4 }3 q6 y7 ?: a" u7 z
  645.     case 1:- M0 |) y& M% \/ {; L4 c! @' t
  646.       {- Q* A# a. ~! g& D2 _: d1 v+ t
  647.         int i;
    : P9 Q: h" d- E. K
  648.         CDC *pCDC=dlg->GetDC();
    . M- s2 o% R) ~/ I9 q) c; L. q
  649.         HDC hdcwnd=pCDC->m_hDC;+ A, f0 J/ Z2 J( s7 p
  650. //        Graphics graphics(hdcwnd);
    1 X9 f# F) Z  U. s+ c+ s
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & w: i/ M; \# Z, M' J8 `
  652. //        INT iWidth=bitmap.GetWidth();& w2 S. |  ]- }0 V
  653. //        INT iHeight=bitmap.GetHeight();3 A: ?  o* X* [# E/ f/ a
  654. //        Color color,colorTemp;% W/ c/ h; ?1 i5 _5 I: }
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)7 W) s! ^+ Q7 W
  656. //        {0 R1 F! b% l+ C& r3 e' {
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    : Z3 Q& c& G" ^" ~) P: Q1 b+ H4 j
  658. //          {; |" G4 t9 j! }. D" h" F
  659. //            bitmap.GetPixel(iColumn,iRow,&color);+ t' q) @+ g: u  Z- ]# v9 C
  660. //            colorTemp.SetValue(color.MakeARGB(' E! K& W% R) {: [# }7 z
  661. //              (BYTE)(255*iColumn/iWidth),
    / R: ?# s8 S3 s/ }4 _, e) M: L
  662. //              color.GetRed(),
    $ `# |1 E1 k0 ~5 M' Q
  663. //              color.GetGreen(),; c$ n# q0 M9 d5 y0 x' V0 v
  664. //              color.GetBlue()));
    0 A: Z; m6 x1 |7 {
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    7 N9 [( `/ ?. s& c
  666. //          }
    2 n( T8 g% H& a+ Q0 F) J
  667. //        }
    1 G7 a1 D$ G1 ?7 j: ]& b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    3 Z, X" u' m1 n( u* E% @
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 }; M1 J' x# n1 ~6 }
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");4 T2 z* A  ]: J$ h  @4 I
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 w* C( x$ v- {) }
  672.         for(i=0;i<240;i+=8)  }7 |5 V4 k) M, H7 e0 {
  673.         {
    . ?  E" e5 k1 E. @8 V3 u
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) o5 Z# {5 {" d" [- ~: V
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);1 x* \& M5 P) Q# l( u
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - t- B& U3 t) Q, }5 _  Y7 ^
  677.           Sleep(33);6 _) Z* y5 a- ?& X: s* Q" t
  678.         }. h# ?$ A* c; F; x6 [
  679.         Sleep(1000);# C  e% `9 h, \+ ~1 u
  680.         for(i=240;i>0;i-=8)6 F/ S* c2 p: N! ~0 d6 o! e$ ~9 m
  681.         {0 n8 u, Z) @- f/ |% Q# V/ S7 W
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * A: _0 j' H  g
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ) i: C8 K1 R: _9 _
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " v0 s4 D$ K# k; z; Q
  685.           Sleep(33);
    / ]  G, U9 h- t* B5 ?  Q0 Z9 f
  686.         }% ?2 t( u7 W8 C' ~
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ' s; [* v! a$ o3 A: Q; S8 k7 ?1 j0 `
  688.         dlg->ReleaseDC(pCDC);# i7 i8 M9 \% J- a  u2 L7 X
  689.         DeleteDC(hdctar);! R  X- J4 @+ T' u& t
  690.         DeleteDC(hdcsrc);
    5 n7 y8 h" \6 U7 M) P
  691.         DeleteDC(hdcorg);$ o; {9 q$ \: ^0 I- U
  692.       }6 w  A# ~8 R' ^# x
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);$ K* y0 Z! |  |# ]1 q
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* Y# e8 i3 r7 W, V* p& C. O$ A1 {
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    5 c& ?& R& k+ [/ e8 Q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");4 @( T- V0 o; a9 S" ?! N- p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 k3 G* ^8 T7 e/ X& L+ }
  698.       if(!Dn.Connected())4 e/ V* L! q6 ], [0 ~: Q1 L+ `0 P5 Y: Y
  699.       {& e% H  k' ?. U9 Q/ M" T6 S
  700.         dwTotalFiles=1;: N  F% o# K2 c+ x0 y; z
  701.         dwDownLoaded=0;
    . g! k2 }3 `: {
  702.         bSilentStep=TRUE;
    + c) L% N- o* \$ C7 R' {6 V/ ~+ D
  703.         bCompressed=FALSE;, m2 C# p" Y7 L* ~% f5 m
  704.         strExtLocal.Empty();
    / Y0 T+ ^& Q* Q8 ~0 ~4 u; O+ f1 \0 G
  705.         strFullName="readme.txt";9 v+ S: J* w3 w1 B
  706.         dwProgramState=AP_CONNECT;+ j2 J" b  W( B4 n2 q
  707.       }1 P. d0 F! F7 k- z
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();% s$ O$ ~! L% x# c9 s
  709.       dwStartUpSteps=2;
    . h( H3 J5 N8 }3 U1 c$ V
  710.       break;2 m& h3 C7 i7 C& g
  711.     case 2:1 Y9 b' }. w( d" l0 L
  712.       {. B  f" E' m* e& |
  713.         int iEOF;# Y5 C% j! D! ~" \, e7 w
  714.         FILE *fp;4 P. D" W# Q2 X0 \7 {; _5 m( J3 ]
  715.         char szString[512];% l  Y0 K" G, H) R: w: i, i4 K! U
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");) U9 P6 @% z: ?; c- S' j! r6 ]% n2 M
  717.         if(fp)
    & D) A7 @0 C& U6 N' ~) R1 i
  718.         {
    ; o0 f* \3 s8 O& V" j# J
  719.           do
    , p0 Q% T7 ?( t2 H( y) ]% U  s
  720.           {# X% k4 T6 p0 d8 z5 z* z4 e4 {' E0 ?
  721.             iEOF=fscanf(fp,"%s",szString);* U1 }5 m# a& J: y0 U* a
  722.             if(strlen(szString))- h  Q( Q* ?. I4 t1 j
  723.             {
    1 w# t! H; Y, _$ i9 S) f7 L% p
  724.               if(bFirstChar)8 e) P5 \" _- n' x0 y. p+ ]  @
  725.               {. f$ ^, w3 I$ ?, c1 A1 b
  726.                 bFirstChar=FALSE;: w. e( m- R+ J2 u4 e2 x; [! ~
  727.                 bConnectIsBig5=FALSE;& E) j$ Y5 z7 N9 U2 d
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    7 Y% Z- N0 l) U4 {# T# j  N
  729.               }0 a+ B+ a8 j5 J9 k; A1 X
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));1 R- c1 t  ?3 w" H" |% I# z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    5 a# |# B+ |  l# \
  732.               dlg->m_ListText.AddString(szString);$ W7 n1 @7 ~% M$ s' @
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" l. d+ G9 q0 @
  734.               *szString=0;
    # R' J' v' n2 \% f1 e  G  _
  735.             }# }+ Z8 F" L7 F  V' d
  736.           } while(iEOF!=EOF);
    + t$ K' e" e: ~0 s5 I
  737.           fclose(fp);
    : ^* f) \% V% R( d$ q& ?
  738.           unlink(".\\DownLoad\\readme.txt");# [8 o8 Q2 N0 c& j3 O
  739.           dwStartUpSteps=3;, L. m: X$ x) M8 J9 X1 [/ `. I
  740.         }( b6 j5 ~) \1 r6 J+ `
  741.       }) p( E' T6 C5 x1 U" o9 c) x
  742.       break;8 q# Q$ e2 U: |2 I! c; V5 B$ H
  743.     case 3:
    3 M. R: Q7 `4 h" I5 n: Q+ a+ w2 |* x& K
  744.       if(!Dn.Connected())
    6 a# F- n9 M+ ~: a
  745.       {
    5 _; T! i+ z+ z+ i
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);/ N1 R& f$ u$ l5 F5 E3 s' }
  747.         dwTotalFiles=1;
    / s: l( ~$ h# `9 y; x' s
  748.         dwDownLoaded=0;, q/ O- T1 i% S! l# w
  749.         bSilentStep=TRUE;, P6 ~1 y5 X  ?" V- ?
  750.         bCompressed=FALSE;$ x5 D9 O4 ~- N* l
  751.         strExtLocal.Empty();
      v; H7 v0 n# |% `; y: Z: \
  752.         strFullName="checkversion.txt";
    # s: j$ m, ^- z3 }
  753.         dwProgramState=AP_CONNECT;
    - h: F' J0 P0 M. \  b6 ^
  754.       }; I  R4 b$ g/ A% q
  755.       dwStartUpSteps=4;
    ) S. H1 H9 Z0 r1 K* R/ u( g$ S2 ]) e
  756.       break;) M: {8 I/ f- M6 V5 d5 V6 b
  757.     case 4:9 Q# W1 `" ~, Z$ U. C
  758.       {$ [1 H2 a4 E; o: G
  759.         FILE *fp;
    ' r* S0 f/ H6 E% p/ R- T; f
  760.         char szString1[128];
    . ~6 i1 H7 U. ]2 b8 C
  761.         char szString2[128];- W. t2 V* u3 |: r( r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    0 W; Z8 T: _: M5 S  v* r
  763.         if(fp)
    . b3 F# c% h, S* m
  764.         {8 m7 B6 P( w* d6 ]# s. l3 j) v
  765.           fscanf(fp,"%s",szString1);
    5 V3 A5 }1 j4 g7 d5 A" H
  766.           fclose(fp);
    * b6 _: O5 u  S' P+ W
  767.           fCheckVersion=atof(szString1);: ~, H$ [7 ^, O
  768.           fp=fopen(".\\checkversion.dat","r");1 Y0 o9 t" z2 i# o0 u
  769.           if(fp)
    8 D/ n! X; _/ @: q/ G% @
  770.           {) h3 N& [" ^& \: m# _4 `
  771.             fscanf(fp,"%s",szString2);# }, J* d8 F* |
  772.             fclose(fp);1 h9 f. l1 C4 t% d9 ]5 A! N
  773.             if(atof(szString1)!=atof(szString2))
    9 M* w5 T0 m$ k' }: T' g& L- I
  774.             {' M7 E" ?. B2 S
  775.               if(!Dn.Connected())
    # W- j& ^% |# B  m
  776.               {$ T6 V4 l: Z: O# c
  777.                 bFirstUpdate=TRUE;
    ; A$ x0 C  `' d% J$ I0 ?# [
  778.                 dwTotalFiles=1;4 b  x& L+ [; k  h3 H" W
  779.                 dwDownLoaded=0;
    2 b) |# `. s/ Z, F5 Z5 u" c
  780.                 bSilentStep=FALSE;
    2 t! v" B4 I+ ?- ?: x
  781.                 bCompressed=TRUE;
    : g# x, m( @. M$ {2 t' P
  782.                 strExtLocal=".\\DownLoad\";% T7 p/ e2 ]7 t4 J2 t- O
  783.                 strFullName="update.txt";( k  n$ H) l5 }$ c
  784.                 dwProgramState=AP_CONNECT;2 {/ [2 E" T1 `7 R0 I. ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: p: f* E7 q) l0 I7 j
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 N1 l9 [2 d* `( A9 x2 Y8 V1 R
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " g* A7 W8 v2 p+ Z7 \) r
  788. 2 C- `2 k2 Q, {8 p+ Z. B9 s
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 l8 b4 z  m1 _
  790.                 unlink(".\\DownLoad\\checkversion.txt");* d" T9 _) x- L1 Y) L) m
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)8 p$ a" y9 V! o
  792.                 {9 p% A0 S- M; ]
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");1 X6 t- ]6 M0 U
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % v3 E# g# @" ?6 R4 @
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");- d6 [6 f; w# y# J
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / i! B) ]& h# [7 {+ F. r+ w
  797. , S- _5 u0 ~9 B3 `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 }0 Z- Z1 e' |. s8 B
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" n) p$ \  W0 Y+ I# e- S
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");0 J9 B; h$ J* j  r! g2 P
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. P# L+ [6 {9 x. |8 J& i
  802.                 }
    4 M4 w  m; L6 L" k, ~( w2 |) i0 q
  803.                 dwStartUpSteps=5;
    2 }- ^& U5 p- o2 p+ ?5 L( b: N
  804.               }2 S( S5 M* u! I! u. F
  805.             }
    : ~  X0 V: ~5 K8 S/ W  T
  806.             else( A& s5 k1 y' K  t: r
  807.             {& G3 u" @: G# K% l  q  ^+ a
  808.               unlink(".\\DownLoad\\checkversion.txt");% F# i( C* R0 @9 r- f# @
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    2 G$ V( j6 o9 q, R! }; L
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, u' s/ K; w2 P: u
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");& a+ g1 a8 z. u. ]( f7 d, [; j$ \

  812. " f, T7 X# H0 n% _  R- I* s
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 Q9 }  _& T1 \- ]4 g! j+ l
  814.               dwStartUpSteps=99;
    ; M6 {6 L% P, e; o) g2 j3 z
  815.               bFinishUpdated=TRUE;
    : M; S1 v0 q. r, g" u( z
  816.               bCanUpdate=TRUE;
    " d, r( ^4 b; V1 w
  817.             }9 s# }! g' T) F3 q
  818.           }
    : ?" R5 f- \9 ]& |! p- h4 d7 E
  819.           else% P7 e# n' C5 f0 c) B2 B" O
  820.           {
    9 p; k% y9 l, \1 w' E' d7 ^
  821.             if(!Dn.Connected())
    - j$ g7 J' M! e4 r
  822.             {. ?6 m+ n3 O) h% g0 B, C
  823.               bFirstUpdate=TRUE;( V: E3 g6 V9 S4 o# J5 |8 T
  824.               dwTotalFiles=1;+ Y7 f+ Q4 K* p3 n4 z2 p
  825.               dwDownLoaded=0;% r' C! Q" _+ a) V* [
  826.               bSilentStep=FALSE;4 |* E3 o# C8 u2 H0 p
  827.               bCompressed=TRUE;  x& j4 O: o: f/ Q4 {6 v/ j
  828.               strExtLocal=".\\DownLoad\";
    / B) g9 p- t, v1 j2 s
  829.               strFullName="update.txt";
    4 T5 l2 V! u# V1 @
  830.               dwProgramState=AP_CONNECT;( C4 _- O! U4 |$ b
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 O& W0 W& ~0 ~5 z  p
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 A& e* P! h/ I( r- Q
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' z3 b7 ?4 }+ P; k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ m: d! Q1 |' ?$ K
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ! \( X& P- p0 ~% d3 v- i
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ' j0 U; j' T3 I6 ]& U
  837.               {
    $ a2 L3 E3 ?* P
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    4 ?. S2 C$ C% I, C  ~
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    - t. u  w$ z8 p9 N& w" ^
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");. {8 ~( [. ^8 ~) H6 i  [
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & W, U3 \7 ~; t: }6 C9 L
  842.                
    5 i$ N& K, T2 ?) @2 c$ H
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * y# k9 m% E5 @" U1 Q0 f
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    5 p) [7 w7 K: |; U
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");# J3 {+ W- G8 W+ J+ c5 q1 C
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / \* _7 h+ m/ q7 K8 I+ G3 s* Q* G! o
  847.               }
    ) c. s/ U( v) s: M
  848.               dwStartUpSteps=5;( z9 i  w2 G' y. J4 D
  849.             }9 F8 _% N3 D% c: H
  850.           }2 U* v( V% U; N6 u
  851.         }
    * F* N( c+ K0 ?) V7 a
  852.         else1 x+ d% }  p: \8 G/ k$ Q
  853.         {; [/ ^# x& h5 z# o. v. R6 c' S
  854.           dwStartUpSteps=3;% G" P" |1 I0 A. e2 l
  855.         }( F0 x0 K3 z8 J8 {
  856.       }
    " {* Z4 Y8 d& i& K- ?6 z2 @9 Q
  857.       break;
    + u/ e7 {9 w( A* q  l
  858.     case 5:" y  f4 w; S% n
  859.       {$ r8 p! N! I. s5 M, c
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)) E2 U  q2 i) ^. g9 O5 v+ J
  861.         {5 O+ t. F0 S5 G$ U" b; t4 E& S# g
  862.           int opt_overwrite=1;
    0 N& k; ?% ]8 ~8 |
  863.           int opt_do_extract_withoutpath=0;
    0 n* |# Z" ]9 H4 |+ V
  864.           unzFile uf=NULL;
    2 u/ b6 U5 P7 o

  865. ) l. L! U& @! Z5 X7 ^% G5 b
  866.           uf=unzOpen("Wsa.zip");
    0 f( l  q# W% v  K3 g  \7 ~  B
  867.           if(uf)9 u" D' {1 G( {0 D$ \# a4 \; ?6 \
  868.           {8 j  W9 x: Q$ S" {' \. ~
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);* _" j& a# G; V
  870.             unzClose(uf);$ o1 _# B" V! S5 ~2 {9 i1 h0 j
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    / T% z: [1 q: S3 s8 c
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    - L+ g- s9 q: I- ^! e7 g* N" x( m
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");5 ^5 K& W" A/ \& J1 E3 |0 w! {
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: v6 x" [; f1 l
  875.           }; N% G/ B- ?/ O$ {
  876.           DeleteFile("Wsa.zip" );0 j; N# D7 j. V& I
  877.         }+ X( J4 T4 r) f

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

: k' I/ ~) F" ~3 J* ]
9 G3 ?+ }0 G6 D: l# S

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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