CSUpdate.exe源代码

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

0 |& T/ Y: M  n$ a
  1. / RevApp.cpp : Defines the class behaviors for the application.
    + Y/ y* q, R3 ?) _. U
  2. //
    , G" \7 j- H% a8 @

  3. 2 i0 f1 |! J6 R3 }/ {, \" V  |
  4. #include "stdafx.h"+ q, q9 T" z0 E$ a+ i

  5. ) I- z* a+ \9 D" @8 n6 R: T% A1 g( b; a
  6. //#define UNICODE
    8 x% j: j+ O6 r  Z
  7. //#include <gdiplus.h>; o+ {' B5 o) L1 `
  8. //using namespace Gdiplus;; q3 b8 D& c1 v. ?
  9. 9 R3 U. c' ?; T8 L' W
  10. #include "RevApp.h"
    : b) [# z. A5 k$ [/ \. m+ M
  11. #include "RevAppDlg.h"
    3 g- c; M) ]8 l5 B  Q" \- f$ y
  12. 0 l+ l  `7 V8 L7 M* {
  13. #pragma warning(disable:4786)
    ) p$ w( p# l9 C! ^: }
  14. #include <map>
    . h7 s( P9 B+ J# _" J& W
  15. #include <list>
      s0 A" @& x8 i  Q4 K# z# W0 a
  16. #include <direct.h>
    ! @4 J9 L2 N; a# j# z0 n

  17. $ v( ?6 N  N: w! o5 k
  18. #ifdef _DEBUG
    ) H' X9 q( X8 Z9 c+ C
  19. #define new DEBUG_NEW
    1 y) ]2 W% {7 f: f0 g
  20. #undef THIS_FILE
    . b: i6 P$ Q2 t8 Z% b# \  v6 B
  21. static char THIS_FILE[] = __FILE__;; H+ a! g- Z8 ~
  22. #endif8 x0 V0 v3 ]1 }! Q3 W
  23. #include "SkinResDef.h"
    ' _& }6 O4 I  ]2 R+ `
  24. #include "ChangeBG.h"7 H) |: Y. J  }) R. c1 U7 x' q
  25. #include "AFXINET.H"
    9 W9 ]3 ?9 g) A9 f. b8 C0 Y
  26. / _) J  z. r3 G
  27. #define TRADITIONAL_CHINESE 02 A$ H$ _( y* m  F, B2 L. M2 v
  28. #define SIMPLIFY_CHINESE 10 u+ E- f, `5 X- x( H& [8 u
  29. #define ENGLISH 2( ?' T% q- h& l( \# s" Z; S
  30. int m_iLanguage = ENGLISH;8 X& h. r0 z+ H& k$ n
  31. /////////////////////////////////////////////////////////////////////////////
    * n/ f2 m  J% |* D3 g: Y% x
  32. // CRevAppApp# u  L' l( [# d" E. y* F
  33. ; L  P- Y; j: h/ ~) u6 o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 o" _9 R. K7 u1 d; n8 B( j
  35.         //{{AFX_MSG_MAP(CRevAppApp)& `! ~" \- u) O# i% B# a
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.- K$ u6 u) R& o3 [5 ?
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 q7 o! ~/ a' h  _, q
  38.         //}}AFX_MSG: S8 t9 t- x: S4 g# {
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ) A# L/ K' M  l2 x. Y+ a7 V1 T7 c1 r
  40. END_MESSAGE_MAP(), ]; `' u- U  f9 o3 m9 A$ R

  41. - A1 q0 l2 [+ n# ~" o+ M
  42. /////////////////////////////////////////////////////////////////////////////8 ~. E1 V" n; v* X, D. E; s  A7 P
  43. // CRevAppApp construction, N( R9 Z8 j6 R, g0 ?0 ]7 g

  44. , R1 Z" w8 [) E
  45. CRevAppApp::CRevAppApp()# |' C+ ?- u) r! d' M8 a$ F* m7 D5 \
  46. {
    , d, G1 h6 i# e
  47.         // TODO: add construction code here,3 H; B: D% G% Z
  48.         // Place all significant initialization in InitInstance
    , ~' J6 b! |1 c# N
  49.   bDisplayIsBig5=FALSE;
    $ w0 G# H2 R4 a- h3 R* P+ x9 \
  50.   bRestartUpdater=FALSE;
    / a- L: a4 m0 Q& f" l. }
  51.   bFinishUpdated=FALSE;
    - z: t9 ?( L8 j$ D& h
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;9 H' [1 e) _% V0 \: T3 k& Q2 ^
  53.   InitChangeDataBig52GBKS();: [' t3 ?% J# ^9 [( h
  54.   InitChangeDataGBKS2Big5();
    ( i7 A% ~  M, g2 ~5 w
  55.         //# F9 }# p0 H: H2 m/ j3 i
  56.         bClickRunExe = FALSE;
    & @& I$ M$ g  j$ ?7 H! l2 }* [% B
  57.         /// r" a( V+ N1 v% H# k/ ?
  58. }. M* y' E+ q( v' q# ^
  59. . f! v$ g2 [) v6 E- C
  60. CRevAppApp::~CRevAppApp(): `& y- I& Y+ v
  61. {( D+ t- M: T) e. `$ i9 Z6 P
  62.         // TODO: add construction code here,
    . e; K* Q: M! r" t5 B( A+ E7 P
  63.         // Place all significant initialization in InitInstance
    5 g5 R6 S& c/ ~! Z
  64.   EndChangeData();& Y- n) y5 C; S9 R* y
  65. }
    5 B- G4 T* l/ n+ E' E

  66. + q. |' _' S6 Y6 L1 H
  67. /////////////////////////////////////////////////////////////////////////////) S; v" K4 K; n8 U0 V
  68. // The one and only CRevAppApp object1 p% l6 M- [& a; ~+ E
  69. 6 p) A: T+ [' n3 x# A: o" K
  70. CRevAppApp theApp;: ]) n; w& L+ ?  d

  71. ) T1 M4 {  C6 Q! @7 E
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    . K3 ~) H" p5 W4 D) S* o# U, n& [# j# g
  73. {- r5 e# t: h- ?; @4 l- B7 F! {; Q6 A
  74.   int iEOF=0;4 ~. B+ V- W* p; d
  75.   char szTempName[MAX_PATH];
    0 v1 v. O1 ^+ E' f8 [  B, a& I. z
  76.   *szFileName=0;
    ! x5 f' D" J# N" ~4 J' r
  77.   iEOF=fscanf(fp,"%s",szTempName);5 Q, r# n  ?2 Z! [6 \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')8 `  t" I4 V" _# a1 J: e- E
  79.   {
    ( g3 Y9 Q* L$ O# M3 ?: |" w
  80.     strcpy(szFileName,&szTempName[1]);
    & H, u( X- R# h. y( e! R
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)8 P0 S. v# a6 y6 q: y  _
  82.     {' m/ ]: E* i, M9 L
  83.       iEOF=fscanf(fp,"%s",szTempName);$ F2 N) K: k( P+ d
  84.       strcat(szFileName," ");1 \4 L2 P; \! V  o8 z# N$ U( n% V
  85.       strcat(szFileName,szTempName);
    % V5 o9 S# n, u5 C* h) M( Z; ^
  86.     }+ ~/ v1 d* @3 f! P" F9 A) K
  87.     if(strlen(szFileName)>=1)5 y) i2 F5 o% P6 J" O; @+ Q
  88.     {
    6 d: V& s) x8 \
  89.       szFileName[strlen(szFileName)-1]=0;
    ! Q+ s/ z) X; N! w7 |/ t
  90.     }# t# q, |( x8 E7 O/ |1 ^" p
  91.   }4 n+ o" f; A0 q; [3 O3 o/ D
  92.   return szFileName;! n$ b! }# t2 {
  93. }
    ; Q$ A! I' q3 ^  S5 W6 I$ {# o
  94. % W; g/ l' o) X6 ?
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ( L# \5 u, |7 f( t* X* T9 A+ v
  96. {
    - L1 Z7 K" c9 j3 Q3 ^! E
  97.   FILE *fp;* W" A. d, F9 y5 N1 h# s
  98.   char *key=NULL;$ M8 z2 h0 q1 g/ }) e5 {
  99.   char version[MAX_PATH];
    7 q. u6 G- y! [+ ?2 o3 Q
  100.   LPUPDATEFILE file,olds;+ e9 D" n. x9 n8 @4 e
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 Z1 g( d0 P6 |: c7 v. F' f

  102. " s0 _8 N$ f: b
  103.   UpdateList.clear();5 w4 a& U# v  x- o; p
  104.   UpdateFile.clear();, t' K3 P# e, U" n1 Y4 v; b
  105.   if(GetFileAttributes(filename)==-1) return false;
    ! u& S5 V; \1 m! I: ]
  106.   if(!(fp=fopen(filename,"r"))) return false;" m( J% J# P$ b  V6 `! j. h
  107.   fscanf(fp,"%s",version);
    ) R6 }- X4 L% Z' z$ t- g) s
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }1 W2 V& l# e) m' g8 L, ~4 `5 r1 D! |$ e
  109.   while(fscanf(fp,"%s",version)!=EOF)1 C9 D( b" Q3 L* F5 s& F
  110.   {' l% o! ^9 F& q- o" ?. i
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) s/ h' [" |; b5 z
  112.     fscanf(fp,"%s",file->path);
    4 A5 W& W/ Q- s3 j
  113.     ReadFileNames(fp,file->file);
    * T7 X8 j0 j( r
  114.     strcpy(file->full,".");
    , a0 I& K3 Z! A" B2 K
  115.     strcat(file->full,file->path);
    2 M, o% q8 q* A# O  u
  116.     strcat(file->full,file->file);
    # y+ P+ O% f; r4 B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()); \& d$ v) d# P8 p3 r
  118.     {
    5 w, T. c" F% I) ?- u
  119.       file->vers=(float)atof(version);: Z9 x9 p! F1 b; P/ o1 h3 \; J
  120.       UpdateList.push_back(file->full);
    0 n$ @# E& [, ^+ z8 ]
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));' o1 d; n: a5 ^- x! C. r
  122.     }4 K, P4 @+ d* L. R9 U5 I3 P$ p5 T9 k* c2 Z
  123.     else1 a5 |, W" G3 u* q! T4 \) n
  124.     {
    6 N8 |1 C6 p! `' Z+ {, f
  125.       olds=(*p).second;
    " ^  {( {( f* X2 o, T+ X9 g
  126.       if(olds->vers<(float)atof(version))4 K1 Y, g4 b1 x( U7 A
  127.       {
    5 ?3 [+ D* x  ~' B& _8 Y3 }
  128.         olds->vers=(float)atof(version);
      N' b3 ~+ g" d! R. s% W7 ~& [
  129.       }
    " g2 v8 z4 g- W$ U# g
  130.       free(file);
    3 b2 d. T$ l/ F9 d+ s: J
  131.     }
    7 S# y  [& L6 i3 @* Y6 o
  132.   }
    9 L% ~$ h: z5 x' {+ D# {
  133.   fclose(fp);8 p9 B* m, b/ n$ X# c
  134.   return true;
    . O$ e' z4 A& J) b' X" b0 L
  135. }
    / C7 {; n; Z9 k$ H! o

  136. ' ^' N# g5 ?  `3 ]# O" J; _8 |
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath): h# w2 R1 [. V# {( }; N+ u$ R
  138. {# D+ }1 \/ X: g" r" f( Q0 E* O
  139.   TCHAR  szFull[MAX_PATH];9 e: D9 s9 v$ |; a) a0 I( J- S
  140.   TCHAR *token,*inter;1 k0 f& a( }2 m: l, C
  141.   *szPath=0;
      E& I  N6 Y7 }) j  U6 `8 t5 m
  142.   strcpy(szFull,szFullPath);7 i9 b  C" S# ]$ v
  143.   token=strtok(szFull,"\\/");
    8 u* l+ C* e6 [1 ~# L: R$ L. e
  144.   inter=token;
    ' b  V* X. g2 |- `; B5 ]! u) [( Z
  145.   while(token=strtok(NULL,"\\/"))
    2 ^1 _3 |% c7 K
  146.   {
    3 m1 `# q  k5 s# j
  147.     strcat(szPath,inter);! a0 L9 L% ]0 W, @1 b9 ]+ k
  148.     strcat(szPath,"\");
    ; r. C6 m" q' ?
  149.     inter=token;, H$ V, Y# h. o! u. e8 A0 }
  150.   }- ^  O- K0 I$ n0 A# y3 ?# S
  151.   return strlen(szPath);  s- [  D/ x! G# X4 z
  152. }
    . Q/ u( g1 h) h7 L. ?3 E
  153. 2 t' L5 k0 M4 Q4 i5 Y6 W. v- d
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    0 p% P8 J5 ]8 N1 k2 j
  155. {2 V7 D' U; n1 C
  156.   DWORD attrib=GetFileAttributes(Target);9 S* R- W* ^, ]+ t2 o
  157.   if(attrib!=-1)2 W# M: E8 U: {0 R
  158.   {
    % G8 h5 S: C/ |+ |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))6 J& g5 P( P- Z2 c$ `2 ~6 f3 ]
  160.     {
    : h$ {! G" A, C3 m" U; X: o. w
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);4 C- F0 v8 `& G4 N- I
  162.       SetFileAttributes(Target,attrib);, |- z+ f% w7 V9 a$ q* u8 i
  163.     }
    3 n* Q. O3 |1 B+ `
  164.   }
    + @8 C. i& R# o2 f8 I* f2 d: A8 N# n
  165.   CopyFile(Source,Target,Erase);
    $ O" ]( W3 z) M6 g
  166. }
    6 B& m1 p% z% V: q' g5 E* q! p# |

  167. & H5 p8 K/ `1 P8 r# b8 f
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)7 o! `# u9 w" c4 i+ d
  169. {
    5 {& h0 ?- [1 i
  170.      FILE *fp;
    - G9 S1 m/ G% `
  171.      char  szBuffer[8192];
      P6 ~: Q* w5 z* i3 \
  172.   va_list  argptr;$ f6 U6 }2 C1 V# b3 v  d! N" R
  173. 8 \/ R  l( s; f4 ^
  174.         va_start(argptr,message);
    ' t. l, s, ]* g- }& _5 E! f
  175.         vsprintf(szBuffer,message,argptr);! O2 B3 q: j. Y( I+ ]$ E& }
  176.         va_end(argptr);
    0 T4 y" H& {4 B- g, a# V+ z+ v
  177.   fp=fopen(FileName,"a");7 a" h8 r* T  v* t7 f! e
  178.   if(fp)
    , s( U8 f/ `$ W6 Y
  179.   {
    8 H  h# j1 W$ n/ w2 X( l5 k; x
  180.     fprintf(fp,szBuffer);$ u% X+ G$ A$ N8 a5 q- x
  181.     fclose(fp);
    " k1 c* X% c* a
  182.           _flushall();4 T2 W3 L3 g6 z5 a2 a
  183.   }
    " d" i) g6 w: a
  184. }& W5 F% H2 X& Z# f. d: W
  185. 3 g' J; J) i: f$ m" n1 x/ l; R; F' A$ [
  186. BOOL CRevAppApp::Fclearf(char *FileName)6 ^8 O0 c9 |) k+ @, Q4 a) C
  187. {
    % K, a5 y/ p0 ?
  188.      FILE *fp;  ?9 m( I! B- J5 i7 C
  189.     DWORD  attrib;, k0 g' r2 o3 t3 B8 O; |# Z+ Y
  190.   attrib=GetFileAttributes(FileName);
    3 z& x& I6 ~/ E6 i- A
  191.   if(attrib!=-1)
    $ E- R) f0 v6 q- E# ^. l+ P
  192.   {  c. v4 @- R- ?/ o) S0 k4 A9 w
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);  l5 g: }, J0 Z+ f% M* V& J
  194.     if(!SetFileAttributes(FileName,attrib))
    5 T8 D8 V+ r) b+ O9 k7 X- S5 F
  195.     {0 s2 @  S8 r* h1 o5 }7 h
  196.       return FALSE;
    * \6 W9 q7 ^$ K
  197.     }& _, U# S% D5 ^) N3 {$ r2 ~+ t( T
  198.   }$ a) ?$ I) ^6 ^% |1 ?  w. j: u
  199.   fp=fopen(FileName,"wb");
    ' D$ Y$ L! U7 y& n3 |: _
  200.   if(fp)
    9 g7 C/ ]3 }7 X) O6 J! W
  201.   {8 U# P7 T: o* T3 w+ F' J
  202.     fclose(fp);, @8 F9 I* Z6 j& U  {9 x' N" P
  203.   }
    6 m* E8 _6 x6 @0 n8 g7 N" ?5 O2 X
  204.   return TRUE;
    3 `2 J* |' v1 Q% t, w  x+ u8 e
  205. }
    # u; B& M5 s/ _  ]( n0 k/ r

  206. / D5 y+ ^9 C# K9 v% z  Y' a
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ( K  S7 e5 r5 R& b, T0 d
  208. {2 [/ e. ~( A# b5 e8 P
  209.   char filename[MAX_PATH];
    & H% W! a5 B6 i6 `% b) |8 W
  210.   LPUPDATEFILE file,olds;6 e6 V  E" F' L9 S0 j
  211.   std::map<int,CString>::iterator i;1 V9 q1 j# [) t" R* C1 ?
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 C4 d2 N1 o7 R
  213.   std::list<CString>::iterator l;
    ; t: Q' L( L7 d# h! e0 c
  214. $ q* k( l: I' C1 V' Q% l
  215.   if(bFirstUpdate)
    7 q5 h# V! i( [
  216.   {* T+ r; C: D/ |: G) g
  217.     dwCurrFile=0;0 L5 W* t0 m) S& Q6 n5 o
  218.     bFirstUpdate=FALSE;
    + Q$ _9 X  X& o  h; J9 Q9 h6 R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())" J/ M' Z( F, B  x; C/ K
  220.     {+ B5 r: {" i* u! K& D% A- R
  221.       dwTotalFiles=UpdateLocal.size();
    0 b: v4 i- B% ]! b4 d# u: C
  222.       dwDownLoaded=0;# q. G! h% A+ v+ z' C7 d
  223.       bSilentStep=FALSE;
    3 R) F! Z& B- x% c7 @" k
  224.       bCompressed=TRUE;/ D/ K# ^1 I) R  |; _, ~
  225.       strExtLocal.Empty();
    5 Z$ V3 f5 [6 n. B9 f3 e
  226.       strFullName=(*i).second;7 k0 I) `, s" Q# t- n3 E
  227.       dwProgramState=AP_CONNECT;
    : F" O! W* J3 ]6 z, S
  228.       return TRUE;
    & Z  `$ u  X& M5 t+ z* `4 s
  229.     }
    " |8 |) E& Y' @' k, E- g+ [* ^$ p
  230.   }
    # @3 }8 x5 ^2 A1 e
  231.   else if(bRestartUpdater==FALSE)
    . s/ z- A6 a* a
  232.   {0 W) ?" v  b! k( g$ j8 f
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())( K3 Y1 y5 _1 c% {4 _8 S
  234.     {! w' k) J! w) c
  235.       file=(*p).second;5 L9 D0 {& E! _, Y" j# }" P- o
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ) s  v4 i6 t- G
  237.       {2 M1 _2 q1 S; a2 z; a  i, z7 B
  238.         olds=(*p).second;
    + c+ k% {0 n0 q1 u
  239.         olds->vers=file->vers;6 c* @7 |6 x- x# i; A
  240.       }. Z3 p$ Z1 w3 e6 b
  241.       else- r5 G5 c) g4 T3 ]) }  Y: X
  242.       {, E' B- n$ }; c
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + g: z" Y' t& |5 @! C3 I4 N
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    5 P* S  r) g7 x6 e
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
      X# M! q0 e9 k/ Y- s& x
  246.       }
    2 d" p1 S' [2 \6 s* v% P; A
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    2 x, h% O  \9 z. `
  248.       sprintf(filename,"(%s)",file->file);
    * \* o: U5 k9 k, Q# m3 Q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 z. V3 m3 r4 o" c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    & h* f, z  f! f: l1 P
  251.     }
    ! G) }, X# q) j4 i3 _
  252.     dwCurrFile++;" K+ b+ Q; P7 n
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 k) H$ D, O7 H, B- b+ A. @
  254.     {% A. a6 ^) [# A4 h5 X
  255.       bSilentStep=FALSE;' ?# H0 X5 [& E: {3 T3 G
  256.       bCompressed=TRUE;9 i% h5 W$ D$ [. W3 K+ ^
  257.       strExtLocal.Empty();3 w1 [2 M$ S8 l( P2 d- [, A
  258.       strFullName=(*i).second;- M) r7 b# }* b4 g" s. d
  259.       dwProgramState=AP_CONNECT;6 s8 k) i' {; {3 a. _
  260.       return TRUE;9 b; P: m* o! ~/ d0 ]
  261.     }6 i2 E) Y- Q2 O3 Z/ }
  262.     if(!bRestartUpdater)
    ; B8 @: P/ R4 ^6 A1 k8 t  T
  263.     {" Q- P# {3 _$ ?+ A3 @
  264.       int iCurrSize,iFileSize;
    ) O3 Y5 S8 Z6 K! n. }6 h
  265.       iCurrSize=0;% M0 S  e' b. A/ \% W! y/ P6 v7 m
  266.       iFileSize=UpdateList2.size();( S7 u* U0 S( W: a/ f
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");  i- g- u6 @# @  l7 ]1 Y  }
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ; K/ T5 v3 A( n$ S2 S* S7 u
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    1 v! D2 L: H, @; b/ z: x$ {
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 q# [* ~: O7 x2 F$ U
  271.       Fclearf(".\\update.dat");
    , q- x3 N$ k& A
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ' A- a0 `; }' }  U' h7 G- G! J. _
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) g8 F- }3 O% l/ G' O' A
  274.       {, _- Z/ d+ I: I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 d/ w8 E5 S* N, Q/ ?
  276.         {; C# ]3 V( f6 I2 I4 H/ u0 ]- N
  277.           file=(*p).second;4 D/ d, F% L3 d; F% _
  278.           sprintf(filename,"(%s)",file->file);
    ! u$ s+ s  o7 @1 b6 i4 M
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * r4 l& ~/ Q) u( K
  280.           iCurrSize++;
    . i* v& J9 {7 j9 R
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));7 u7 l5 ?  P2 e9 q6 w3 ?$ k
  282.         }" r7 u8 J: c; r( p3 p% n& k$ ^) M
  283.       }
    2 v2 l) }: T- l, M* u0 `
  284.       unlink(".\\update.txt");/ H. G: x3 ^6 z, w/ d- O
  285.       unlink(".\\update.tmp");8 F1 D. m8 Y; P) q' l' Z8 i. {
  286.       Fclearf(".\\checkversion.dat");
    " c" b7 ~6 Z# F! d* ?7 D
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);; O1 t2 `3 p4 N6 B* ^
  288.       if(UpdateLocal.size())8 @3 @; ~+ I4 \* L! ?; s8 v8 S
  289.       {
    6 _* e; L" m8 I7 S7 Q: s, G# ]7 x1 q
  290.         UpdateLocal.clear();
    & z0 s; h  W* n- _. s& `, |
  291.       }
    4 m( E' }5 Y4 o* z9 B5 e
  292.       if(UpdateFile3.size())
      P( e  ?- T/ y5 i  h  w
  293.       {) u; v5 p9 I. t1 M
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- R: x6 d# B% t5 T. m  X; e5 F
  295.         {$ G& O6 G( G1 t& o' C
  296.           file=(*p).second;. Q1 J( ~, u5 @3 `
  297.           free(file);$ c: Q/ p1 H4 C6 l
  298.         }
      n0 ]% i8 ~$ [- g
  299.         UpdateFile3.clear();
    0 a/ ~7 F0 D1 M* a5 c" p, Q) T
  300.         UpdateList3.clear();6 L$ U; A( M, f3 O1 `
  301.       }
    ! t5 G" M6 `. \" A" R5 m
  302.       if(UpdateFile2.size()). s" ^2 Z9 V/ P0 t) d+ T5 q4 }
  303.       {
    ' Z: {) p" A4 e
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& c4 }- @! ?* p! G
  305.         {
    0 z" b- A, O3 ^, g( k* f; }
  306.           file=(*p).second;
      y8 p& n8 K8 u3 [, |+ D. I0 X
  307.           free(file);
    5 R+ X% |! f+ ^
  308.         }
    ) C( o3 n9 e. V1 ^5 _3 k
  309.         UpdateFile2.clear();
    7 o: {2 y7 @. e1 ~! p3 ?9 r, j
  310.         UpdateList2.clear();
    + A, j4 B6 L$ |( w# t1 C/ p6 |: P
  311.       }
    6 n! q# P0 x3 q0 I, [. @# E
  312.       if(UpdateFile1.size())
    ) W7 Q: q" n7 @1 I3 n0 f$ U# ^
  313.       {
      ?3 D6 i( ]! S) I7 {
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    * ]5 H) B' l  A" f  a
  315.         {
    % t3 E0 J0 Y9 o/ [
  316.           file=(*p).second;) k9 E4 V2 A0 L9 g, s, @
  317.           free(file);  j8 @5 Z# [; \- G! k& V- t' I
  318.         }% m5 A/ @, m" T1 p, H0 [" o
  319.         UpdateFile1.clear();$ J7 }1 b# X4 T8 C2 l% x
  320.         UpdateList1.clear();
    4 f! s# D0 K; z
  321.       }
    & |* F, n9 f- j/ H1 Y3 y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
      ~2 x) h5 J' ^2 j6 ?% ~
  323.     }* K' H* |; b; B  y+ q" P& ^) d
  324.   }1 ]" e5 q4 G" ?5 t5 R2 L* |
  325.   return FALSE;
    1 W* a8 G2 J) {
  326. }2 _' ~* n5 m* J! L5 d( d9 |

  327. 1 z0 S( E! U3 `& Z* I
  328. void CRevAppApp::ClearAll(void)
    8 t6 b) {% ~. U5 V
  329. {
    " W! h' R+ Q& _( ]- d: H  q
  330.   LPUPDATEFILE file;: v" r$ I- K9 S: r9 I* H+ ^+ s4 P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    " A$ K3 B) U# `/ K* N- w7 R

  332. , [# j% E7 ]. x) i
  333.   if(UpdateLocal.size())
    . ?: S  i$ f, L$ f  D# P7 G1 Z
  334.   {( O6 m' y1 t. v. v  H
  335.     UpdateLocal.clear();  J' N& E* O  q/ _( L# L
  336.   }
    : `7 x$ S. Y  _& {7 r- ~
  337.   if(UpdateFile3.size())) t! u. G9 P7 ?, I9 O0 S+ G
  338.   {
    9 L1 K. v) m( i5 A
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 l+ E* Q7 t: e0 U
  340.     {; P2 U+ D* ]' P2 ?7 i/ h! A
  341.       file=(*p).second;
    7 e, c) V$ d* \( B% |- Q+ j/ Q5 [
  342.       free(file);
    : Y# z  c+ c) Y6 _& D8 R
  343.     }8 f% m" s: m5 _4 ^/ [: Q
  344.     UpdateFile3.clear();3 P2 K: @% A  @* U
  345.     UpdateList3.clear();
    / y1 X0 a. v+ Q
  346.   }4 x: o, U3 o' `: E% s( O
  347.   if(UpdateFile2.size())
    ' J6 m0 s1 y9 W9 w/ `0 S
  348.   {& e/ ]. i: L% W7 P- b
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' O$ W' Z+ m9 }$ u
  350.     {: T. a! z, t/ ~# j8 F  l% h
  351.       file=(*p).second;
    + B' R+ ?4 v2 L2 c  v
  352.       free(file);
    # {% x5 K8 n. r7 x; n
  353.     }
      @5 m; x9 i# l* U+ \. H+ P$ Q
  354.     UpdateFile2.clear();& s/ Z9 J2 S  p2 c" w7 Z. A
  355.     UpdateList2.clear();
    % [; F! q% G& f6 ^+ b
  356.   }
      w# z7 v/ T! b9 l, ?' R
  357.   if(UpdateFile1.size())
    1 h& ~; c/ n( Y- ?) {
  358.   {
    ; X: a  C4 g% J- B' b* T+ q% o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; |6 ~8 h6 {+ B  s4 C
  360.     {
    & }9 g( U# J) M. t+ ]6 i' m) _
  361.       file=(*p).second;
    9 \, V" n5 B* d
  362.       free(file);
    2 z! Q3 d" H8 N2 d7 z3 k
  363.     }4 R% ]) U" b1 o  B: Z4 M. E
  364.     UpdateFile1.clear();
    ; q1 N& c/ ]1 `: m( @$ e, [5 P0 c. X
  365.     UpdateList1.clear();
    4 g% ^- ^) O7 P% t' [4 `
  366.   }
      W- z4 \7 R" F$ n' G6 i1 A
  367. }  
    " n1 Y  F" M0 D0 K& G1 t5 h
  368.   
    9 ^1 {' N4 ?8 z( C, G2 ^8 n
  369. BOOL CRevAppApp::CheckLocalVersion(void)/ O9 R' h, H7 ], g
  370. {1 t1 T5 j0 i" j* ]7 H0 }! U- M' F
  371.   int c;. @8 e8 K  z( q) K3 ^6 x0 p. P  h
  372.   LPUPDATEFILE file1,file2;& c9 v. H" O$ C6 e  ?& n1 X
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;+ Q0 X) p- r( L) M9 l4 v
  374.   std::list<CString>::iterator l;9 W- m( s$ y- h& y. g$ U

  375. / p9 g- x6 e9 D7 O
  376.   UpdateLocal.clear();
    6 U1 i6 J8 z. D6 w9 U7 Y) P
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    . K! K/ y3 H- d2 T% m3 l
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);0 d/ ^$ D! y) v' E" y9 {# W1 I
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);3 K  L! L% G  ?; i/ }
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ; X4 Z9 i7 N& q. }6 J; t
  381.   if(UpdateFile3.size())
    $ g; A5 [0 t* ?) a- o( F9 ^9 G) b
  382.   {  f/ L. Y4 w3 F5 N  ?0 d
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 ^& F& Q: T1 x( a
  384.     {! g3 h1 m$ t7 g& s
  385.       file2=(LPUPDATEFILE)(*i).second;- c7 v9 J8 v/ D) _
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())/ S9 r4 {% C& {2 l1 H: o* c
  387.       {( N# C! L6 h3 n4 q* A- G6 _& w
  388.         file1=(LPUPDATEFILE)(*p).second;
    ) Q/ f1 C1 G3 e; }6 o3 h  G8 d
  389.         file1->vers=file2->vers;
    , }4 G3 ~) v# _
  390.       }
    6 |6 d, P& j3 j0 W. x2 K  q6 t, H
  391.       else
    9 g' S4 x% {- ~5 u/ i# {
  392.       {
    * {& Z  |# V, d$ H1 \. R# E
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , O% ]5 x/ ?3 o) X( A
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));7 _' j9 a2 E8 ?0 I
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    0 _# j! c# n, {  N
  396.       }$ u1 U  S# P1 w; ^$ D
  397.     }
    8 p  E" [1 E/ A$ B
  398.   }7 f* T8 c& u; [+ m8 Y+ U5 M2 j
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 }4 H, _, O: m& R- C/ V1 k
  400.   {
    : J4 _" @! z5 Z5 U
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()), K) ~+ Q. Q( V
  402.     {3 p( e' b, e# m2 P$ P
  403.       file2=(LPUPDATEFILE)(*i).second;
    7 x4 w# T& M4 ~
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - b8 z1 H4 ]% ^; k2 j* w
  405.       {
    8 y& y) H  c, P. h, s& N) t% G
  406.         file1=(LPUPDATEFILE)(*p).second;
    , m" G! v& B5 s, o4 T) n6 T
  407.         if(file1->vers!=file2->vers)" f4 f/ G5 Z" Y# ^/ K& r- G
  408.         {  w0 B& P8 c! @& ?6 n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 E; o6 E( s' t6 y* X3 ?
  410.           c++;( ]/ A. |1 ^  q3 V1 V  U
  411.         }
    1 E7 V( ?; y1 E9 g( b
  412.       }1 ?6 Q% a; Q: m* E& l6 I
  413.       else
    ; y/ q& F. |; o
  414.       {, I, A' {2 |4 z" |' M- A* Q5 U4 h
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & x) h$ a' h8 Q9 S1 R  [! p
  416.         c++;
    & x' O4 }  u& ]! g! N: M) n
  417.       }' B  P' [; Y& T- C/ g
  418.     }
    6 r, U! D+ t- \: u! X% W
  419.   }
    ( b# @! r& D: y  v7 _# d
  420.   unlink(".\\DownLoad\\update.txt");+ |; g0 C* S" Z% |
  421.   if(UpdateLocal.size()) return TRUE;
    - d7 a8 U( c/ d0 J- [- ?1 C
  422.   else                   return FALSE;
    7 q$ [: Q* n. O7 Y9 B- F
  423. }
    8 {7 A, C" U7 @/ R

  424. 0 m3 [( E8 w6 \5 h8 q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"0 {4 h0 F0 v3 e( z  q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    7 ^+ {% ^) j8 [- u3 O) ]& `% y

  427. 2 J) X8 P7 ~/ l6 ~" @

  428. $ w" i8 W& l4 L: k2 u

  429. 5 c; Z6 x) b5 _3 A# T
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)) H! L) s, j( `: C7 M; e" x
  431. {0 Z3 Y, f! B5 T/ v# p
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;, M, S3 _4 K9 Q
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% u" j. x* i  B% {* u9 P2 O* T' K) d
  434.   {
    , ~( G  X6 J8 U4 B1 _
  435.     char szLanguage[50];
    + t8 @2 w7 d. d" K" U
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 \8 |% C9 K4 c" o9 f$ C2 j
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , @# U8 ~' E' v6 E! ?1 O' w
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' ]" P9 E& K# x7 r) L
  439.     else                                   m_iLanguage=ENGLISH;
    . V4 M( D  ?/ {8 h
  440.     char szRegister[100];8 [  s8 J2 N$ K- l1 A
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    3 @: J& O, R, P0 }# L' l: k
  442.     strRegsName=szRegister;
    7 y, i: }/ U* a1 g- I
  443.     char szPatchURL[100];2 E8 h* |% W2 h) c( F/ f
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( v# H: `* l  y, {
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 m6 A) b( k# x  A6 e* u# R, Z
  446.   }
    ! Y* t! t  u6 ]
  447.   else- b  g. N3 x; [# n) K" x$ o  c
  448.   {$ _4 J  \- [% c: [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% C$ E8 h/ ~7 \2 j& c
  450.     strRegsName=DEFAULT_REG_URL;& l; _  r. B8 {2 _. Q
  451.   }
    3 f& S% h# G$ d) A1 U7 f2 E
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    4 _+ @) D5 b  h" T
  453.   {
    9 H- S( v2 {8 Z/ q3 c$ e
  454.     char szIP[50];9 ^& ?0 F/ Q0 {2 C% R- n
  455.     char szDIR[300];
    . L* J4 F' |; R( U2 T3 T9 V
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    . U+ L9 h  p3 h: Y% D
  457.     {1 y4 a+ q3 y' C1 ]$ x! o6 i
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");4 L6 A3 F9 v+ y1 s' g$ b& D
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    * R4 a% ?- g0 H0 P* v: x+ Q
  460.       strHostName=szIP;- ]0 j+ r" V$ V) C& E5 O! ~* y
  461.       strHostPath.Format("/%s",szDIR);
    ) L& P' z8 L% R8 l# v
  462.     }
    # V9 c1 B6 o/ x$ S$ ^2 g8 q
  463.     else- N) l1 o# T+ j& o9 Y
  464.     {. S( m) w5 O. Q( ?( i  z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # |2 `, m/ H( _9 t4 P1 }: R: f
  466.       {
    7 A1 e7 Z* {, L. J1 z1 b' j
  467.         char szLanguage[50];, _! ~, N. M& c% ]
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");# _; L: x$ Z) S* Z
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    6 \& L% L, x& |4 u0 Q! u2 i- e
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, E$ J( d8 `& c8 H
  471.         else                                   m_iLanguage=ENGLISH;; G7 x5 U' }$ }% |5 U! [
  472.         char szRegister[100];4 y# P* {# y6 K0 B
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # t, i$ y7 B/ ^9 E& T8 d; E
  474.         strRegsName=szRegister;. d& |+ n; x3 {) e
  475.         char szPatchURL[100];( K/ _! Z2 Q$ o5 |& v: {' m
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: N' I9 ~+ O& H( ^& Q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 Y/ G- S6 {* A  K; r
  478.       }0 a1 W. Y/ D0 B6 P9 q
  479.       else* a0 R) q7 Z, }* Q
  480.       {- J3 T6 o) }* x; f8 o2 _
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  `0 l, d% k) Y. v) G. o8 R! k
  482.         strRegsName=DEFAULT_REG_URL;1 y) ?+ i$ f4 _# q+ ^% r9 N
  483.       }+ K) U  d- ~5 L' }
  484.     }0 X$ q5 E; k2 u6 O  M  F( _
  485.   }
    . D( ?' v: d- c% W  E' V9 |
  486.   return true;1 R, Z) W1 R: j) |3 {& Z# y
  487. }
    " T9 ~! S( Z# U7 K# V
  488. $ F& X3 Z2 i1 f! O/ t
  489. #include ".\ZLib\unzip.h"# b/ D( m! f, f8 u4 i- B
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# M9 i8 |4 N- q( k
  491. /////////////////////////////////////////////////////////////////////////////$ o' T0 y+ X, d9 t# }1 L2 @: @: ^% x
  492. // CRevAppApp initialization( O- W4 ?( f0 j( s
  493. ( ^, b# ^4 c' O" W7 \- c
  494. BOOL CRevAppApp::InitInstance()5 q& K" k8 e  G, ?  ^: n# o
  495. {' _  L6 \6 q' j
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];$ S% C- v; C6 m1 j9 R! c1 k6 u
  497. 2 S: t- F5 |- v" F- b' f1 D
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  |; ?, R* x2 s: I1 n3 z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))+ W& K+ X  a( B
  500.   {8 I+ \# w; z/ q; u" E1 W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");# g. Y- I. O2 N+ s" G; e7 N
  502.     GetPathFromFullPath(szPathTarget,szPathSource);' {+ `: `& @5 p; S' H
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 a" A( z% w1 G$ P0 J# {1 C" U
  504.     {
    ' K' h& o1 g2 H, s8 a( d8 T) F- Z* {
  505.       strcpy(szPath,szPathTarget);
    ) i, S0 P3 R$ U# `
  506.       SetCurrentDirectory(szPath);8 m6 }" C$ p" H' s. B  d  C' C
  507.     }
    - m0 i4 g0 b' e4 K% I  O
  508.   }
    9 o" Z3 \% u$ W. }
  509. #ifdef _DEBUG
    6 V2 _* ^- G4 @. {
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( c) K7 m: W8 A5 A, A" s, X* b
  511. #else: w2 ?2 E' T  X4 X7 r
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    & i6 @, D" f; A* q- b! o5 R" `
  513. #endif
    ) k& S1 A  I0 K% ]
  514.   {
    7 u) }- H. P$ b5 J! f
  515.     char tempFileName[MAX_PATH];  n5 C/ e: _& v! e. k* O
  516.     strcpy(tempFileName,szPathSource);# Y$ P$ x& {; l& o
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 X  a: S3 j  r  b
  518.     strcat(tempFileName,"\\$CSUpdate.exe");( X7 N* P' @% l6 z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ( k* \; O2 e0 R
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    & t1 }  m' G4 _, H
  521.     return TRUE;' s( K7 p1 o2 O
  522.   }
    ' o! y+ T0 k- e6 A; T
  523.   // Nuke 0118: Delete run.exe/ a6 ]  e- x, u9 Y( e5 ?4 E
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ! V  a6 M/ i/ N
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    5 e- |' V# r) v* f2 y, N6 N8 K, N
  526.   if(!ReadCfgFile("Config.ini"))
    4 D; x. s8 M3 H' |* o
  527.   {
    # L% q& R) @; v. J9 a1 q& {% Q, H1 R
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);# f/ [, c% u! c  R) c4 `' }
  529.     return TRUE;) M# e' T3 N# `+ {( y+ e3 \
  530.   }
    * o* U8 e  C5 l
  531.   HANDLE mutex;+ U& ]7 `) L# F1 W
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    % O" T" q& p4 y1 Y) s3 a/ U
  533.   {- O. ^+ X$ b" \5 [6 M5 C( s8 I
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 S2 t# t6 e& l# T
  535.     {4 t- _7 o( f! I, K0 [" S7 o& u0 J
  536.       CloseHandle(mutex);
    9 w% Q. V# l7 e' e, _/ ~
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);# C1 r5 S1 G) H  s
  538.       return TRUE;
    9 s, p5 ]6 h2 a
  539.     }
    * o# y% l5 C7 y" N6 w
  540.   }  
    : _7 f, g  ^' s9 L0 o
  541.   CloseHandle(mutex);
    ' V$ W2 o- O8 ?2 G* @6 R

  542. ( Z4 v& P  [' Z/ b+ N& a! O& M
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( y* U6 Q4 j- o( E

  544. 3 }) P( D' l3 z# k! x- g
  545.         AfxEnableControlContainer();
    5 u! m8 I4 r" s' e5 v+ z4 {( p  R
  546. - Z- u' ^' A7 F) W7 j7 `* r7 a
  547.   bCanUpdate=FALSE;
    0 S( A9 l9 Z  b
  548.   dwStartUpSteps=1;- u7 `" `/ R7 J, N
  549.   dwProgramState=AP_NOTHING;  c0 ]0 w) h. w* O5 G4 k. }$ c7 f! |
  550. ; a2 n' ~" G' \; `, t  D
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);! Z( z3 r9 U( V2 w' R0 P

  552. & V, L4 W: m0 M& b
  553.         // Standard initialization) d) ^" |  o9 l
  554.         // If you are not using these features and wish to reduce the size
    ( {" G# W" s- m) ]+ N! Z% I7 n
  555.         //  of your final executable, you should remove from the following5 c8 K& d+ F6 z& r8 D* k
  556.         //  the specific initialization routines you do not need.
    ! H) o7 l( S8 L! d8 |& i3 ]8 r

  557. ' e8 E: H% |, |3 J7 m. ]) w
  558. #ifdef _AFXDLL
    ; J5 t. v2 A& d. T' k
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' `- b  ]) R  I) d7 h( [
  560. #else
    9 i7 |7 [  f3 X% X
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ o9 `$ D' V- [/ G" |5 M% e
  562. #endif
    9 m7 }* P3 _9 |! g& S( c+ w$ V: S

  563. 9 R8 e4 d- e0 t
  564.   dlg=new CRevAppDlg;' L. [. h8 v9 |. c) L) K( |
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    " u* h1 s2 d5 |" _/ T, x
  566.   dlg->ShowWindow(SW_SHOWNORMAL);; f6 B! i* O& U5 I+ k/ r& S
  567.   m_pMainWnd=dlg;
    , `+ K+ g1 G8 [
  568. ! k+ X% w4 g7 G2 N6 w
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    . K6 G, N  t- F4 }8 C; n
  570. ( `. b! \$ a. U9 v8 W" Y
  571. //  GdiplusStartupInput gdiplusStartupInput;5 e0 ]& H) k' b
  572. //  ULONG_PTR gdiplusToken;
    3 l0 k6 g$ @& k" P2 ^/ `  d% `
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& g! R2 }! C; y; a6 P! u

  574. 5 P0 H1 r4 m  Y$ ]8 Y
  575. //        CRevAppDlg dlg;
    . x0 x$ Y! n2 `6 x; h+ k  N7 U
  576. //        int nResponse = dlg.DoModal();, D: W1 W7 r+ r) W
  577. //        if (nResponse == IDOK)
    5 J' i2 A0 s& l7 X& \: ^
  578. //        {
    # H. {+ I& `1 N8 K
  579. //                // TODO: Place code here to handle when the dialog is4 ^6 H* ~/ v7 |) e2 d( k
  580. //                //  dismissed with OK
    , s/ s1 q( v1 {' J% T, _, T8 z
  581. //        }
    ) r! z! [( u3 }
  582. //        else if (nResponse == IDCANCEL)
    # ?4 v' K! o8 f- w4 q% t
  583. //        {
    0 y* K3 S- ~9 T6 Y+ @+ c+ I
  584. //                // TODO: Place code here to handle when the dialog is5 A0 a5 Z2 s2 Z6 j; D
  585. //                //  dismissed with Cancel6 r1 K; K, e0 w0 S; J( H6 ^
  586. //        }
    - L* G. X3 Y; j( s6 j6 O' j
  587. * R! K4 j$ Q- I% K7 l* U$ n
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    : [4 M5 H. _1 A( D
  589.         //  application, rather than start the application's message pump.+ [7 W2 G$ Q5 _
  590.         return TRUE;
    8 H6 j. ^* z  T8 I" [
  591. }
    ! h5 i$ D* b" s) ^2 V% G, I, a

  592. 8 @& ]4 l: h3 h" E1 {
  593. char *CRevAppApp::strtok3(char *pSource,char *token)+ f! z$ j& G/ f& Y/ K$ ^
  594. {
    , O; Q0 [% q5 K- ]2 R
  595.   int i;
    5 K! n' b9 e; v7 C* o  m: N& C
  596.   char *szRet;
    2 n' @  D* l( \! i1 n8 Q/ X
  597. 9 O1 s% I! L  N8 Z
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    * |2 W5 g$ x5 k; b/ u, K: L
  599.   if(sztoken)! Y  `: h3 y& o9 A
  600.   {
    7 x: a" g) T3 r8 l6 z5 Q- Q( ^/ e
  601.     szRet=&sztoken[itoken];! P) y3 j4 u* u
  602.     while(sztoken[itoken])
    * V5 a! d9 I+ Q- _, |$ S$ d
  603.     {
    5 z& ~8 d" f( \3 g
  604.       for(i=0;i<(int)strlen(token);i++)- o1 g% d9 w/ R- ^
  605.       {3 N0 G% ?# e# D4 q! Q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])1 V2 |2 k' D3 C9 b) ~8 G2 v% y
  607.         {* K. e) W" f" v( B% G
  608.           sztoken[itoken++]=0;" D& y6 Z. P/ a
  609.           sztoken[itoken++]=0;
    - R+ J! u( f* n# x/ u7 y
  610.           return szRet;
    4 r9 Z% F: ~6 u2 Y1 _% m2 K
  611.         }
      O# G9 M3 E  l0 C/ r
  612.       }
    # N, e) p6 p: j- e% {' G
  613.       itoken++;# O" z' d5 v( Z) X1 x+ T
  614.     }: Q9 w) l/ Y  \* \1 I% D
  615.   }$ F& v8 e# x) u" D2 _6 c
  616.   return NULL;
    ' a  U( F  b, P" h( [& B5 A
  617. }
    5 [  a: E7 s9 ]
  618. 7 ]9 R: W' l' }# E0 v( N
  619. void ProcessProc(long Total,long Current)
    ' n9 F  x. W! K! V. b( z9 i
  620. {/ P9 O: l5 H" V' D  _2 V* S
  621.         MSG msg;
    : ?7 z  R- V1 L- l$ W
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);1 S" g9 ^; S+ H& ^7 A8 f
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 }7 l- M5 b% a3 Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ! v; K$ n% R9 ]6 `: v: X
  625.         {. U6 r3 `" k( h) k! Q  S. D
  626.                 if(!GetMessage(&msg,NULL,0,0))" l! h0 [, ^3 T1 v' w  @0 M, A
  627.                 {
    , y, q* Y* j" c, F
  628.                         return;7 `# Y( E: q: b* V( {9 T0 |
  629.                 }
    % Q* ]& v2 o( S9 _
  630.                 TranslateMessage(&msg);
    7 G) z% I9 c& P* D# t
  631.                 DispatchMessage(&msg);
    7 u/ c6 U. u  _: p! K/ G# V- [
  632.         }        . Z( }9 U! \1 X% ?4 a/ T( j
  633. }
    $ f" P  Q; n" m( `# v8 `$ L

  634. / H: f2 c1 u2 I7 ]
  635. BOOL bFirstChar=TRUE;
    9 X$ S, w: _- V% o) H

  636. 2 q8 |/ a2 u$ Q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 g. l4 I' f& y' w# E
  638. {
    9 u! F/ O: T0 ^4 K) r8 V
  639.         // TODO: Add your specialized code here and/or call the base class
    : Q+ C( a2 Z( v0 e5 b
  640.   switch(dwProgramState)
    2 S8 u8 w. t4 n( c
  641.   {
    ' K" n9 A5 I% `" o
  642.   case AP_NOTHING:) l. h. b  X& W3 V/ N0 R6 ]6 J$ x
  643.     switch(dwStartUpSteps)8 |" f% {% V6 y8 S$ f
  644.     {. u% a) F- S7 `
  645.     case 1:
    * q. g  E" X( ], U
  646.       {
    & r$ z. A+ @5 t  G3 A& R
  647.         int i;/ ]4 ^- x+ l  d. w4 s- c
  648.         CDC *pCDC=dlg->GetDC();9 e9 @  N( B' a
  649.         HDC hdcwnd=pCDC->m_hDC;
    ( M1 I# b4 b  R' m
  650. //        Graphics graphics(hdcwnd);
    2 [. L3 e5 J& X8 W
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    3 J* A& x2 j; N6 ]4 E0 W
  652. //        INT iWidth=bitmap.GetWidth();: _  M% x- b( D, |$ S
  653. //        INT iHeight=bitmap.GetHeight();
    . A3 F, N' X" b( h, r: D/ c
  654. //        Color color,colorTemp;
    1 g9 P( P, I4 M, J2 v7 [; a& H* W
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    0 B; r" f1 B+ W% x  Z& |: R
  656. //        {
    2 c3 n' V! p3 i
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)8 J0 W4 _) J6 [) D
  658. //          {# a6 Z% Z2 T( V: X4 z2 F
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    # f1 `2 I; U7 z
  660. //            colorTemp.SetValue(color.MakeARGB(
    * x& S% F' ~* F  O; m2 k2 r; v
  661. //              (BYTE)(255*iColumn/iWidth),7 A# Z0 C2 p' J5 W, T) b7 L9 E' u" d
  662. //              color.GetRed(),
    0 K$ E% b% b4 g0 s; u: l
  663. //              color.GetGreen(),
    2 K& P" A% ~" f1 \2 ^
  664. //              color.GetBlue()));  f8 \3 j. @2 B2 _2 O; @+ \
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- ^% M6 h. \  j, D, C/ J
  666. //          }
    ( G3 [6 m- T. _1 r2 k6 `: h
  667. //        }" z8 I$ d4 K, P, O+ N6 |! a
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);. H. v) W; w0 X9 e& Z8 s8 f
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" `1 q4 C# P5 J% F
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    , V& z& G, Y3 C/ W5 _, g
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 [# ^0 {9 B! O! O" o  ?( O$ ?
  672.         for(i=0;i<240;i+=8)
    - n  t* h$ j- u, ^3 n/ K9 r
  673.         {1 w  {0 E! m: Q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 T' z& R' U7 F/ m: U/ i
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , o- y/ d- g5 @+ n% @: ]7 d: @
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! w( o" X2 ^$ I# f7 j& x, c+ q
  677.           Sleep(33);# N0 b8 k! m" I" u+ s/ b
  678.         }. ?3 `2 q7 x2 U- C2 E+ n: N2 p8 q
  679.         Sleep(1000);+ X& _3 [1 h7 w6 o  ~; q0 X
  680.         for(i=240;i>0;i-=8)
    ) l; z( }: C# j+ L2 J
  681.         {
    1 _$ [! `( H2 H) j6 ~) j
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 y  V0 [2 w% o4 e$ g
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 X8 U# J0 d/ g' O
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% ^5 M) u% h; `! ~& Z6 ^4 H
  685.           Sleep(33);! d* m9 X; |6 i( D' h% }) l
  686.         }2 V9 e8 F. I+ Q- _3 G
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);3 r+ e, z. Y% ^7 `; i! u2 g
  688.         dlg->ReleaseDC(pCDC);
    / C2 d% q" o: o; c% k, A
  689.         DeleteDC(hdctar);# M& T( U- w, V6 k) {" F! ^
  690.         DeleteDC(hdcsrc);
    * x- `! C& x9 U8 p8 L
  691.         DeleteDC(hdcorg);
    6 H9 E9 y& s- E$ ]& C1 O
  692.       }
    & H* [1 p9 L" N0 `
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    9 i) b2 J: G, ^  a- L/ F! V
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  D& q4 w1 G8 l7 O4 w; z7 I, q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    7 x: s' u* Z# o
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    8 f2 {. C! K1 \( W1 B
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! Z& o2 r9 i/ T) y9 c$ V
  698.       if(!Dn.Connected())" r7 i5 b5 t3 G% V, m0 g
  699.       {
    / i- e# G- j$ W, E8 u1 t0 a2 B
  700.         dwTotalFiles=1;6 \. k! Z1 z0 A) V$ i. L
  701.         dwDownLoaded=0;
      k/ H/ `/ ^" {$ V4 ?9 @+ p& v
  702.         bSilentStep=TRUE;
    0 |, t+ Q4 A1 y2 c( m, p6 A
  703.         bCompressed=FALSE;
    5 ?8 l/ t- `* o& v2 `: g/ S9 B
  704.         strExtLocal.Empty();
    & c& U9 C! n2 [
  705.         strFullName="readme.txt";% ]4 X- C0 o4 e6 y
  706.         dwProgramState=AP_CONNECT;" o) V) s: N2 R
  707.       }
    * _- X0 i, J- ]' U
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();6 P% G1 g, u  j; J# T* B
  709.       dwStartUpSteps=2;& b' A$ O- N1 H
  710.       break;
    4 ]# F" \, a- S: Y! p0 \7 ?
  711.     case 2:
    2 J: w/ K1 T+ P' s
  712.       {0 g* G* |2 r. x# [# n. e* A
  713.         int iEOF;
    7 ?; |. Q# J" @1 ^" L2 T7 m( f; B
  714.         FILE *fp;
    & [3 @3 D# W# l, o
  715.         char szString[512];
    7 D+ p. l, V% V' t) G( k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");5 V, l; Y6 o0 w. L. y3 N) Z: n! W0 K
  717.         if(fp)6 V! V# D4 |" h# f$ }* j
  718.         {7 ?6 ]) J) k! q; R& j
  719.           do
    4 n) f1 R0 G4 n3 _7 N
  720.           {$ x3 [) i. ~" G- n1 Y/ I
  721.             iEOF=fscanf(fp,"%s",szString);: G" k9 t4 A4 p8 h0 T) j
  722.             if(strlen(szString))
    ( E& e( ?3 w- @5 n. U
  723.             {9 E3 o; X0 W$ w. R( l* p
  724.               if(bFirstChar)
    - s0 Z- }7 i+ J8 E$ x! K2 `, z8 |
  725.               {. s# d- t2 n9 ~$ Y& b- m
  726.                 bFirstChar=FALSE;
    ( S, ]; E5 V2 K2 n& A0 N/ ^* W
  727.                 bConnectIsBig5=FALSE;
    , O( @7 F$ i, R+ |- `$ {# S
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    8 Z" K9 o6 ^3 v" o# K. m8 N, A
  729.               }
    + y, N- R2 e2 {, S5 L
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    6 Q6 L9 @. C+ X0 p. j
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));; p" A% Q) \9 t: a9 [" h. k
  732.               dlg->m_ListText.AddString(szString);" p" S7 Y* n, T! _
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 o7 }8 \" U% j# ~+ e3 c
  734.               *szString=0;
    % y3 Y- b* u5 p: |
  735.             }
    ; K; h* p/ ]6 m" y8 h# w
  736.           } while(iEOF!=EOF);8 m8 a. `9 G7 F% ~1 G
  737.           fclose(fp);- R8 y: f( n  c9 d9 F8 @" ~9 }
  738.           unlink(".\\DownLoad\\readme.txt");
    : P  I. G( z& k8 |
  739.           dwStartUpSteps=3;
    + t0 S8 D4 U# x0 a6 @2 _
  740.         }/ T: Z. L/ k4 i& |; D2 @
  741.       }$ S3 S- o7 ~+ K4 J
  742.       break;
    4 L/ ?& h  S! k  y. d
  743.     case 3:
    3 V5 `  }4 E7 }6 t$ |' H
  744.       if(!Dn.Connected())+ I- ^) n+ {8 {7 W: ~+ d1 d
  745.       {
    + L8 x: q' p+ [- z' B# o: m+ z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    , O8 F  |/ k" W* D8 U
  747.         dwTotalFiles=1;
    1 x. S& l! l8 I. i' ~( f, {
  748.         dwDownLoaded=0;
    * [0 E5 E% d( x2 G2 e. g! f
  749.         bSilentStep=TRUE;3 G2 J# C- O. ?" B1 b
  750.         bCompressed=FALSE;
    ' U/ D( J. n, p4 \
  751.         strExtLocal.Empty();% E. d* O+ L2 ^
  752.         strFullName="checkversion.txt";
    / f% H' ]8 n! I: v; J
  753.         dwProgramState=AP_CONNECT;
    ; L; I: G4 u  o! h
  754.       }+ n2 N) `" z( B& e2 h7 S
  755.       dwStartUpSteps=4;
    $ z8 K* g) h/ D
  756.       break;
    / O, W0 j# U# p. y, c9 ]6 b5 Q
  757.     case 4:
    , Z' h: h$ N7 P: G' {" C
  758.       {: ^2 m$ v4 ~) t  h
  759.         FILE *fp;$ `7 u- c( |; l) x+ K
  760.         char szString1[128];2 _' `: F+ M+ `6 {5 P- q$ q
  761.         char szString2[128];3 m* q( h2 {  e" y5 S( B( P
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");; L! e  _$ n+ ]* }+ U, J
  763.         if(fp)
    ' E( C7 }  X/ j0 _+ N/ U
  764.         {/ ~4 a1 C. T6 W; F, T, |
  765.           fscanf(fp,"%s",szString1);
    & P) A' `4 O. s+ a$ |
  766.           fclose(fp);
    $ |9 }4 c1 n4 O5 y% ^9 \# @/ p1 M) V
  767.           fCheckVersion=atof(szString1);7 J" }0 @6 z1 S$ H" s
  768.           fp=fopen(".\\checkversion.dat","r");3 w: H. c6 v7 P+ V" H$ m# B2 z
  769.           if(fp)7 K( L& M. e5 r: \
  770.           {
    * i$ u$ ~& u$ U1 s8 I1 D
  771.             fscanf(fp,"%s",szString2);
    # `. a5 ]$ p  C
  772.             fclose(fp);, l5 u! w  K: F' z
  773.             if(atof(szString1)!=atof(szString2)); I1 k9 t- O( `# M2 ?6 M
  774.             {" a& e0 K1 u) W
  775.               if(!Dn.Connected())* }+ B3 j9 t* z- I
  776.               {
    ! ?! [2 U! I& j' b0 L$ K; j
  777.                 bFirstUpdate=TRUE;
    * A% @( W5 E8 |7 X
  778.                 dwTotalFiles=1;; H5 `& [+ N; B2 k
  779.                 dwDownLoaded=0;+ @# I9 u/ [9 p! l
  780.                 bSilentStep=FALSE;' k& ]$ E. t& G- e. C$ I
  781.                 bCompressed=TRUE;5 K/ g: ^8 ^0 E: o2 d) {
  782.                 strExtLocal=".\\DownLoad\";. d8 A6 N5 ?; [- k/ j3 d# B
  783.                 strFullName="update.txt";) |- f) A; f$ G* z( \) O
  784.                 dwProgramState=AP_CONNECT;" I/ y3 E! H# h; I6 y* [  r, J! U
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 B6 ~3 L/ T2 b
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / C- m1 r' {: f# x. k
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");* S$ E( v+ y9 b: H" \3 s5 H
  788. : U2 M& f" G9 J+ T
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 n4 Y3 {2 H. l
  790.                 unlink(".\\DownLoad\\checkversion.txt");3 L' J, P' H. ?- J3 P- T/ e
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    1 ]0 A8 T) e, |- M! S. l
  792.                 {$ A+ d5 j& m2 R- B7 y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    0 ~6 i5 g/ S4 p/ B
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( R- K0 N+ c. O! p8 ]
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");9 q  v/ V; L& l/ K/ D
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" s( C1 C% b% h6 u7 d% p
  797. ' n: u' t( @7 U8 A
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; _5 {6 V) g4 ^7 ?- b2 h
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 ~7 W; W1 G6 k0 t" |1 x  t: L
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");' `. m8 u8 K4 c% |3 x
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' B9 k3 v0 `- m: ?0 S
  802.                 }- d* _. D/ g( V% h8 v8 v1 ?$ ?
  803.                 dwStartUpSteps=5;& L  ^* Z" W+ Y! {
  804.               }( }" P, D2 I0 o1 I: p# u
  805.             }3 |. O5 }" \$ X. a. E- s- Q) p
  806.             else3 L/ g1 b5 {; A/ x, b2 M0 g- z
  807.             {
    ! P- w& b& S8 f- X/ k: c
  808.               unlink(".\\DownLoad\\checkversion.txt");$ R( ^8 M' y2 K* N. q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ C: p& y7 e, O9 B
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, c: Y9 ~% P  f  ?
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    1 b0 @! ^7 Y4 J6 k

  812.   A% {% a0 b- h8 f6 O, p8 }
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 A5 n7 A2 U- z5 q
  814.               dwStartUpSteps=99;0 k, l3 Y, v/ s" D5 P
  815.               bFinishUpdated=TRUE;
    " ?! F5 v, K; H( I+ g
  816.               bCanUpdate=TRUE;
    . }/ ^) Q; s4 k0 z+ v: o$ ]8 j" o
  817.             }+ z3 ?+ y# y, l% e- Y. S
  818.           }) q1 }( U$ V( \9 P* g! \
  819.           else
    4 Q$ z" S; M9 a6 r8 O# t
  820.           {- t9 \& p& y9 u6 U0 z
  821.             if(!Dn.Connected())& S8 Y9 _2 O7 a0 I- X
  822.             {1 T+ |5 O9 N6 U( |) p- A' L% Q
  823.               bFirstUpdate=TRUE;
    # u7 ~8 z. Z: n3 @2 I/ q
  824.               dwTotalFiles=1;3 _$ V4 _9 y: g  D* A7 S. W" ?8 [
  825.               dwDownLoaded=0;1 {- y0 J/ V. m. A. {
  826.               bSilentStep=FALSE;
    ) `# |- b$ d. v% L$ x! D8 p3 b& f) q& }
  827.               bCompressed=TRUE;
    & S5 ?8 b. d: {0 E
  828.               strExtLocal=".\\DownLoad\";
    6 h3 O) D, `" _* ^- w, Q, K& a
  829.               strFullName="update.txt";
    . x; h9 G) f' {* q
  830.               dwProgramState=AP_CONNECT;
    - Y5 c2 x) L# f7 E1 G. p0 F
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 |. B+ [2 T1 Y4 B& r
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 @5 c' ~1 a( n4 t) a0 V0 b6 Q
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");( C1 S' n# O2 E
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 @# F) J" O9 ~1 c
  835.               unlink(".\\DownLoad\\checkversion.txt");5 I% V3 W& S4 U5 U8 Z% E
  836.               if(GetFileAttributes("Wsa.zip" )!=-1); q9 f( Q, y# e" X" s( `& y* g- U/ d; l, u
  837.               {9 Q7 v4 t5 Z; f
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    3 m; p* o$ Z% B" e0 ^# d* n/ z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");; m7 A4 Q* E. X% p. q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ( u: {8 X: z7 `
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 q% X$ C3 j) X6 j8 S1 F
  842.                 " m2 r0 s2 w1 f6 Q; S3 O
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . |. t. t5 z. ~* a5 p9 E
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 r% f5 T$ q! u0 ?' ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");0 T8 t. O* ~* {. ~$ X
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 r) q% o  z$ s% P& o+ u
  847.               }/ N- ^; y! e) z
  848.               dwStartUpSteps=5;* |% f: i6 j7 L+ H- }/ Y) N
  849.             }
    5 [& E5 ^. O# b3 J! q1 j; {. [
  850.           }7 d* \6 m9 [0 k! A* {
  851.         }
    . r# l  T" e$ U% I$ l/ T
  852.         else
    0 D) b. g- S, l0 t
  853.         {7 e4 M$ q8 f9 S, q& w" D
  854.           dwStartUpSteps=3;" T- n% W5 }; Z
  855.         }/ r9 n/ f5 u, C
  856.       }
    * Y9 A& i: A* z' e, S+ `5 n* t
  857.       break;
    & O) ]  k7 T* ~  W
  858.     case 5:# z  T( U" s( Y/ R" N+ |
  859.       {
    4 `  w( U6 \  x% m3 J; o; n' j
  860.         if(GetFileAttributes("Wsa.zip" )!=-1). m. o3 J% A$ y, P! L/ R
  861.         {4 q$ j/ ~& l. }" e  {3 {7 A
  862.           int opt_overwrite=1;5 R0 v" m# _1 [' G+ Z
  863.           int opt_do_extract_withoutpath=0;
    ( `4 v% H6 c( ?
  864.           unzFile uf=NULL;2 K8 L2 m5 j0 u! f' M1 K3 N" X
  865. 4 Z) `, i/ |6 |% M9 h
  866.           uf=unzOpen("Wsa.zip");4 S) h5 Y7 S1 ~
  867.           if(uf)
    ( w% f5 l7 c  c
  868.           {" C7 w4 v' Y4 S4 K" k) X% P
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    2 e) L( ^4 V* I# ?8 [' L1 D% w; z
  870.             unzClose(uf);
    " k# H/ h2 O! Z8 _
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ! D; A. m( V* W8 @* s' f
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");: J3 g+ W$ `1 [
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    # o$ f, S; F6 a2 ]: n: m5 w
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% R: r% `6 N) ?# B8 W* r
  875.           }/ B2 N& |# v4 N5 S
  876.           DeleteFile("Wsa.zip" );
    ! v% v6 {9 l$ H
  877.         }
    ( P) s6 s! W0 ^8 W% H5 i

  878. 5 w* y6 {* n# K8 V+ O
  879.         if(CheckLocalVersion())' C4 P. p  I  L9 Z! M1 S
  880.         {
    4 h$ z1 I) @6 k
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");7 \9 f6 h# c  W$ H
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");. h" g. ~5 `- `0 W
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");; Y- e3 C9 U* Y( t/ j# C) V. ~
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 Y* C8 L# r. w% W# g! _
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    + Q! q# K* ], [
  886.           dwStartUpSteps=99;
    5 _& E0 d* g$ Q# f% a
  887.         }$ X9 G9 b: B  ^  d% ]& o$ y* i
  888.         else+ ^( g5 ^$ f- {3 S, q
  889.         {
    7 g% \' S' x3 O% N3 l: o9 o3 @
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% E1 v( f+ X& W6 ^
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
      p6 j' T2 l+ u7 N9 i0 B
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");. `% G( d  {4 a. k% }% Q

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

) r( E4 m; F% S: l' |7 ]+ s2 t0 L% r0 l5 h7 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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