找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
5 g- K9 m- h8 [# c, t. U
  1. / RevApp.cpp : Defines the class behaviors for the application.2 N# j! w. O$ T; u# o
  2. //; F; f& L* Z* i3 n& j
  3. 5 E% a+ V; C4 I. x
  4. #include "stdafx.h"5 `1 ^) r/ Y9 c! C) C' Z: w

  5. 6 g! _9 K; J1 s$ O- O6 f
  6. //#define UNICODE
      I! S& [" F" }9 e6 _
  7. //#include <gdiplus.h>; y( p" U: Q' K
  8. //using namespace Gdiplus;! }. C) {% A# K- y
  9. ! I' @% }( x3 R" J% s4 s
  10. #include "RevApp.h"
    # n& k; J1 |  W( Z
  11. #include "RevAppDlg.h"5 @4 E9 t# Q" F$ Z) ^
  12. 8 z& j( l8 }) R  W. f, O- Z$ T
  13. #pragma warning(disable:4786)
    # w1 \, g2 Q  o8 t4 R
  14. #include <map>
    4 |" o3 @) v# E5 b
  15. #include <list>9 g9 F# h" m0 i. ], V5 ?0 l
  16. #include <direct.h>
      g  Q9 J5 {% D8 O% s/ j
  17. " K7 d' y  |, h+ F( f! C" c, r8 C
  18. #ifdef _DEBUG6 z( e: s/ y) Z8 _& F2 P) h
  19. #define new DEBUG_NEW
    - N6 u. e" F% h! R% H
  20. #undef THIS_FILE  \  [1 l9 |3 g6 V
  21. static char THIS_FILE[] = __FILE__;) }1 K- G$ a/ N3 W* x
  22. #endif: D, h" c" Y8 M$ Y7 \3 X
  23. #include "SkinResDef.h"
    3 w3 f+ y+ Z' ?
  24. #include "ChangeBG.h"' j8 _. m8 Q" n& D. |
  25. #include "AFXINET.H", M, ?6 m) }0 D  R4 y) @9 C& |
  26. * F  |7 F- P1 J
  27. #define TRADITIONAL_CHINESE 0, l" r  @+ p, s( L& |1 y* f
  28. #define SIMPLIFY_CHINESE 17 }$ C" u3 r+ P4 y9 G* R1 C% t
  29. #define ENGLISH 22 W2 s. T3 J" l3 t4 I- e" c
  30. int m_iLanguage = ENGLISH;
    0 o% r8 ?5 q* D+ i
  31. /////////////////////////////////////////////////////////////////////////////- E$ Q7 S. T  w7 j, E
  32. // CRevAppApp
    9 x" {9 _: t$ g8 t: |
  33. ; j" M6 H9 w, G7 [( g, q# Q4 @% P  |
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)9 b; ~" _: N) R- o
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    & g4 d/ {7 q$ I, G. c
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    2 @+ m" _2 a) D
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!( l' i+ U3 |; G
  38.         //}}AFX_MSG
    9 V; V4 Q: S! ~/ [! A' |, K5 D
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)3 t, B1 O3 Z5 u: f  y
  40. END_MESSAGE_MAP()
    % N5 B) q1 x4 Q: n9 }( Q7 p  Q

  41. ; K3 x& J) h. d3 j
  42. /////////////////////////////////////////////////////////////////////////////! v3 a/ |% M3 b  \9 O4 [; k/ @
  43. // CRevAppApp construction' f. X, K$ A: \( Y  \0 a

  44. " s, ^5 ~# ^7 v
  45. CRevAppApp::CRevAppApp()3 `9 A  y% j* v( }6 k" f
  46. {- A8 c$ X+ E" ~* v3 h% o
  47.         // TODO: add construction code here,
    % |( D, R3 \: Y  Y; x
  48.         // Place all significant initialization in InitInstance
    0 O$ v- ?- E" Y( n" i" z
  49.   bDisplayIsBig5=FALSE;& Q) p; B2 N) I1 X! M
  50.   bRestartUpdater=FALSE;/ L' p6 V) A1 a( @* K$ Z
  51.   bFinishUpdated=FALSE;
    7 @( t1 B1 q- c$ ~. ]9 t; G
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    / E" \# R; l/ ^- `" S9 y8 h
  53.   InitChangeDataBig52GBKS();
    , F+ v$ R' g/ L/ P# J& ?! ~
  54.   InitChangeDataGBKS2Big5();
    2 _/ b0 E( L$ B: e8 N
  55.         //2 e9 `) j8 l' B8 R, i
  56.         bClickRunExe = FALSE;
    / I% E( z# c- g2 r  I( Y) U
  57.         //
    # K: N. I; S/ i) T; ]
  58. }
    + q/ n+ q: _# p1 K- {( B

  59. 1 ]( M+ C& s4 b8 I$ C' @- n, \% [
  60. CRevAppApp::~CRevAppApp(): \( ?) `' |2 w; Q
  61. {$ [( u3 @! s$ Q
  62.         // TODO: add construction code here,
    2 S$ Z& k0 x5 j2 h
  63.         // Place all significant initialization in InitInstance9 P8 E' e- Z' Q* |' i
  64.   EndChangeData();
    3 Q, k& ?3 k/ f2 Q1 M1 |. @7 R
  65. }
    0 ^  e; v/ f5 ?0 F
  66. ) X$ A# X- p  r7 O( F% o
  67. /////////////////////////////////////////////////////////////////////////////) g3 R; `' n- V* E$ r' x
  68. // The one and only CRevAppApp object
    , V2 p5 U$ {( H2 u# U* ]5 g

  69. 0 u! ?9 I" O. P
  70. CRevAppApp theApp;8 m" T7 d/ {0 K; V

  71. $ X/ v3 Y; v: G1 d
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)  H: e0 y& O+ F& b% c/ B5 d# _
  73. {
    ' i. t8 c. G3 h% l
  74.   int iEOF=0;+ @" }2 K1 `; I1 q
  75.   char szTempName[MAX_PATH];! L7 k" k  w$ W/ z! }
  76.   *szFileName=0;8 d# g1 o0 r1 A
  77.   iEOF=fscanf(fp,"%s",szTempName);
    % Q* G5 ]8 }, c- {7 J2 [) j* }9 [" ?
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    - @% m& q. H4 \
  79.   {. z  y+ T/ s% f3 r; k" J
  80.     strcpy(szFileName,&szTempName[1]);* O2 a# P$ b/ s/ j/ Z. ^  ?8 r% N
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)8 `( U+ h1 E- V! g% c8 @/ M' ^
  82.     {5 D/ `+ Y& w$ N$ ?. K
  83.       iEOF=fscanf(fp,"%s",szTempName);' h, u: `0 a- e: ~1 I1 d' W* V
  84.       strcat(szFileName," ");
    4 G4 D) g5 z% O" C9 w/ C6 Z: U; u
  85.       strcat(szFileName,szTempName);4 v; q8 q5 S; R( w
  86.     }9 B# Q' `/ o0 o# z* D0 P- Z( L
  87.     if(strlen(szFileName)>=1)) K$ \% y0 r, a9 `
  88.     {" y  D" V; F! D% O( _- h& V
  89.       szFileName[strlen(szFileName)-1]=0;
    + I+ o$ a8 ^( p) h" q' _0 ~
  90.     }
    ' Z* h' t2 J; V- A. K& t
  91.   }
    / h+ @8 O7 L/ C1 k) w
  92.   return szFileName;" y; l0 r7 F) Q4 s
  93. }
    % e1 F" m: s$ w- ^- ]/ [) q, g5 Q
  94. ) j7 k" |  g) Z; a% n1 K
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)6 B  Z4 [2 w  b7 r) R
  96. {; t/ d1 u3 X2 T6 n" S
  97.   FILE *fp;
    8 u" i7 J, x* J& y) w: i# h
  98.   char *key=NULL;
    . d7 t) ~+ X5 @
  99.   char version[MAX_PATH];
    ) g. M' }7 n' ^' A* I2 C, T
  100.   LPUPDATEFILE file,olds;
      w% W) O& r# o3 v9 O
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
      i# M7 V3 s& p; Q6 L* a# J3 R, r

  102. , Y  T5 X# }( g0 I
  103.   UpdateList.clear();2 Z* k+ v2 i; d+ c, j; }
  104.   UpdateFile.clear();
    ! H9 Q4 H4 a6 R# y& F, w) `+ [
  105.   if(GetFileAttributes(filename)==-1) return false;
    ! R' D( K* r$ {9 m7 l" \
  106.   if(!(fp=fopen(filename,"r"))) return false;/ H3 h$ c* u. ]+ ?+ r; x+ A
  107.   fscanf(fp,"%s",version);4 h1 z. D0 D* C8 O1 \( c8 D
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }9 s; d' S7 a  \0 R3 O! _
  109.   while(fscanf(fp,"%s",version)!=EOF)
    - k( e. Q) z% n+ e0 w
  110.   {
    5 [5 x( B) \6 j0 W/ X: G
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) I8 J' B  |0 ^' s, B, f+ f
  112.     fscanf(fp,"%s",file->path);
    5 u6 J) c- t& L/ n
  113.     ReadFileNames(fp,file->file);
    % ?/ f9 j. u" z8 T2 M, C$ o
  114.     strcpy(file->full,".");6 ]/ x' l2 F3 Z' s2 |1 s4 I
  115.     strcat(file->full,file->path);
    # y- _2 x1 a6 U2 f" j0 p* N* @- v
  116.     strcat(file->full,file->file);
    ( F7 W) a6 @! C  I3 m; x
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())% f0 `# s) b/ E3 d0 t
  118.     {5 B- K3 k4 w3 {9 ?1 r; W9 Y+ d
  119.       file->vers=(float)atof(version);
    4 C4 h0 a2 p  H  _2 X
  120.       UpdateList.push_back(file->full);" W$ U  }; Y# I3 n, u% `9 _" Z
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));6 z; ~. m: S* n7 K6 x2 E' b5 r
  122.     }
    , M  U3 Z3 P+ Q* \# K& }
  123.     else
    8 y8 Q( F9 _9 K7 N/ }
  124.     {
    ( K6 ~1 A! r3 Q% D: f/ }
  125.       olds=(*p).second;  s5 j1 u& \2 s5 _! b1 W6 D9 u, E8 M
  126.       if(olds->vers<(float)atof(version))5 z! e" B9 t, z+ \7 m& r6 \
  127.       {
    ! E! I2 a5 D% E5 a2 s
  128.         olds->vers=(float)atof(version);
    % W, `$ g& {5 T' x+ _% D$ {# A; x
  129.       }
    ! `2 y+ f4 Q8 c# ^  Q/ d
  130.       free(file);
    , g  S) {* m: x
  131.     }; o3 F% `& O% a) `) E( v
  132.   }* G- K9 c: }5 E: g" Z8 ~* m9 m0 \! H: h
  133.   fclose(fp);
    5 Y3 J. K1 @" t) W/ }
  134.   return true;
    1 ]/ m+ n8 ~0 w- @' N' K! f0 p
  135. }
    6 J* B: c! g% y" ]! R% z( e2 o" P

  136. ( j7 [( y- l' `- N7 `. j: J) t8 _
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath). W, _4 P' w( {% `2 h# \
  138. {
    . q" y9 L  F# @; S
  139.   TCHAR  szFull[MAX_PATH];) C& _, B3 q6 i" ]% W9 L
  140.   TCHAR *token,*inter;
    & O# ~% _+ t: J) a3 H
  141.   *szPath=0;) x0 I* b3 P" |0 u9 z! _( W
  142.   strcpy(szFull,szFullPath);/ N* ~1 _6 {7 V3 e9 ~# y( r! _
  143.   token=strtok(szFull,"\\/");
    . k) G" |' [0 D
  144.   inter=token;
    4 x$ ]& w7 _  J. ]/ K6 N( A
  145.   while(token=strtok(NULL,"\\/"))
    ( ~, i' m9 T% a/ S6 K
  146.   {1 x. j: @! f* `( X8 B1 h) s
  147.     strcat(szPath,inter);9 S) n/ Z9 m" }, K
  148.     strcat(szPath,"\");
    1 H+ j: K% f5 h
  149.     inter=token;
    : x" e+ k# o& I% T
  150.   }
    & I2 W7 x# t" Q9 K  G+ p0 K% M9 \& V  j
  151.   return strlen(szPath);
    + p8 a+ W' G9 L. ^2 N. N$ e0 {( q
  152. }
    $ J( t4 L. a  p4 _& ~/ M

  153. : d: h1 P, H" t8 S! h) }
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    - z" _' a4 B- y; y+ ?
  155. {. }6 n  Z, N) c$ g; e! i- ?
  156.   DWORD attrib=GetFileAttributes(Target);
    ' f6 ?! G7 ^* @2 g; o4 w; [
  157.   if(attrib!=-1)) e+ Q  F4 Q# c' d- V+ P. D! C( j! Q
  158.   {
    * ^3 {& L: Y8 Q+ |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' T- Y- A% j. Q* Q* q4 v
  160.     {. E5 E* E; b5 J9 d
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);- ~8 m9 u2 D: k  k5 G5 Z
  162.       SetFileAttributes(Target,attrib);9 `, M; L7 P& n  @
  163.     }0 m. C; q' F# |/ {
  164.   }- l" w  g" r: b, r
  165.   CopyFile(Source,Target,Erase);- W; K8 c, L$ q+ x0 J$ @& E( C6 Z
  166. }
    ) k2 a$ g$ e. z  S, E

  167. $ N; ~; m9 m) e* q8 }3 u
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    9 |' @+ w& d, K+ l7 M
  169. {4 Y( j. o# S+ \9 d- p: V7 j# K4 I
  170.      FILE *fp;
    9 `0 B! J9 M5 U+ I2 U: J7 h
  171.      char  szBuffer[8192];& X9 A- }# I  B: ]/ e/ B
  172.   va_list  argptr;
    & B/ u' O& [- ?$ B* L
  173. 3 Z5 G& _' d9 `) R+ x; {3 e
  174.         va_start(argptr,message);
    $ F5 n9 Z7 F+ L. o$ {2 P
  175.         vsprintf(szBuffer,message,argptr);
    ' Q% X- s+ P7 [/ w5 b
  176.         va_end(argptr);' f& k7 |9 u  a6 U
  177.   fp=fopen(FileName,"a");
    5 [! G4 K. b. G$ r
  178.   if(fp)
    0 J" ^1 V! J, k5 m
  179.   {3 j  N# o3 N- _* i7 l4 G" k6 C
  180.     fprintf(fp,szBuffer);$ P& N/ p' H: z0 H( j/ S; v
  181.     fclose(fp);& }, S) E. }7 s2 e0 p
  182.           _flushall();
    - Y: g: T3 w# O# w/ @* p- t
  183.   }
    ) p! N' d, `4 t& a0 N: o- h) N' s
  184. }
    ' V! I9 F8 {' H/ c% ^) ?

  185. 6 q0 {" I5 l) G, |" n( D) S0 u( I/ v: ]
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 M1 n# r0 i. V7 e* u! ~
  187. {  e- ^* W, l# i* A
  188.      FILE *fp;
    ! _! L. V/ b2 O* d3 Q0 L, t3 B3 w
  189.     DWORD  attrib;5 M- i: l- a" N$ Y
  190.   attrib=GetFileAttributes(FileName);$ m2 ]5 p( K$ |
  191.   if(attrib!=-1)
    : p& q- i  d: W: p
  192.   {
    ; C% ~' j: `) X' y# Q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);5 e* H5 H  s( T: `& I) c
  194.     if(!SetFileAttributes(FileName,attrib))
    ! M2 f8 X- G) `6 }
  195.     {% [4 N* u+ s* x4 d
  196.       return FALSE;" y" l- X+ y2 L4 C4 U
  197.     }' @" e5 U0 S' f( f
  198.   }( {5 w+ y3 G% e# P& t& U
  199.   fp=fopen(FileName,"wb");0 `: W. ^. N3 ^: j+ ?
  200.   if(fp)( P3 p$ @2 T( `% F1 ]
  201.   {! Z( o% r0 r, ]+ t/ F/ U
  202.     fclose(fp);
    5 S( k$ X. T0 a  H. x
  203.   }
    8 P: M# c) N1 j; L4 V" |
  204.   return TRUE;3 r: r. n% C% l4 {- L; }' C- x
  205. }8 o( _0 M4 A, b1 C+ ]  C# o
  206. . j4 Z8 q' p$ ^; C) Y
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    # ?7 A0 G: }' S9 f7 p0 ?# n9 ]
  208. {
    ) ?; _5 D8 e; z# T& Q
  209.   char filename[MAX_PATH];; @1 L& G) ]6 a3 A4 `6 p* B
  210.   LPUPDATEFILE file,olds;, u$ q& T7 G) s3 }
  211.   std::map<int,CString>::iterator i;% N0 ?" l, h8 a1 \; s0 g$ C
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 r8 q- }" V! ^; u+ T! v
  213.   std::list<CString>::iterator l;9 Q) s+ F9 S0 h# w1 i! ]

  214. 5 i$ b7 y7 U6 [0 L$ \
  215.   if(bFirstUpdate)
    ' _# ]( [4 S( S6 Q3 L# X, K' z
  216.   {
    3 C  ]' p% ~. S1 M2 i" M
  217.     dwCurrFile=0;
    % F' Q6 z0 \+ v# s# _% D
  218.     bFirstUpdate=FALSE;
    / ~  x  ^& j* |  O4 c: X+ `
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  f, Z# Y0 J- k% v0 @
  220.     {& m" G& [' k: Q% J) a3 j
  221.       dwTotalFiles=UpdateLocal.size();8 N' F1 S- o, f) j/ X  Z
  222.       dwDownLoaded=0;
    " a0 N+ V. R% [. u
  223.       bSilentStep=FALSE;3 g4 @2 M! a0 V
  224.       bCompressed=TRUE;
      A  V  _1 O$ v+ o9 S
  225.       strExtLocal.Empty();
    ; I& A8 Q/ ]% W9 e
  226.       strFullName=(*i).second;
    8 P( y, r5 f0 l  u- {* o- g( \1 `0 r
  227.       dwProgramState=AP_CONNECT;
    : N, q5 x0 |; }* j
  228.       return TRUE;8 k) j0 c6 r1 g0 C
  229.     }
    1 q9 K" b# v- e- [; F, i% M& ~
  230.   }  R: p% S$ I* v. I
  231.   else if(bRestartUpdater==FALSE)
    # a* d! y/ A& r9 q  O8 q. @# C% g
  232.   {% o$ n; g5 |3 Q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())4 v  R# b6 s5 u& R, J
  234.     {
    2 `! ]/ v" x4 z+ k, s" C
  235.       file=(*p).second;, p* S; q) i( S
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ) y! K* D. g# ~8 x; c# S
  237.       {/ M  Y! i, b; s4 v9 X. F
  238.         olds=(*p).second;% }' x+ F8 a! T5 i
  239.         olds->vers=file->vers;+ b7 k4 {. q2 A2 `6 q8 v
  240.       }
      Q& ]& K3 j, ^0 S# G" g
  241.       else/ E+ D# A! c2 ]; q* `2 l" x/ n
  242.       {: H9 a, F2 M3 f6 l
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * u* j5 o! X7 ?. B0 P0 g' t6 I
  244.         memcpy(olds,file,sizeof(UPDATEFILE));3 r: l' U' K6 L; f% u
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));: w  G  q) c4 m5 e% N# @
  246.       }" p& q  o) m' p+ I1 u
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");1 {( @9 P1 N; x; `' P: k  Y0 U% Y* P; R
  248.       sprintf(filename,"(%s)",file->file);
    * f( k* t, y% ]/ y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - Q* G, ^( ~: k& Z" n. b
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    # Z) I& P" x" n# h
  251.     }
    4 J7 r6 `* {9 u3 [0 o% _# h
  252.     dwCurrFile++;; Q  n+ k1 y& v- [2 A. [
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) \+ f- f) P$ [. b+ Z4 c
  254.     {
    : k! v$ }9 Z- l% A: I% C
  255.       bSilentStep=FALSE;
    # F2 O1 W! I0 }" B% Q! ?
  256.       bCompressed=TRUE;, ~% r. U7 E5 C- V8 s2 K
  257.       strExtLocal.Empty();
    : F1 {% W1 W) ~; O, y; f- o! `
  258.       strFullName=(*i).second;. m% y  e6 Y" v
  259.       dwProgramState=AP_CONNECT;
    % y9 v4 f0 |0 N) b* C7 g
  260.       return TRUE;
    & y) W3 B. K0 a! s- i
  261.     }0 J/ p# I  h8 M$ o9 `- ~8 H
  262.     if(!bRestartUpdater)' S: j2 G1 ^$ n, |
  263.     {. Z. U  P8 ], p' v/ F
  264.       int iCurrSize,iFileSize;
    # C; K. p' D& |
  265.       iCurrSize=0;
    ( P+ r( r$ Y/ p' E* V* T
  266.       iFileSize=UpdateList2.size();
      i& q$ G# m3 q" j* g3 J8 t, u
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    # E, X# m- p2 I" q9 w/ f9 \: }2 t
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");( I% h7 q7 U9 U5 d
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 D! V8 M& ~" o/ T- l( X+ Z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: Y: c! D7 H, R0 {& Q/ |2 D
  271.       Fclearf(".\\update.dat");
    ! l# B8 Q. [8 `- E% Y
  272.       Fprintf(".\\update.dat","Bloodyf\n");9 B; o2 ~$ M0 s6 H' p. F4 p
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 ^3 _9 F" U4 _* Y6 s6 {+ [
  274.       {
    ) |7 l1 C& v% D- ~' c8 v
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())1 l% k1 o" c$ \% Y- c
  276.         {) z5 V4 y: f8 l$ x7 K/ [( V+ r" ?
  277.           file=(*p).second;
    6 q: s* R8 G4 i/ i# `0 m) ^3 Y
  278.           sprintf(filename,"(%s)",file->file);* f" Y. M7 i; ~7 T1 ?' Z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 E% {! z+ V7 [: \8 P* i
  280.           iCurrSize++;
    ) k/ i. W) n. R. e7 `
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) X# Q3 \; u! {* o( Z8 v
  282.         }
    ! t0 F. W3 A5 ^" c
  283.       }  m: X$ i8 J% z+ p
  284.       unlink(".\\update.txt");" D5 a! l5 e/ t. Y' w, x
  285.       unlink(".\\update.tmp");7 R' k  j1 U2 t( a
  286.       Fclearf(".\\checkversion.dat");: D9 M& c+ i& z1 f
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    * W! h) N: T0 X2 j+ K# _. J2 O
  288.       if(UpdateLocal.size()), p2 [& I# @: p6 ~/ ]5 ~
  289.       {! E& h; Z) I3 y/ H- f/ v8 i
  290.         UpdateLocal.clear();
    2 ]% |4 e* G! `$ v2 I
  291.       }+ _; ?8 Q  Y# {4 H( p
  292.       if(UpdateFile3.size())  a$ P: W7 L4 E% k' z+ j
  293.       {
    9 u% I$ ^9 ?6 N) A$ ]9 [
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 x5 t5 C8 P1 X* a9 Q% l$ K6 F
  295.         {
    - V+ @& a+ ?% `, l8 n
  296.           file=(*p).second;
    , P1 F; H) P: L! s: R
  297.           free(file);
    * t/ v' L/ F" p& Z7 @
  298.         }- Q* l- c% g( T# x
  299.         UpdateFile3.clear();/ v: R) c! b, R9 N$ h
  300.         UpdateList3.clear();9 [9 L/ |( B. J3 H$ b
  301.       }- y- Q. C: C6 w' d+ g% I( t
  302.       if(UpdateFile2.size()): s0 i# ^- H  O
  303.       {
    . Y8 E3 e5 v+ }4 c: E/ j* v
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , K. V! O) U# M5 r& Z- m$ b2 b
  305.         {1 P8 p' d2 |# R, {
  306.           file=(*p).second;1 w& \2 Z" _9 t* E, s
  307.           free(file);2 A% T* E( S: ]
  308.         }
    - k; q5 i& h& y7 _
  309.         UpdateFile2.clear();1 _3 ]2 F, d* S4 u: Y9 c
  310.         UpdateList2.clear();
    . p9 P3 e# t+ z! Z
  311.       }
    * J# s3 x" k" L! O0 w$ Y: d$ H
  312.       if(UpdateFile1.size())3 `  L, r  O: Q' E3 ~0 L  W
  313.       {' L/ t: }* H! h9 ]5 O. m/ {0 e
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 U3 }1 m$ v2 H0 ]) `( U3 V( t' M' ]  F$ G
  315.         {: ~! e8 b( G/ H% e0 V, m
  316.           file=(*p).second;8 _! T# R$ v2 G3 ^
  317.           free(file);* w1 O0 r- [6 `+ u, Z6 Z9 y
  318.         }' w/ W7 t. x  B
  319.         UpdateFile1.clear();8 d2 K; M" i  {3 I$ W
  320.         UpdateList1.clear();
    ( p0 |, G8 g3 |+ l# ?0 @3 {
  321.       }
    - s/ j7 s: `, g) a; m1 E) d% R
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ m% o' `. o: y8 Z" A* ^( p
  323.     }8 ?! p  R+ c7 [
  324.   }
    4 w) {6 U/ V5 C: p  H) A6 L! f
  325.   return FALSE;
    " e4 U6 x% {8 T2 `5 k; W' I
  326. }
    3 P8 ?, \3 M1 G$ r; h  b  ]
  327. - a% x! x6 w$ ^. X5 Z2 _  I
  328. void CRevAppApp::ClearAll(void), {0 X# o0 \9 b* ]9 t: j9 Q4 {3 t
  329. {/ [( I8 l, p5 k
  330.   LPUPDATEFILE file;
    + }: ^+ i5 K& y# P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;4 a: U0 ?7 z. _
  332. : O* g2 `3 |$ E, R( d3 l# Q* f  \/ a
  333.   if(UpdateLocal.size())+ `# {2 m6 D- M. X  t! ~- ~
  334.   {
    7 @4 f8 ]5 p# i1 w% q& K
  335.     UpdateLocal.clear();: p( T! n% @( I+ \4 Y
  336.   }
    2 T" G- ^) j8 R% }) w3 d
  337.   if(UpdateFile3.size())
    $ j. x, u7 m* q9 }- p
  338.   {9 x  d# a8 J, y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% e" V! Y0 c4 B! ^$ I1 y
  340.     {+ Y! T3 }, a: J4 e5 s
  341.       file=(*p).second;
    . O( u. L) T5 E$ i* f' O
  342.       free(file);
    - p4 I" ~/ Z8 F! ?7 [' L8 x. k& ]
  343.     }
    # Y9 \' l+ [8 h; q, d
  344.     UpdateFile3.clear();
    0 n* p) L5 e0 Q" }  t5 ]/ R" |
  345.     UpdateList3.clear();
    & a8 ~, e) k% v' y2 ~6 Y3 M) e+ ]
  346.   }
    7 d4 d% H  x/ W, J. ]# \+ ]
  347.   if(UpdateFile2.size())
    2 S3 B0 M/ y* J5 Z6 p- Q
  348.   {
    & p( G* p4 V8 e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), P# u4 A/ z5 J( M7 W! u/ R: `" f
  350.     {. Q0 O" g) C$ M3 X1 _' G8 w
  351.       file=(*p).second;' ~, j9 Q, ?0 h: u
  352.       free(file);; e8 S8 [. T5 G# a" Y: ?
  353.     }
    + B2 m8 s. g& E" Y
  354.     UpdateFile2.clear();
    , r" O# T1 w' f5 \
  355.     UpdateList2.clear();
    8 N0 n" m5 a: `
  356.   }
    5 ~$ L3 v, E: ^4 `8 x" T+ l
  357.   if(UpdateFile1.size())6 g2 C$ G4 V, e1 }' i+ i! I
  358.   {& ]* B- r( J- h0 W3 [9 E
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 R5 H& c$ Y4 K) s" i4 O
  360.     {3 l- m8 Q& X  S+ H0 x) y
  361.       file=(*p).second;
    ( ?( M* b, k# X9 Q& w: A( s
  362.       free(file);
    " z$ s6 i6 y$ F; U& }$ o
  363.     }
    2 [0 }& {  B5 c1 Q% ?9 T& K
  364.     UpdateFile1.clear();
    , a& N: }* ]$ X
  365.     UpdateList1.clear();
    3 f% h9 Y+ l. V% g: P
  366.   }3 S/ g% Q% D6 F4 S3 E+ v# [
  367. }  ( r/ ^2 S0 M% \
  368.   
    ( [0 c; u1 K& b3 [0 F
  369. BOOL CRevAppApp::CheckLocalVersion(void)( S; P6 |4 `/ R3 {# I/ `
  370. {8 W% \& L' m  s4 Z. g: q; k/ `4 a6 y
  371.   int c;
    5 I/ ~8 u* m6 q2 k
  372.   LPUPDATEFILE file1,file2;
    $ u, N  Y& t+ x! |
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    * u  q; ]) f) O; S3 [
  374.   std::list<CString>::iterator l;
    : |6 Z5 \1 a# `5 y  q
  375. # T5 R$ q3 I% o$ P1 s
  376.   UpdateLocal.clear();. w3 ~) J4 M2 O! w- Z6 a
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);: @& F! ~% _8 W$ m0 t) q6 c
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    / {  O+ l+ F. n0 `. [; o
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) R6 [0 b- G8 s# a9 n
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( O' Y) S" [, g/ u, z+ `
  381.   if(UpdateFile3.size())
    ! m1 _: a2 g# r8 k. O3 k3 F5 b7 C
  382.   {. Z' [( `, I* U1 ^6 v6 [( a+ J
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)# {6 H+ U1 l- T
  384.     {  }: \; D8 M3 V7 x5 h7 [6 a
  385.       file2=(LPUPDATEFILE)(*i).second;" Q" D4 a' x; R! v' L, n
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 O, W8 k/ f+ r! s% j8 @% t6 y' B2 ^
  387.       {
    3 @. }' z; X  ?. f8 H6 o3 {
  388.         file1=(LPUPDATEFILE)(*p).second;$ Q! y  v9 y' L4 J8 U
  389.         file1->vers=file2->vers;
    ( Z/ c' i$ l7 L* d
  390.       }
    1 l, l8 V( Q2 G: n) \
  391.       else
    & l& Z9 J7 i; J
  392.       {6 F! b6 ~! K6 B. U  P
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ i. l0 u& ~: j3 M, v2 u
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));, }% m$ H/ w$ }/ q& W
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ( g- h0 I( d* E; g9 K
  396.       }  r( Z" K4 u4 Y6 }
  397.     }
      w5 z; {5 b+ o
  398.   }; z. q* J& b7 \$ H& z% K
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)& ^5 [. B; ^# W. N; S
  400.   {9 J0 u0 z3 y7 b+ }) C' g9 I  x; H1 g5 J
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( j& ~# E; [) j" H/ `) {
  402.     {  ~7 @5 \3 A4 q+ `8 w
  403.       file2=(LPUPDATEFILE)(*i).second;
    - E0 J1 M$ _1 N! T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" J2 P# d9 s( x) t# A# I. U9 Q- A9 ]. Q
  405.       {0 t4 w3 ]2 r! \# I, }
  406.         file1=(LPUPDATEFILE)(*p).second;$ b  G8 K3 ]0 y0 A1 Z
  407.         if(file1->vers!=file2->vers)) C' P7 p2 v: ]- y
  408.         {
    ( m. u' e8 c4 e4 d) U0 y  y9 G. E
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 v3 J' J7 ~  f" K$ g% I( }
  410.           c++;/ S4 X8 _. k: _, q# O5 k
  411.         }
      b  T$ E& {; z, ~$ M: Z  A
  412.       }
    ! s8 N; D) _4 r7 g
  413.       else
    # d& ^% \+ \% ]6 g/ Q
  414.       {: L2 d4 L" W) Z& `: t2 j3 C
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 u5 c. p3 J9 n7 r
  416.         c++;
    . R. x) C9 p5 x0 B+ N( ?2 L
  417.       }9 R2 y" \2 G8 x/ W( E5 u! G
  418.     }% G; o0 x4 z7 }9 h7 W' k' y
  419.   }
    2 G. @5 v+ K6 M4 Q. w, V
  420.   unlink(".\\DownLoad\\update.txt");/ F& b2 a" i$ G  U
  421.   if(UpdateLocal.size()) return TRUE;
    7 b% q& d  [: w; e3 \
  422.   else                   return FALSE;+ t# P! u) ~7 y$ F
  423. }
    0 @  J/ Z# j2 n
  424. / d5 Q8 f& F1 [. m+ x, f
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/", k4 R) h+ B4 t2 B2 L! ]
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    9 D! K5 T+ c6 K; f  ~9 l$ k

  427. . U$ Z. _4 P+ z/ N6 Z6 l
  428. 5 r7 r- R  Q# O' {

  429. # r& `) m3 }3 I& L4 u& e9 r7 p, h
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ' W( V$ t+ J/ b& Z; k2 l6 c$ b5 M9 N: A
  431. {2 q; R$ O. ^& s  G
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
      c: I" H, j. S. q0 c" h
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 y. ?( z. @5 U! ~' A7 c3 k
  434.   {; w1 u) m" O$ k  ?: W
  435.     char szLanguage[50];
    , \8 w& d. d4 i' X
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- r$ `- V" \7 N7 j* m% B' {6 \
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- q7 d3 R. D1 w: \) E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + p- o; g7 x8 d* S) C0 ?8 R# n
  439.     else                                   m_iLanguage=ENGLISH;
    % v) x6 u6 s" r! G9 A
  440.     char szRegister[100];
    ! ~2 f; y# B  p3 V( {) ~1 ?7 `
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & X, w& R8 Q3 c$ O% d' [
  442.     strRegsName=szRegister;
    / a# P' m# z+ D7 S
  443.     char szPatchURL[100];4 B4 |/ |* `4 w. \3 ^8 F2 D
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# l- t$ m; D% l
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 k. @& h1 t/ c. e
  446.   }1 w/ T+ l: A4 F
  447.   else0 i9 M6 l0 J& |# t
  448.   {
    $ U% s) j, S- v( W7 e) n) o# E
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / j  T' N3 j% g3 c) \) }. R  {' d
  450.     strRegsName=DEFAULT_REG_URL;
    / u( Z3 N% e6 g$ s8 c
  451.   }
    7 H: X; t( B1 O5 G) ?2 Q" C
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    - L% o/ a3 N2 u' R
  453.   {: r" c0 f7 ?7 j+ |$ U/ @; F
  454.     char szIP[50];
    % J' P5 @5 c' m3 T" w6 Y7 M
  455.     char szDIR[300];
    7 O% ]6 r7 F3 W4 i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ) s( y1 P& T5 b
  457.     {% U7 i9 }6 J! f* X/ A1 i. ^4 f
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");9 O- [, o) B/ Z% Y" A- @3 M) D
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# t& t& g+ U+ M- x8 J( q' L
  460.       strHostName=szIP;( c: i9 u' f5 q) `( u+ _
  461.       strHostPath.Format("/%s",szDIR);
    , s7 G" ]4 c$ |+ ~! S
  462.     }& v& O, h; u7 |; q8 p
  463.     else
    6 f% v6 W/ r' Q! S
  464.     {
    / x6 a3 p1 K  @. \' X# h' n8 K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' Y( J" ]: S  K8 K$ @7 f- x9 ^
  466.       {
    2 m) U7 g; N- G5 V
  467.         char szLanguage[50];8 H! w- C& @. G0 E3 p" ]$ J2 ]. S" @
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 z) z4 S# M" w. \$ i$ q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 O7 P6 [3 ~2 L; _8 d1 T
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 o; Q: ?+ d5 {* k2 E" ~( ~$ v' v
  471.         else                                   m_iLanguage=ENGLISH;
    4 C* z& _' n+ l$ S5 y
  472.         char szRegister[100];
    6 A0 X+ v' X6 ]" D, P
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      o, z  |4 b5 E, Y: N
  474.         strRegsName=szRegister;
    # u; O& |. r- T2 S4 ]2 c4 d: W' x8 @
  475.         char szPatchURL[100];! A2 M) `; Q4 J7 g
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 L/ Q0 p1 X  c
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ f7 e- v: ^; ]+ \2 ?# _4 C
  478.       }0 H# m) ^" n% u/ B( t
  479.       else2 l, `% ^/ r+ g
  480.       {
      M8 n) Q( }# A7 K4 t! y& j
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 G; g7 K( l, q
  482.         strRegsName=DEFAULT_REG_URL;
    ) U7 j* o6 f% z1 }4 W) j
  483.       }
    $ E7 U# G" t5 X) P. s
  484.     }
    4 E9 M9 F3 q, l2 ^- l, P, a
  485.   }
    & y7 \, N6 z9 c1 e
  486.   return true;0 ]* s2 r3 n, \. U* ]* A* E
  487. }1 B& H$ w1 D. g) G% y, i

  488. , U: l9 B; d: h/ k  Q. k0 V( b, B- }- A
  489. #include ".\ZLib\unzip.h"
    3 N( c) z  D: x& r/ B1 j  H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    + R7 \: i: K- ~8 p4 _9 a
  491. /////////////////////////////////////////////////////////////////////////////
    ! |' U# {7 j6 L5 z( u& y% J. v
  492. // CRevAppApp initialization
    * \& X- }) e" d6 W

  493. 4 t5 v, z6 q1 x# q3 X
  494. BOOL CRevAppApp::InitInstance()' U1 e$ w4 Z0 M3 n* s# j
  495. {) Q$ o: S4 q6 s$ w
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];" k7 u+ ~% U0 o9 D3 F8 F

  497. & O6 g& w8 u; l! \% P% H
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    0 Z0 n' O. w% E8 F
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    4 G; G' j6 |4 M) o* Z
  500.   {
    2 i2 J# o2 k6 j+ P
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");; K7 U# d( \0 v; x3 o( I
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 o9 i5 W" Y2 h
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))' k% Y; @" E0 _$ _9 A
  504.     {# o+ p9 y$ P: B8 Q' W6 w
  505.       strcpy(szPath,szPathTarget);
    ; \( ~0 R& y" J. K
  506.       SetCurrentDirectory(szPath);
    0 D+ W: }/ T- l3 G
  507.     }9 [$ S3 p( A$ p1 w2 ?. P1 c2 c3 |
  508.   }- T9 W6 `% X- l" b! o* [, P
  509. #ifdef _DEBUG
    ! z0 \0 D8 U" F; @- C8 ]
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; z- d: M: ?7 O$ f
  511. #else. |  Z9 A$ h9 _) J1 J
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 h- z0 Q( o1 Y) ]2 X' o: {
  513. #endif7 U2 F$ T8 x0 R
  514.   {+ y4 [6 N9 a' S1 G
  515.     char tempFileName[MAX_PATH];0 l* J# I3 V6 ~
  516.     strcpy(tempFileName,szPathSource);
    % s2 z# @$ S1 @: \' S
  517.     tempFileName[strlen(szPathSource)-12]=0;% S6 N* S& [" w/ j, i+ \
  518.     strcat(tempFileName,"\\$CSUpdate.exe");3 [; F5 Y! q! i0 f  b1 i
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    + n" P7 a' ~4 H$ }/ n1 Z( _! _5 _
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    6 z( z3 _2 b1 C: s; Y, y
  521.     return TRUE;
    ! G" x0 n: {, y8 @( A
  522.   }
    5 L* ?' a$ a: d" P3 }' J
  523.   // Nuke 0118: Delete run.exe
    ; `# o6 Q6 X# c( R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );3 J' v' R: \: e' s  @9 ]. z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");+ O' {, V: H. q/ e
  526.   if(!ReadCfgFile("Config.ini"))
    # x) M" h1 ?$ c& O
  527.   {2 D5 Y! a: A, r; G0 l2 {: k' e
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    " ^5 o/ b( e4 |7 I8 |7 k. P# g
  529.     return TRUE;
    # I0 H4 B  h# e0 B
  530.   }% @" @! s) i4 ~6 s2 f9 r6 t. j
  531.   HANDLE mutex;) D+ j( `; K0 N% _) T# Q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ v4 a4 s& n+ G: z6 @
  533.   {
    0 v! H# q+ }* v6 U8 ^
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    % d, C+ W; f1 h9 d
  535.     {
    3 @6 c( L$ L  A  W! W3 J; C: t2 n
  536.       CloseHandle(mutex);: V% W2 S5 K. ?& I
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ; J  V" c( I9 v4 }3 l; [( }) s
  538.       return TRUE;: x3 g6 K% r+ a" u
  539.     }
    7 v; z8 R; `9 A( M* Y6 b
  540.   }  
    $ G6 E2 Q- `3 h! ~7 Y
  541.   CloseHandle(mutex);
    * A9 x" x' J: F6 N% q+ b

  542. ) L/ R/ c) ~0 M3 W
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% w. S- \* E, l7 F0 C

  544. ; _9 F3 U- H% s! ?( A
  545.         AfxEnableControlContainer();; e5 o& C. {9 H- \

  546. - I* \* D5 l+ g2 v  R& W2 m- Z
  547.   bCanUpdate=FALSE;
    2 E+ m$ ~5 {5 _- z; S4 k
  548.   dwStartUpSteps=1;
    ; O6 K( i8 v! ~& u) @: [2 k+ r
  549.   dwProgramState=AP_NOTHING;8 g! R$ G6 u% g
  550. 0 G1 {- \, @1 T+ H2 X, y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    + f( T6 T/ n7 o! q3 U5 g/ G

  552. : Q8 Z6 v) r: H: L
  553.         // Standard initialization' D& I5 q8 z, n9 n
  554.         // If you are not using these features and wish to reduce the size0 x1 r0 Q8 b$ Q
  555.         //  of your final executable, you should remove from the following  N# ]3 Q* y# ^0 ~
  556.         //  the specific initialization routines you do not need.8 G' h7 ]) B8 F+ P) C. h
  557. ! f3 ^8 \# K1 ^0 \
  558. #ifdef _AFXDLL
    # s! ]! J/ p9 s8 @
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL% y2 L& \: a( p/ T6 W/ J8 A& r& L  {
  560. #else' u+ A) a* |  x
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    " N0 W+ W3 ?) t' Q
  562. #endif/ K# Q9 y$ m- @" {  w) v

  563. ' U; N3 o* u! J: ~! L! C, M- h
  564.   dlg=new CRevAppDlg;% D# n. I" r; D  K! e6 I# x8 F( {+ ^
  565.   dlg->Create(IDD_REVAPP_DIALOG);% R+ R- r3 O+ R: y" S
  566.   dlg->ShowWindow(SW_SHOWNORMAL);" a+ y& Q+ \0 ^' y* B! ~: i7 Z
  567.   m_pMainWnd=dlg;, o' F; b, t5 k. a4 Q
  568. 4 ]" j; p9 l+ c: S" [* q* X% G( E
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);6 e" K  {$ S- g, x

  570. & X% z6 d$ w6 E9 B* j5 R
  571. //  GdiplusStartupInput gdiplusStartupInput;
    8 s/ d' z% t+ B+ L. B; R) L
  572. //  ULONG_PTR gdiplusToken;  b) U$ w' [  V: w% c6 y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ' M0 k( ~1 \5 t; Q8 T, J$ ?
  574. ! U% j0 ~1 i4 m
  575. //        CRevAppDlg dlg;
    $ Y7 }( s" Z( {- ]- i  j% {1 D
  576. //        int nResponse = dlg.DoModal();
    8 w7 ]8 N$ y: _) ^
  577. //        if (nResponse == IDOK)5 e! T( v( I* V, F" o
  578. //        {
    + e; c! R: ~& E; c1 V, H5 X
  579. //                // TODO: Place code here to handle when the dialog is
    3 D8 I& `, d* t
  580. //                //  dismissed with OK
    ) U* M& |: B$ N, `) M& w
  581. //        }% l9 W) d! ^1 n
  582. //        else if (nResponse == IDCANCEL)* n  ~. Q8 I9 y' y1 I/ v9 Q" w7 w
  583. //        {
    : d1 e- ?) T9 y4 [. Z8 M$ s. r
  584. //                // TODO: Place code here to handle when the dialog is
    * Z# Z/ a; s5 ?+ d7 i6 g+ y$ w$ F* ~
  585. //                //  dismissed with Cancel
    ' p* {- ~+ r3 |1 e+ m! d* v" {
  586. //        }
    ! _7 {" U" F7 \, ]1 Q
  587. 7 s. s/ e( U$ C  ~9 W
  588.         // Since the dialog has been closed, return FALSE so that we exit the1 z& P8 G8 ^. g/ X4 e) w( g
  589.         //  application, rather than start the application's message pump.5 }( K2 d. E& }: q  l
  590.         return TRUE;
    / P! i, I* G, T2 {
  591. }" m& V$ M0 ^' Z. t

  592. 8 \' F7 D4 B; Z3 j# j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    6 s+ _3 o  n5 @- |/ o
  594. {& C! _0 T7 [+ R" m" Q- C. ~, r4 x  \
  595.   int i;
    $ m( J9 H' W3 j. M& i+ r  R! n
  596.   char *szRet;$ o9 c$ D/ L: ?

  597. ( p3 z  n$ K- K! [# s; M, B/ g
  598.   if(pSource) { itoken=0; sztoken=pSource; }
      d8 U9 N1 v. a7 G. {4 P/ ?) ?$ m/ p
  599.   if(sztoken)1 Q# E: o- P1 w5 R3 v2 a7 D
  600.   {
    8 v8 k8 m" `! k: |9 x, h
  601.     szRet=&sztoken[itoken];
    5 a( x# f" j( S% X9 T
  602.     while(sztoken[itoken])
    + W. r( J# H" `5 N0 x
  603.     {
    & \  x# F8 o. M3 q" [' m. d
  604.       for(i=0;i<(int)strlen(token);i++)4 l  V, a6 p( ?7 w
  605.       {0 l0 c& |6 Z) a) X$ G# u% z9 [
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])% K) `  l- K$ A' A  Z
  607.         {! p+ q) w! e& f7 M
  608.           sztoken[itoken++]=0;$ @6 ~! k% O" Y7 V; q. _" h! b
  609.           sztoken[itoken++]=0;
    1 b& O% g+ T; o+ l, b8 L. J7 c
  610.           return szRet;% C' E( y* P. J! N' P
  611.         }
    6 L9 i# u8 F2 I8 g
  612.       }, {0 X* `$ I* H9 {5 G7 U
  613.       itoken++;8 s% |- Y* B, l" u6 b
  614.     }# a4 L7 ^0 j" P+ Y
  615.   }
    6 Y7 g! V- x- {
  616.   return NULL;
    . y; b8 g9 |4 _+ [7 F- O0 b) Q
  617. }
    8 w- b4 F  J+ k7 S5 l
  618. 0 a" [; ^! }* w
  619. void ProcessProc(long Total,long Current)$ T' {2 T7 L7 T) r
  620. {
    & o' o( A# _8 f' u6 i6 @& ]
  621.         MSG msg;
    , q" K- R7 k. x- w0 y
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ K' J; ^) L& t6 ^5 K# T
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));5 h; z. m/ V9 w/ _1 z4 `  j
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ) y9 @3 }$ N8 W/ _/ y& s7 y
  625.         {" Q& W" o% ?& M7 P( |1 m6 y- {/ S7 w
  626.                 if(!GetMessage(&msg,NULL,0,0))
    , j! L. f- H" q% O( R. x% X6 o' K+ [
  627.                 {
    $ y- ^4 n1 W2 V4 V
  628.                         return;
    + m: m9 G* O4 Y" O* q3 Y
  629.                 }* @# Q+ o+ Z4 X0 D
  630.                 TranslateMessage(&msg);
    5 p& R# ?  g6 G3 O7 \
  631.                 DispatchMessage(&msg);, U' b1 W2 u" U% L1 }8 v
  632.         }       
    5 Z7 q1 t! [( x: J; ?
  633. }" y' c7 A. [4 v4 v# g4 y" a

  634. - w8 e- d6 S: T' ~. z& v( R; A
  635. BOOL bFirstChar=TRUE;, P. X: P! z/ L2 \
  636. . ^  Z* [' l0 W
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    & ~/ E. G1 u; y# ^6 d7 p
  638. {4 H9 r4 |$ F! r6 i  Y7 ~
  639.         // TODO: Add your specialized code here and/or call the base class. n9 V) U  _% e0 b. K3 T& A3 D* k! }0 N
  640.   switch(dwProgramState)
    , w: C# S8 ?) A) P( a
  641.   {
    & a7 ^8 C: g0 |) E& j7 H# a4 r
  642.   case AP_NOTHING:- G8 j& t/ I0 H  s3 A# m
  643.     switch(dwStartUpSteps)5 }- M3 i7 D& E3 U8 H- V" R- s
  644.     {
    5 k8 \+ O. z" {; o& b6 X
  645.     case 1:; P. u3 F" q" k( W0 I
  646.       {
    . o4 F1 `, @. Z  C7 }
  647.         int i;: T6 o7 K' D1 z2 g+ @, o/ v$ {; Y
  648.         CDC *pCDC=dlg->GetDC();
    ; U+ z; ^) Q  n( \1 D( K+ U
  649.         HDC hdcwnd=pCDC->m_hDC;: j8 J, t+ |. O1 E: P  C! Q
  650. //        Graphics graphics(hdcwnd);0 [% l2 S/ y' P9 ]
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");# u4 S& a* d0 S9 j
  652. //        INT iWidth=bitmap.GetWidth();4 ]- y( E- R+ k3 |& [& w4 V
  653. //        INT iHeight=bitmap.GetHeight();
    9 K& b4 A) D6 R- X
  654. //        Color color,colorTemp;4 S& Z! q( |! T0 Z$ ?
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)0 d0 M; W7 V  p0 F8 Z
  656. //        {
    7 Q+ e& s5 `! P) s8 f+ v9 f$ D: N9 G
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % ]" R$ Q0 r2 _5 \
  658. //          {
    / s: s4 s7 T6 z& y0 u8 _0 Z. B
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; _0 ^7 D5 Z" Z: I+ ^% C
  660. //            colorTemp.SetValue(color.MakeARGB(7 I* e& J/ {. K. m2 d6 X
  661. //              (BYTE)(255*iColumn/iWidth),
    2 O" R8 I3 L4 C# `
  662. //              color.GetRed(),, D8 i* e& t+ l' `1 a
  663. //              color.GetGreen(),8 X% r$ E5 c9 t$ Z) d/ c2 t
  664. //              color.GetBlue()));
    3 t0 K, s7 O/ Z+ ^* ?: p" M
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- ^7 T% o# W, ]7 Y4 u- Q' x) @2 r
  666. //          }
    6 Z8 {6 }5 s3 e% {0 ~
  667. //        }) @3 @! t" M/ ~1 t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);2 G9 W% j. P* Q% D4 s
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 I& P8 a/ \# b; T0 [0 |
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    * u& e4 n  Q$ G1 A0 b' z7 o) a! d
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 G# ?& D  u$ z  e/ G5 s* O7 ~
  672.         for(i=0;i<240;i+=8)
    0 O8 x- Z2 x6 X8 R. f
  673.         {
    ) \2 ^: @& `: m: t+ u. ?
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % {4 d" W% h( v1 M
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 M( n( S/ o4 J4 }8 S8 A
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % ]4 v7 w# e6 W* i$ V! V
  677.           Sleep(33);
    3 E5 N; q  W6 I3 D& c1 z  D2 a
  678.         }
    4 W; j( H3 O6 I" b2 Q' h
  679.         Sleep(1000);7 l# A8 m6 O0 f5 m5 t
  680.         for(i=240;i>0;i-=8)
    / s4 i6 E. c" @4 _
  681.         {+ V% F, T5 y- g+ u9 g6 d! t, j
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & d& G0 |  }4 u$ Z8 a  c
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % h- ]( O+ b( b1 \4 p5 d) \( D2 y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 e( d# ^2 Z* ]5 z0 ?2 }. ]
  685.           Sleep(33);* T5 \% |! [% k& f% w+ c" m6 h/ ^
  686.         }% ?6 O3 b* w9 V7 n
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    . b& T/ t/ Y* M0 f
  688.         dlg->ReleaseDC(pCDC);1 J- M  m6 B4 g" a
  689.         DeleteDC(hdctar);
    4 O3 {) h: L* c# X$ C! u) `
  690.         DeleteDC(hdcsrc);8 ?$ z* {2 Q5 {  S
  691.         DeleteDC(hdcorg);
    6 i" e4 n" Z5 u6 t& T! Q0 D6 B
  692.       }
    % z; G$ e8 [9 g" p5 ^: s
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);& S4 q$ N6 b& t% ?  q# K2 |
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");2 W2 c2 I4 W( H  b6 l% T
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");9 z2 Q, I/ q: ~$ A* k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");% u5 v) b5 M+ \/ @6 u0 D5 l$ O- j
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( D' Q7 _) y# k* I5 n
  698.       if(!Dn.Connected())  U" m3 r1 u6 Y0 {
  699.       {
    # b1 {' y" ~7 d% d$ W  A
  700.         dwTotalFiles=1;
    8 U* _+ a6 Y% R. m( |2 A
  701.         dwDownLoaded=0;4 k+ ~, k: P9 E3 ^, ]
  702.         bSilentStep=TRUE;
    3 K  i, t- \, P4 j4 a9 q) L
  703.         bCompressed=FALSE;
    6 ?+ O7 h5 M, ]+ X7 ]: A+ C' Z, w
  704.         strExtLocal.Empty();! g) y0 c) ?# p* T. D7 g" K/ \/ }
  705.         strFullName="readme.txt";0 o+ o/ y, g# g5 }* c
  706.         dwProgramState=AP_CONNECT;
    ) s! l9 e- q7 t& Q1 M5 c/ k/ J+ b
  707.       }
    : f" b+ Q; b+ F) }
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    6 R. b8 h, M; O; B1 u  Q3 _' N0 ~
  709.       dwStartUpSteps=2;
    5 d5 i% g/ q' k1 j. \# o- M
  710.       break;
    - [5 T# ]8 H* Z+ u: ]
  711.     case 2:
    , x7 k7 g4 [4 K$ s* M! W" e, Q
  712.       {
    / C5 J: e# r3 D) P
  713.         int iEOF;! [. h- I2 d* j  G& N! x
  714.         FILE *fp;
    : C/ U0 D1 K0 c2 _6 D! B  A& s% Y
  715.         char szString[512];/ ]% ~0 _1 a# j
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 Q; D7 n4 Z4 z- j1 d7 v
  717.         if(fp)
    8 {2 M# L3 i8 U- d4 ]
  718.         {
    ( t9 g* R! v& e. D4 h: e1 e
  719.           do& C7 |6 M6 w7 |! d% b
  720.           {
    + w( Y) M6 c' |  f
  721.             iEOF=fscanf(fp,"%s",szString);
    1 i$ r  J. @8 O) k) b# ]4 k( V
  722.             if(strlen(szString))
    ! N  l4 U* }- t+ C
  723.             {
    9 _( k+ f: s. v8 f( I
  724.               if(bFirstChar)0 z& l: Z" M- y/ C# `
  725.               {
    , |3 D& }. p6 [. `' q
  726.                 bFirstChar=FALSE;
    / A7 f. V# S$ E6 c; h" g
  727.                 bConnectIsBig5=FALSE;5 E# I* m' |& _# z  ^) S  a) E1 u
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;, H: v+ u8 ^* h3 h: N
  729.               }
    ; i2 R6 A) |2 x) A7 Y3 p
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));% W7 A# s. p6 M+ g2 X1 F+ d
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));" m. @- @% o) N) w: A7 m9 n
  732.               dlg->m_ListText.AddString(szString);2 H# ]; D9 M" I- d% M( b
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 o+ o$ B- W  \/ A1 A
  734.               *szString=0;( e& i/ `3 j+ G; K  j) h5 x# B# y; ?
  735.             }4 e+ y0 Q9 T; C& V$ `4 D
  736.           } while(iEOF!=EOF);
    ( `* d1 E  y( F2 k: G5 i! t
  737.           fclose(fp);
    ) j0 }1 a/ o( R1 s
  738.           unlink(".\\DownLoad\\readme.txt");
    0 f4 L0 S  u$ t0 w7 Q7 E9 T
  739.           dwStartUpSteps=3;1 F8 C7 F$ Y& V# {
  740.         }
    ( G& M# ]' v7 C( N0 c( L0 o
  741.       }# @1 k! i+ X) b1 I& P0 x* s* r
  742.       break;
    , Z  Y4 ]% V6 B8 R
  743.     case 3:# O4 u) U2 V) r* [4 R' G
  744.       if(!Dn.Connected()), l# y4 x& G7 d% Y# `. c) W$ [  K
  745.       {
    * p5 ^5 p! x4 G4 t- ?6 G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    9 T% X& f* w; n+ O, _) h
  747.         dwTotalFiles=1;- @% w. U& B: O7 f9 V0 M0 C
  748.         dwDownLoaded=0;' n1 i% W, [7 k; B0 X, Q
  749.         bSilentStep=TRUE;
    0 I5 H# W3 m$ X" Z9 c) s
  750.         bCompressed=FALSE;
    ) w& p& |1 K' h! I" X, M& t5 T  z
  751.         strExtLocal.Empty();
    " b% y9 _! `9 z3 N! T2 s
  752.         strFullName="checkversion.txt";* @; w5 V/ y) n' A& M+ ~
  753.         dwProgramState=AP_CONNECT;
    & w( C/ }7 [. H8 b
  754.       }5 |! h9 b- Y; X" k: t# |
  755.       dwStartUpSteps=4;& o5 M# K% m  m1 G+ c; K' F& W
  756.       break;
    1 p6 |3 n' A  u8 J8 c
  757.     case 4:/ ~+ g" @) K& z1 I6 B
  758.       {
    1 E' T/ [5 J" F6 P5 |4 Y
  759.         FILE *fp;
    . z- h3 `: F9 U9 S: S# n% x( x
  760.         char szString1[128];
    8 p. O, a' ]4 B2 b) p7 D5 H; h
  761.         char szString2[128];
    8 o# |; o( a/ m5 F5 u
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    + d- T0 x- f6 [5 X8 U
  763.         if(fp)
    1 [0 {0 M7 {+ P; q7 n2 |, H  Z" n
  764.         {, X/ J7 b. S8 t6 }
  765.           fscanf(fp,"%s",szString1);
    8 i; z! M1 i; }) K
  766.           fclose(fp);4 f9 I, @4 m9 b) t
  767.           fCheckVersion=atof(szString1);. ~2 Y8 m6 D" I9 W% |- ?( O( J/ B
  768.           fp=fopen(".\\checkversion.dat","r");
    , [9 Z" U# t* S$ }0 Y4 P
  769.           if(fp)6 {0 c2 B' g; F6 R/ t0 H" b
  770.           {  q( h4 q& P; z/ p1 u* D
  771.             fscanf(fp,"%s",szString2);
    . @: S8 }  Y  f* E! g$ Y7 ~0 L
  772.             fclose(fp);
    $ W# ?- O3 z4 E" Q
  773.             if(atof(szString1)!=atof(szString2))
    - ?( m5 ^. H; N8 `5 t. l
  774.             {' ]6 P7 \% K6 O7 t
  775.               if(!Dn.Connected())
      j, i( N' n# N4 m5 b
  776.               {: f4 e5 L* g$ b3 o8 a
  777.                 bFirstUpdate=TRUE;
    5 h  s; Y% F; Z: t7 b9 S
  778.                 dwTotalFiles=1;  @. y  R4 z9 f$ [4 H3 j! n; y5 C' i
  779.                 dwDownLoaded=0;
    1 m/ A9 }/ O; K
  780.                 bSilentStep=FALSE;
    5 ~: r2 I7 t! ?5 D% q* C, k; j
  781.                 bCompressed=TRUE;
    6 T# L* Q3 k. @. g
  782.                 strExtLocal=".\\DownLoad\";6 r* K4 o1 a& o/ R0 f/ z) Y$ W4 I
  783.                 strFullName="update.txt";& a' a) \, ~4 c9 G& Y; `# ^  e
  784.                 dwProgramState=AP_CONNECT;6 a3 M+ @# \1 @3 l$ S" U7 V
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! L: P/ K6 e0 G. k( O( ^
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ' j1 k1 I9 ]0 i" `  f
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 ~! U6 w: y% [, s9 t2 D' r
  788. 0 D  u+ v2 W' p" x
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 w4 s; O+ I/ a$ K; w9 P* Z) d8 Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    1 F+ G# O4 M4 z5 g
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    $ A" F! u. N  p0 a
  792.                 {
    ( X/ T( ^. D" z, n! A
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");( G1 B4 S! |, d% j6 _( a7 ]4 r& O
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( E- |, m( e( w6 `: V! b
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");8 T. A2 a8 }* u* I
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 u# X9 I  M( X* D
  797. 7 E$ |6 O2 y0 S; g
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- {. C3 K" @  q: s; M
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% B8 d: {( w% e! p4 T
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");# k: t: x8 |8 w" t
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ D4 T1 k' S0 |& Q4 `& t
  802.                 }2 z, x2 n" h6 c+ @/ w& H
  803.                 dwStartUpSteps=5;6 a3 }  R, o' S
  804.               }7 R  R9 f% g( |5 ?. U
  805.             }. M  X, ]/ z: G  K0 J/ s9 l4 g
  806.             else
    2 `9 Z- [' L! X
  807.             {
    2 x0 Q/ e9 V- I# G7 Q
  808.               unlink(".\\DownLoad\\checkversion.txt");9 f2 [) z" O; D$ F: ?+ v: P
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      e4 V. K# L7 ^2 Z8 T" s/ {
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. Q+ j; V3 ~( B$ o- ]" d# q$ R
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 M1 s# s4 m! L& G: ~1 R" m

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

2 d  K5 w( j' c- O8 [, q* T/ v) X

評分

參與人數 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-3-18 22:52

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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