CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
& ?2 c2 A$ E4 p. ^. |' `
  1. / RevApp.cpp : Defines the class behaviors for the application.
    % K# M! U2 ^" j* x
  2. //
    ; ?8 V0 s" ^8 n* e

  3. 6 f5 |7 u4 _/ p2 o2 d
  4. #include "stdafx.h"
    1 o1 Q/ F+ G: }8 p8 k- Q/ F
  5. % o, W+ H4 y# a* |
  6. //#define UNICODE' H% i5 |" i; K9 m1 z: |
  7. //#include <gdiplus.h>
    4 C# w& G8 S) y2 I8 j
  8. //using namespace Gdiplus;# I0 C/ _* ]3 H  A9 Y& o) x6 @
  9. 4 X1 Z: T5 f) W; y" l
  10. #include "RevApp.h"+ T- G, Z; K! x: W
  11. #include "RevAppDlg.h"
    ) ^& _7 ]  Y' o! _- Y  |! p% y
  12. 8 g) @9 P9 o! Z0 Y& w; y8 }9 e8 U
  13. #pragma warning(disable:4786)
    6 W6 @: @# q! a( Y  N! B: e
  14. #include <map>
    & B; X% p- p# s6 P( h- e' p9 ?
  15. #include <list>2 Z3 G% q) A3 n+ ^8 e
  16. #include <direct.h>7 k* P% V5 @3 w# E5 r$ b0 n
  17. + p" q7 c: o6 W
  18. #ifdef _DEBUG6 B; {# M' D) n2 h5 S; j7 w  [
  19. #define new DEBUG_NEW0 g) E) \: a) E* ^/ i
  20. #undef THIS_FILE- g% N0 \' ]4 N/ p8 i. `
  21. static char THIS_FILE[] = __FILE__;6 a' m% Q' |  Y9 n3 n8 r
  22. #endif
      k3 @" ]7 u& H6 @
  23. #include "SkinResDef.h"6 W  M: P  [# E8 V
  24. #include "ChangeBG.h"
    : @# k) L2 M) l4 {
  25. #include "AFXINET.H"
    0 o2 U# _$ z1 v
  26. ; J' c) g) V9 u6 z8 ^
  27. #define TRADITIONAL_CHINESE 0
    & S6 q4 r" V  r( M
  28. #define SIMPLIFY_CHINESE 1
    7 [" g- @' M" q
  29. #define ENGLISH 2/ I5 A( K$ \; r/ [) |
  30. int m_iLanguage = ENGLISH;) g, _" u! [  Y; r, [1 e, S5 S
  31. /////////////////////////////////////////////////////////////////////////////4 t2 b" W9 o& i8 \; M; K# ~2 v9 y
  32. // CRevAppApp
    + h9 u( Z+ @3 c0 T3 \0 d

  33. + _) z/ \0 z6 ~2 F+ m  y! ^. t
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    % v( N" y4 u% b6 A4 L8 u" i" V
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    % P, n, Y$ x  N$ v  R2 j5 R
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    7 d  W  ]( `- C5 t: y
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    * X, v, y; u5 d5 Y. Y1 X8 g/ o# o8 o
  38.         //}}AFX_MSG
    1 C4 I* \& g- c
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)8 V5 |- b$ }; h
  40. END_MESSAGE_MAP()
    3 `& \5 X/ C+ F5 W* Q
  41. $ I( w( w0 N7 {) h
  42. /////////////////////////////////////////////////////////////////////////////
    5 M1 n1 d; P/ |4 G
  43. // CRevAppApp construction# D" h. L' Q/ o3 K1 n" }% E  M

  44. 1 Z) q1 Z) q+ j
  45. CRevAppApp::CRevAppApp(). y% b) c% a# Y$ q
  46. {0 X3 G# |! I0 a' x! @
  47.         // TODO: add construction code here,; ?8 V- q' t! J8 V
  48.         // Place all significant initialization in InitInstance
    ( |/ T/ D* p3 M6 ~2 U+ A
  49.   bDisplayIsBig5=FALSE;2 W. ~7 H6 _/ V  x6 @$ J& z
  50.   bRestartUpdater=FALSE;
    ; w9 [9 L8 X! G
  51.   bFinishUpdated=FALSE;! p8 E" U8 W, m) |  n4 X7 o
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;: {9 _$ A, {: W) j
  53.   InitChangeDataBig52GBKS();
    ! W: m* f3 p6 t, r% t. O* Z
  54.   InitChangeDataGBKS2Big5();
    1 D, h. Q0 c/ T4 ^& R
  55.         //; x- y8 P0 E3 X: }, O: W
  56.         bClickRunExe = FALSE;
    ( q5 `; f. m% `7 |, ~% g2 y5 }$ ?' S6 Y
  57.         //! R. f3 {5 b! g1 X& L- I
  58. }
    0 V( A: F" f: `- q

  59. ; x0 G. A6 k" w. V2 q5 h
  60. CRevAppApp::~CRevAppApp(), W/ s( ~9 [$ v* M+ D9 p
  61. {
    5 E, [" U. D7 [% z) k5 @8 S. y
  62.         // TODO: add construction code here," ^* z2 P. c; J7 \/ m4 Z
  63.         // Place all significant initialization in InitInstance
    & X$ N; h: t* T4 w& ~0 A4 ]
  64.   EndChangeData();
    5 O( d7 U3 b/ l6 b% E
  65. }/ E) D8 ^8 P( W! i
  66. ; r. M6 u6 l, _9 m
  67. /////////////////////////////////////////////////////////////////////////////; y7 ~+ w8 b0 W5 |+ S+ B4 n1 ^% J0 ?
  68. // The one and only CRevAppApp object
    - M. D6 Y7 l  B  [7 S2 O+ d) I
  69. " ^' x) s7 e/ E1 g1 e
  70. CRevAppApp theApp;- F% W% f. S' D2 W: v5 k0 c) A

  71. ; X8 F" r6 d, J  D0 O' w
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ( O8 S8 N* L* X: {# P
  73. {
    2 ^4 w' b$ V- k$ E8 ]( w9 z  g
  74.   int iEOF=0;
      Z/ {0 `% T( w9 q
  75.   char szTempName[MAX_PATH];
    + }3 _& y9 H; r( H. y8 x' u' X
  76.   *szFileName=0;
    ! \6 Y6 n' Q' V$ b5 J
  77.   iEOF=fscanf(fp,"%s",szTempName);/ u) P' E# S" ?
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
      G7 c- t8 j* l5 A: \! |. Y
  79.   {4 S9 t% M; o; q: ^6 \: Z2 L- X: U; e  Y
  80.     strcpy(szFileName,&szTempName[1]);
    6 q* X0 X. b  A# a9 P
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)7 s7 b, ~4 Z3 P7 K
  82.     {4 ~: z) ?& s4 Q+ T9 }2 i2 r7 h' Q
  83.       iEOF=fscanf(fp,"%s",szTempName);
    / Q( [) F: o' A2 [& ~
  84.       strcat(szFileName," ");( W! ^* N/ [8 I% T0 _
  85.       strcat(szFileName,szTempName);7 X. {2 {, S% b
  86.     }
    ) l% b% P8 W0 `* j* z' {% T( g
  87.     if(strlen(szFileName)>=1)# V* ~; i3 N2 Z9 u1 V" h; Y) @3 t9 `/ r
  88.     {% ?1 r! }% J0 {
  89.       szFileName[strlen(szFileName)-1]=0;, p: v! a& S+ T/ B7 o
  90.     }
    1 v: a1 S' l& k
  91.   }
    ; A, K4 V; ~# H8 S. f
  92.   return szFileName;( m) O1 b, y9 G; U. \( Y
  93. }# i% ^* K& g  o- h: A

  94. + M! b, m' n4 |, {
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)% z' C4 g: |1 b" c1 w. i( ~
  96. {
    0 X1 l3 Q- J$ I) ], t+ r! J+ _5 `
  97.   FILE *fp;
    4 i# j9 B. G6 C, f
  98.   char *key=NULL;0 i) w! \) ], B/ y; @+ r
  99.   char version[MAX_PATH];( P. u. f+ {' [) ~; Z* C& p
  100.   LPUPDATEFILE file,olds;
    : P) ^: b) e  T% ^* ~9 c% y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;/ r3 }; _6 Q) G" G' L' t

  102. / C5 z8 j# g2 [7 S. B8 N
  103.   UpdateList.clear();
    & I5 I" Y* `2 R3 [! J' P# A9 q
  104.   UpdateFile.clear();: ^/ @: N$ f5 o" r
  105.   if(GetFileAttributes(filename)==-1) return false;' M1 b* Q2 y1 _( l/ q' x1 Y- R
  106.   if(!(fp=fopen(filename,"r"))) return false;
    4 [; t2 H9 n( h! s8 i* p5 C1 A
  107.   fscanf(fp,"%s",version);( g4 V5 E/ |0 Y( U- \$ m) W
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }! w% e; ?& J5 u7 h
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 J2 q& b6 S, s6 J1 w$ Q4 q2 E* r
  110.   {+ Z4 }7 k2 s4 U, M* o3 E- L+ g& T+ Y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 J/ c9 t, Q" l3 E% e
  112.     fscanf(fp,"%s",file->path);9 y. t5 L! m1 m+ `, Z6 X$ I
  113.     ReadFileNames(fp,file->file);
    / M0 P" k; z+ o# N
  114.     strcpy(file->full,".");6 {! Q. Y" d4 K- \# k
  115.     strcat(file->full,file->path);0 x) U# X$ ]$ P# `& L7 y  w
  116.     strcat(file->full,file->file);
    9 l# g3 \8 o  ]( c
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())2 C7 d! U, y) B& L/ S3 L& Q8 q! @$ g+ M
  118.     {2 Z( `2 y; b# j* R# n' \
  119.       file->vers=(float)atof(version);% D6 [1 }5 c& z& E8 I
  120.       UpdateList.push_back(file->full);
    & y* l( @! i; c3 |1 }
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    : u+ ^8 O+ X/ Z" r
  122.     }, U- Y6 B& p8 p0 D( U" V
  123.     else( `! X9 N: z4 ^! R7 V" W% z
  124.     {9 \+ I" R& V# Q4 q3 J+ f
  125.       olds=(*p).second;
    ( v) n! r) i( Y, r
  126.       if(olds->vers<(float)atof(version))9 _. c; d1 j& i5 k& f) {
  127.       {- N0 M7 z" }7 n5 l# A
  128.         olds->vers=(float)atof(version);! f8 }# x2 n% a+ s2 S/ N
  129.       }
    . d8 x/ P& o) r! R4 `2 k! \
  130.       free(file);
    9 }7 s/ D1 E& e0 z' k/ z
  131.     }
    5 o. O+ b1 b$ r: X+ T) D
  132.   }8 _) I& N# d5 K$ Q' ?3 r- e. l; g
  133.   fclose(fp);
    ! Q' C5 v- B& ]7 t
  134.   return true;" J- d& m2 M- [. k
  135. }
    1 D  g# A, E4 I  |

  136. 7 B& q+ V# O# n7 q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath); q7 z1 V' F* ^/ }2 ?6 l; I
  138. {
    9 {0 S" f; K1 e+ f
  139.   TCHAR  szFull[MAX_PATH];. N- p$ {! F. s9 Q* A9 J
  140.   TCHAR *token,*inter;
    # W  K0 m3 ^: a5 m6 r) T! k9 u
  141.   *szPath=0;' {' Z7 r) c! d2 v
  142.   strcpy(szFull,szFullPath);1 \: C) p( V- g7 l. p! _# f8 H
  143.   token=strtok(szFull,"\\/");- ?, h4 _1 S5 d3 }7 n: r( m  Y
  144.   inter=token;
    # @. L8 Z2 g8 N" K4 X! A  ?% F
  145.   while(token=strtok(NULL,"\\/"))
    & w1 G$ W& s% [; Q$ m/ M# V8 F
  146.   {- D4 M% D5 W& {9 D, i; S. A: _1 O* d
  147.     strcat(szPath,inter);
    9 {/ @" {: U4 Q# f; l; Q
  148.     strcat(szPath,"\");' T% ?6 Z% @" g# c5 w' C% \
  149.     inter=token;) A$ v& G% S+ I
  150.   }
    : d% j4 R& @7 p3 y" k/ T
  151.   return strlen(szPath);* ]5 T7 A1 F$ ]: {. h% V
  152. }( k+ e; Y& s" g/ l
  153. 8 N" _' [; n; u2 O: F7 A  n  n* |
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)3 j8 L* b, c) S% f: T5 ?& @' b
  155. {3 B5 `" x5 z# U) Z! w0 n
  156.   DWORD attrib=GetFileAttributes(Target);
    # m+ i/ N7 S% [) C0 _
  157.   if(attrib!=-1)) y4 Q, J* `# e
  158.   {9 D, B  I/ R4 e2 M
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ! n, @, @2 v+ s# T0 p7 U! w
  160.     {- R* `0 p3 d" ~4 ^9 \' N
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    & F! A9 R9 k5 I: X5 @4 y
  162.       SetFileAttributes(Target,attrib);
    % v% J( P2 g+ q( h6 u4 E! V$ G
  163.     }! B. ]/ g5 s; u4 r! L- t6 s& j9 Z
  164.   }
    0 B6 x) _& Z+ F: R
  165.   CopyFile(Source,Target,Erase);
    5 I- x/ h: X8 |3 a7 Z3 ?
  166. }: u' _; H3 q4 |/ ?. n' E) L& M

  167. - i$ ^- i8 t2 w+ s7 J
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    8 D- g7 X  F7 s
  169. {) F4 h% t  j; ^# Z1 l. Z
  170.      FILE *fp;4 O, O7 }, [( k6 }- m# w
  171.      char  szBuffer[8192];/ S  V8 K9 R/ G5 I$ |
  172.   va_list  argptr;9 A# `" p# l7 z; T6 T

  173. / y& f# _# i( [0 r
  174.         va_start(argptr,message);
    : k( e/ y* ^5 m
  175.         vsprintf(szBuffer,message,argptr);
    : V- n) [( T$ P  J8 E5 i
  176.         va_end(argptr);
    - W4 c. l, c: U) @9 r: H$ b5 P6 D
  177.   fp=fopen(FileName,"a");) H5 h, f# \) y) n. M3 X* p
  178.   if(fp)  d1 d* p# ]( C; J( F: Y, i
  179.   {( V0 S, o) z& p! z: U3 P4 O) l! ~
  180.     fprintf(fp,szBuffer);7 y  g; r- j( J# u) w1 f2 N
  181.     fclose(fp);
    ( o5 ]4 @" {5 s( D+ c9 n, Q3 {  N
  182.           _flushall();( w; b5 a( y9 Z- |9 Q* @+ P
  183.   }
    : a" I) ]# J( C: j
  184. }
    * v+ d7 M$ O7 j( ^" j% e
  185. 3 \! [: O2 K3 L# K4 ~5 J
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    # C$ D* i. L4 U5 v# \/ |
  187. {! P. |  c/ @. t: @
  188.      FILE *fp;8 [/ P$ c, d$ _- j
  189.     DWORD  attrib;5 `# N, K6 I6 r
  190.   attrib=GetFileAttributes(FileName);2 U) G' G0 v: p# w: ~6 ~
  191.   if(attrib!=-1)) ]" w7 @3 Y- \% g$ R! F
  192.   {
    5 h( e" \$ Y$ q# ^: T! E' U
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);4 i7 Q# D7 H0 E0 r3 @! Z
  194.     if(!SetFileAttributes(FileName,attrib))
    % m0 X) c  v2 b2 K) x; P
  195.     {
    $ g3 C# l$ H5 z) O" W1 O! _
  196.       return FALSE;3 H8 c% E3 W9 M6 n6 d8 Y0 S0 k
  197.     }4 G. K4 l4 }" E4 B$ a: R5 f
  198.   }1 W/ p4 R$ m+ W* {" `
  199.   fp=fopen(FileName,"wb");( \: v1 ?0 A# h' l
  200.   if(fp)2 _$ Q+ W$ t. C" l7 ]
  201.   {
    % x6 Y/ n* m* J, I
  202.     fclose(fp);: Q$ W7 U1 l3 e+ a/ w8 w/ V6 V4 g5 O* i
  203.   }! I& s& z" J4 K0 z: w) K5 ]
  204.   return TRUE;
    # ~5 m1 Q+ I8 V. Z" v
  205. }
    : e: c6 Y- `3 e7 d* Z( b

  206. % S! V8 B- ^1 Q, j8 V5 O
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    2 G4 S' N. _3 v' p  u. z
  208. {
    7 H; A1 n' I& M4 q1 {
  209.   char filename[MAX_PATH];
    8 V0 ~0 O+ s! Q+ o8 U' p
  210.   LPUPDATEFILE file,olds;" H" ~7 v& F7 g
  211.   std::map<int,CString>::iterator i;
    * v% J# C/ o* z( Z
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
      e8 I$ \& P$ P8 a
  213.   std::list<CString>::iterator l;4 r7 z( F. |2 a1 m8 T& |% W6 }% w

  214. : j5 q" s8 ^3 b8 y- E
  215.   if(bFirstUpdate)
    & ]% V* v! W! E% r. e  M
  216.   {" f* d4 c7 y. O" [/ X& x) E6 g
  217.     dwCurrFile=0;
    ( \& Z6 ~/ ]+ \! D, Q* e
  218.     bFirstUpdate=FALSE;
    3 ~' N$ i. s3 F
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())' @+ a$ H0 w+ g. Y7 Y" K( t
  220.     {* ^! ]" J0 c9 \4 K
  221.       dwTotalFiles=UpdateLocal.size();
    9 G$ u7 f9 ?  r7 s2 D# |# U3 }
  222.       dwDownLoaded=0;7 D$ u- }1 P$ B' ?1 `
  223.       bSilentStep=FALSE;
    3 O# v& I) l/ }+ @$ p, X: d
  224.       bCompressed=TRUE;
    ; E# Z  B( K; h; j6 B, b
  225.       strExtLocal.Empty();7 q- {) v5 R( H, _; X  s
  226.       strFullName=(*i).second;* a# O. P$ Q9 ?3 a( T
  227.       dwProgramState=AP_CONNECT;
    ( C: k. {$ z% |) |# ?; D, o2 a9 e
  228.       return TRUE;
    * ~5 v+ E8 ?( G6 k" T
  229.     }
    , O& w8 ]* j% i" l0 B  r
  230.   }! E% \1 r4 ^- O
  231.   else if(bRestartUpdater==FALSE)
    1 |9 g& Z7 M5 l! R2 U
  232.   {
    + x7 ~. J( o% h( K
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())7 W7 R" X/ S# n, r$ ]
  234.     {
    ) n; L4 A9 c5 ]3 c+ q
  235.       file=(*p).second;/ d5 _) v. U. M. ]- R! R0 }7 v
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())4 J# g% q4 j8 r% C( c
  237.       {
    4 e! V( L" ~( ?; o/ L2 L
  238.         olds=(*p).second;* @4 L8 w2 O" p/ l/ O/ S
  239.         olds->vers=file->vers;
    - P% A7 k# c: O
  240.       }. q7 _5 h- q  K" w
  241.       else
    0 W% d& ~( D; u, w4 T/ H* R
  242.       {/ [5 `  ~  L8 X; w
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# X1 p, E) D0 Y( E. ]& K
  244.         memcpy(olds,file,sizeof(UPDATEFILE));6 S8 S3 U) ~5 v& ?1 ~7 t
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));% f. _& q- |# P9 J
  246.       }1 a% i# S( ^; c/ K& p
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");8 `# Z6 R9 f5 R1 Y3 H
  248.       sprintf(filename,"(%s)",file->file);5 L- P  ^# d: \4 x0 M
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 x  z/ U+ N6 n$ W
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    3 |; T+ H( F& R
  251.     }
    7 [3 C, ?) E& _
  252.     dwCurrFile++;
    $ F/ h! A) f; _8 M0 |
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' A2 S! R0 x; c0 w6 n1 r
  254.     {
    3 c+ K2 y* X& S5 f/ n: s
  255.       bSilentStep=FALSE;1 R( J8 B" q5 N/ z( G+ c$ t" Y* p
  256.       bCompressed=TRUE;) g/ K: ^3 {" |+ ^4 B, C4 n
  257.       strExtLocal.Empty();
    ! O4 t) i0 S  B& G7 a/ \
  258.       strFullName=(*i).second;' u* z9 U% [8 H& U
  259.       dwProgramState=AP_CONNECT;8 R0 g# N1 f. Z+ m. g5 }5 ^0 }
  260.       return TRUE;! \2 K" f( ^7 e
  261.     }
    6 I6 V2 W/ \# q, H' U
  262.     if(!bRestartUpdater)4 W0 F" E) o9 N) {/ s
  263.     {
    : l$ E+ E2 t1 O- z3 ~
  264.       int iCurrSize,iFileSize;+ ?  i0 E2 A0 \7 P/ U; V* u
  265.       iCurrSize=0;
    : U, s2 |8 D1 [& A7 m5 ]7 G
  266.       iFileSize=UpdateList2.size();
    5 ~# I1 a5 c. J. X  z" n& _( `$ J
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    2 F, d/ o- c. J" N, g
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");& g; n; `2 n, E& [0 c
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    % G8 x$ c0 {0 }  \* |
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 {% u. |2 y- S1 B: s
  271.       Fclearf(".\\update.dat");) {/ e' f) j" X, U  I9 D  Z
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ; X/ c) P! v' U' A$ w, o. a# Z
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)0 d0 h! H7 r% u2 f
  274.       {
    * U5 D! t' n2 _/ P1 `
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    9 ^" ]1 e& n) q! n/ ~
  276.         {
    2 L/ M$ a2 T/ V2 W; }
  277.           file=(*p).second;" `' P; e* X6 a! c! E% [; Q7 L! {
  278.           sprintf(filename,"(%s)",file->file);
    , c: l4 ]2 x! l; }/ P
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 \  j) }7 X7 R
  280.           iCurrSize++;  v! W$ C+ s  m" u( N, V+ Y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));1 v% }4 g( k) p4 D0 i7 s" ?1 ^/ y
  282.         }% k9 Z) G, U9 A+ ^( }
  283.       }+ h  h/ V2 ?, p, H
  284.       unlink(".\\update.txt");
    ) T3 _/ U4 f+ W( W- w
  285.       unlink(".\\update.tmp");# z1 G5 z4 ^% `. N
  286.       Fclearf(".\\checkversion.dat");5 R/ t+ D; C; j+ S4 F
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ; r, R: C$ d$ u" F
  288.       if(UpdateLocal.size())
    * ~. F1 K5 |2 s/ w" @
  289.       {
    # m# q$ D  f) F. J
  290.         UpdateLocal.clear();
    1 |' z' G7 U) Y0 s) ?
  291.       }5 k* y. g" X) y4 J+ Z
  292.       if(UpdateFile3.size())  y  R) S# D& v4 |- V* P
  293.       {5 l8 U& z! s6 @# T- M+ x3 D% X, f
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! G6 S# _2 i- r
  295.         {
    2 v$ U% L! g3 l- M" L
  296.           file=(*p).second;
    * [# _( e+ I0 u2 S) d: u
  297.           free(file);
    : A6 A/ L6 q  U- U6 U/ q9 v$ b0 e3 F
  298.         }; h  Q0 D, ^' B/ O5 w2 M
  299.         UpdateFile3.clear();
    / N4 J! T* V) |  E& G4 U. V
  300.         UpdateList3.clear();
    / g' Q: W4 R$ G& S5 [' B& W
  301.       }
    ( P, T  R' D" X7 [/ }# h5 I
  302.       if(UpdateFile2.size())6 @# L+ y5 a9 B( k& V8 D- }
  303.       {
    ' r- p4 T  f( M) J3 X: Y7 l
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)) J, s: C  ]6 T; ]
  305.         {. e" w" ^3 C+ ^
  306.           file=(*p).second;
    0 n5 D" p6 U$ e' t) p- k
  307.           free(file);* c7 n/ G" ], l1 a& [; ^0 e' A
  308.         }
    3 e2 Z8 {; O/ s/ U' b
  309.         UpdateFile2.clear();
    , p8 Y# I% y7 x
  310.         UpdateList2.clear();0 P0 b/ _5 `. D4 |# T
  311.       }* ?& f  W) @) s. M+ ~4 y
  312.       if(UpdateFile1.size())
    , I: p- n% i9 U( o
  313.       {: m! K+ K4 w/ d+ p# F1 b2 w
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 E9 |# R- q6 _1 ^6 z$ M, p
  315.         {# l) }) K3 G4 i/ k& ^# r0 h$ S
  316.           file=(*p).second;
    3 {! O/ Y& W8 h' z# K
  317.           free(file);+ ^5 D/ P6 y% t& E
  318.         }
    % D1 @( v8 t" S& x  e( @5 J3 z
  319.         UpdateFile1.clear();" N1 b! L3 u( I1 [: K- M/ V7 Z
  320.         UpdateList1.clear();
    - m: E# j( X4 a1 F/ m
  321.       }* P: n3 U2 C# R; V
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));. I7 e" f5 f8 s# B
  323.     }) D" s3 `5 @1 t9 w+ H
  324.   }
    $ k# ], |0 l5 I/ x
  325.   return FALSE;: q. ^7 w! s. p. w8 @8 h
  326. }4 T1 ^, L" P* g) S

  327. 7 U% B' H4 M: y4 m
  328. void CRevAppApp::ClearAll(void)
    3 r! y' Y4 K0 n5 _8 H
  329. {* Y  \( B, F; l0 C/ [7 U& J% \
  330.   LPUPDATEFILE file;
    5 Y4 X4 ], ~# h, x' b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 N' R$ r( C! z, c" q+ l7 [$ y# T3 G

  332. ! i0 h  v) w* m  L9 q: o
  333.   if(UpdateLocal.size())! e% q) {6 W  Y7 G$ s" K! {$ B
  334.   {0 g8 n+ `7 p( s# D
  335.     UpdateLocal.clear();( S$ V# w& u. U* l( }
  336.   }$ y6 H! p7 E( J0 @7 w, r
  337.   if(UpdateFile3.size())0 g% P* G* `9 l8 i( s
  338.   {/ a" L* |# v* C6 g0 T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; o7 L% D) ~0 }/ z
  340.     {8 q) d- t% L7 U
  341.       file=(*p).second;+ C) Q0 B2 M$ M' b: v+ U; [
  342.       free(file);5 T3 n$ B" k3 x- ^8 i
  343.     }
    + b# l; i' z4 B
  344.     UpdateFile3.clear();1 n: T  y% f; s* f6 d
  345.     UpdateList3.clear();
    . W5 b, F1 i- d* w. g' X+ }
  346.   }
    8 c& h. _; K$ w2 s( M! s
  347.   if(UpdateFile2.size())
    : |9 D( E+ W, l8 m! W( e. v
  348.   {2 \% s0 J/ b# J1 }  f9 s
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' |, u: l! W* v# v% a
  350.     {+ E7 u) m  }$ u3 k3 `# n  I
  351.       file=(*p).second;
    * c9 a' }/ l" y" z5 K
  352.       free(file);
      J  G1 s$ {$ q! @; W) z- R8 z  o
  353.     }% ~/ v2 V& H5 l: _4 u
  354.     UpdateFile2.clear();- r( [2 n3 M5 [: H  G
  355.     UpdateList2.clear();
    ' C' R& @1 r6 w' e7 K2 u' s
  356.   }
    & f) E# q* h) ?/ D$ b
  357.   if(UpdateFile1.size())/ @6 t* v: w/ K8 o  x3 G: C1 A, X
  358.   {
    1 E$ F7 R3 u7 F) a
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ Y  O- x" Z0 |* g( z+ x
  360.     {% H4 q+ \9 T5 T# d- n3 F, p
  361.       file=(*p).second;$ a5 R3 l* y0 M  w" `
  362.       free(file);
    * c( U3 @3 X: _- ?
  363.     }" V3 L2 J  ~. W& I0 K& O6 i
  364.     UpdateFile1.clear();
    & C2 E6 {: h' ]8 j  ^
  365.     UpdateList1.clear();! l, t3 S8 A+ u$ R
  366.   }! W5 x" [- n4 \- B
  367. }  
    " V/ [) U5 o7 _* h* ^7 }! z
  368.   " k( b7 O% {2 G
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 @7 E* C: @8 u' b
  370. {
    1 u! s" `: Y4 l1 ]  N
  371.   int c;
    - |; V$ K- t; d% T8 B8 U( o$ `9 X
  372.   LPUPDATEFILE file1,file2;- K+ z7 L; a4 Z2 b: r
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;* t9 }4 i' c2 h- C6 F  w/ g! i, }
  374.   std::list<CString>::iterator l;
    5 N- M  Q6 X' B; p% j3 s

  375. " F# \8 c3 a5 s+ n
  376.   UpdateLocal.clear();! V) r! k. G1 B; M. k8 K6 n9 y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);. T- O+ Z: T) V: s
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);- G0 l3 F& v$ d  f
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);2 q6 R) l5 g3 g
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ! b$ d; ]" S. _; H
  381.   if(UpdateFile3.size())# X2 g" d) M7 D8 L
  382.   {' z+ a+ ?7 P9 w3 S
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)3 t7 w. q8 e: j2 h: b. [/ y
  384.     {4 ]8 A3 h: k5 @( _
  385.       file2=(LPUPDATEFILE)(*i).second;8 W: n1 @; c2 y6 m; ]7 ?& R) j+ n% P- Y
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    % Y( y: a& B3 }7 Q+ g
  387.       {
    * @/ {& G  K5 R8 }
  388.         file1=(LPUPDATEFILE)(*p).second;# {' X8 l' U3 ^3 n: T4 O0 N
  389.         file1->vers=file2->vers;  @' T9 z3 v) ^9 i; l
  390.       }
    0 A# m% ^* L0 B" t
  391.       else
    & k4 F' Z7 A: `
  392.       {8 m5 t* H( U8 c
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 Z" L) A! H% o6 O0 F5 ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));  b9 d# Q& _3 F+ G, n+ x
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    9 n' ]* C- {2 y, ?6 Z/ O8 z
  396.       }, b4 w& a: c" ?2 r, L
  397.     }* E  L3 n8 B9 \- F
  398.   }
    8 G  _- f9 }+ Z) P, f( L4 p
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 C7 E' m% c7 {3 _7 R5 M. C( C
  400.   {
    $ O3 I) W0 Q% Y0 n: [
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    + B; `. v0 s* c5 e7 r
  402.     {
    & s; t6 G# n! F2 T) K
  403.       file2=(LPUPDATEFILE)(*i).second;5 P0 j- v" ?) o8 T1 E6 z" c
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : c+ s5 {3 B  l4 d6 j6 }
  405.       {4 H/ j$ N- m" Y3 q  P' }' w* q
  406.         file1=(LPUPDATEFILE)(*p).second;! i8 y3 ^. S! w/ {. T
  407.         if(file1->vers!=file2->vers)
    4 `+ Y; F/ Z8 E+ L- K  G$ P# M
  408.         {
    # x  }" N+ ]! r& z  L! y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) M/ c- W9 B: u2 q0 E1 y0 [- z
  410.           c++;& ?; Q; v; K6 N8 c7 y$ X; z
  411.         }
    4 S+ N' @3 z& ~0 s
  412.       }: x- e/ F% F1 _9 K. ~0 n9 a
  413.       else
      S! g! X' @- ~) U
  414.       {, s# [- ?8 v6 n1 s5 H  N# U% G6 R% A
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % Q! D2 B5 X% j( R. K* e/ ?
  416.         c++;8 B" j8 A2 B, V) F# {2 q
  417.       }7 h1 O2 j/ `; C
  418.     }
    0 `4 [% N$ a3 w% {8 e
  419.   }
    6 C+ D( M9 i) c" G0 S
  420.   unlink(".\\DownLoad\\update.txt");$ C3 D' Z, e. i9 `* L
  421.   if(UpdateLocal.size()) return TRUE;8 V- P8 Y' s1 i. c3 X6 ^
  422.   else                   return FALSE;
    1 e1 O3 W6 v9 r. c5 h" ^4 o& d
  423. }4 @: y! B9 v: |; T# z5 D
  424. - b7 k- l; e; ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"% e  y5 j# h  Z2 J6 X6 L. X
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - h1 e- r& a4 ?( a
  427. % q, l& g( V' a. v* P

  428. 2 W: q( H  S* j7 K
  429. * Y+ F& Z3 D3 n# A. o1 I; R
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    , l2 }* a; F) `; [- Y/ I
  431. {
    ' j# o+ n; r% a9 k1 y7 t/ d  x
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    . `1 M! q2 g, V$ ]1 U: g
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% h5 o  ^& e( k/ k3 S" r& ]2 i
  434.   {) q1 T. k' P6 D! T
  435.     char szLanguage[50];
    0 N. ^, V6 V6 @$ d/ ]) z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");# m8 P4 U. f5 e
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    6 ^& F/ l7 |, E8 D) M
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! f: C; [8 ^+ x& i$ z- a
  439.     else                                   m_iLanguage=ENGLISH;2 S4 I" x2 n! v( p6 o5 a" ^
  440.     char szRegister[100];
    # a) Y9 m* }. G$ N- E, S! J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 x; ], |: D' d0 u& C
  442.     strRegsName=szRegister;/ f6 K3 X+ `/ ^( q
  443.     char szPatchURL[100];5 u2 O2 Z  i% y; y- f
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , Q2 u& L0 \, D& u! ^1 n" \
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, |( a* U9 P. \( ~
  446.   }
    1 b- N3 y. G6 I5 i8 N6 ?
  447.   else8 Z  y+ V7 X5 [% K, n- j
  448.   {6 ]: ?$ C, r# R0 q8 V' s# R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& @5 D: l1 O/ _0 x. V' @7 @9 \
  450.     strRegsName=DEFAULT_REG_URL;
    / P4 k4 Z% z) L' K  i
  451.   }) v# y, [  B2 j' d( f2 N
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    / h. O6 l8 H9 @$ c: b! m: g
  453.   {. J9 O6 w* w8 y7 j6 R5 [; E
  454.     char szIP[50];2 }* x$ D& `+ R6 Z8 E- a
  455.     char szDIR[300];
    0 i9 u* ]6 t, N4 h4 \
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))/ F3 K2 p  J% C+ ]* z
  457.     {
    7 ^+ g# P" ^1 a3 S
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    . i0 d* m- _5 m5 C! `! N% u* w
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    - L, H5 [, |. T3 f0 h$ F# m/ n0 c- z
  460.       strHostName=szIP;* |: M0 d& E4 K8 ]
  461.       strHostPath.Format("/%s",szDIR);+ K7 C8 v& e  I6 f; M- O$ C$ F
  462.     }
    $ p! H' D" W; s) O$ l' v* I
  463.     else5 `: ^' h# ]$ o# r6 Y
  464.     {
    3 i( T  x! m, [9 m3 R
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) S  L+ x' G. I7 [
  466.       {
      ~% d$ ~4 V; S
  467.         char szLanguage[50];
    $ ~# [+ I7 X* q" C/ \0 T; {4 a3 ^9 ^, M
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! J! J* E% n3 ?5 V  {
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! T" T% E% l7 s; D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! G9 i- }) D# C) ?$ D' y7 I( h
  471.         else                                   m_iLanguage=ENGLISH;7 o* j# B; [! m9 q" ~5 [, |
  472.         char szRegister[100];
    3 G# I/ h1 }) `8 w8 F
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& {# p3 f  }- N0 y8 f8 I6 e
  474.         strRegsName=szRegister;: y9 g3 r4 y5 G2 A9 \/ d3 j
  475.         char szPatchURL[100];
    4 T/ L: p* n' Z4 o9 O2 k' X* h
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ S; P' E7 d5 B, M
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' z& Z: F) R- T
  478.       }
      ]8 Q# `! D& E, X* _1 a
  479.       else  z$ P0 u) {; L; P6 x# q
  480.       {
    $ G+ n8 q, y/ ]4 {8 m+ y
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ V. B% o- \" _% L# g' w5 o
  482.         strRegsName=DEFAULT_REG_URL;
    8 l. U+ _3 j+ k3 k& o. p
  483.       }3 _% X8 ~2 C% X3 i7 O* I1 F! c
  484.     }/ r! o) |0 R1 L4 K- B0 }  Q+ }% S$ q
  485.   }
    ( V& Y2 n4 A* C6 w3 m' t* [
  486.   return true;
    ) U8 g. M" Z2 c1 ]/ V
  487. }3 `$ \" u+ l# b; e( L5 W% b
  488. ! N* D5 @3 u1 B8 a$ t, N, J6 j
  489. #include ".\ZLib\unzip.h"
    % m, q& D& \- q! @& C& ~
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ' f/ T* }2 R" {1 N) O8 D
  491. ////////////////////////////////////////////////////////////////////////////// R6 ~5 j, V3 {: \8 }3 s5 Z
  492. // CRevAppApp initialization, o9 e$ b0 |; e# I# g

  493. 3 `7 O. x7 `# ~% Q
  494. BOOL CRevAppApp::InitInstance()
    " M# V1 N$ ~4 S  e
  495. {3 |, ^" b! |7 M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    $ b+ \- s/ E$ p' B

  497. - O% E% w. S2 x/ G) |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);, H9 g6 p6 S( @+ ~
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)), \+ d0 j1 u, ^; c  e% H8 @% _
  500.   {% U. Y/ F3 Q, g
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ) M( m% i7 _/ w) q" w
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    " l% [6 _. u* r3 L9 [+ w
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    : Z& f; }$ q2 d8 [/ X
  504.     {
    ' p& @; f* p' m( S) b. Y; Q
  505.       strcpy(szPath,szPathTarget);, f2 j& Q! d3 m$ z" t
  506.       SetCurrentDirectory(szPath);
    : }# U# t- \: Y. q
  507.     }: b7 L, z2 ]( n5 y+ H% F3 s
  508.   }
    9 M- ?: r4 O: W$ e& b8 P( Q$ Q
  509. #ifdef _DEBUG3 M6 `& |* Z: h7 m4 B
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' K7 d) h" V* z' m2 `
  511. #else9 W! J# R7 h% U+ k/ T& X& z6 {
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 e/ e( i! R. P7 d
  513. #endif) I- [8 G4 u- g
  514.   {
    + g, [/ f* X8 l' l# U
  515.     char tempFileName[MAX_PATH];# e4 g. z* D8 E2 d; q& Q
  516.     strcpy(tempFileName,szPathSource);
    1 U4 h& ]( T, t; J$ l+ z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    7 O( {3 z/ ~+ ?% i- t8 C
  518.     strcat(tempFileName,"\\$CSUpdate.exe");, [. }) ^3 T/ ]7 D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% J. ?" `) S+ B% z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    3 G& c" X; c( u# u0 ^# S
  521.     return TRUE;
    , p, ^2 Z/ X9 y+ J  D& R
  522.   }
    " w6 p# ^% ]; N
  523.   // Nuke 0118: Delete run.exe
    % y. o$ K* @7 h9 C0 h& Y# V
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );9 E. L, i' h* R6 |% R$ d- {# ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + M5 x- q0 t* m- B( u4 W
  526.   if(!ReadCfgFile("Config.ini")), ~- t: [6 b7 l# ?! F; `
  527.   {5 S. _2 z4 C) d/ U8 r
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);9 D1 c3 Y+ y$ O
  529.     return TRUE;2 ~! [: u0 q, z( x. u- V8 I  `
  530.   }
    9 ^$ D- B" l' Q. p$ v1 ~% N
  531.   HANDLE mutex;) ]) y( W3 w0 W7 T0 E+ k8 l( ^: k
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    , h( Y1 _. Z, ?' s- {/ C
  533.   {
    $ q8 r; ^: \  l
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)) d' F! Y) s4 @0 o9 u; U, ^* |/ Q
  535.     {
    & h1 j! z5 _( r5 W
  536.       CloseHandle(mutex);
    2 Z3 p) M& g, ]8 q( N! h
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. S. [$ ~" _% U% d
  538.       return TRUE;2 J; \' N7 y+ a7 O3 s
  539.     }( x1 b; h+ b- X; g- @# ?( A
  540.   }  
    1 y. H+ g6 U* Y  q* z4 v' g
  541.   CloseHandle(mutex);% {% z3 t! Z% o& _/ ^& F
  542. ' n1 x. {# L' L7 J9 V
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # l2 O3 n  S" h* n" n

  544. & ]! {* i% ~; a8 K+ a% b
  545.         AfxEnableControlContainer();* A- F8 B7 I# e  t

  546. 8 m7 I! u8 l3 k9 P& q+ `' |
  547.   bCanUpdate=FALSE;
    2 t' _- W! K  x, r% L
  548.   dwStartUpSteps=1;
    / x$ _9 ]: ^6 b1 J/ \, m
  549.   dwProgramState=AP_NOTHING;+ x! i6 V& F" C/ g  |# Q8 J
  550. ( b0 U' C% q7 I+ O8 Z- p
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);, a0 h4 N3 S# \

  552. ( B" J- N4 m4 `; Q5 b6 c; M
  553.         // Standard initialization
    2 B9 a. M4 v& E+ H8 R
  554.         // If you are not using these features and wish to reduce the size
    ) x1 b5 }) v5 `2 X1 X7 j( M
  555.         //  of your final executable, you should remove from the following: |* J$ y/ {1 S( m" _
  556.         //  the specific initialization routines you do not need.# C4 i: z/ \3 t" [4 y( n

  557. 5 ^# w: A" {0 N) o! U; G7 c/ m) L- m
  558. #ifdef _AFXDLL
    4 Q0 q5 Q6 H. u( {) f* N7 B. U5 I
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    6 E" q5 ^3 B* m! J
  560. #else* P& {2 j' |5 j7 ^
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically& T. G# E/ d7 x
  562. #endif
    : L# Z4 z) Z) t5 n% \0 B- x/ b

  563. $ y. A- @' l# n/ G, E6 K
  564.   dlg=new CRevAppDlg;
    ( Y8 d, @/ g4 r! U3 k
  565.   dlg->Create(IDD_REVAPP_DIALOG);: l" Y  @+ n* H% Z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);. x$ w& [" Q" c4 S# n( S* e
  567.   m_pMainWnd=dlg;* Q3 o" ^$ v  W( l7 _1 B: x' S, T' r

  568. " ~' [: h3 Y( Y! ^
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);# Y7 F) [& y% Z5 w5 Y
  570. 0 ?) @, ?, W$ a. r/ @6 u* t
  571. //  GdiplusStartupInput gdiplusStartupInput;3 z9 I3 S; ?) d4 Z9 v; t. w$ T+ A
  572. //  ULONG_PTR gdiplusToken;+ d9 B! A4 \# }: r, g" W1 {
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    : f# ?; _; ~. r+ M, v) e
  574. $ i2 u7 L0 ~" _6 w
  575. //        CRevAppDlg dlg;$ T# {  S# w; Q( ~5 V% c# p
  576. //        int nResponse = dlg.DoModal();
    : S! Z) e, B* `6 K# Y* b
  577. //        if (nResponse == IDOK)
    ' j- l2 d: Z9 ]: i* X; N6 _
  578. //        {' r& [- Y  i3 Q. F4 N% R4 f: g
  579. //                // TODO: Place code here to handle when the dialog is
    & b3 s& C1 L6 X7 J. v% }
  580. //                //  dismissed with OK; `6 a& c( d: t7 c) L
  581. //        }6 x1 O: v) I8 Z2 X
  582. //        else if (nResponse == IDCANCEL): v$ X" a9 h% d$ ~
  583. //        {4 L  N" r" K# L, G! I! ~
  584. //                // TODO: Place code here to handle when the dialog is
    2 y( o; P( ~7 g9 w* X5 E5 m
  585. //                //  dismissed with Cancel
    7 X& h% N  b  q6 L0 q" q5 n
  586. //        }% T$ R" {/ Y% Q( D- e3 D
  587. - d' K0 ~) g; w, r0 U$ ^/ o* g- I
  588.         // Since the dialog has been closed, return FALSE so that we exit the# y- j7 J$ T' |' e; w2 N; {
  589.         //  application, rather than start the application's message pump.
    ( X0 J5 s# o& u7 M& R7 k
  590.         return TRUE;: p" T7 J) ], W8 y+ d
  591. }9 _* }5 L3 ^9 t7 @% X" ]/ j. [
  592. 5 v8 _+ w- R6 U+ d0 f9 a0 e
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* N& ]0 c$ f# V# x; T. K( V1 ?- C. o7 k
  594. {; m3 I5 n0 L7 G7 l0 a" |. y
  595.   int i;
    ( J: X7 v% p" D  t- P& `4 \
  596.   char *szRet;. x; ~% G% M1 l6 Q

  597. . X) ~* \+ x1 U* m; c& X. c
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    / O2 p3 ^7 B; }9 T/ }- G
  599.   if(sztoken)  h+ [5 h' ~! k- Y- k6 b- r
  600.   {% h7 m) B+ V1 p  q- _& Z  o: D; n
  601.     szRet=&sztoken[itoken];/ A5 O, w, r- E
  602.     while(sztoken[itoken])
    * E! E5 K; ~( |5 U+ o! B! i
  603.     {# g' q% J, ^3 e' E: ^
  604.       for(i=0;i<(int)strlen(token);i++)
    4 [9 p0 C9 M' [$ F; S
  605.       {
    : s3 k# L; K  C1 j% |, X
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])" R5 O) c- {6 U7 v. h) a5 A6 O. _$ ]
  607.         {8 e$ z2 y4 S: E0 C1 l. [! w3 `
  608.           sztoken[itoken++]=0;7 j, c- R+ v  c2 L5 |0 m  \. }3 _' d
  609.           sztoken[itoken++]=0;
    5 V& ?* n6 L1 ^+ W
  610.           return szRet;# C- j/ L0 h2 n0 {
  611.         }
    0 P1 u7 Q- m$ Y1 G1 {
  612.       }6 I( \0 H& G$ ~' H
  613.       itoken++;
    ( e$ }3 I, P$ |  ^& w2 c' P( v/ C
  614.     }
    # G; w! Z1 N- Y; d- V5 N) G8 s
  615.   }& B9 H% S/ v  F3 }& ^; g
  616.   return NULL;+ }9 x7 `% p' ^+ y
  617. }' G- g* N1 @" d; X
  618. ; x, L% F! H7 j: I0 c( D6 r* [' o
  619. void ProcessProc(long Total,long Current)
    4 y6 V: `, z* q8 m' R
  620. {, j" \  L3 Z+ O, \
  621.         MSG msg;
    : [4 Y) F- ?! Q3 \  j
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);; e/ x! x3 P+ c3 |( k# i
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' A3 f0 [8 n- V/ h' ^/ l8 ?
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)); s: ^( E# Z: A- |6 d9 X
  625.         {) s: J, D  e. ^0 g9 w* s: `
  626.                 if(!GetMessage(&msg,NULL,0,0))
    9 C9 _$ k$ L4 N, ]8 r9 b' L3 x! G
  627.                 {
    & S$ Y  Z  ~# e6 e6 v8 O! K& C1 b, P
  628.                         return;. A6 l% X1 S5 Q$ j
  629.                 }( m- K. C& H9 n. O: e1 M
  630.                 TranslateMessage(&msg);
    4 t) ?( V9 a: E9 P. R0 u" a! B
  631.                 DispatchMessage(&msg);1 h" T0 E, G7 {" P1 A& V& h
  632.         }       
    3 K. T; c# L: K$ ]" T
  633. }& d) B$ U0 @0 l; }2 e

  634. ' ]6 {9 F0 A$ ?5 J6 D1 v6 R. a$ m5 [
  635. BOOL bFirstChar=TRUE;+ v  `% L3 Z- o( s/ T

  636. 1 t5 P/ [4 X$ r) K' f0 V; M( Y
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 U7 {7 Y! |  e" {
  638. {. |% }4 H- x1 Q
  639.         // TODO: Add your specialized code here and/or call the base class: q. G/ x4 c* [% E9 k8 `
  640.   switch(dwProgramState)
    " G: I8 S/ P& h+ y8 O2 U
  641.   {
    # Y! M% V: y: Y9 U8 @
  642.   case AP_NOTHING:% B$ J, N# H; ^9 c. s: d4 o% w
  643.     switch(dwStartUpSteps)
    ' @  g. _- @. l. o+ {% Q/ U
  644.     {+ r9 G7 Y0 o; Q, q  Q
  645.     case 1:3 h+ Z* w: I8 F" X5 V+ I1 Z
  646.       {! y+ k* N$ f- f  A1 H) t' v
  647.         int i;
    # R! `: p# j( W4 p4 u) D
  648.         CDC *pCDC=dlg->GetDC();# [3 J3 ]4 w* u, W3 J  c
  649.         HDC hdcwnd=pCDC->m_hDC;' [$ M: R9 \9 R5 `( n, U
  650. //        Graphics graphics(hdcwnd);
    2 [1 H# ]8 o  s2 f$ C
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    , V$ A1 I8 F3 ]9 ^
  652. //        INT iWidth=bitmap.GetWidth();
    % Z: k. o- H# d8 @. _
  653. //        INT iHeight=bitmap.GetHeight();* p9 V2 D3 P; l! X
  654. //        Color color,colorTemp;. S; {& R$ C% }0 [
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& k" z  U# M+ g
  656. //        {
    6 u) V# e  s) K  `, [
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    # N: ]& Y, r, ?3 o4 [
  658. //          {
    / v% u' d4 l( @8 E) u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    " y8 Q) P# ?. z* J. `7 x
  660. //            colorTemp.SetValue(color.MakeARGB(
    : j( Q. K6 n" Z* Q6 Z
  661. //              (BYTE)(255*iColumn/iWidth),: K& y, x8 p3 f& S" p2 \
  662. //              color.GetRed(),# p$ s" z/ H) D) M3 P6 r
  663. //              color.GetGreen(),- d% M  }1 n2 ~3 V, M; ]1 h. q
  664. //              color.GetBlue()));
    , h% s; `" F' y0 ~9 G
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);+ |. E* L) g# g) C+ c7 I
  666. //          }3 C# ?6 D+ f4 c; ?* [
  667. //        }9 y+ _1 Y0 Y5 _% [8 n( E5 e, N
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ; A' S$ A) S% f" e- U
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 }7 _6 l1 W; e* ^3 p
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    4 ^0 y+ v7 e8 E' g* Q1 m8 j; ~
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 V/ Z  w& o8 f: @
  672.         for(i=0;i<240;i+=8)& R. o; N6 u0 @, K2 Q, Y  f
  673.         {9 w3 q/ ^( L  \& l
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . @7 K* z+ L+ G
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ) ~1 s! ]9 n% W$ N5 d7 C
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  W! S  u$ h1 F5 [! t: d
  677.           Sleep(33);
    0 p& f% K: o7 d3 U. f/ ?
  678.         }& w& s4 i% S" m) i  Z) s
  679.         Sleep(1000);
    3 H# m( o% v, W7 |9 q3 N
  680.         for(i=240;i>0;i-=8)- Q) [' v1 z7 O& M# X1 z9 V
  681.         {
    ; L" H: S1 o' M, \/ w; L+ o( g5 W
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( j  H4 }* c1 E( G* ~  g$ c$ k
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + [  W; s) i% N/ F0 w
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 i! h& S, j  {6 D
  685.           Sleep(33);
    2 T( t. Y0 V/ j/ S
  686.         }
    0 ^9 V% X: ?- A' N6 d. ~0 I
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    , P- i, \9 _: I( O# V7 A- C
  688.         dlg->ReleaseDC(pCDC);
    ( v6 }' n# u5 P5 G, n- F+ k
  689.         DeleteDC(hdctar);
    * ]6 A6 i# E7 G0 X4 y8 {8 D3 W. O
  690.         DeleteDC(hdcsrc);( M& S) s% w% Q8 C- S
  691.         DeleteDC(hdcorg);8 z: t+ w. z" P" \) N
  692.       }
    , L9 u6 z( ^7 l6 V9 [! a
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);: |$ X6 X' u0 `9 E
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");2 I1 P- u% s) f. V  ]9 V$ z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");  l; B8 @+ z+ U- U/ ]
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");+ ~; ^% O) J$ A0 \) m
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 y0 p& h6 ]: G( x! W  U$ ~
  698.       if(!Dn.Connected()). p) g$ ^8 W; L/ o
  699.       {$ e  j- G' _; G$ N0 j$ [2 P
  700.         dwTotalFiles=1;3 Y1 r( s" W: P' |% s8 }+ Y% }" p
  701.         dwDownLoaded=0;4 t5 R7 c' R$ A7 }3 [& {
  702.         bSilentStep=TRUE;
    ! t; W- _/ p; s  _
  703.         bCompressed=FALSE;
    ( B/ W3 t/ o/ C3 Z9 n: j& c& B( Z
  704.         strExtLocal.Empty();# K, k& k3 q+ o- ?0 H0 s5 i
  705.         strFullName="readme.txt";/ O8 \9 U/ C7 x6 E
  706.         dwProgramState=AP_CONNECT;
    9 v  c# r0 I9 E% X" J
  707.       }! i; G: t  b* O2 R  S8 X4 n
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 K( w, `5 M! s
  709.       dwStartUpSteps=2;/ ]4 ^1 K8 I% {
  710.       break;* |& }; C0 P8 Z1 |; S
  711.     case 2:( X5 Z& z/ s* N9 k; {+ U/ Y7 _
  712.       {1 w6 M3 ?- X' [1 `
  713.         int iEOF;
    4 d) g* I% b6 M8 {0 u) `, r
  714.         FILE *fp;
    & G+ \; f) r. f: X+ A
  715.         char szString[512];
    0 k" c5 _) x6 K9 W* ~* K( I; {
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    + b- F* R: X" c
  717.         if(fp)% ^- n& Q1 ]  V; o
  718.         {
    9 {0 Z; r" z+ o
  719.           do
    , j7 K# {* u" g/ W2 ~1 R9 t
  720.           {
    . J$ ]/ v7 W0 }, @8 m
  721.             iEOF=fscanf(fp,"%s",szString);
    4 c6 B' L( p9 q$ i' c4 R
  722.             if(strlen(szString))" ]7 C, t! a8 x, }- V
  723.             {
    ( t$ j( B% g& L- Q$ f9 S- {* m
  724.               if(bFirstChar)" Q' F8 x6 ?( K! w
  725.               {
    1 \, G* g4 r& z& W  }
  726.                 bFirstChar=FALSE;1 v, q) M4 e' W0 b% R
  727.                 bConnectIsBig5=FALSE;0 D; Y0 Z! ]9 m( b9 @
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
      j7 }" S- ~4 W( W- p2 i
  729.               }
    - z5 q0 w! s- @- o2 u
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    6 u% ^! z0 U' Y7 s# t1 M1 _9 ^
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));# }, U/ w4 z. s) A4 T2 {
  732.               dlg->m_ListText.AddString(szString);1 x, _1 n$ v% s: o5 w7 U
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! q% {( A  ^4 s3 I4 M, s
  734.               *szString=0;# N* ]& [2 [' Z* x. J  K
  735.             }4 `% U- P( ^4 v( [/ a
  736.           } while(iEOF!=EOF);( N0 f4 l7 N4 \. L2 _7 j, Z% _/ l
  737.           fclose(fp);' S- L/ h$ ^. ^* C
  738.           unlink(".\\DownLoad\\readme.txt");
    $ _* X$ {9 P7 a3 U) _6 g
  739.           dwStartUpSteps=3;% a, f4 t9 z" m1 K
  740.         }
    % m/ u6 K0 }; W* ~
  741.       }
    1 ^: t; h* w# f5 g) W" H2 G- b
  742.       break;
    4 e0 V6 u8 y5 m( e3 [; e
  743.     case 3:
    1 ]7 m5 Z& Y0 @8 n$ k9 p5 U' n
  744.       if(!Dn.Connected())- _0 o$ r4 x, L
  745.       {+ m7 Z: {& A8 Q/ a  L# k, l( W
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    , m3 h% p) k' r( p& M+ [, c8 e! \
  747.         dwTotalFiles=1;
    4 N+ |/ D- C1 }3 q3 M; q- R2 f
  748.         dwDownLoaded=0;
    + w4 \% [) W4 q" {* C0 c4 l
  749.         bSilentStep=TRUE;: f3 @/ Y' y5 I/ @! d
  750.         bCompressed=FALSE;0 V2 E0 E3 B7 n; g* I
  751.         strExtLocal.Empty();
    7 O0 `& ~( L- {# N1 N" a1 z  w
  752.         strFullName="checkversion.txt";
    ; [# j9 r6 [# b
  753.         dwProgramState=AP_CONNECT;& p* X, j7 P4 R; O6 f6 K
  754.       }
    0 n' O+ f) U" `% v7 A- D/ \' k: [
  755.       dwStartUpSteps=4;/ X- W5 S" u0 U2 W+ d' u( {" V
  756.       break;
    $ [: U0 o2 ^" G3 f8 e2 |
  757.     case 4:# D$ e- ^$ @( {4 j
  758.       {
    8 \8 j$ J: k9 K$ v: I6 ^
  759.         FILE *fp;$ N5 e1 N. l( |/ i
  760.         char szString1[128];
    ( k* j* Q. ^5 d! F: T9 J6 j
  761.         char szString2[128];
    - k$ v3 i/ @' J" ~( j8 {5 ?% X5 F3 q
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; V7 Q; `6 @* l& S0 L9 t" a
  763.         if(fp)" g6 ~$ S* ]$ U  W1 D7 i
  764.         {# h. h- p5 T% p% f6 t0 h9 v
  765.           fscanf(fp,"%s",szString1);
    ' d1 i! j, D2 Q* A0 e$ F: Q- i* E% Q* U
  766.           fclose(fp);9 A/ ~+ T0 `( Y0 X$ }7 l9 q
  767.           fCheckVersion=atof(szString1);
    2 e+ Q# p& L7 _- e
  768.           fp=fopen(".\\checkversion.dat","r");2 U: l8 a  Y8 S  A' h, ~5 \
  769.           if(fp)
    . w3 {3 I8 P1 S
  770.           {7 s# |3 l# m+ M
  771.             fscanf(fp,"%s",szString2);
    ( d# \1 S# j/ X+ m
  772.             fclose(fp);0 V% r+ \9 Z/ \4 V! X2 V  w; S
  773.             if(atof(szString1)!=atof(szString2))/ W9 T4 Z7 a; X9 g% J3 m% ?/ {6 z
  774.             {
    % z9 m( j$ b! d" P  t4 D  d, U
  775.               if(!Dn.Connected()), X7 E; H0 n9 A% ]
  776.               {
    * q9 f! M4 ]- l! }( v& Y
  777.                 bFirstUpdate=TRUE;
    0 Z9 e' I4 ]0 ^# c1 L
  778.                 dwTotalFiles=1;
    - m/ e: i; w- |( \- f8 I
  779.                 dwDownLoaded=0;
    9 ?; [  ^* W+ d4 L
  780.                 bSilentStep=FALSE;. E7 D7 U3 h1 f& C
  781.                 bCompressed=TRUE;6 _+ ~. U5 `9 v, x2 y
  782.                 strExtLocal=".\\DownLoad\";9 a0 X9 h2 \& h" g' H+ |/ V) T
  783.                 strFullName="update.txt";
    0 |  O" N7 N- K, K
  784.                 dwProgramState=AP_CONNECT;- D, C+ s. b! ~. W3 m
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 W4 q# e3 A* v' b& ]$ ]2 Z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      n- _7 [- a6 S% U$ {. z' ]
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");* `' Q4 U; L1 k, l# _/ U1 T

  788. 7 i  ?# {" Z% Y: X3 ^0 @# ]3 t* w
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) O( ], e; Q0 G, L+ d
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ( Z2 g% F- Y' z6 H0 p4 z  g$ l$ D8 V
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    3 e9 p+ K& U0 \  J' ~+ I
  792.                 {; _/ ]  F% R* B' N) [
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");1 G. c  N8 t# W$ K+ ?
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ) S/ H0 b$ ~' ~/ ~
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    6 ?& ~; ~4 \$ ?# ^+ t$ Q% v- \
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( k, O1 Q% R2 J% ^  F4 Y0 r6 _8 i
  797. 0 B# B5 S; I% }1 O7 ~% ^
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! X  F% y) D- V7 H+ Z7 b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# A1 ]7 g% w( ^$ J& F' j0 O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    + Z2 u) \  S( P. u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - D- K4 M' o7 o& ]6 N0 i3 V& k
  802.                 }
    ; v* ?; u( E! q
  803.                 dwStartUpSteps=5;# d# K% ]4 M% [! G4 K# R8 U# V$ q4 C1 X
  804.               }3 ^4 {, N- W8 H
  805.             }
    9 M, r/ ?( ^/ m4 Q' K: k# [8 A! W- T
  806.             else6 x: h: d2 G! {9 p9 _8 ]
  807.             {
      n  @. p3 P# Q) ]
  808.               unlink(".\\DownLoad\\checkversion.txt");( J1 [' e2 N: d# T7 m$ |
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    2 g! I6 C" t9 s4 |2 r8 p! W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 x( K- S( Y1 R1 w
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" z. I: S9 Q* P

  812. $ i, B" M0 P% D3 f& S
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / b  g. V/ P& k: P# q! H# P' g7 @
  814.               dwStartUpSteps=99;8 [+ E: _: T# r( \, q( q# p" u+ j
  815.               bFinishUpdated=TRUE;: G' s% S4 O, A- d7 d0 b, ]' Z0 ]
  816.               bCanUpdate=TRUE;! N; i" Q6 m( }3 D
  817.             }
    / o8 h* Z& Z8 S& G
  818.           }
    ( |8 _# B* \2 t4 F) ^
  819.           else
    & w/ z6 q  Y7 v0 Z$ a7 x4 N
  820.           {
    5 e% c: D0 ^; G, L: c! V
  821.             if(!Dn.Connected())
    1 G+ {1 c/ ~! K4 o; H! K8 b
  822.             {/ q. s  f( e; G. q% U' I& ~( \
  823.               bFirstUpdate=TRUE;8 _  @4 O4 W3 X) e
  824.               dwTotalFiles=1;$ l, f: e) D/ f) ?, z, H) f) n* c
  825.               dwDownLoaded=0;
    : C% a/ c/ i1 n
  826.               bSilentStep=FALSE;
    * V' N* E) q- d: P
  827.               bCompressed=TRUE;
    0 T: o; H, f6 K, Z
  828.               strExtLocal=".\\DownLoad\";
    . H0 @9 P4 A' f4 u4 m) ?2 ~% ~6 W
  829.               strFullName="update.txt";
    / c/ L) D* u7 S; C9 E3 k$ U: [" H
  830.               dwProgramState=AP_CONNECT;3 X$ A, h, j1 K, {7 g4 r; _
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 d4 e  Q8 g5 @
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 n& a; N+ r8 G/ g9 p( K! C( C# Z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 }7 q0 l: |) ?4 V7 Y  H
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 P  [2 S3 Q' S8 w: ]5 J5 Y! A
  835.               unlink(".\\DownLoad\\checkversion.txt");
    " g* Z2 a' y, P1 A1 [
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)( j8 R7 Y2 @0 N2 @: r' Q$ ?7 z, B0 e
  837.               {
    5 B' d9 i6 c/ R% y( A% z  d8 a
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");8 {: f1 c* r6 [  ?/ z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");$ Y, ]" m" m2 d2 R- s1 q# C" @
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    / ]4 J6 D' {! t/ R& d+ _" y9 H
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 E8 Y0 Y2 I* b
  842.                
    % f% k3 V$ ], B& ]) M
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . }- z: F- ?  x7 u' v$ f( s
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % C, d5 Z$ D3 x5 S# l( \
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");7 M+ m5 ?# W6 V; p9 U: l
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  c1 E; f+ [# a: p# a5 H8 H1 k* ?1 Q
  847.               }% S; w* M; H2 ]) k& N& z' _3 j
  848.               dwStartUpSteps=5;
    ; n3 c( L+ v) |4 g) A% e4 X
  849.             }
    / @2 p1 o; y8 F1 }4 D
  850.           }
    - [6 M* c' b1 f0 f& S6 e
  851.         }% J0 s' x2 H9 [
  852.         else0 c- h8 ?7 O( d- f6 ^( ]
  853.         {
      F$ b: r& J9 {& H7 O$ u) y9 R
  854.           dwStartUpSteps=3;
    ' K9 j) v$ C* t4 t
  855.         }" T" L! V& s. [1 n) t8 X
  856.       }- E) o0 R/ ~% `& ~) H7 D6 w
  857.       break;. C, Z; k- b/ x1 E! G. `
  858.     case 5:
    0 |' M1 m% v& @3 V
  859.       {
    : x- B- U) j1 Z6 g+ P
  860.         if(GetFileAttributes("Wsa.zip" )!=-1), ^' I6 l+ Y4 L7 [/ V; w! V. P
  861.         {0 b& j# m. W, z5 ?  k
  862.           int opt_overwrite=1;
    - H/ o9 P# B! Z0 t4 d; T. A
  863.           int opt_do_extract_withoutpath=0;
    9 ^$ c9 F7 Q; t' z# I( _& k
  864.           unzFile uf=NULL;
    4 \' }- |( v6 ?6 Y
  865.   C3 r$ s, W9 ~- C4 J
  866.           uf=unzOpen("Wsa.zip");
    2 Y8 Z# D# @/ c5 R( d" t6 D  y# k
  867.           if(uf)' s( F. B- G- Y. _$ d% z# p& G
  868.           {
    2 r1 x7 Y" f# O# D7 b& o  t: C
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    , {* c' T" T& B- K; j/ v
  870.             unzClose(uf);) t5 H* `; ?1 `, }9 s' s
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");0 ], H* Q* D( Q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    9 I+ O  Q6 I) D7 P5 s3 ^
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");; g/ w/ \' [; n% x6 v1 u4 Y# J3 a
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 b2 L$ s2 z, r- x- ^5 |: k3 `
  875.           }
    . F3 l* r& G5 J
  876.           DeleteFile("Wsa.zip" );
    9 B$ h$ e8 f, S+ V
  877.         }
    . Q. h. }/ T  a+ W. g  q6 ?

  878. - P5 e) j& q$ e- ~& W( b
  879.         if(CheckLocalVersion())
    - s. f/ v6 X- u! i' i4 U* U
  880.         {( o5 _) n( Y" t$ A) }9 ]5 U
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");1 W) [/ S, N, V2 ]* C# M. q8 q
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");" _1 [4 L/ u3 p
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    & t1 T! v; G& n! m+ R0 O
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 c$ k- [: ], {) S
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);  e& g; I- t* i7 S! h
  886.           dwStartUpSteps=99;
    & t0 S$ }+ C7 V
  887.         }+ _2 A& D& y/ \# L5 z
  888.         else
    & j, z) G4 Y/ e( {4 l$ z6 U, |5 P
  889.         {* Q2 {" ]0 N) m0 V- F6 r; Q
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    1 _- D5 @" K- L, H( h
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % s) s( Z7 k" r7 X$ S- E; K$ ?
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    & y: W. E9 q8 p: ]

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

' ]. R- ^8 j# L$ D" c
8 {) v% V0 t6 ~

評分

參與人數 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客服返回頂部