找回密碼
 立即注册

CSUpdate.exe源代码

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

; N% m; Y5 `0 [: P
  1. / RevApp.cpp : Defines the class behaviors for the application." ]( X- U8 n2 E6 V
  2. //
    0 f( k9 W% {2 z
  3. 8 G7 h5 p1 D3 }# @6 k" m" m
  4. #include "stdafx.h"
    3 c- G* p# x. z% D- N- ?
  5. ' u' s8 r6 B9 _5 a2 u7 a
  6. //#define UNICODE% ]3 q; Y. C# M5 r0 A8 S
  7. //#include <gdiplus.h>
    ; h* @% B8 J0 Z
  8. //using namespace Gdiplus;
    ! z, e4 g& [' ~7 j
  9. . j* ]" d4 F7 c$ `6 M
  10. #include "RevApp.h"
    + \2 |4 W6 I. a6 `: Z7 D/ v3 ?
  11. #include "RevAppDlg.h"
    3 V: l3 o1 K4 V4 v8 `6 }/ P

  12. 9 X; g7 _7 ]& B  c9 v  s1 J0 m* G
  13. #pragma warning(disable:4786)
    & I5 e, n4 W% f( m, T$ n0 x( R- W
  14. #include <map>
    0 h+ e" o! r& S% l6 f
  15. #include <list>
      b" r3 n5 z& o
  16. #include <direct.h>, p, j) K/ j: b
  17. - U: F/ h: \5 c1 E' i% H
  18. #ifdef _DEBUG* ~6 l7 m. K2 D4 A6 V
  19. #define new DEBUG_NEW! Z: M$ A3 G: P6 ?
  20. #undef THIS_FILE
    + d- g3 X& l( o+ y# X
  21. static char THIS_FILE[] = __FILE__;( ~6 e+ k$ c0 Y7 \$ z! s
  22. #endif, a: n) j/ D$ v& e  e" D" V
  23. #include "SkinResDef.h"
    # k3 R/ S' f' F' g& p2 E! @- V& Q  e
  24. #include "ChangeBG.h"3 C- C8 H8 u6 @  i. w* [- O
  25. #include "AFXINET.H"; S9 _9 P3 ?2 M$ l2 M

  26. 3 A* W; L. h# ~, U; R0 I" C
  27. #define TRADITIONAL_CHINESE 03 [8 w6 I+ q  q. J$ d: }
  28. #define SIMPLIFY_CHINESE 1
    " b& Q3 r6 g  p
  29. #define ENGLISH 24 A8 G  h) m; T* \1 O9 ]: B, J
  30. int m_iLanguage = ENGLISH;8 C4 T  U6 d$ K& k3 }
  31. /////////////////////////////////////////////////////////////////////////////
    ! ]; E! w1 \/ m( y
  32. // CRevAppApp
    : C' j! a9 u0 V/ U6 e: X& J
  33. * p# m9 _$ J' [0 B) P; d8 n
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)9 D- t. r1 G2 M$ g& d
  35.         //{{AFX_MSG_MAP(CRevAppApp)8 @" f! V% g; J4 H6 C% l
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.% O* B3 {% |, m) ~5 Q3 Q
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!+ y0 k) s8 u$ L4 j5 l9 _
  38.         //}}AFX_MSG
    " W0 ?) ]8 `. u% }9 [& e0 s
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    6 D, ]$ D5 A/ r& H
  40. END_MESSAGE_MAP()( u4 q- M  W9 K# J! W- B; m3 ]

  41. . v9 Z; c& x* @6 d; k. S
  42. /////////////////////////////////////////////////////////////////////////////1 @( L4 {7 ?) Y) @
  43. // CRevAppApp construction
    # P" R# A' a% A
  44. ' B# V5 y& q$ Y/ ]) ^* N" i# W4 @+ p
  45. CRevAppApp::CRevAppApp()6 D( b7 w" |8 A; K! v
  46. {5 h- D1 U0 }1 q0 P& ~
  47.         // TODO: add construction code here,  M1 W' I9 s0 Z" C4 o- Y3 m5 r1 P6 n. }
  48.         // Place all significant initialization in InitInstance
    4 o1 E* h; E- _+ `. K7 r; U
  49.   bDisplayIsBig5=FALSE;- O/ N3 w, z/ i  f2 A
  50.   bRestartUpdater=FALSE;7 S9 Z- _* N) X* B: n) r5 w
  51.   bFinishUpdated=FALSE;7 w$ P4 ?' b9 a# f, M
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;4 Y4 P9 I0 }# d4 s' E
  53.   InitChangeDataBig52GBKS();
    4 i  ~9 F  I. _0 @+ N0 J5 W
  54.   InitChangeDataGBKS2Big5();
    ; S' R* Q5 `/ B4 ~- N* f. x
  55.         //( t2 j1 V& y* _+ W, F$ v
  56.         bClickRunExe = FALSE;3 `+ J0 D3 _& w$ h- O4 l* \1 _
  57.         //
    9 |4 Y" |$ p2 P5 z0 D0 a
  58. }
    / A' P7 G0 ~$ E  h3 j" T2 e; W
  59. & [4 n! r1 i1 |/ @9 d- i" k% G; Q2 t0 c  D
  60. CRevAppApp::~CRevAppApp()( x' Y3 C# R/ U, K9 D" |/ n. Y
  61. {+ k6 I; {7 A2 `
  62.         // TODO: add construction code here,. C8 b  z- \) w+ |2 J
  63.         // Place all significant initialization in InitInstance
    2 a8 f( C6 Z8 w* b
  64.   EndChangeData();
    / V. {+ u3 P. p8 o" v
  65. }$ j) R1 M' |+ W8 s+ e
  66. 7 n4 ^; \/ o3 B/ E( v9 g
  67. /////////////////////////////////////////////////////////////////////////////3 n7 k) M+ ]( K5 u
  68. // The one and only CRevAppApp object% L& y5 \6 `5 k, j+ L
  69. : ^- Z1 k# S0 ^+ ]# _
  70. CRevAppApp theApp;
    ( P* u% s% }% m* j) G, g$ O' L# I/ m

  71. 7 E! x$ Z' o, a6 T5 }" S( x" e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    6 j! m' B! o0 i* \+ `
  73. {7 f+ G, a3 s" ~
  74.   int iEOF=0;% P6 Y( l9 p2 z. C
  75.   char szTempName[MAX_PATH];9 m! p. r6 V6 ^) P& ]/ L
  76.   *szFileName=0;( o, L$ D; G2 Z8 `/ p% G0 \3 ]7 S
  77.   iEOF=fscanf(fp,"%s",szTempName);
    % S( ~# R; j( q7 x) G) V. U
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ! X% T3 I9 R& w' K
  79.   {
    6 a* X; f& Z- J/ m2 l& I
  80.     strcpy(szFileName,&szTempName[1]);
    5 x, l2 V+ A* S5 K, P$ M' n3 l
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)! l) W. a3 l8 n5 U/ F8 `
  82.     {
    , O' l  c' p  U3 o! J5 \$ H/ R
  83.       iEOF=fscanf(fp,"%s",szTempName);
    - `; N. K+ L! b9 g% C
  84.       strcat(szFileName," ");6 W$ {% p& b3 \- ]& D
  85.       strcat(szFileName,szTempName);$ @1 O  ]& a! b2 N8 r2 ^4 l
  86.     }4 A/ T: `$ e. l) m
  87.     if(strlen(szFileName)>=1)
    * h" @- w/ T. v. E5 z% y% J) [
  88.     {4 I5 d# Y6 G: ?( B7 z: u
  89.       szFileName[strlen(szFileName)-1]=0;
    7 V& O/ p# c. e1 c7 [5 |
  90.     }
    " X- m+ Y' V! e4 {/ v, D6 A+ h
  91.   }
    ( ~' E! U! M! ]2 A
  92.   return szFileName;( A/ R7 t" F. l5 t+ e
  93. }- D8 U) z1 d8 i7 `

  94. , l9 Q- G' u2 V8 F$ T' m/ ^  {
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ( ], T! p: ?6 L  w
  96. {
    - ^1 M. ^- H3 R% H9 R) W# X8 N- p6 O! O
  97.   FILE *fp;! W5 C3 w2 V8 R! A* x! L
  98.   char *key=NULL;
    0 B) z, T/ \; {7 l1 ?- t  a
  99.   char version[MAX_PATH];
    ) M! \, A$ t4 l
  100.   LPUPDATEFILE file,olds;/ ~) }% |) _3 Z5 s  V" g9 e6 D1 _
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' B; ?5 F& h1 n7 q- @3 G

  102. 1 e8 K+ b4 k* u1 _
  103.   UpdateList.clear();& f/ ^* F" F5 q  Z/ o
  104.   UpdateFile.clear();
    1 m4 A7 g2 Q# e1 B
  105.   if(GetFileAttributes(filename)==-1) return false;
    1 l: Q! }8 f; U6 {% X3 A3 {
  106.   if(!(fp=fopen(filename,"r"))) return false;; Q5 i0 c+ ?1 p; G3 j; X
  107.   fscanf(fp,"%s",version);9 P# b' Y0 q4 ~# d3 ?, n
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }) k+ `" @, G: g" l$ c
  109.   while(fscanf(fp,"%s",version)!=EOF), f# r- P, p& C3 s- u. _7 ]
  110.   {7 e' C, l8 o1 x! y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) u: c* s; F! z1 ~/ x
  112.     fscanf(fp,"%s",file->path);
    + G4 t  w& C8 v5 `" D
  113.     ReadFileNames(fp,file->file);
    # R3 E# O$ v0 d" f
  114.     strcpy(file->full,".");
    0 U% K8 w, L) I) B$ s. ^! X
  115.     strcat(file->full,file->path);/ |" _  s" o. K& S5 v: v
  116.     strcat(file->full,file->file);
    - h$ }/ p, ]+ C7 l1 g: v$ f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()); E9 V" K0 y! n" Q/ i& K" I
  118.     {
    4 h, q# q2 R: r7 l
  119.       file->vers=(float)atof(version);; E1 @* ?4 `3 m/ V/ t/ ?8 H8 |! t
  120.       UpdateList.push_back(file->full);
    # u( T0 v5 M: W- g. A, g
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));6 Y! E% G0 z6 o8 y! l
  122.     }
    $ n5 q4 u9 W7 F) i+ _
  123.     else  g/ D" r% Y7 U' d1 D
  124.     {" A8 n" ~1 l4 p+ a8 K
  125.       olds=(*p).second;
    0 k3 X9 n  a# u/ W8 B! Z. o" q  V
  126.       if(olds->vers<(float)atof(version))
    8 ~6 k; x9 U; l& D. f2 i4 T/ _- Z/ m
  127.       {
    ; f- @! ^4 y3 L& D
  128.         olds->vers=(float)atof(version);1 \# N0 m. q$ t. M6 j
  129.       }7 r( _( l. y. O2 ~% E/ _
  130.       free(file);5 _* I: X4 C4 w9 \' T  F% w
  131.     }2 I) N5 K, [. i) _: _. N' C5 G
  132.   }6 i9 u- o% k/ X6 d
  133.   fclose(fp);- O. _4 O& J7 P4 I1 Z
  134.   return true;
    : A" g  Y" B: Y' W. U4 \0 o
  135. }
    ) S" l: t: M8 m5 ~0 B
  136. ; u5 a$ k9 l" y3 R
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    1 f  E! D+ M8 h, X2 [* P
  138. {
    ; S/ L/ b+ z/ {1 _
  139.   TCHAR  szFull[MAX_PATH];
    6 O! V1 ~! x3 ~  b
  140.   TCHAR *token,*inter;
    - W6 m% n, p1 |0 a
  141.   *szPath=0;  }1 G4 B& D/ m7 ~5 b
  142.   strcpy(szFull,szFullPath);1 }' C* d. e$ p  r% B
  143.   token=strtok(szFull,"\\/");" U, a1 n0 N+ ^! O) ?, H$ X3 L
  144.   inter=token;
      o  \6 `/ l( m4 I
  145.   while(token=strtok(NULL,"\\/"))
    2 M4 b. S0 D- W6 m) A& V8 [+ f
  146.   {
    7 m; L. ]5 V' |5 B8 e
  147.     strcat(szPath,inter);
    5 z1 v; E4 c( W% M! F- s9 P
  148.     strcat(szPath,"\");8 g# t2 r# a* x3 H) w1 q
  149.     inter=token;
    - C* h9 w  H- U7 |
  150.   }2 K+ n2 D) U" f0 B3 `$ [7 J7 C
  151.   return strlen(szPath);! b  v  H& u& P0 Z! ~  M* ~3 d- [
  152. }! M* g, S" e5 X# H

  153. 2 s2 S8 V6 ]5 W* X8 M5 P: `2 `
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ; i* W4 T- E9 R# B$ E
  155. {; n& L; T4 _3 J- a. o9 v
  156.   DWORD attrib=GetFileAttributes(Target);
    : A4 O1 C! e* N# Y" F
  157.   if(attrib!=-1)" ~& T5 H2 b' \6 d
  158.   {7 u, |6 U( I; |% I( ~; T9 c, c
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)), h0 P5 o  B+ _# s
  160.     {
    & E; H- z5 L# _% o( p
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    & r! ^) g* v5 y8 s/ t! F
  162.       SetFileAttributes(Target,attrib);
    0 F/ D# y/ T$ B4 T
  163.     }
    * v# U# i2 z8 r  z  P( t
  164.   }
    6 L* D7 J3 `2 s+ m) h4 u5 ^) K
  165.   CopyFile(Source,Target,Erase);# l0 v. `2 L6 w: \* x8 P1 B
  166. }. D; ?! ~, i5 c$ a

  167. 9 a% u/ Y9 W  `
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)3 \, D; ]; F9 w( ^
  169. {
    5 x3 R) t$ B4 G$ A, s3 |
  170.      FILE *fp;
    , A5 u: J7 V+ W( f  p$ R+ ~& @
  171.      char  szBuffer[8192];6 f0 g8 E3 s8 W
  172.   va_list  argptr;
    ) v8 N" |& d/ u& W  S# G
  173. # F0 Q. ]& V6 }/ l
  174.         va_start(argptr,message);8 b) c4 O/ X& z
  175.         vsprintf(szBuffer,message,argptr);, c3 o, c5 ]9 V
  176.         va_end(argptr);" M* a/ y# p4 Q. Z+ m/ G
  177.   fp=fopen(FileName,"a");
    & i. F5 c: ]& m
  178.   if(fp)/ m5 n+ y( M% s: q
  179.   {- M$ v; `4 |, V& b+ C" h
  180.     fprintf(fp,szBuffer);
    - ^1 t! d% R& \% d
  181.     fclose(fp);
    6 W3 B( K/ q: P
  182.           _flushall();9 b8 x8 E5 i2 o) N* |
  183.   }$ k) a2 i& R' N- M* G$ e1 y4 q
  184. }
    " S% P; m6 `# S* S1 S
  185.   a. q+ B% v& ?, \8 D  Y' o
  186. BOOL CRevAppApp::Fclearf(char *FileName), V; E2 R' d. `: d& G
  187. {' T$ }: V; {- T( y5 v
  188.      FILE *fp;. Z" ~) q) P  W/ q
  189.     DWORD  attrib;5 L- m9 {1 l# P# `
  190.   attrib=GetFileAttributes(FileName);
    3 s; V) m8 u3 ~: I: T" L9 ]. E5 }
  191.   if(attrib!=-1)) S( ]% \7 n' g$ C
  192.   {
    / L! V4 X$ R; f* e$ Z) @" Q" \  J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ) k) g& }4 A' s) v
  194.     if(!SetFileAttributes(FileName,attrib))1 L3 }9 n1 r5 w6 S! s# B8 I! k
  195.     {, C) Z5 M" ^4 V4 w0 z. A* J( A
  196.       return FALSE;
    ; V3 f- J4 ?7 d5 h* E
  197.     }
    - V5 g! O9 P" s* i" k& f2 v
  198.   }
    + Q5 N0 K+ [" S
  199.   fp=fopen(FileName,"wb");
    ) w9 j- S. X. L
  200.   if(fp)* e7 F! ^6 j/ H# w' o; @4 Q% B3 a
  201.   {
    4 _/ o- O4 x( q4 K
  202.     fclose(fp);
    9 |( W( Z. F) E2 ^6 \+ K- A
  203.   }3 i; B+ ~2 ^& G: j; J3 L6 P. ~
  204.   return TRUE;+ v8 l5 P3 A, q6 n# Q3 z
  205. }
    5 _: ~# Q( N0 J& P* J- x

  206. ! T6 c6 J1 Q: I- d, s
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    9 X0 Z1 @2 Q8 T& {  }/ C
  208. {
    + m( p' [  P" |& B
  209.   char filename[MAX_PATH];' Y* M, N; A. Z8 X7 [( j9 _! T! j5 |5 v
  210.   LPUPDATEFILE file,olds;
    / t: R4 g6 ?( D; ^. X  n( t9 x
  211.   std::map<int,CString>::iterator i;# c3 `, e: H. s5 {! P7 I7 b# w; s
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . ^9 z; n3 ^' U& c, h6 P
  213.   std::list<CString>::iterator l;; G1 T2 ?9 C4 T! }+ P
  214. * e' L: q) m5 @- e" g- [9 _& S
  215.   if(bFirstUpdate)! s- g( J. z) x, |) W. N
  216.   {
    * |3 @* ~; a) G1 ^0 Z
  217.     dwCurrFile=0;
    # r% {0 Y/ |/ n
  218.     bFirstUpdate=FALSE;
    ' Z# `! A4 @  ^4 U& P, [
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 _/ x+ n  a9 y" z- s  a  p
  220.     {- W- B, c+ Q) f% C4 c; K- j
  221.       dwTotalFiles=UpdateLocal.size();
    ) d5 G( ~1 G" [' w& s
  222.       dwDownLoaded=0;% X" u+ T+ v8 b7 {) m
  223.       bSilentStep=FALSE;# X6 J  Q. w7 a3 t7 r% u( ?
  224.       bCompressed=TRUE;
    : i: E6 f$ T. t+ B
  225.       strExtLocal.Empty();
    2 y+ e# n- l5 V- R' r1 t
  226.       strFullName=(*i).second;0 E$ D; q+ C3 |6 ^! w+ T
  227.       dwProgramState=AP_CONNECT;
    4 M$ ?: e4 c$ `# L1 |2 `, U
  228.       return TRUE;
    / E& `3 h; K9 L* `, r2 V/ E' N  n3 H
  229.     }
    - f# P- y+ r2 c/ k/ P5 \* ]* f
  230.   }
    & x; {1 g4 E: f1 V! ~5 ^
  231.   else if(bRestartUpdater==FALSE)
    9 N, B7 @+ y2 S( _. w
  232.   {
    & [; S3 r* |( c" ]2 V+ _" y7 P
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())7 A) z% t& u: P" i
  234.     {& n* x$ T. d& R7 e' J
  235.       file=(*p).second;& Q/ ~* O* l/ d8 S+ [+ q! x0 s
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())# @; W2 l: s# a
  237.       {4 i& M' ^( {  P' c) V0 {+ ]& N
  238.         olds=(*p).second;
    ! U8 j/ L2 b2 ]' q* K" u7 D
  239.         olds->vers=file->vers;5 v7 ?# g" e% i9 {6 Q/ i
  240.       }
    + O! k. W) G3 Y$ S* \. a4 B
  241.       else
    & H. j# \7 }& m8 m* y5 n/ K; i; i" K
  242.       {
    ; s; {8 _+ W. P0 y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 C! R% u& @" @, z8 G* ^
  244.         memcpy(olds,file,sizeof(UPDATEFILE));# H  V# ]' X" L  Z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));' y; a5 P0 X, Y: I8 B, R, R
  246.       }& z5 _* w9 r5 S( q* e- B
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    * b+ d6 W: v& J. {+ \. _
  248.       sprintf(filename,"(%s)",file->file);
    ; k4 H6 n0 P) J# i  w0 z; l% k/ C  c
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& h* T5 Q/ M# A9 f9 Y2 [4 w$ z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    9 P6 ]; p& t, Y( n0 M' q3 K
  251.     }2 A; K0 B2 _( G- a0 U
  252.     dwCurrFile++;- p( ~8 I( j5 U% s! `
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* R' C$ N" ]- t' v* K' r! x
  254.     {8 h8 S7 e/ I9 V9 F/ C% L2 [8 Z+ ^
  255.       bSilentStep=FALSE;
    5 U9 {& S$ t) l2 `! I% d
  256.       bCompressed=TRUE;5 o* ]- U* y9 K# \0 T
  257.       strExtLocal.Empty();( \3 J  r2 Z8 i( i+ F, J9 S
  258.       strFullName=(*i).second;
    8 \$ l- x2 I7 w. t
  259.       dwProgramState=AP_CONNECT;
    5 t" `( h; }& X0 Z/ c/ p/ Z7 e
  260.       return TRUE;9 f& u7 l+ Z9 k4 X! w3 N
  261.     }
    $ h8 S5 P& \- q# V+ v, {
  262.     if(!bRestartUpdater)# f  v5 ?1 Z: o; e7 `1 j3 s
  263.     {
    ; a1 e8 d  v9 D8 N8 F7 q% O( `  z
  264.       int iCurrSize,iFileSize;
    : ]; ]* r5 l0 H, b
  265.       iCurrSize=0;& B6 V! `, v! L7 Z# B# F3 Y1 ~. d/ q
  266.       iFileSize=UpdateList2.size();
    * H; Q- J  Q* N; g$ ~& C2 X. n
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");! t. O  L4 B% l  w) b2 o# c1 D
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    & i' E. S; \6 i# @8 t
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    & ^3 o4 d- u/ q4 k4 G4 m
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  `0 ?' b2 G/ e" }
  271.       Fclearf(".\\update.dat");  ]# o8 \$ y6 A# H) Y
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    8 C, c! Z/ i0 J$ f8 K
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 p- i: r3 R: }2 W. R0 B: `
  274.       {1 a) W  z/ s4 z- A" a# Z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    5 Z" d6 Y+ Q. U2 U9 s7 |
  276.         {
    9 u4 y9 U/ l) ~/ y
  277.           file=(*p).second;, x3 V0 e6 _2 O% u1 B2 a) Q
  278.           sprintf(filename,"(%s)",file->file);8 a4 B: n0 v: D$ S2 q
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 _& I9 s: y! n4 A1 N+ J9 T
  280.           iCurrSize++;& O0 `( m9 w; o1 ]' {! A
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) Q4 j& m. e+ N0 H
  282.         }
    3 b! k# G+ n+ ]+ v% y3 }
  283.       }
    * P" E+ f0 U' Y5 r/ t0 j
  284.       unlink(".\\update.txt");
    % @2 v1 W6 P# V6 s8 m  D3 {  C' Y
  285.       unlink(".\\update.tmp");
    , T+ A5 w3 E: ^8 n1 @, ?
  286.       Fclearf(".\\checkversion.dat");5 f' r+ m, }6 b& l+ ~, ~* ^: c- v
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);) F0 o8 E& ~5 {" `, G
  288.       if(UpdateLocal.size())
    ) `0 y% V4 L2 v4 Y1 N" R
  289.       {
    ( a. V6 c5 ^; f8 ^$ K4 Q8 B
  290.         UpdateLocal.clear();
      K# B- N+ D+ d6 D* X. M0 B
  291.       }- v' [8 O, R' G: _* `# s! G! w
  292.       if(UpdateFile3.size())) M" Z3 E6 b" t' K' {' w! g( f
  293.       {4 k( m0 E- Y2 i) P  @, Y% Z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : j; [( o/ `" t
  295.         {
    8 T* b# F5 Q- N
  296.           file=(*p).second;
    7 n$ r6 D3 ?! J1 N' K3 c2 K5 r
  297.           free(file);
    . H8 i" K* A; L/ ^( K. z/ n7 u
  298.         }. M7 b! W2 v- J. s, ~1 S+ x
  299.         UpdateFile3.clear();6 h0 z/ q0 P) w8 L$ e
  300.         UpdateList3.clear();( a/ Y1 T. N* S$ M- D5 ]. j/ K
  301.       }$ l# u# x5 l9 l( N* r
  302.       if(UpdateFile2.size())9 t& e0 K# X8 F9 z4 O. R
  303.       {; N* M8 n  M5 I; I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 m8 q6 i1 x) G3 T+ U
  305.         {1 C3 {4 w  R) T$ d- l5 q$ z
  306.           file=(*p).second;
    9 s+ o% t& O2 R! V: O- o4 t
  307.           free(file);
    % s4 w" F9 G4 v' Y6 d# U9 m
  308.         }- r  }0 b- @# d2 N3 \' \
  309.         UpdateFile2.clear();
    ' C2 d! L' m' Q/ h5 p
  310.         UpdateList2.clear();, A% E$ M8 s% Z, `
  311.       }
    , t4 C3 h  d# q- r; R8 t0 _
  312.       if(UpdateFile1.size())
    % e" _& K7 u: S- U9 Z/ L
  313.       {
    / d) Q* q: v) W4 v- X! e" j; J. a
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    3 D, g. Z. G! S4 e. r3 K2 O
  315.         {
    6 Q" s& H* h2 E7 d6 x6 I
  316.           file=(*p).second;" N  I. a0 L5 j
  317.           free(file);
    ; ~  f: m2 R0 S/ a
  318.         }
    : ^  ~7 M: ^3 ]7 v: b& |$ V
  319.         UpdateFile1.clear();$ R# t# @! j* R5 C" q) U
  320.         UpdateList1.clear();
    7 }2 Z4 T9 N& p& K' s3 \, ~7 v
  321.       }  k  v9 n2 l8 e9 I" e0 \9 H: m
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));. W3 A7 h) M& z5 z8 R
  323.     }
      N6 a) v: s! g5 [- b
  324.   }$ w1 J" c5 o3 E7 \  O+ {
  325.   return FALSE;$ }$ K& X9 D" O: Y7 ~# T- H) q
  326. }; |0 P1 X2 l5 |
  327. ; Z; O5 `' B4 e! x& W! w
  328. void CRevAppApp::ClearAll(void), Q- u4 [) e' e- F
  329. {& u% g1 ^8 K" X8 X% [
  330.   LPUPDATEFILE file;  \# ]8 a' y( q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;+ |& M' O' ^- F1 H
  332. 5 U/ H! }6 P+ C4 q2 N3 M$ v* i! `
  333.   if(UpdateLocal.size())& ]5 f5 G3 I/ |! I! |! Y& Q
  334.   {, b2 s: ?* Z% g; F
  335.     UpdateLocal.clear();
    8 E6 x( @) d3 P, w+ H6 [
  336.   }
    5 r9 Y: i2 L( a0 ^- x
  337.   if(UpdateFile3.size())
    $ I; I0 v8 P- B; Q$ E2 g
  338.   {, `# \& C7 B; t1 V1 D# O- W" E% g$ p7 H
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 d0 V* t9 l9 B- a- k3 j
  340.     {4 {7 N. w1 `/ Z. s& j* x4 A6 x! p4 c
  341.       file=(*p).second;8 d1 A5 n0 a) |8 Y) a
  342.       free(file);* o4 ^0 g" c5 U  K  G1 B
  343.     }8 O7 F& T- a' Z( L- j
  344.     UpdateFile3.clear();8 K: [6 e* K- b8 u/ i9 _8 |" w
  345.     UpdateList3.clear();) l! m/ N+ q  A: c; X/ [' H1 J
  346.   }# R) j" {  i5 C! f7 X* H9 ~
  347.   if(UpdateFile2.size())
    9 w6 Z" D: j$ U8 Y4 ?7 H+ G
  348.   {
    5 Z6 g( @/ y- \, f6 n  M' `
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& s% O5 O+ I" |7 T* |/ h
  350.     {
    ( ~8 f4 |( M) k( v9 w8 L* T" G3 q
  351.       file=(*p).second;
    & J6 N2 @0 |/ l7 V3 g% `" O; @
  352.       free(file);! v5 {/ [1 f1 P% [4 b$ s& ]8 b
  353.     }
    # N5 F7 e. v! g! h2 [" ^2 ?
  354.     UpdateFile2.clear();0 S# o* P. ^& B
  355.     UpdateList2.clear();
    , V6 Z. H" y( D" U
  356.   }# t7 }' m! F/ B! G8 f5 o
  357.   if(UpdateFile1.size())
    + u& J& K0 f6 p  f% Z
  358.   {
    6 H/ \% ~' \& X7 k( x, S; F
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 G5 e* r2 i0 p
  360.     {) w6 ~, ^8 T. t' z: I4 L
  361.       file=(*p).second;: P/ ?% L) r  j! g+ ~  U8 q
  362.       free(file);  n. i& w3 J/ a( X1 z9 V% w
  363.     }
    + {8 s: k4 u2 N( b1 W/ u* K) z
  364.     UpdateFile1.clear();! [( V% Z0 b# y7 q% h: t- G
  365.     UpdateList1.clear();
    8 T8 Q0 b* Z% ?% {& C" K
  366.   }, V* w2 A. |- q& [3 b
  367. }  
    4 O3 b$ A  N. Q5 {( T
  368.   ; c3 p: Y6 P/ Z
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    3 z. }8 W& N7 W$ E; T
  370. {
    & S) I- E* B: U
  371.   int c;8 }) S* s4 D! c# m8 k: g  a
  372.   LPUPDATEFILE file1,file2;" `: i/ H( Z. w/ P
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    & y- ]! |( P- p  i7 g: Q
  374.   std::list<CString>::iterator l;  T* G! o% P, ]0 ]  ~* z5 }! u% D

  375. $ c9 N$ r9 D# E
  376.   UpdateLocal.clear();' h; X7 b/ d, y7 i& C  v. J
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    . N- t; B# P% b9 T8 Z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);0 v& J0 u( W: z1 y4 ^, l
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);2 ^8 y1 d$ M) u$ _) Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);; J+ w0 V1 o1 {) o4 |
  381.   if(UpdateFile3.size())' z7 Q3 B. \3 l1 Y" Q2 H
  382.   {
    ( y0 v1 x( ?: W8 V: _3 m& P& Y2 g) N
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)$ E+ J/ l# t8 ?* P1 I9 [
  384.     {5 ^2 \/ O/ w6 r0 t/ P+ A
  385.       file2=(LPUPDATEFILE)(*i).second;
    ) `  ^: J' j) l0 b. s% F
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' L( F2 s( {( U
  387.       {: A& g" i$ b5 M: b+ H) F; b
  388.         file1=(LPUPDATEFILE)(*p).second;
    5 M' ^$ i* j5 M" e6 r% X
  389.         file1->vers=file2->vers;
    5 D, _* h* J, S4 G# e. L0 E
  390.       }; a' y& D2 r* `4 `# Q6 D$ {/ _2 d
  391.       else
    ) D, j' E" G1 ^3 F* x
  392.       {
    . r! s$ M! A1 Y! M1 P* U7 J
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. ^4 i5 v5 N1 a- }" @8 |2 _
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    $ d5 V9 M/ m! f2 M9 `
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));4 H% @$ ?! w' b' B' l* c! m
  396.       }
    7 M. B2 {% T( d' B) p9 T) D* z
  397.     }# u& e0 s4 j- v+ Z. H. N3 D1 k, N
  398.   }1 \& v/ o9 z/ n! @; M& ~5 g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% E* L* w2 P. P1 T
  400.   {
    6 o% V$ t0 c3 ]" f
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ( }/ E$ f; s$ y; Q( ]* s
  402.     {/ l- T9 h5 m2 I& O: C! p
  403.       file2=(LPUPDATEFILE)(*i).second;
    * o" M9 G& U0 k4 U& x
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 e6 c4 O  I9 c! U' p/ ]
  405.       {$ @( b; g+ c/ s* S: S
  406.         file1=(LPUPDATEFILE)(*p).second;
    % t! _3 v! t! L  W% c
  407.         if(file1->vers!=file2->vers)& w  {5 X$ U+ p. s& N" L$ I
  408.         {# p. d+ U& l$ u0 x- c# P4 a
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& G( J5 d. u5 e! J! _! m& j
  410.           c++;
    . N- M  F" d+ R! V6 Z7 F
  411.         }
    8 j4 D* |' M* F  X8 g2 r" m9 g
  412.       }
    ) k+ d# i5 Q8 C- D" B
  413.       else6 j' d7 n. ~, e+ P% ~) z
  414.       {
    . }: K: X0 [* e5 e3 N7 @- f
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- X; \: L0 d  B8 p) |/ S6 {' b: U
  416.         c++;6 V% e; ?- }8 z& n
  417.       }
    ' q* i0 O/ X0 G" I3 t
  418.     }
    9 p4 T2 J7 Z3 A7 y
  419.   }
    7 a% @( o+ A$ z6 L$ ]! _7 D
  420.   unlink(".\\DownLoad\\update.txt");
    . ~  O5 a  n) V4 z3 E) v8 h1 Y! U
  421.   if(UpdateLocal.size()) return TRUE;
    ) m+ v  A+ Z( X- y
  422.   else                   return FALSE;
    ) D  `+ a7 ?! l: n- u
  423. }
    4 M3 I6 l" ~! E3 b. F' \9 X+ f
  424. ' P( q$ a% o4 J
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ) u6 f; R$ ^: o9 p2 ^" ]
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"% g2 ?! K1 L/ v# l  o1 X2 [
  427. , C2 `5 ~. w# }& l! D/ h2 E
  428. 4 n, c4 X" ]9 ~% ?

  429. 9 x1 g5 ?$ Q, o2 H2 m1 h" _- d7 w
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)  E. ~* o- I& c4 |3 z/ E
  431. {
    9 a/ d3 E: {- a! L
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;. ~( h. x4 n7 |( a4 y/ x! U
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . @1 }. i2 ~5 [3 v% Q6 R: O
  434.   {
    & W0 H( ^6 s8 `( @
  435.     char szLanguage[50];2 c/ Q' x  [( {8 s
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    , X' X) o' h9 P3 K/ ~
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) [4 g& F9 k8 b
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      O/ D: D* B+ U; D
  439.     else                                   m_iLanguage=ENGLISH;" X3 u' t5 X6 f+ S
  440.     char szRegister[100];
    & k9 q: H- P% G% {! Y
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + d( k4 w$ C7 t" F
  442.     strRegsName=szRegister;
    " d$ J6 m9 Z" `* H4 j4 [
  443.     char szPatchURL[100];
    4 g$ [" C1 J; S6 ~
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 s, [5 r- j6 `8 u" C5 Q: g# x1 z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * C; O$ f4 o" g5 {# R. p) T4 c/ L
  446.   }6 M4 B: y# r! V7 q7 ~- Y( w4 b
  447.   else
    2 V6 b" E8 w: O5 R) w, [* m" L$ V
  448.   {
    1 `/ _: R% V0 ~& Z* }+ g
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + e$ U$ c; [# O( R0 ]
  450.     strRegsName=DEFAULT_REG_URL;3 s7 y/ z4 Y& a: R/ H
  451.   }9 C0 Z0 ~* m& l  r1 s; h
  452.   if(GetFileAttributes("hosts.ini")!=-1)6 Z1 v: X! m. M1 j
  453.   {; J+ }' Z: ]: y0 C" u7 X! i% B& u
  454.     char szIP[50];
    2 H: {) T, ?: q
  455.     char szDIR[300];3 I# e$ W3 \- @8 p# [
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    + ?( @6 Y2 H1 T/ E8 n2 Q
  457.     {
    8 y% d* @, c3 v% Y7 Q5 ~, z4 f
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* K3 I. q; k9 G' U' B; q6 E# U
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    " {. i* }' Z2 k: Z
  460.       strHostName=szIP;
    & U+ }" P3 W& ~, ?  E
  461.       strHostPath.Format("/%s",szDIR);
    " E4 Q( I4 X) I# o9 \+ i
  462.     }! i' U2 }2 v4 {$ i: l/ A; O
  463.     else
    , V1 W0 {6 [$ G0 @6 G
  464.     {
    2 z( O) ~  p- J8 J( `8 d
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & J5 i. m6 Z+ o3 D, @( t5 b
  466.       {* {9 S: L+ o! T
  467.         char szLanguage[50];& @/ j2 z. k% [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " [2 r8 O$ G; |' O! e9 [
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ( O+ D/ o! e; a! P6 r
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! [7 M' `2 b0 x$ r3 U
  471.         else                                   m_iLanguage=ENGLISH;4 e3 R' K7 Q' h4 Z$ s1 L
  472.         char szRegister[100];
    9 z2 K) e, |0 T' Y( }( N. b: {- t# r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 H( {( [# }1 ~* C$ J1 I
  474.         strRegsName=szRegister;* X& q: w* t5 J- ?0 d# |
  475.         char szPatchURL[100];; d5 f# K7 [$ Z( b' J7 @# h
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' |9 P* S& W; c8 Z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ; F  K. Z3 A8 |; Y. B5 l3 F& U6 T
  478.       }
    - x( a9 Q6 L" F+ ]$ x' u4 e
  479.       else6 _$ R$ ?4 l. @3 I9 H
  480.       {# i" ?' s$ K# z' i; S: X+ ?4 `8 T
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 r7 h& H8 e) }# [& D9 Y, R
  482.         strRegsName=DEFAULT_REG_URL;" X6 t: N$ V9 I' ]; \# u2 y
  483.       }) H. h/ q( m) z4 a8 `
  484.     }: G" L( j9 e  g
  485.   }
    ' U* l) S1 S* x" E) \, o& l; S
  486.   return true;
    . Z' }( }- K8 L  Y2 a; K
  487. }8 P7 m% S8 }) H! R& p
  488. 0 g9 i; U$ B, b" D% C1 Z6 J% u9 G# J
  489. #include ".\ZLib\unzip.h"
      O/ }) w5 }! P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);$ L' o1 v1 l- s% Q$ C4 c
  491. /////////////////////////////////////////////////////////////////////////////% F' N2 {# u/ {+ D& {: }6 X+ n" O
  492. // CRevAppApp initialization
    , m" L8 K3 ]! _( ~# k, W9 h+ }
  493. " ^4 P& u! b+ X3 k# a0 c
  494. BOOL CRevAppApp::InitInstance()
    9 M, m5 c; \) Y3 f" k# ~( I
  495. {8 k1 |; P2 f/ S- d. i( h
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , _7 i# E: {- l! ]! D

  497. 5 ~' D! x: k0 D! @) p! W( M
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    % z3 [. Q. n1 P3 l( \+ |
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ; J4 z7 n2 U. x$ v8 H& V
  500.   {! v5 \2 n! e8 a$ g7 U" B! Z" A  c/ M
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 `: B6 m& i# s2 w
  502.     GetPathFromFullPath(szPathTarget,szPathSource);' q3 T/ {) [# ]9 m# W2 `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    1 I; N/ q) Q! F9 h- _
  504.     {6 Z1 X2 C& D3 W# r, N  H. G. _) [* ^
  505.       strcpy(szPath,szPathTarget);- r. }5 j& T+ w' S9 K* g" V
  506.       SetCurrentDirectory(szPath);
    $ {0 b4 L2 s$ N0 Y& j: p
  507.     }
    + @# g% g) I+ F4 b7 l
  508.   }% }( e% I& t9 W
  509. #ifdef _DEBUG
    " ^0 h1 X( H" O% T$ G
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' _% Y$ l. A" ?
  511. #else
    # b7 Z' J* v2 K% O5 h0 x
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 h; g* ]; i# D2 }' m
  513. #endif
    % C& ~  f9 b3 Q! {: ]) {* _
  514.   {
    " X* K& j- z' X+ j5 f
  515.     char tempFileName[MAX_PATH];; O) a) }  ?# V
  516.     strcpy(tempFileName,szPathSource);
    # @9 Z& d% u2 L' _6 \; g2 n
  517.     tempFileName[strlen(szPathSource)-12]=0;
    6 V: B0 p2 p0 o! l0 i
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    $ w  U0 K5 r8 {: g) p. p
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    7 k' U6 i, N, @$ ]0 d" R4 g5 B# \
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ' ^+ i- Y; s0 A2 m+ i
  521.     return TRUE;" K; m: K- q. N8 ]) ^& k
  522.   }
    0 D+ G; E4 X1 m3 p* i
  523.   // Nuke 0118: Delete run.exe
    ; }* q+ K0 ~4 C( P/ L
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );5 {) f% Z* S3 k/ B9 c, ?- `
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");5 B9 s: _. [- `: `& w! q1 v
  526.   if(!ReadCfgFile("Config.ini"))
    ' W# }. C( g; a1 Z1 }
  527.   {
    3 T$ H5 A! J) Q6 J* b8 j
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);; [) W$ t1 D# V6 G* k" c. Z+ T
  529.     return TRUE;6 f3 u# `. l2 O6 V/ @$ L7 P8 A
  530.   }, p: I1 _# I) R( o
  531.   HANDLE mutex;; c$ k/ Z' L8 E1 Z4 a
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ E1 J+ `( |# o) q" N5 I, w
  533.   {$ |$ U' ~7 }! L5 m
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)* z, ~8 i* }4 J' M4 o5 ^3 F
  535.     {
    ; V9 |* q& B+ e4 g
  536.       CloseHandle(mutex);
    0 R  u- v$ z9 t
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    % C5 T# y: g, O4 @/ q* w7 T8 v5 ^
  538.       return TRUE;* y4 O5 I# n. i$ H
  539.     }9 _* Y# \8 t) z% b; [
  540.   }  
    % g) t- N% m4 T% `, `& v
  541.   CloseHandle(mutex);
    & s# b8 b) A7 I: [2 A: S- v: C2 j2 q% D
  542. 8 n! [2 u% N- K; a, W$ R4 G! J
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    4 D( `: Y  ?  o
  544. " Q/ t# l% j1 I* C# A
  545.         AfxEnableControlContainer();
    4 O! X$ z* `; F/ c( L  l: {
  546. 5 {# K) M. x; x4 J
  547.   bCanUpdate=FALSE;9 \& Y. C' ^6 ^. e
  548.   dwStartUpSteps=1;! q- p9 o  n3 R* h- |
  549.   dwProgramState=AP_NOTHING;3 G: p. ?" E/ x! @

  550. , \3 `% Q, P/ W( j! @9 C
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    6 _: }6 `% Z2 i& U2 G4 j* b
  552. 1 r1 L; X0 Y4 A  j& U8 a0 q
  553.         // Standard initialization
    1 u  _* ]. j* n: y8 P" i) G6 D
  554.         // If you are not using these features and wish to reduce the size
    . H( ]- ^) r$ ?* P4 s
  555.         //  of your final executable, you should remove from the following
    1 v. P7 A) m2 F. U( C
  556.         //  the specific initialization routines you do not need.9 W, w, n# t; K; e0 m7 s/ x

  557.   _6 H) z* k$ p6 [
  558. #ifdef _AFXDLL& U2 h8 Q/ ^1 t: I
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL+ K$ A! v3 v& E" @
  560. #else1 ]7 S2 {6 ?3 D
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    4 {; z5 Q  f5 k* m8 m" j: [. f7 T& u
  562. #endif
    3 |7 j; o4 |% G
  563. 6 A: [4 |; O) B. F7 r& H
  564.   dlg=new CRevAppDlg;  e! |2 Z' a/ e! E, t, t
  565.   dlg->Create(IDD_REVAPP_DIALOG);
      x( x$ ?1 {$ a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ; W( n0 a. ~  G  y
  567.   m_pMainWnd=dlg;
    5 w7 v' w+ K/ B: b1 V! c0 [4 j( ?, ~5 x0 {

  568. 6 H6 o9 `3 k; B8 N& _% J4 {) t% S
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);  C8 D& t$ C5 `% K4 G
  570. 4 |$ l  W. }/ ~5 W4 q& z' f
  571. //  GdiplusStartupInput gdiplusStartupInput;
    - Q) @* w- [1 _1 ^( V* K+ z
  572. //  ULONG_PTR gdiplusToken;
    0 p: d* m1 Y  A$ K8 U( L
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& J. U5 X* b' b
  574. & u- G6 s$ G2 C+ _9 N
  575. //        CRevAppDlg dlg;
    2 g: |/ j# q# l2 ?& `* F4 f
  576. //        int nResponse = dlg.DoModal();
    : g* }/ |' W! ?, v" J! c
  577. //        if (nResponse == IDOK)# i: u! h5 y- A( f  F: v
  578. //        {$ a+ X/ \5 x6 q5 K' N, N4 e
  579. //                // TODO: Place code here to handle when the dialog is
    + |% \% k2 B: I: X/ U
  580. //                //  dismissed with OK' T/ h' c: ]0 v. p% a2 ~/ g
  581. //        }
    % l! q- T) g# I' Z8 O0 s; ~& Q
  582. //        else if (nResponse == IDCANCEL)# J! h: w: E* i  t9 c( c) r
  583. //        {9 Y. e2 u1 W; @2 R3 D
  584. //                // TODO: Place code here to handle when the dialog is
    # \- o9 ]! a! {6 J. U
  585. //                //  dismissed with Cancel
    % G* c) w( U% x, E/ w
  586. //        }
    & J/ a& n" M+ z% u" A
  587. 9 m7 [1 y& e: T5 p4 y" A
  588.         // Since the dialog has been closed, return FALSE so that we exit the* i; f: E9 k' r& j9 a  W
  589.         //  application, rather than start the application's message pump.! O/ U1 s  E4 s9 Z. j/ U
  590.         return TRUE;* a' |% p' ?6 a" R" Q! K$ c3 j
  591. }9 T2 p3 A) {" h; L
  592. & j% {* I- T$ o2 N; c$ L
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    6 ?, D" q6 V# ~
  594. {$ E7 c1 [/ X' M( u' q& u0 L2 ^
  595.   int i;% Q) W9 ?# C' E, B: W! j9 F
  596.   char *szRet;
    - m: [% t0 G# E/ x

  597. / J9 W7 L9 B' ?4 K+ E4 j
  598.   if(pSource) { itoken=0; sztoken=pSource; }3 K2 z5 l/ @& P! _
  599.   if(sztoken)
    2 \+ q  f, K- W  e6 V
  600.   {7 F3 ^" X& ]6 X
  601.     szRet=&sztoken[itoken];% Y8 F6 Q2 r# w  [1 Y+ h
  602.     while(sztoken[itoken])
    ( O# ?2 G9 H. [$ E: R  ]
  603.     {
    , m) S7 }# u3 h5 M5 Q3 {4 @
  604.       for(i=0;i<(int)strlen(token);i++)
    # |- D9 \5 F& E4 F& o+ q
  605.       {& B) F# W$ A. Y5 o2 a
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    . L6 {, _9 q+ r( v$ v9 W8 u0 q& K
  607.         {6 w6 V0 _5 U6 T8 n, E" O
  608.           sztoken[itoken++]=0;9 g+ C% b7 [0 g) j+ Q) x0 ^; s1 l
  609.           sztoken[itoken++]=0;; G. N$ ]+ ~4 o( b
  610.           return szRet;
    5 `. A  @5 F4 i# Q
  611.         }
    6 P8 r3 ?( ~! d0 j- `
  612.       }# l& s: D% ?2 e* w& [& P5 ]. q
  613.       itoken++;" s- [+ L( G9 y" p' i" Y2 _  K
  614.     }9 H: E9 U& J! _5 \* }
  615.   }( O% q$ m" o1 P" J5 v
  616.   return NULL;
    2 k7 |& E. d( R  I# j5 ]$ o
  617. }4 Z$ G0 ~; {  [# f; Q7 S* `

  618.   J: v6 |/ A4 \+ c8 I5 g
  619. void ProcessProc(long Total,long Current)
    6 u( u7 C+ t: J% O& I, O
  620. {( q6 A7 ?9 o( J9 A0 C$ D1 M8 _( J
  621.         MSG msg;& Q' Z  b( t3 v( Z1 A
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);: m) ~2 h+ E: O* }' R7 t5 A
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    + v# Y: Z5 U  J$ }- Q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    / D- u) x- {) g$ v9 }2 ~
  625.         {) I. h9 Q2 F1 T
  626.                 if(!GetMessage(&msg,NULL,0,0))6 Z  i9 ~' y6 X6 e# l6 g4 Y: K! L
  627.                 {
    " p. X3 n0 u  W1 j9 n
  628.                         return;: O* w; m2 m/ e% h: `: T6 z
  629.                 }
    0 y4 K. O8 U/ C6 q8 M9 E
  630.                 TranslateMessage(&msg);) x" V9 f( E" Y/ K5 V  `
  631.                 DispatchMessage(&msg);4 P( }* V2 n- B$ y
  632.         }       
    " ^5 e2 b- f( ]2 }* V; |8 q' n
  633. }
    ) K! n  k+ ]5 I5 L1 v+ `8 ?9 e
  634. 7 B/ D  f' @6 ~
  635. BOOL bFirstChar=TRUE;
    2 `0 @# ~! z, p! \: ]# u

  636. " C8 x0 P# o4 q8 m9 @; s& |( a2 v
  637. BOOL CRevAppApp::OnIdle(LONG lCount)4 @2 D6 Z( u. @& X
  638. {0 ?9 N2 H9 p7 _
  639.         // TODO: Add your specialized code here and/or call the base class9 N: U* I* T4 u: g  S+ a
  640.   switch(dwProgramState)
    0 c0 t" G" d/ e
  641.   {8 v" p, L1 A' X3 ^
  642.   case AP_NOTHING:7 C. X$ c7 a0 I: K6 C$ W
  643.     switch(dwStartUpSteps)7 Y* `+ E+ r5 f9 f: [
  644.     {
    * M' b' `) V: k5 {. q7 b" N
  645.     case 1:/ b6 E5 u2 j3 f9 Y7 k+ |& ?
  646.       {8 }) }1 W0 B4 m4 W7 t+ b! P( K( e
  647.         int i;
    ) N" v0 Z0 o% d( Y/ d- Z
  648.         CDC *pCDC=dlg->GetDC();# L5 R  C( b4 M1 [% T
  649.         HDC hdcwnd=pCDC->m_hDC;
    & x4 m9 R  C' |' |
  650. //        Graphics graphics(hdcwnd);' K! G) _1 H6 a$ z* }9 i
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 l8 U# [2 u1 [
  652. //        INT iWidth=bitmap.GetWidth();
    + Y' @( x% l7 S- {# N. Q' x; C
  653. //        INT iHeight=bitmap.GetHeight();$ L2 h$ }; X8 p/ b
  654. //        Color color,colorTemp;. c) b3 s7 S8 h9 G$ X
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)8 x3 e# Z4 n8 }0 u/ _* O# j
  656. //        {( A$ D4 ~) i# a/ [0 P9 H* l+ n: [
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)5 M8 {3 A% c4 @9 d. ]' q
  658. //          {$ G. F. q; p0 x: ]! g% T
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ( r5 |6 j" j1 j$ u
  660. //            colorTemp.SetValue(color.MakeARGB(2 m6 M& Q* m+ @- j, X
  661. //              (BYTE)(255*iColumn/iWidth),
      t  P2 M6 f9 K/ O
  662. //              color.GetRed(),
    - a! [: o1 J) ]# U
  663. //              color.GetGreen(),
    / Y2 J$ V9 c; F, p- L' u3 @
  664. //              color.GetBlue()));; G9 J2 k& w. W$ |1 t* S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);4 T' |- `9 B$ q  e4 \6 [1 o/ `
  666. //          }/ C) e6 L( W) j8 Y
  667. //        }* \  y+ q# R5 }* b" J* _8 S+ W
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    2 U7 h: i, A. t  R" T. D# r* U
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 X' B6 j# b/ V; q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");7 ~4 y* x2 z& Q% ]; r/ F
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 U4 j/ z0 D% K; v: i' W
  672.         for(i=0;i<240;i+=8)
    % L3 `7 u1 ^* D% m
  673.         {
    " o4 j' x) R9 ~; f4 q2 D
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 F+ G) W1 i. U5 T. N: T
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 ?2 U* }( g( r% A* _0 U
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ z/ \1 u6 g( G% \' r9 Z% @
  677.           Sleep(33);% \# h; E- g' P; _9 H$ ~
  678.         }
    5 d# u- A* r& u
  679.         Sleep(1000);7 L. c& u2 ~6 w# I+ x
  680.         for(i=240;i>0;i-=8)
    1 T$ A$ I3 B5 H! K# X% n8 M
  681.         {
    5 b1 ~, o, V2 f( D+ G- ^
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 w, W/ O' a# L9 |' g+ x
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 _5 \. U0 y$ k& B0 I* H* M
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : z3 r9 `) A+ H+ q( Z  d" M, w
  685.           Sleep(33);0 n1 l" W! T8 R
  686.         }9 R8 }  U( x! R8 \  U
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);# j& p2 p, r4 c. d! T9 n6 |
  688.         dlg->ReleaseDC(pCDC);
    # l% a/ O; }0 ?' D  m; L
  689.         DeleteDC(hdctar);6 Z- U0 _: j% z
  690.         DeleteDC(hdcsrc);
    / {3 v5 j1 G& F7 Z
  691.         DeleteDC(hdcorg);
    2 a' z% [" d. b( o% B) ?
  692.       }' k  O- n3 @  N4 j1 A! S0 y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ! i5 G! E- l) l; T) C0 D
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");% F' L; s4 y1 J( @7 j' U- F
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    * T6 g4 m9 {  \! H9 r& A
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    0 L; n# l8 }8 w. \3 u9 [( e! C: C3 c+ {
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ W( ^$ E, U' r1 m/ F, `" D
  698.       if(!Dn.Connected()), I& c) c3 \3 n2 W7 Q1 r
  699.       {# P; l1 a8 Q& f5 B$ M
  700.         dwTotalFiles=1;6 k9 }. |! c- A/ K  E6 g' r
  701.         dwDownLoaded=0;2 K1 ~' g" \1 I3 X, N
  702.         bSilentStep=TRUE;
    & `3 y" D+ l3 f4 d, w2 ~
  703.         bCompressed=FALSE;
      n+ H, W2 H2 h! j, P" D4 v
  704.         strExtLocal.Empty();4 N5 F( i% E; K
  705.         strFullName="readme.txt";7 p# U! ^3 j) [5 ]; o2 h8 ~$ X
  706.         dwProgramState=AP_CONNECT;5 V; q, n1 ], Y( J" T
  707.       }: x  D  F( {) t
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    * @/ L- ~4 D8 J! H; D
  709.       dwStartUpSteps=2;& ~7 Y6 T- z0 {0 O8 y
  710.       break;
    1 N1 c  b+ n: v; f
  711.     case 2:% x. [# W& o: A7 F: l. Y
  712.       {
    9 i" t7 m% f% _$ G' k8 L
  713.         int iEOF;7 g8 X( P& ~  x' `- U6 S- a  Q) F
  714.         FILE *fp;
    5 k1 v9 r! w- a
  715.         char szString[512];
    * k1 C1 O" P0 Z# O4 f' F/ `
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / D& ]: Q0 i$ _! m; T0 j+ e
  717.         if(fp)
    + N% ^2 T% W9 N0 a$ W5 [. N
  718.         {
    " e/ r7 [2 o3 t/ E) K
  719.           do
    + J4 S; [5 `' [% x: c' G' Q) q
  720.           {0 b' M, y& m# n1 H0 b
  721.             iEOF=fscanf(fp,"%s",szString);
    * q* @! t" k) g; S4 Y
  722.             if(strlen(szString))7 i$ `2 N) o" r4 ?
  723.             {4 \( ~, v2 R. c; K% r
  724.               if(bFirstChar)
    $ c4 H2 y/ E  @9 h& S6 f/ C, }$ R
  725.               {/ W  I. s$ I' G* q1 m0 o2 U
  726.                 bFirstChar=FALSE;3 c0 X3 r) r) @6 C* W5 ?7 B3 M
  727.                 bConnectIsBig5=FALSE;: h9 j  m3 z, i( w1 V0 z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    6 f8 T1 p' j, U  q0 X
  729.               }, p3 w1 M0 E% b' s) ]6 M
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 c  b/ W: L- K, N) D+ Y* f
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    1 I* v2 e" h5 B9 e- K- d4 ~; a
  732.               dlg->m_ListText.AddString(szString);7 W2 E5 D" R- Q" d7 J. L0 s- u
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, C7 _  m9 }% ?% G& [, }
  734.               *szString=0;, M6 l4 j6 H4 p6 z- i6 |- M5 `) U
  735.             }* b: e2 R8 }$ S+ t1 q! L, r
  736.           } while(iEOF!=EOF);0 _& f' K; J0 J) P, {7 l& L5 r8 Q- _1 x
  737.           fclose(fp);
    9 T; t) ^8 H+ |3 T6 L
  738.           unlink(".\\DownLoad\\readme.txt");/ q; Z8 |+ N5 `6 [) b
  739.           dwStartUpSteps=3;; {$ Z: k9 C" x& W# g
  740.         }
    2 ]$ h* E/ I3 m; t
  741.       }8 T7 I( T. N3 x& f: k0 G+ q( h0 [
  742.       break;
    , d3 Q. N% R4 @
  743.     case 3:" ^1 X0 C# o0 U- M+ m4 B3 W5 ~
  744.       if(!Dn.Connected())' g; ?" f+ Q! s0 G5 A) R
  745.       {% ]0 w* H8 R0 J8 z% ?. J7 w4 ^
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 u$ m9 V5 M3 E3 w% t2 F
  747.         dwTotalFiles=1;# `4 f0 o- [* T4 Z
  748.         dwDownLoaded=0;: h% D% g- B# B# [
  749.         bSilentStep=TRUE;9 W4 ~/ A& y2 _+ |
  750.         bCompressed=FALSE;/ {# y* Z3 I  ~1 b7 n' g9 a
  751.         strExtLocal.Empty();& p$ ]4 c7 J4 N7 c5 s" S
  752.         strFullName="checkversion.txt";
    ( Z! n+ Y- W( U# N: \+ a
  753.         dwProgramState=AP_CONNECT;0 v5 a8 P- ^9 W/ i1 @9 s) l1 @6 v
  754.       }1 h9 g# m' g* y4 k) k1 E2 ~
  755.       dwStartUpSteps=4;
    ; q! L) s: [; i7 l1 E
  756.       break;9 E" N2 y7 s* S* r
  757.     case 4:
    * L+ o/ ^0 {' _
  758.       {
    & ?& @! x6 w' R7 |) I
  759.         FILE *fp;# O/ D9 w5 |  L
  760.         char szString1[128];
    $ V4 \) Z4 R: E9 {& f
  761.         char szString2[128];: F1 |7 y) w( y% k
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");' Q& A7 z! L" o  A/ |2 x
  763.         if(fp)
      J# b3 ?$ |0 \& [7 ~. i
  764.         {
    4 M9 d; L4 L+ p0 `' n1 u
  765.           fscanf(fp,"%s",szString1);
    6 \& {, U5 O! m0 L  d" d2 K
  766.           fclose(fp);' j; v  S' j! j. \2 z* e
  767.           fCheckVersion=atof(szString1);
    % z" h' y' |% P6 s/ b* c6 s
  768.           fp=fopen(".\\checkversion.dat","r");
    # N5 w$ B" A6 Q5 o) h/ t; K
  769.           if(fp)* L$ x" H$ x9 e" ~1 t$ U- u+ m
  770.           {
    , I+ H- C5 c5 g' f& W6 L+ f3 S
  771.             fscanf(fp,"%s",szString2);5 N- K; T* P! m8 Y( l
  772.             fclose(fp);
    5 ~# `; j% t3 f0 W
  773.             if(atof(szString1)!=atof(szString2))
    8 z9 S( ?( k" ^4 v9 r1 h% y% B
  774.             {
    " u0 i4 O$ e4 @- ?
  775.               if(!Dn.Connected())
    ( Z5 g6 b7 y. d5 q# E: c8 w
  776.               {
    8 Y1 J/ B( s, k8 R+ M$ `
  777.                 bFirstUpdate=TRUE;
    / Q5 x1 K' B+ u! k  {+ n" Y
  778.                 dwTotalFiles=1;) m7 h' @* k8 J4 V4 _# N
  779.                 dwDownLoaded=0;% C7 U) V: W& x! q' M% ^* z
  780.                 bSilentStep=FALSE;5 ^. s, a; p0 Y0 ~# ?# Z1 \
  781.                 bCompressed=TRUE;
    ' d8 \' ~/ B, U
  782.                 strExtLocal=".\\DownLoad\";
    ' R! H, n1 g8 |6 u' t  Q
  783.                 strFullName="update.txt";
    + W& r7 |- U5 p1 s5 y
  784.                 dwProgramState=AP_CONNECT;8 r$ {( q* }1 M8 E' S. y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 e. k7 I8 a6 D" y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 k# q+ g# ]* s1 r& A
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    0 T% I4 M# F2 D, j. R

  788. - r& \  w- E" L9 E
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( a/ w$ r+ w8 K/ C
  790.                 unlink(".\\DownLoad\\checkversion.txt");2 M3 S, S- x9 L% e9 @) R+ k7 P! u
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)$ D% S5 f* x9 U- I- z) H) S
  792.                 {
    0 t' r* d3 ?" p3 Q9 Z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    . m. i* t' u6 D) y3 n
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ ?4 e, W5 J! A( `7 i7 F" h% t! Q* d
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");7 R; W/ E1 I& I5 a+ O
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ S: D  K, e# C( ?: U9 i6 h
  797. * z* z: M6 |  @1 o
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 H! [; ]7 T7 M+ O3 t6 F
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 x/ k" W% ^( f' S4 Q$ }. V' l
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");% E/ _2 j4 }8 }! o
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 b' i: I- C! g& R+ r
  802.                 }5 l, F$ ]0 \$ q/ W) n) j  w. H* @
  803.                 dwStartUpSteps=5;
    6 o! T* J" Q. z: G; a5 w# V
  804.               }& w' s+ g8 \3 ~0 S2 ~3 r  L. T
  805.             }
    " }6 y% M) N3 {2 G3 i1 E; y1 R
  806.             else
      ^- ~4 _! C" `% ~3 N7 n
  807.             {! X* k+ j9 Z8 s: H8 k4 a; V& j: M
  808.               unlink(".\\DownLoad\\checkversion.txt");9 A0 Y# i3 F& o. S# Q, S
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");" s6 B3 d0 z7 H* K) ?! h
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");0 d2 ?: j% g: A  E
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 i( P* J5 o3 j* O- ]& q

  812. 0 v1 }" l4 Z! Q, A3 T
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* W" s4 ?( f! T7 v0 |
  814.               dwStartUpSteps=99;& v8 j9 W) F: H( r1 N* d8 q1 O3 h
  815.               bFinishUpdated=TRUE;1 Z9 G/ m7 R! q- }+ j
  816.               bCanUpdate=TRUE;
    # {' o- k! W# W! \
  817.             }
    ! |* X) c+ l1 r4 c
  818.           }
    2 I8 x3 x1 w* l2 M1 O
  819.           else& u9 V/ x- W( n5 r! a
  820.           {
    . r5 G5 E5 D# U
  821.             if(!Dn.Connected())
    ( l" X9 Z$ ?" E2 ~9 b; s
  822.             {5 u# e8 }& W8 F0 _& a
  823.               bFirstUpdate=TRUE;
    6 ~0 H) F, r+ E( x* E
  824.               dwTotalFiles=1;' G& M0 k+ ]/ k3 I2 Q! r
  825.               dwDownLoaded=0;2 u4 {1 M% Q) q& t& j' y
  826.               bSilentStep=FALSE;
    . |: O1 O" ^) P5 f# }# @$ r( C' h2 V
  827.               bCompressed=TRUE;- p. p' `. q1 y; }5 N* U2 H4 u
  828.               strExtLocal=".\\DownLoad\";
    - v, \* o8 N& z
  829.               strFullName="update.txt";
    ) S& v" W$ ?3 w- ^, h7 S* p
  830.               dwProgramState=AP_CONNECT;4 v" N( O5 F3 ^7 k  ~6 o+ @' [
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , N1 q( G- D( o; g" f
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");* a. \& I) r' @/ C  O, F
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) f/ g4 ^3 i: y, Q1 D
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 K- G) }+ v! ]2 U! C1 U. h: \
  835.               unlink(".\\DownLoad\\checkversion.txt");
    1 T1 F% I; G7 T. ^) F3 `
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    7 l& \$ {% B; c* n0 I# @
  837.               {
    * W* F* D" M, k) h: ]
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");$ @2 F" c2 ~" L8 p  T3 i  {/ w
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");3 W7 Y( z* W$ q3 R! |
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    / ~0 _/ e0 k! {' o+ E+ P$ |/ u5 k
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' T1 T& y/ r) X* b9 I8 Y
  842.                
    5 c/ B) Z+ [/ Y4 N$ [
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : C, t+ A- u4 X4 q, [4 U# d' ^* {
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ( J3 y" V( N: j9 r! U4 z# g  D
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");7 y- N0 i( o$ C0 V1 V5 W
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 h& f, i0 i* i; m. p. b* |
  847.               }/ O* d8 x- _: k8 s
  848.               dwStartUpSteps=5;
    6 U/ n. Y! |; e) k7 k2 f
  849.             }: p& @# c5 e- V
  850.           }
    : Y. G6 ^+ ]  ?/ F( t, R8 L+ E; n
  851.         }
    $ J! {: a* c5 T/ d* u' K: L
  852.         else
    ( ]& Y  j% T9 I8 T$ C: F
  853.         {* c' d+ p* \3 p: F* k# X, `3 ~
  854.           dwStartUpSteps=3;! Z/ S8 w9 x, C: M
  855.         }
    % l- C$ l3 C" \: ?
  856.       }) j) ^0 p1 N9 B! |1 @
  857.       break;& @5 L) C, i  v! e# _  @; b
  858.     case 5:2 M7 i0 v+ }, T, }
  859.       {
    " E  ^* J: C/ a" c5 W& h
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ( y" g3 Z1 l) K- K4 Z
  861.         {
    4 Z: }( V% u* W3 i  q  n4 Z
  862.           int opt_overwrite=1;
    1 D5 m% h- K6 ]
  863.           int opt_do_extract_withoutpath=0;
    - p+ S% E# q4 d$ w; N
  864.           unzFile uf=NULL;' _7 ^" x9 ?  X4 ?& \' t  {# c; @1 v
  865. . T7 E5 D8 K1 g8 J1 ~
  866.           uf=unzOpen("Wsa.zip");
    ; M5 ]& e1 R, W! a
  867.           if(uf)
    0 G& B+ O  B1 G8 [# K: q0 V
  868.           {; i/ g; ~8 C, Q8 h% S' t8 l1 z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    5 T" G$ f( P- J# r  p" d5 c3 g
  870.             unzClose(uf);
    . p9 }0 X# F- V5 c
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    4 c5 b4 L4 K9 R  [9 d- m
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");- b% Z5 m7 i# o
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");9 K9 k1 C9 t  N' V* x6 p
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 N( d; g+ E; h. N: K, I, }
  875.           }
    * E. `. y& E$ f! M6 F- o5 s$ T
  876.           DeleteFile("Wsa.zip" );
    0 s4 d& O6 C) Q+ |# i  a& ]
  877.         }
    . r) X2 s6 S1 [4 k* U

  878. - a) J/ D+ o# {+ a
  879.         if(CheckLocalVersion())# i0 T6 s+ Q# b$ M! V/ k
  880.         {
    # p( i% Y# P! u2 ^, j
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    $ h% o- Y' ~& W4 Y2 |
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");. t; u8 ?  l" a3 D
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    % X! C1 m* f# H+ U
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! Y+ x3 T- R3 F% C' p6 V3 v
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);7 X; _, `( c8 f, E% L  K+ u  ^
  886.           dwStartUpSteps=99;
    6 s( H/ u7 }0 ~/ N7 n1 L. _
  887.         }& B! l- b! U3 T1 |' @7 p6 u' V
  888.         else! Z# h$ B, `7 `6 w
  889.         {
    0 E1 A9 E$ z# q5 b
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ) |8 Z) ~* s$ a# O" _$ A
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; h6 Y: A3 z0 p5 t- j7 K
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");3 q; p. U% Y4 |' _$ s+ T+ v' o

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

$ @2 w7 {* j) u- ^$ Z
! m/ ~3 L( q$ j; E3 B5 j/ m

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-5 15:24

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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