CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
; s* F6 d. t2 Q1 s2 d
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ; ]: h3 E5 k% L  o1 R8 u0 W
  2. //
    , B5 c" o; D9 A
  3. + |2 u% [- _2 Q$ C
  4. #include "stdafx.h", \6 j+ S: e/ k

  5. 9 Q" ~8 J' g7 y5 ^% j+ c9 w9 W
  6. //#define UNICODE
    ) s8 w5 p8 G% D! M) s. f
  7. //#include <gdiplus.h>2 @: ?/ Z! W/ [' j
  8. //using namespace Gdiplus;5 f4 s; ~5 J2 r# ?" @$ O

  9. 7 T! n/ U9 n9 {% F3 t
  10. #include "RevApp.h"% n2 K: @1 P9 l' i; @' q& \, o
  11. #include "RevAppDlg.h"
    + w& A. ~8 Q5 A/ B( R" E

  12. 3 B6 _5 m6 O! y" z7 h- A
  13. #pragma warning(disable:4786)
    ) H& \9 K0 s" u
  14. #include <map>4 P4 m  P( D' z. x' H6 o/ ?
  15. #include <list>
    - n8 u4 y) @0 M1 t
  16. #include <direct.h>5 k! `' A8 {; r; E0 y6 @

  17. $ F8 x5 [; f0 u/ G0 F) B
  18. #ifdef _DEBUG
    + Z% ~$ a# r# ~
  19. #define new DEBUG_NEW1 ]: j) a$ Y* N% ?, @
  20. #undef THIS_FILE; r# L5 K) Y( L% k: H* {3 k$ m
  21. static char THIS_FILE[] = __FILE__;
    . v) x. }) t# j6 ~% ?
  22. #endif" a% e' v8 q6 c( g! j
  23. #include "SkinResDef.h". ^6 ?+ d: |' B0 A/ K' J2 _
  24. #include "ChangeBG.h"+ W2 ^* _/ B8 d7 U
  25. #include "AFXINET.H"  n9 ^3 }2 ~4 y

  26. . `+ I6 z8 j: a. r% f! h. Q
  27. #define TRADITIONAL_CHINESE 07 j8 W9 p5 V& g- }$ t: o
  28. #define SIMPLIFY_CHINESE 1
    / z% b& x9 N. O- ^3 R
  29. #define ENGLISH 2
    * A! L3 f3 p  W) v) V2 F6 \: `
  30. int m_iLanguage = ENGLISH;
    ( j0 e/ O6 W' P
  31. /////////////////////////////////////////////////////////////////////////////7 Y8 {8 Q5 W4 v' R
  32. // CRevAppApp
    0 B6 f8 i- a+ c
  33. : ], Y" ^' t# f( a/ Y/ ?9 ?; r
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)9 [: D( N: s& E) [7 C
  35.         //{{AFX_MSG_MAP(CRevAppApp)" c1 u  |( y8 V+ Q& E$ h$ I" L
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 P% R; r- F1 I0 W% T2 I" [
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!" G/ }+ Q- U' g2 u6 |9 l) D
  38.         //}}AFX_MSG
    / F# j1 l# w6 L2 t$ [
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    % J) c, A. J4 H: T& F- k
  40. END_MESSAGE_MAP()
    / |8 V+ T2 }# Z4 K2 U: F) L; {8 x
  41. ) x& T; U) o& T& a) d
  42. /////////////////////////////////////////////////////////////////////////////
    5 H; _' C: m+ O/ m
  43. // CRevAppApp construction1 k1 s% B' X) B9 G$ x8 K% ]
  44. 5 Z8 V- U3 B1 J* l# L
  45. CRevAppApp::CRevAppApp()! `& ~' u% [! K4 m9 @" X! P! j& \
  46. {6 t* }5 w; e6 T/ ^$ O1 P
  47.         // TODO: add construction code here,
    # K: ~+ f( [1 R$ B$ B  F
  48.         // Place all significant initialization in InitInstance2 @1 t/ X0 c5 y4 b: z+ Q
  49.   bDisplayIsBig5=FALSE;% @8 U7 i% p2 n1 D  `' z. Q
  50.   bRestartUpdater=FALSE;* G9 J' u" a, k# K
  51.   bFinishUpdated=FALSE;  |# Y! Q; l( p/ L7 M3 ~; X
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 X7 \6 R2 A& _# p1 V2 x' p  V; p
  53.   InitChangeDataBig52GBKS();
    2 c8 f' l3 ^) d  b" h
  54.   InitChangeDataGBKS2Big5();% y  B+ p- n3 b: K7 s
  55.         //" |# |2 s; |. U: f+ c6 ~5 h& k
  56.         bClickRunExe = FALSE;# x+ a( ?, D) `$ B
  57.         //8 ~* X' [( {! m2 O! |, N- o
  58. }& m) J$ }' N: a3 K2 r3 q

  59. " J% r: ]/ _$ P
  60. CRevAppApp::~CRevAppApp()% f. k) B7 b8 y
  61. {4 S. s$ F: ~. ^+ A
  62.         // TODO: add construction code here,
    5 J5 i0 L4 ?5 i3 }2 o
  63.         // Place all significant initialization in InitInstance. X9 F- N# R: ~: s
  64.   EndChangeData();8 |+ U; B; t% O6 ?5 w  ]
  65. }5 n0 I$ p" y/ t( x
  66. , s+ R8 B6 c& E9 z5 U
  67. /////////////////////////////////////////////////////////////////////////////& r; G* Z% U" ^0 s2 m
  68. // The one and only CRevAppApp object7 G( _  P* M/ z
  69. 6 X; J5 f, v1 B/ L
  70. CRevAppApp theApp;4 A& {7 f: V% H: b  F
  71. & F; @# D* Y( e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
      O, U8 S1 J) @* O* E3 A
  73. {
    * @1 N4 \* j/ r% L6 f* _
  74.   int iEOF=0;# h- K$ q% m1 G) W0 G
  75.   char szTempName[MAX_PATH];0 |+ G  T, c, ~3 w
  76.   *szFileName=0;5 h* C7 V, `0 @9 s6 n7 t# i6 F$ r; K
  77.   iEOF=fscanf(fp,"%s",szTempName);
    $ x2 u9 e- h4 F/ {3 I+ n
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')5 R- y+ {0 f' X2 I- n
  79.   {  ~9 a) O& W3 m
  80.     strcpy(szFileName,&szTempName[1]);% q* y1 K) E* A: Z( y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)9 R6 Q+ T7 Z4 A  R) P
  82.     {8 ]8 `1 X- t0 i$ c# _9 Y' G
  83.       iEOF=fscanf(fp,"%s",szTempName);5 N, d, w2 v$ B% }9 Z# k  j; W- M
  84.       strcat(szFileName," ");( l$ ~4 \7 o5 Z; D
  85.       strcat(szFileName,szTempName);
    5 Z$ n6 T9 I9 {. `3 \
  86.     }
    # b/ u" L) }$ y) p% ~7 @% d" Y' v. {
  87.     if(strlen(szFileName)>=1); x; O2 {, ]  d- k* e& C/ l2 ]
  88.     {$ B5 n( h8 I. Z) ?/ S$ K: s
  89.       szFileName[strlen(szFileName)-1]=0;5 r* E/ G) b/ C# l/ F( H
  90.     }! f( P6 v( k7 }% {3 Q# m5 f
  91.   }
    ( M# ~2 }: r* L5 o) ?  p5 ?
  92.   return szFileName;
    * Y: c: G% v7 X4 z* G
  93. }
    9 K2 H2 P4 ^5 e0 e* H

  94. ! G! @! p6 v# L; r
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)/ `/ I1 U) `7 M( k/ X
  96. {
    2 ~/ i4 ]# j0 }; p! n
  97.   FILE *fp;
    4 v; W' _, f$ {5 F" R
  98.   char *key=NULL;
    % T9 P( _  ?. Y% i) O, Y. Q8 n
  99.   char version[MAX_PATH];. g$ B' E; ?* f/ z3 C& `
  100.   LPUPDATEFILE file,olds;+ ~* h) G  f( z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" Y' g. F+ y+ z

  102. 3 b3 U. }" b$ f5 `# j' m& a
  103.   UpdateList.clear();% l6 l- A) i* f% Y
  104.   UpdateFile.clear();4 e; }8 U2 x( k8 `7 E' r) a
  105.   if(GetFileAttributes(filename)==-1) return false;; Q6 \  T" C! N( K) o
  106.   if(!(fp=fopen(filename,"r"))) return false;/ |9 f  N3 J: r/ I& k2 e: o3 X
  107.   fscanf(fp,"%s",version);; Y1 c/ H$ i& F9 j
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    5 ]( d$ K9 d5 k+ f/ ^
  109.   while(fscanf(fp,"%s",version)!=EOF)* D4 C( J0 M0 |; T3 E; w: {
  110.   {
    " {, ~0 d3 W9 I
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 j3 P. Q; S/ M+ S0 b7 h3 O4 J
  112.     fscanf(fp,"%s",file->path);! u0 ?8 L6 T1 L; z, ?6 Q( v( [
  113.     ReadFileNames(fp,file->file);. x% t7 F: r* ~2 M: |
  114.     strcpy(file->full,".");' f% p0 [! b# q* J
  115.     strcat(file->full,file->path);. j1 O9 X0 J  Y3 `! Y: X- x' f
  116.     strcat(file->full,file->file);
    8 L) g; Z8 q' n; {1 n# `5 w
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())8 L. f2 D) c& ]4 c  `" F
  118.     {
    * ~6 K; _5 o* t( B
  119.       file->vers=(float)atof(version);- s" M6 m/ w! D8 m  F7 S7 E
  120.       UpdateList.push_back(file->full);
    ( {6 `, W5 b- s9 h& u' o0 @
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; K4 ?) Y3 e" t* C8 c& v; g
  122.     }
    ) C) l3 X0 U" q3 J
  123.     else% R& q0 n! Z' @! s. K9 p& d$ ~
  124.     {( ^% e- {* A+ f$ R6 u
  125.       olds=(*p).second;
    4 n& i4 Y& V, ~8 I5 l" K: B( h
  126.       if(olds->vers<(float)atof(version))/ J' i- l+ f# d4 \! s. k% e3 W
  127.       {
    ' g8 Y# K* c9 A0 J' ~: r
  128.         olds->vers=(float)atof(version);9 n/ J: N! S+ S, h8 p6 h/ u( _
  129.       }
    $ W" d6 f2 a4 Y$ o8 D3 a: _
  130.       free(file);
    6 h. b- J# v* c4 }4 z# m& \
  131.     }! r7 C9 a" l. j; L' D$ U
  132.   }4 u; a. Z' D' |( X3 Q
  133.   fclose(fp);& C, o8 Z, d9 x6 ^9 K0 v
  134.   return true;) Y4 x" x+ O1 _6 J9 |! r9 B7 e. P
  135. }
    8 m1 Q1 A( J$ n0 F& p6 U7 o+ f
  136. 2 u5 I& b6 p6 S+ D6 @3 P
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    3 I( ^& U+ ~# y. H/ Q- k& B
  138. {
    ' z. z6 t% |6 y; ~- k) o4 @, e8 I
  139.   TCHAR  szFull[MAX_PATH];5 r7 ~( g3 y, e, j
  140.   TCHAR *token,*inter;0 |' c$ O; w; t3 u
  141.   *szPath=0;# M. S5 u8 O3 }/ b( y4 s" K
  142.   strcpy(szFull,szFullPath);& D! d5 i) b5 q4 p7 e7 p
  143.   token=strtok(szFull,"\\/");
    2 E$ o* W& V' f
  144.   inter=token;
    + N: m  z1 w' C  J: c% p, q
  145.   while(token=strtok(NULL,"\\/")), ]0 a$ V, J" w* d
  146.   {; n6 g: y7 y) D1 V6 }: Y; |. W( @
  147.     strcat(szPath,inter);
    0 P" ^( h6 y( X: ^: l
  148.     strcat(szPath,"\");
    ; p  m% E  V" D( u, }
  149.     inter=token;7 ?) i9 L# m- P. h* v4 g3 i
  150.   }
    7 b% C/ ~. s( y; b4 D. W5 a
  151.   return strlen(szPath);
    6 Z: G' Z5 D- L0 O
  152. }# t1 D- k- T) d6 Q

  153. . |& F* O; ^+ E+ }
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)7 H* \5 v7 ^: E5 D( |% ?1 O4 A
  155. {- q4 p9 m( D  s9 k: k) `( t5 V" O+ [
  156.   DWORD attrib=GetFileAttributes(Target);6 F/ d, H! p7 s  R' w3 t$ i& ~2 w
  157.   if(attrib!=-1)$ ?. {! K3 Q" R
  158.   {
    $ e, t% y5 V) |# s0 f0 @
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    & p' U. \' e$ z/ w- f8 ?
  160.     {
    ) h& J$ h. X: z( x$ f2 a
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    2 n9 Q2 N  R/ Y9 l# b( k
  162.       SetFileAttributes(Target,attrib);
    9 ?2 e8 l6 Q+ r# i$ v2 c
  163.     }5 D% m. Z9 r+ P8 J: ~
  164.   }) Q; C, R' E  F* j
  165.   CopyFile(Source,Target,Erase);2 L- ~+ U2 x7 F. z- g
  166. }% B+ w: G3 a$ R# t' @

  167. " ?$ E& T5 p$ W- S0 X# q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)" n1 R- k  I7 u+ g2 H# P
  169. {5 c3 K; u/ n/ V
  170.      FILE *fp;; Q0 u( |7 z2 t  x7 v0 e7 V: b
  171.      char  szBuffer[8192];
    8 s4 q; y9 p4 h2 E0 v( r& U9 I
  172.   va_list  argptr;
    + j0 ^0 r3 E7 l* U2 Q2 O
  173. 6 n. l$ s" K) Y% D) T3 n& `
  174.         va_start(argptr,message);
    ! @9 e$ B  B0 e/ L6 W4 J
  175.         vsprintf(szBuffer,message,argptr);: K: v) c6 f- y. q4 U# X& ^
  176.         va_end(argptr);* F. E, {/ a: K2 P" x* N" Y2 `
  177.   fp=fopen(FileName,"a");' `6 _; ]. r+ O5 ]( G' j7 b/ j3 J6 o
  178.   if(fp)$ M. o9 l" d) r+ ?+ @
  179.   {
    ' t/ F2 m4 F# @
  180.     fprintf(fp,szBuffer);
    & D5 j. N* H. n$ _0 A9 _6 P" D; k# D
  181.     fclose(fp);: k: m; o& |9 U3 w: C' {
  182.           _flushall();3 Z/ k8 O7 B* a
  183.   }2 z  T. T2 ^) U# U
  184. }& w# X" V1 _9 p) _! O

  185. 3 q  u6 x+ D/ ~0 ]( M: ~
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ! e& I2 D) Z3 u
  187. {
    3 }9 S/ E1 B0 w' V) z9 |
  188.      FILE *fp;
    " v9 t- U: L! ~3 k. U$ x
  189.     DWORD  attrib;/ y; V. O' ?% P% R
  190.   attrib=GetFileAttributes(FileName);
    6 H: s0 F! L+ P. x7 s7 m, D
  191.   if(attrib!=-1)
    $ D, A, b' O1 n0 O  G) k4 |8 D0 x  @
  192.   {" }" Y2 y! S5 O: ~7 C
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    : s  T) V" [) E9 p9 ~7 `( A8 x1 a8 w
  194.     if(!SetFileAttributes(FileName,attrib))- y7 x  q9 ]+ S1 O! S5 N
  195.     {
    1 |5 L4 ?2 c0 K" }" P
  196.       return FALSE;
    1 e+ q  }4 C, s  F7 S: q# ~' p0 W
  197.     }
    5 R/ @  B. K# P' q0 `' V
  198.   }
    / m' W( C+ V4 Y+ D. }* R  L8 t
  199.   fp=fopen(FileName,"wb");
    % m* X+ m8 X7 a* e  q0 f0 _
  200.   if(fp)
    ; v; v! ?  m, S8 ^2 a
  201.   {% @. R6 w: T9 }" W- o+ P9 Y9 s# w# _
  202.     fclose(fp);) g( ~1 Z* }+ o, }+ `
  203.   }
    % o% a, O2 p' N* y' Q
  204.   return TRUE;4 E  [6 C6 e+ ]9 \
  205. }9 H2 P" f5 ?. D$ h# g

  206. ( g/ I  ?3 m% O
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    8 p- B5 |: T# s8 q
  208. {+ n$ [& k  |% |" K$ R
  209.   char filename[MAX_PATH];
    . W' {+ n3 _' a* x+ l& S; u
  210.   LPUPDATEFILE file,olds;, R3 E0 j, C+ L6 X- Y5 _8 `. R9 n7 E
  211.   std::map<int,CString>::iterator i;
    . l2 d1 G4 z4 z
  212.   std::map<CString,LPUPDATEFILE>::iterator p;7 l7 z3 u+ A; v7 W5 [3 P! `
  213.   std::list<CString>::iterator l;
    & Z2 x, S6 O! ~% W) K* v
  214. 8 H) R) x! U/ U$ y- `
  215.   if(bFirstUpdate)
    : `' @& o; C/ ?/ ~% z% w
  216.   {
    : H, _7 n: v# n9 v3 J  }& {0 ~) U
  217.     dwCurrFile=0;9 [8 G, |9 V% _
  218.     bFirstUpdate=FALSE;
    8 W6 p3 H% O3 A& u6 W
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 G( ^9 H9 g, }
  220.     {4 d& I7 {' {! j$ [
  221.       dwTotalFiles=UpdateLocal.size();# x) H" p/ P; M% R- `9 ?, a* A
  222.       dwDownLoaded=0;
    6 ?: d9 T+ E2 Q+ ]* a# f& ^
  223.       bSilentStep=FALSE;
    ( K# p( F( u  E
  224.       bCompressed=TRUE;
    ! B% H4 Q& M0 I0 k; \
  225.       strExtLocal.Empty();
    / T8 i2 Y" I3 X( W
  226.       strFullName=(*i).second;
    * c/ V" Q0 M  R1 M6 `
  227.       dwProgramState=AP_CONNECT;
    / W  [9 A5 ^5 S" U" `9 `( ?
  228.       return TRUE;
    0 n& j! d. B/ P+ \' E% z
  229.     }
    / o0 z/ o0 f# t) d. B% P
  230.   }
    1 p5 Z# V4 s9 q3 l  U
  231.   else if(bRestartUpdater==FALSE)
    # T7 d7 v6 N# _( {% [7 M6 P' v
  232.   {
    * m; l7 }! S8 J  w( x+ M8 G
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    0 K4 ?: Z7 [/ g, ^; Q/ u
  234.     {
    8 G) [: J7 g1 s8 z
  235.       file=(*p).second;
    ( j  |% e# X' W8 q# `, K6 `: j
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ; @5 r' }  ?) _; D
  237.       {
    . M5 c/ d9 x; p: z  }
  238.         olds=(*p).second;
    ; Q- @  t# \+ l3 p. M+ j
  239.         olds->vers=file->vers;$ ]3 Y+ ]+ w- x
  240.       }
    : V6 B: H& Q# l1 j- X# P1 q" Y
  241.       else
    # h0 ~' |6 h; e" h4 `# O' s
  242.       {
    6 g" ~- |7 V( Q+ S* }
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; [6 f- _5 P' y1 a
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    - h$ Z7 ]9 j- o: p  T! I
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));, E! f+ l# l4 y( l
  246.       }
    0 e% C, B" Q  |9 s3 s% O  y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    5 Y* w  [. S$ [
  248.       sprintf(filename,"(%s)",file->file);
    ! i8 @$ d+ a9 Q2 @* Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* p: j% q  a& w: h
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 R: M% @8 @% i6 ^# n
  251.     }
    3 r9 s5 L* S: E2 [% I; g0 V  U9 C
  252.     dwCurrFile++;
    ( u$ w9 m& {% T- |
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* i9 K" J; w( L: U8 b) {4 \' \
  254.     {6 e1 c6 F' n0 k" x/ }* J
  255.       bSilentStep=FALSE;
    # X5 Y3 Z5 L: Y
  256.       bCompressed=TRUE;
    ; v0 r! ?4 j2 x" z. [0 b8 ^9 h
  257.       strExtLocal.Empty();
    ; n. \$ u) A; A$ }) h3 ^$ G7 P
  258.       strFullName=(*i).second;
    ! d* B( t2 D! N
  259.       dwProgramState=AP_CONNECT;
    2 K$ \0 Y6 i; S- g* M
  260.       return TRUE;$ Y" C- c3 E3 @" f
  261.     }
      v4 ]- S* F' J: f& {
  262.     if(!bRestartUpdater)
    3 y4 G1 W! x! L, i9 W8 l3 t9 r
  263.     {' j$ A) c/ Q5 [; t
  264.       int iCurrSize,iFileSize;
    ) k- T; [! m: M# ^, \; [7 b
  265.       iCurrSize=0;
      @% `+ T( q/ G- }$ k3 a
  266.       iFileSize=UpdateList2.size();
    $ y5 n8 W2 o# E+ X* V. x- R
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    * h) [7 C0 Q% T7 [9 U+ i( {0 w+ ~
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");% A' J0 D( q+ @( ~8 I, F8 Q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    9 f7 E7 o/ }0 a/ j5 V$ J
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - d7 ~# A1 C% a3 c" b, c3 W) {
  271.       Fclearf(".\\update.dat");
    $ T( C3 q% Q4 R2 G% {7 X- [; b2 R4 q
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    9 s& k# L/ O7 @2 r
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! g3 I8 e  }9 F! j7 W% j1 T/ m
  274.       {5 a7 T# \9 m( R- n/ a1 C
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 j. G0 w; L* k1 m$ N" B/ {
  276.         {
    : T. f0 s9 I6 o8 T. o( I
  277.           file=(*p).second;
    3 t" @2 F7 h! j0 u
  278.           sprintf(filename,"(%s)",file->file);
    ) l0 _: k3 z3 k: x( n$ M* \  U
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; L, }3 a' O# Q8 M8 J* o
  280.           iCurrSize++;. ~' d% F* |7 e* {$ k: C! ]8 K
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) D( M4 ^% ]& I+ e1 D/ D$ i
  282.         }; e3 x: v7 Z6 u/ x3 Y- N
  283.       }
      N5 m6 ?, Y$ d" T
  284.       unlink(".\\update.txt");5 P/ Y% @  Y  K- ^! P0 G$ E" a
  285.       unlink(".\\update.tmp");
    4 g% `/ G) H" L( ~5 p
  286.       Fclearf(".\\checkversion.dat");0 W- Y3 N; w5 d# {/ G6 O+ x( S
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);8 t0 o; ~6 n! x& ]
  288.       if(UpdateLocal.size())# d" o* G% O! U; E) w; q4 |  B
  289.       {
    - }% B" ~: k+ P6 h, Q0 @
  290.         UpdateLocal.clear();
    3 @6 j; N0 P8 i2 d2 E0 Z) A" r7 _
  291.       }
    $ q! d3 l/ B4 O( |0 Q' Z  E
  292.       if(UpdateFile3.size())
    ; Q7 T+ f+ |/ u) W
  293.       {
    3 e( O+ Q7 u4 t9 V: D+ b: Z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 Q0 g1 T5 ~! Y- d# ]+ `# S7 U1 a
  295.         {
    # j6 d- A; J3 v( I6 `: ~8 c; P3 y
  296.           file=(*p).second;3 z" \+ r3 n' p+ M
  297.           free(file);% N7 e, ^( n/ k: k% @  A
  298.         }) P3 ~; p) ~$ M" V2 k
  299.         UpdateFile3.clear();2 g# E, r9 Q3 ]' O9 F8 F( T
  300.         UpdateList3.clear();9 f; h8 Q" b! a0 |' n$ O
  301.       }8 E/ z! a8 o7 t# G! D4 W
  302.       if(UpdateFile2.size())
    1 r# y# }, t# t: C
  303.       {
    - D# ^/ U- X4 v
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - x' b- [+ Y1 W
  305.         {8 w' _: Z2 D( g6 B
  306.           file=(*p).second;
    7 B# L4 T* }7 H
  307.           free(file);
    8 C' f3 B$ G0 K( k5 j2 e
  308.         }! S! J' Z, h  x7 k& f
  309.         UpdateFile2.clear();. B& O5 P" R; a* V0 p( ~- w% T/ e
  310.         UpdateList2.clear();8 e- Z% j  E& W! q, S" a1 z, K
  311.       }/ C4 W% a8 k. T( O' I' S# M
  312.       if(UpdateFile1.size())7 L, W' V" I- ]8 S2 E/ Z
  313.       {
    ! P  O# }9 Z( a( {% O# S
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    1 T* L- `9 ^: w( P# N
  315.         {
    . {$ e9 I6 N  P# s1 P7 d
  316.           file=(*p).second;. @" ^( t" ]" n. m/ M
  317.           free(file);
    0 \5 t! [) ^: v" O' R) s2 S* U
  318.         }% |, r. q* `) ]4 c& N
  319.         UpdateFile1.clear();
    ; d2 a/ h$ [4 M5 z' [8 n% v8 l
  320.         UpdateList1.clear();  c' b8 t( l% ]( P' R* Y! Z
  321.       }
    ( {! |8 W4 W9 c/ B6 M
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & G5 k+ h7 f9 a1 M1 v5 @; R- V
  323.     }
    , F9 c3 P# [- E2 n5 @6 I
  324.   }
    # s1 j- }$ }. a! f8 q
  325.   return FALSE;1 `+ X( I8 x0 S4 ]& h) A( D; {) b9 q! z
  326. }
    ( v7 V1 V( L+ i- }1 f9 h% l
  327. : B& @3 K/ m" P( i! p/ ^, d# ]6 J6 B% B
  328. void CRevAppApp::ClearAll(void)
    / I" g* ~. |) W8 i; [4 b
  329. {
    0 }; N5 {$ m) E2 s
  330.   LPUPDATEFILE file;0 V" X' V0 k! @. q0 A( j$ u: j
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% C! F8 v9 v/ T8 D, S0 d6 K+ O. c
  332. / G9 K6 [3 F, H& C9 X/ |
  333.   if(UpdateLocal.size())
    , w/ Y+ b9 [4 [* B8 v  E
  334.   {
    % I+ m5 i, m4 h. ?6 Y, U$ Y# p
  335.     UpdateLocal.clear();8 |/ W3 a( e; z6 f5 M. L1 d  I
  336.   }
    4 W/ e  t5 f( o6 D3 H3 Q
  337.   if(UpdateFile3.size())3 V+ n1 n0 p; {9 y- i( S
  338.   {+ v) `: d! _" _1 i. u
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . t' N9 S) f2 H8 G/ Z
  340.     {+ k3 h! e7 E  d2 C, u6 ]
  341.       file=(*p).second;8 N' B% P  Q2 v+ Y* L3 Q$ J
  342.       free(file);
    - z8 _) t+ p1 S
  343.     }
    4 n; y9 L6 c: C
  344.     UpdateFile3.clear();
    - |" d0 Q4 q& ~% o: I, [9 Q1 s7 [
  345.     UpdateList3.clear();( e/ t$ P- h( n: B, j# p9 [
  346.   }9 [' _, H& {4 g6 u# l# C/ i7 `* s
  347.   if(UpdateFile2.size())0 D. D8 a; {5 o" w3 E: E
  348.   {1 b  u/ _; ]- P4 p! Q# I4 B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); c, ], Q$ q4 F8 c, x9 T4 O* Z
  350.     {
    1 w; |6 t; `6 {# c  n  G
  351.       file=(*p).second;5 h* Y/ D( x& z2 I" Z
  352.       free(file);
    0 O! H1 ^$ }. c8 l( {0 O
  353.     }5 K$ F9 D. S7 @
  354.     UpdateFile2.clear();
      r( Q8 ~* T/ D& r6 M( Q7 a
  355.     UpdateList2.clear();
    / @8 z; N8 ~* ?! a. v8 X5 U
  356.   }  o6 A" o, v/ [6 M
  357.   if(UpdateFile1.size())
    3 h  f  A8 h) O6 |$ ^' p* Y' R" t, `7 h
  358.   {
    + S! Q8 c- X& Y; a4 \
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 e! k2 q1 r9 r3 _3 n3 T/ L6 R5 ?1 U, k
  360.     {% Y7 Q3 b, h2 I$ B# [( c5 Q" b
  361.       file=(*p).second;  ~+ A6 g% n, P/ h+ p
  362.       free(file);5 T: e; j5 Y0 [. x
  363.     }% [7 W" M3 a/ N& A
  364.     UpdateFile1.clear();/ Y" |) p$ q5 Y2 {, E" W5 l
  365.     UpdateList1.clear();- n9 b/ A# c( t0 d6 y5 g& Y
  366.   }
    & l6 s2 f5 A$ M) O1 @# P- Y# A
  367. }  0 U1 s1 m( r* x+ i, r9 n- a& w1 o/ @
  368.   
    2 i# z" S. N3 ~
  369. BOOL CRevAppApp::CheckLocalVersion(void)" Q- V0 B6 t; a2 s) D
  370. {' u2 t2 K% O8 B0 f  `
  371.   int c;9 C8 i% |" V5 E( @! p. j1 Z( b
  372.   LPUPDATEFILE file1,file2;
    / p/ {) Q$ }5 ^
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;0 C0 H& l; L8 N4 ]) I; K( R
  374.   std::list<CString>::iterator l;& Y4 e/ p( W3 D2 K" j& j
  375. * `$ X+ p0 A. x0 A  V# A+ c
  376.   UpdateLocal.clear();
    . f9 I" z0 I1 f1 [1 _% _/ }1 S* }, k
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    7 A4 L, I/ I0 J3 f, X
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);* f5 u, v( x1 t2 k. u
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);2 B$ N( U$ \7 X
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);% J7 \1 l' y7 U# Z
  381.   if(UpdateFile3.size())
    " e) t  Y, X; Z2 h6 W
  382.   {& ^, O8 K* l  U
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)+ M; J; Z! m% a
  384.     {
    1 B! N. @' Z& `/ F0 x
  385.       file2=(LPUPDATEFILE)(*i).second;
    . B  o& @# s$ P9 E
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): {# W# f& i- B7 _6 g$ x: m
  387.       {3 w1 X1 E8 P! W; s$ K# F
  388.         file1=(LPUPDATEFILE)(*p).second;2 W7 Q+ b: R7 g. A
  389.         file1->vers=file2->vers;
    ' J( y. L' c0 q; s; o3 I; d% u
  390.       }- `0 y# `! L+ l; s
  391.       else
    & z5 y' X3 o3 ?- G9 F; z
  392.       {& z/ ?- C  X0 I# N3 H& E
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: d# r! ?: S0 Q9 [7 h" Q: d
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));, [2 s: j" \; @8 ?' s; G% [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ! ?( Z7 _1 `% u/ M( y5 y
  396.       }
    . i: e: `7 k: w1 u0 F) W3 M
  397.     }! h+ \+ z  ^$ C7 ~( ?. d  e* |
  398.   }" d: ~$ I; G1 |) _" @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # Y% [1 r5 A6 S0 z/ m' r3 u
  400.   {
    - c* B% ?2 y0 z, S% [' A
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 R6 H; f. i* ]  x
  402.     {
    , B$ t# M: Y% ], j& g
  403.       file2=(LPUPDATEFILE)(*i).second;
    1 z# G. |) J6 A! p8 w: D3 m
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), n/ Y3 t2 y! m) |
  405.       {
    ( n2 d& ]# N# e# P5 a' X$ i
  406.         file1=(LPUPDATEFILE)(*p).second;. {* Q2 ]- z$ M+ {. S" X) s
  407.         if(file1->vers!=file2->vers)
    8 F& W8 e0 r. o
  408.         {
    8 J5 b% t" [( _5 k3 z" i* n. m3 ?
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! d# ~! H+ H. O) r2 y, [$ L# t
  410.           c++;
    ! }; d: R; z) x: h/ H! A3 o
  411.         }
    1 n0 ?% Z; Y0 b2 N
  412.       }
    ' ?' m0 l' Z5 O: ~% B
  413.       else5 s3 T" W. }3 ~0 C! U0 Z  _
  414.       {
    . e! ~, P( I+ `8 s
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ; |& R1 ]! T4 Q1 @  u. k
  416.         c++;: \" r9 q! w* r# ?( ]
  417.       }
    & t5 U/ B  u/ u  H
  418.     }9 I+ F; u8 U$ K; M+ D+ V: [
  419.   }' ]* p# ~; u8 R+ n1 N
  420.   unlink(".\\DownLoad\\update.txt");: R; Y4 X( d7 H
  421.   if(UpdateLocal.size()) return TRUE;- A! T! A' O1 u1 U8 D
  422.   else                   return FALSE;# Q* ~& J3 K# [6 N( W3 r0 z1 |
  423. }# y: A. A  ^2 F
  424. ! ?  z. t% ~& H
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"* D4 b  B, m( N
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"/ m! v+ m+ g, L3 U( q5 ]
  427. + h! f9 B: l3 Z; Z9 d6 m* p7 Z
  428. . ?! i# _' x9 J- R6 [/ T/ E3 r

  429. 2 n2 e- [/ R  ^) `$ [4 S
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ O; M" W8 @7 o" j" ?
  431. {
    8 P+ ?! n1 Z4 @  s5 Y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;! }1 f0 I4 g  `( @
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 X/ F. N* R2 E$ K3 M/ v# \- r
  434.   {
    5 I2 W8 o: k; x& }
  435.     char szLanguage[50];
    ( N9 a0 R% \( J) n
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * y0 u7 T& Q7 j( D) F# R6 ]
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # e# v$ O6 z& x4 f1 `* ^
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 D2 W3 @; D1 Z, ?$ G8 D
  439.     else                                   m_iLanguage=ENGLISH;
    6 _. i  ]3 ?& K  f  Y
  440.     char szRegister[100];# _( K$ H: \( r/ Q/ P$ |8 g
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");* f1 d) b# E9 t
  442.     strRegsName=szRegister;" B7 y& {" c: ?- t+ ]2 u6 D  x
  443.     char szPatchURL[100];
    2 M5 i9 g0 ?6 t7 o8 S6 `
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ L) X1 c3 D+ _
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      s' Q' X! S8 o2 k
  446.   }
    & {) p7 ?' p1 `, @# h
  447.   else
    ' \8 Y) Q. S2 u/ K' M# n( r- p6 m
  448.   {
    & D; v- T- v, K' S2 p; ]3 P( `
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# |) a7 N* F0 |. |- ?* \+ K
  450.     strRegsName=DEFAULT_REG_URL;
    9 u8 k- X; G6 m: M( ~
  451.   }4 }  B' ~3 W- ?4 V6 I+ x& x
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    2 }% ]9 R' \8 _; e. E4 O4 ]/ m
  453.   {
    . e8 ]0 v3 h. ~+ _# e+ f" y* D
  454.     char szIP[50];
    , j6 Z1 f: ?  O0 G
  455.     char szDIR[300];
    - m- L9 b! H* G0 i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % ]- h0 N' L5 r% L6 ]8 \
  457.     {, q) X& q/ n: \9 _2 y6 x. H
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    / p# `3 N9 V& [8 d+ ]
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");6 Z8 f1 j/ y, ]
  460.       strHostName=szIP;* Y/ K; j5 u  S9 S- n+ m
  461.       strHostPath.Format("/%s",szDIR);/ u9 {/ a; s, \; Y4 g
  462.     }) j% ^3 Z# Q' ~- y
  463.     else
    # l4 r; W- T/ ~% L! D3 A3 _7 q
  464.     {
    . n8 t0 P2 f' P) c' W
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! S0 L+ R: V! C$ \) n
  466.       {9 B& {- p, J$ x$ E9 Y9 s) X
  467.         char szLanguage[50];
    $ R( }% g, ^! s+ o2 @3 W" t5 g
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 t, R6 T' F% V. ?+ p+ p( r7 d
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 V* t$ _" K! ]0 t& L3 `+ Z  [
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, G' `( C) u6 k+ I( [
  471.         else                                   m_iLanguage=ENGLISH;
    ( G, @# j. Z- A8 }
  472.         char szRegister[100];
    , G# q8 I2 L1 D" v/ D4 S& [
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , q0 H6 ]+ }, s9 q' s$ p4 C  Z
  474.         strRegsName=szRegister;" ]9 r/ ^* D5 N
  475.         char szPatchURL[100];
    & v! v" F( b) c
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" }% r4 {$ P% t1 f' M9 h  W
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% K! F$ L9 R* M1 _% l
  478.       }2 W7 K/ V# m+ t, z* _3 A( s
  479.       else* [( i3 m% a! u0 ?! r8 b
  480.       {
    - G0 {1 B: [4 k4 E  K
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 w3 B# b3 ?1 |
  482.         strRegsName=DEFAULT_REG_URL;
    # L4 R/ c6 B3 ^1 ]& M; F
  483.       }$ q, L& X) p2 q
  484.     }
    , R. B% O$ h' A7 A$ o4 R/ M, V; ^
  485.   }% Y* {  P! V0 o/ X5 Q6 Q; D
  486.   return true;
    3 f0 p0 w/ [: i2 i/ Z
  487. }
    8 E5 G7 Z3 Z8 N

  488. ! {! F4 y( `" K0 Z9 e5 O) g
  489. #include ".\ZLib\unzip.h"% c0 s1 o. F" Z2 Q! W
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);, Y% C5 i5 L0 b% A3 T
  491. /////////////////////////////////////////////////////////////////////////////( x  n  m: d% K- H6 H
  492. // CRevAppApp initialization4 h6 @* @5 R4 k" J% f% D+ V  C
  493. # ^- \7 j9 u+ Z/ u
  494. BOOL CRevAppApp::InitInstance()/ e$ Z: m5 ^: N' T
  495. {
    $ f. K: b9 F# \# L
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];# k- o6 K# }# c3 O) z
  497. * l  x% i* V& ]% s$ f
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);2 m6 ?1 {; s1 O. L! f" p( J* U2 C
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    % T, s( N9 |8 O/ E) {, u0 j* E
  500.   {
    5 r! j/ ]2 w7 g+ F; k
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");1 D6 P1 L4 z: D! e4 _. l, ~
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    6 \' i% T# ?) d$ l+ ^: m8 }. r2 M
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))2 h! F0 ]" V5 t( _! s9 T- n
  504.     {
    . k0 Q3 ]3 I- j+ O  [
  505.       strcpy(szPath,szPathTarget);
    + e7 R* Y$ }. \6 \
  506.       SetCurrentDirectory(szPath);
    ) f) [% R( w7 l/ R+ a
  507.     }
    + q2 w, n* D5 E2 t  ]
  508.   }3 P3 }/ y+ Q7 P  W; {
  509. #ifdef _DEBUG
    1 T* d" k6 y' Y4 i
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! n& @* k5 m5 G5 _+ U
  511. #else' W' d  X' T' O+ h
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % S, {$ m- r& B  _) E" f6 N
  513. #endif
    6 |8 E. Y0 x& ~! ~/ K# W
  514.   {
    ) l; S; ^: Z9 ?
  515.     char tempFileName[MAX_PATH];
    ! b7 Q) W+ I$ `' @0 Q3 J! I# w" W
  516.     strcpy(tempFileName,szPathSource);4 g3 T5 P5 b) y- X$ F  W/ }" H
  517.     tempFileName[strlen(szPathSource)-12]=0;
    7 g5 u1 G+ L, z( q+ U4 N
  518.     strcat(tempFileName,"\\$CSUpdate.exe");  e; {5 G& `; U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    . m: }$ l- Q& Y0 Z7 z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);6 y' C0 K2 j3 g
  521.     return TRUE;
    - }8 j. q5 T* j- d& D! L1 U
  522.   }
    2 V5 A; F4 T- L. h% n, g0 X
  523.   // Nuke 0118: Delete run.exe
    9 ]8 P9 J7 _: ]4 R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );+ Q$ Y& U/ }1 D+ h* n" e
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");! `0 u' ^! M$ S3 I# Z9 K. n
  526.   if(!ReadCfgFile("Config.ini"))* M- o1 z5 d3 ?' m
  527.   {
    + V3 \2 D3 B. }7 b& K/ h
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 P- X$ \* f; C1 T* [+ r
  529.     return TRUE;, a+ X* u( w6 v) x* ?
  530.   }
    2 Z% U7 J  D9 T6 [
  531.   HANDLE mutex;
    - V+ x3 N# {  m: w
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 L! _7 C! X) Q: C) J: y
  533.   {
    ) {2 i. D! l) w
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS); l. W- U+ s; p- I- _9 f
  535.     {
    % G$ j3 E& Q# x
  536.       CloseHandle(mutex);
    & G# a- ~0 X# z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    8 w3 P4 q' E/ H# Z
  538.       return TRUE;
    / T4 r+ c. `+ ?6 y: h1 }
  539.     }
    5 S# @( V$ A5 J
  540.   }  7 ]3 U: t% b+ S+ [/ T7 \- _
  541.   CloseHandle(mutex);, r& T4 [% R9 u& M* l, |

  542. $ J6 u0 J0 [9 ^, _
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);( D4 M& ?  q. w- R

  544. 8 r" T0 v; @2 r. i, B/ v% v' [1 N
  545.         AfxEnableControlContainer();8 v/ m- ]& v( ^2 w1 U# C0 @# j
  546. 3 e9 {- N1 I- j( M% W' \
  547.   bCanUpdate=FALSE;
    1 U$ [* F! m4 Y4 X4 F
  548.   dwStartUpSteps=1;
    & H: }/ _6 L5 ~  w
  549.   dwProgramState=AP_NOTHING;
    & h3 U, z5 i5 h; N6 W

  550. 5 x% }- b8 q" N3 G& n% I
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & G! P' k& X6 ?2 J# }$ |0 B: Z
  552. ' n. f  j8 b/ D. K2 w1 W0 ]
  553.         // Standard initialization
    ( k% a, a1 C2 |
  554.         // If you are not using these features and wish to reduce the size* U  `$ ?5 @& {3 S
  555.         //  of your final executable, you should remove from the following6 q1 P# ?0 O9 F/ r6 V  E
  556.         //  the specific initialization routines you do not need.
    % n! E. L$ Y* g/ i! i. @2 K
  557. 5 i4 [! O$ }6 |' }
  558. #ifdef _AFXDLL
    ; k8 l8 e/ s8 y' c5 p% L. t4 n9 s
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    4 G8 [: I% x6 Q3 N
  560. #else( ]1 `3 \  Y9 [
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ; r" W0 _0 F. {5 f( o7 [; x2 i
  562. #endif5 k! m3 \3 g  A: g/ L" b: o

  563. 1 G* A; W" ^( G& ?) l
  564.   dlg=new CRevAppDlg;5 |: B$ @2 h9 ]( ]
  565.   dlg->Create(IDD_REVAPP_DIALOG);3 m/ X9 V5 ]1 d" D
  566.   dlg->ShowWindow(SW_SHOWNORMAL);( x2 L6 Y$ e5 A5 P; h. G9 n* i4 \9 p* X# h
  567.   m_pMainWnd=dlg;( b* [% X( j! z! B; h% C% l
  568. ) ]# |/ K; I4 {7 o$ A' t+ ?& @/ K
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);  j% S# E+ D4 K6 f
  570. ; q+ N- X5 o2 O- A* h
  571. //  GdiplusStartupInput gdiplusStartupInput;
    / E$ x% Y+ _1 G$ _+ c9 j5 C
  572. //  ULONG_PTR gdiplusToken;
    ' F# \0 O/ s7 N1 f; s
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    & ]. \: J  X! l2 i, y
  574. % M7 a7 o( |" X# ~
  575. //        CRevAppDlg dlg;0 y2 ^4 q: s5 @+ ]1 N" M* ?) K
  576. //        int nResponse = dlg.DoModal();
    0 \* ~/ q3 N! J
  577. //        if (nResponse == IDOK)4 {8 m* G0 M/ z( F: @
  578. //        {; K8 U% V2 |: y2 P* C' ?; F- ?* u
  579. //                // TODO: Place code here to handle when the dialog is( t5 P8 a8 e/ h; q3 n  n) J
  580. //                //  dismissed with OK: Y- T: K9 g' n( k+ \3 X; V- c3 b
  581. //        }
    : B& s6 O6 C' ~8 z$ K
  582. //        else if (nResponse == IDCANCEL)
    7 T$ p2 k, S/ u8 C! z
  583. //        {
      b8 m$ y! u0 Y* _+ M9 Q! q
  584. //                // TODO: Place code here to handle when the dialog is, ~3 m* a2 s( V" Q- [3 Z% `
  585. //                //  dismissed with Cancel$ H- O( z3 ?2 I" U
  586. //        }, ^. Q* Y* u. [/ F$ G' o1 ~5 x  G: B# y
  587. 5 [$ M1 I+ D% w, v( d
  588.         // Since the dialog has been closed, return FALSE so that we exit the
      W+ K8 Q* l* v2 ^3 M: _
  589.         //  application, rather than start the application's message pump./ j8 _* p2 r9 Z8 h! U3 C
  590.         return TRUE;4 i: d7 I0 |* Q  b+ i1 w2 b: ~( h
  591. }
    : x3 ^, y# {$ R8 Z# ~; K" n+ C

  592. ) A- G+ [: H- x8 Y6 P/ V# C
  593. char *CRevAppApp::strtok3(char *pSource,char *token)- K1 q* D4 c) \6 E' @7 f
  594. {0 A1 M' I1 O2 e* x$ E, N
  595.   int i;
    ( u% b' Y7 x7 Y. H0 N
  596.   char *szRet;7 z% D  B  d+ E1 g( D7 N
  597. ( `7 M7 O; c( g( |9 C. c
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 g: H( Q: z% H5 D* E7 g5 c# n9 j+ k
  599.   if(sztoken)
    9 o8 A" l6 f3 {' s6 f: U1 T* q5 h. o
  600.   {
    * o' N% R# W( E1 }$ u* ^' ^" I. Y# H
  601.     szRet=&sztoken[itoken];8 P+ u+ l* G3 x6 N
  602.     while(sztoken[itoken])
    - a& k4 V8 e! v( D  v0 L
  603.     {
    ) e* d2 x4 J9 q) T/ _
  604.       for(i=0;i<(int)strlen(token);i++)
    - t* j% Q2 s& k+ E
  605.       {7 P8 G; P' E! A9 l
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    " b& b$ q0 U. D' r
  607.         {- P) J& w, T2 W) G
  608.           sztoken[itoken++]=0;
    , g, ^% H7 c  g
  609.           sztoken[itoken++]=0;" Q( G; J) f; J! v7 q4 ?
  610.           return szRet;2 c0 z' z6 J" |$ u0 l8 y1 s$ ?% q& c
  611.         }
      N6 B8 A* }& `. \& I9 o
  612.       }; ^" f. _5 C9 f1 h( }6 D5 ~# c
  613.       itoken++;2 V( ~' O9 E7 ]4 v+ V8 @
  614.     }; H' H3 Y2 K6 e' D7 E7 E7 g1 f
  615.   }6 N5 z4 A- i* P) s. \
  616.   return NULL;$ I4 a- W' H  r) X
  617. }
    + _7 G7 F& J) W( E

  618. + e$ F8 R7 o$ [- [  F+ d& m; b
  619. void ProcessProc(long Total,long Current)/ f6 q) a0 q0 |7 _* Q3 g
  620. {! h1 t: N) E4 q0 `# z+ K* ]
  621.         MSG msg;
    % M1 e' D. {+ S0 Y! z- z
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);! M( Y" u3 W0 K& B7 n! @" m2 ~! E
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));! O6 K$ G8 i9 t# i7 o: i! s
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    8 o; x8 S) ?" c1 E) l: m
  625.         {& ^' o7 H1 t$ c( B" }
  626.                 if(!GetMessage(&msg,NULL,0,0))) I& j# W% |. {
  627.                 {& H" {& h& _; K( Y, s
  628.                         return;
    % E$ Q& @$ {9 y
  629.                 }
    / C, [! f1 F3 I$ v1 o4 v
  630.                 TranslateMessage(&msg);. J* P7 P" ^  L5 }' x& Z1 K
  631.                 DispatchMessage(&msg);* @& \, L, e. f# d6 n
  632.         }       
    ' {/ n7 d( M2 z% a, G0 P6 z
  633. }5 f) Y5 `# E" x; |: C' v8 j* F

  634. " A# K. Z: ^, X, j: j
  635. BOOL bFirstChar=TRUE;; \* G  E0 D: T

  636. / ]3 m4 r, u; B& j- i5 I0 i
  637. BOOL CRevAppApp::OnIdle(LONG lCount)# b3 c0 C; Q/ S+ X/ v3 H
  638. {0 z! D4 D) n. M3 \" @4 b
  639.         // TODO: Add your specialized code here and/or call the base class6 l# {, O7 x5 |+ U! k( t7 G+ U7 f
  640.   switch(dwProgramState)/ |6 f- V# J  D+ F
  641.   {
    % U$ x# M# j* }' ^( m
  642.   case AP_NOTHING:9 i% o7 K& E1 Q
  643.     switch(dwStartUpSteps)4 ^, b8 _2 c/ q0 x' Z
  644.     {
    8 l2 _+ d" a4 u2 {/ N& m
  645.     case 1:
    ' ~" l! ~! `' Y4 q
  646.       {: S. Y. O; I: B0 _7 F0 P
  647.         int i;, W! }3 X) J) `1 X3 t" U2 T7 `( c
  648.         CDC *pCDC=dlg->GetDC();
    7 S' w+ e# M0 z/ u% ]( o  x: K+ k
  649.         HDC hdcwnd=pCDC->m_hDC;2 V( c5 ?% f" d( V
  650. //        Graphics graphics(hdcwnd);4 Z  Z* o) V4 ?( s0 |: d# F8 f
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");8 ^& C" d3 w) \, x% f
  652. //        INT iWidth=bitmap.GetWidth();
    4 L, A# f; p, `' ?5 }
  653. //        INT iHeight=bitmap.GetHeight();
    3 D% ]1 E: w& D; M
  654. //        Color color,colorTemp;
      G. E$ [2 a7 w
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    * q- O. N5 L. a! x5 h2 E0 o$ u
  656. //        {
    - t3 f- E* ?0 G9 w
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    " |( ~0 a/ L# ], q: A) _2 j2 t
  658. //          {$ _0 }$ t# H* ^' I/ W
  659. //            bitmap.GetPixel(iColumn,iRow,&color);* \% z* p6 X' x# C
  660. //            colorTemp.SetValue(color.MakeARGB(
    # H! X/ J. V% _
  661. //              (BYTE)(255*iColumn/iWidth),
    2 S" E+ Y/ [1 K- M1 \
  662. //              color.GetRed(),
      b% j( Z) C" d: ?! H- g/ E8 }- q
  663. //              color.GetGreen(),
    # X! M8 k2 i6 h( K, ?0 f. L
  664. //              color.GetBlue()));  d! d5 e' Q7 R" M8 m
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 a0 F3 |# I0 b4 L
  666. //          }
    3 H$ ]9 i' s' _* H4 L
  667. //        }
    + l8 z* p& s( A7 o2 Q/ c9 a; D
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);* k% f& @& j' I/ z! B
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 p/ ]4 w6 `+ X) l' g% A/ `
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");/ \2 {- ]7 X& Z1 o' N
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . ]5 ?+ _9 y7 N% w$ f6 y
  672.         for(i=0;i<240;i+=8)
    % h5 n! e3 V- G5 O3 z4 x8 v7 Z
  673.         {
    8 @+ V8 {- y9 P9 m8 t" z, W
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: O+ G) R! E) m' ]8 C
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 t5 D" l7 }6 q8 z: x1 a# o; C! J
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : U. ^4 |. g9 w9 `& d' [
  677.           Sleep(33);
    * @0 ^  X% d0 W
  678.         }
    , G/ ~- V9 ^6 P1 e+ X
  679.         Sleep(1000);
    * }0 q6 j/ g( T
  680.         for(i=240;i>0;i-=8)
    + c, a+ \# x: b
  681.         {
    4 X/ O+ v" T$ \7 |- M
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 y6 Q$ h% J* M7 F; O
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 _0 o( m# w4 ^9 c* X$ [
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: H: g% x8 e' \0 @
  685.           Sleep(33);2 \- }; e- W0 ~# }
  686.         }
    2 G3 ^) Z- l& ^+ H
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    2 k6 F; E- O" C" e# z' I2 h4 l
  688.         dlg->ReleaseDC(pCDC);; [2 ?8 I" ?9 r0 F
  689.         DeleteDC(hdctar);
    ! E: ~" Q. K0 i; i2 s
  690.         DeleteDC(hdcsrc);4 H7 d& g" [, ?6 i5 r
  691.         DeleteDC(hdcorg);; U2 x7 K8 z" c
  692.       }6 i' |  C( ?9 [; a1 b
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    1 y# E% Y$ Z, E) N( a
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    % S, ~! i5 P2 _  H; D# j
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");) e3 p6 I" h7 B& c' g( i5 T# I! g6 n
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");  T8 ~# ]) J% Q5 f
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, K) c9 |0 V& Z: A! O, I' j
  698.       if(!Dn.Connected())3 f. {, W/ t# x* n/ y
  699.       {7 W0 S8 B6 z2 I' H" A" b( n( f
  700.         dwTotalFiles=1;
    & ^; g3 b5 _) n/ ^, A$ t
  701.         dwDownLoaded=0;
    1 ?+ ~2 ?* u6 D6 ?$ p' P/ C
  702.         bSilentStep=TRUE;; W5 v( y6 A- U: C" p
  703.         bCompressed=FALSE;
    ) }  L, O6 T: @' \8 ^' e+ _
  704.         strExtLocal.Empty();. u: i" ~) a" X2 w, m' r: R
  705.         strFullName="readme.txt";0 h: q7 p- T+ j1 c; L+ P$ u% y
  706.         dwProgramState=AP_CONNECT;5 m5 v' N9 k% ]1 O4 E
  707.       }# b0 b% d! }3 N4 s' |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ) K. d& n  A( g1 b0 [, z* f
  709.       dwStartUpSteps=2;/ W8 V1 Y4 m% Z$ [+ i% [- f. F$ w
  710.       break;
    6 q' d* p; V$ d
  711.     case 2:2 }: y; a# M; ?4 m; o0 _; w  I
  712.       {
    9 @5 z9 a6 z1 S& U' F' P/ t' ~# V
  713.         int iEOF;* u9 E, X; ?$ k
  714.         FILE *fp;
    * o1 n8 P( A" d7 V* U: u1 K5 W5 z# S" c
  715.         char szString[512];
    & z6 e" A2 Z4 A8 w* X! _
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    7 O& X9 D1 x8 }  B; d
  717.         if(fp)8 E, w- I+ m& z2 i5 L* R+ h
  718.         {
    ' [0 i/ U7 |0 [* L
  719.           do
    ; k4 T1 M% P! F9 D2 x. P# B  @
  720.           {. k. t+ ^3 l! C, ?; m4 w% j
  721.             iEOF=fscanf(fp,"%s",szString);
    5 G7 w8 m' Y9 \" G1 f! S+ `
  722.             if(strlen(szString))
    - \, Y( K0 N1 t& N
  723.             {
    * T$ l+ ]& }0 e+ p1 z
  724.               if(bFirstChar)5 @, ^) N2 t. j; [4 w* _
  725.               {
    0 S' Y0 F% _/ s2 ?8 c* Y! ?. M9 K
  726.                 bFirstChar=FALSE;8 g. x! @# o# t7 M3 y( ~) B  I/ @2 B+ t! D
  727.                 bConnectIsBig5=FALSE;
    & N/ h: T9 B. ~+ w" a9 O5 I
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    " ?2 J! V. D/ h2 @- E7 X
  729.               }
    # {2 N) B+ j& p% Q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));: {1 l$ l0 I$ N! A; v
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    # M0 X- x* ]  ]1 S% F6 n
  732.               dlg->m_ListText.AddString(szString);
    0 e1 I; @6 u; [! `2 ^+ r* @' m; L
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * b0 j+ }! ?6 P7 d
  734.               *szString=0;: p5 T& a* T3 _8 {* l
  735.             }6 Q$ k3 g) ]7 |" G; @2 @
  736.           } while(iEOF!=EOF);# z3 l0 L) t2 h, T3 k6 w9 Y- @( j
  737.           fclose(fp);
    & m& G1 `; n1 ]1 d1 E5 h
  738.           unlink(".\\DownLoad\\readme.txt");# Y5 l; t6 j$ u9 N6 Q( v/ L
  739.           dwStartUpSteps=3;
    . N$ p2 I2 D+ R/ Y- w. o
  740.         }
    & f  n( `* b8 e6 L9 V
  741.       }
    # x) a" ~( W2 ^/ U/ Z% Y
  742.       break;
    ( {/ b2 e% {; C: R4 V2 D+ p1 J
  743.     case 3:
    0 @$ {+ F2 |" K9 b/ U
  744.       if(!Dn.Connected()). F2 r! f2 D7 u; ]( [* y& y( d& I
  745.       {& I& v; A3 Q" z$ e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ) w" b0 z) e1 h  X: M; I. _
  747.         dwTotalFiles=1;: N7 F3 h9 l: u7 T, Q9 N' M
  748.         dwDownLoaded=0;4 e6 h+ r+ S; v5 m8 |
  749.         bSilentStep=TRUE;
    ) q$ o: ], o3 g- J$ c7 {* U
  750.         bCompressed=FALSE;
    4 {/ f9 e& `0 H1 J- M
  751.         strExtLocal.Empty();
    & V8 m$ w2 c, [0 o& g# w
  752.         strFullName="checkversion.txt";
    5 J' y& P! A  A, {0 N7 [* U
  753.         dwProgramState=AP_CONNECT;
    ' J' r5 H0 s. Q/ T: K% i
  754.       }
    2 C! i" l$ d% H+ p6 U
  755.       dwStartUpSteps=4;
    ( M$ M; n2 Q% {4 Q
  756.       break;
    , Y' }. g9 q1 L
  757.     case 4:
    ( G2 w0 i9 N( c4 {
  758.       {- l; f4 g& f' C! |
  759.         FILE *fp;# v$ s5 F4 P$ M7 c; B7 ^
  760.         char szString1[128];& C9 A; f" ?2 @! k; l" W  Z/ g
  761.         char szString2[128];
    4 E! f: P* C) d; s
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    5 k+ o' H  N4 l& {* a
  763.         if(fp)
    3 B, w, k; Z. }8 e) I6 ?
  764.         {
    . O- m+ f# W- |- C7 _
  765.           fscanf(fp,"%s",szString1);
    2 Y; W. z5 ?1 s: Q! `& z7 F* }
  766.           fclose(fp);) O5 {) C3 X* n) ^
  767.           fCheckVersion=atof(szString1);
    + E+ l2 H: O# ?( @
  768.           fp=fopen(".\\checkversion.dat","r");( V* Z3 k3 C- \2 N/ F) g# D
  769.           if(fp): A( c6 @' X1 U5 x# Z. h) }* u
  770.           {+ K( u9 T+ u; r- e4 i. K
  771.             fscanf(fp,"%s",szString2);
    6 R+ ^" w3 Z- |6 T, b" d
  772.             fclose(fp);
    0 [: v) v# V( S( ^2 ]' E! {5 D
  773.             if(atof(szString1)!=atof(szString2)). i4 y& R# L: c) d6 \* W
  774.             {
    / e8 w* s4 e8 q" r9 w, Z# t8 w" u/ v# n
  775.               if(!Dn.Connected()); Q6 J8 D5 o1 J
  776.               {
    * j" z! H0 B* k; E' M" [& Q8 U
  777.                 bFirstUpdate=TRUE;
    * k! j: @. q4 K2 m" s
  778.                 dwTotalFiles=1;
    # S$ I# w( s: M8 R0 o: e. r
  779.                 dwDownLoaded=0;
    0 p5 b8 P- Z* z- y5 A/ H$ n7 i
  780.                 bSilentStep=FALSE;
    , p( d* i9 f! U
  781.                 bCompressed=TRUE;0 O% C& q" d& S  {* S- e
  782.                 strExtLocal=".\\DownLoad\";" }: T6 I; }3 q
  783.                 strFullName="update.txt";
    ' Z, o6 t6 {8 W, Y
  784.                 dwProgramState=AP_CONNECT;$ }+ G! s7 @* P  n- h& r
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 R7 k; c+ D4 Z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      ]% B( U( N$ L
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");+ M4 ]' H% X1 {3 S, \
  788. ( X4 \8 Z5 ^( q: \+ H# o
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! z* I0 o# H4 K" a& |% A8 A  U
  790.                 unlink(".\\DownLoad\\checkversion.txt");( |+ Q) b4 {+ P/ U
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    : K" V, y; F$ p9 Q* G8 M
  792.                 {
    ( E' F" n" q( C3 t7 p: K
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    & J  e8 q4 D2 U. S' \- n/ r9 E: K
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % m" d, D3 q! ^. I" Q  m
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");5 v- p9 g) ?8 d; a  j$ q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- Y4 x- i; m+ i. D
  797. 8 Z: x+ J. t8 T! l4 y, H1 E6 p
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");( K6 b) f/ v, Q1 r
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ( F5 u& f  V; F& Z3 u6 W+ o, ~
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 s: }7 c$ y7 |. ]" G- R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , S1 f0 `& a4 s  W' r0 |5 T
  802.                 }
    * Z* w9 ?) g- l8 M$ T
  803.                 dwStartUpSteps=5;
    % B9 L& ?" B/ D" o" U
  804.               }8 i& ~9 x9 l- h8 W4 q
  805.             }
    7 d/ O6 o6 `$ S5 g; X6 a
  806.             else2 \% h! e2 E" e$ G* L, R+ g2 q; Q+ Z
  807.             {4 g5 \4 {% Z4 Q- X& Q
  808.               unlink(".\\DownLoad\\checkversion.txt");% `2 }- G2 A' m6 F, F1 L1 Q: J  b
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 H! o* g8 I( @* V
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");* u+ K: ?3 Q3 s7 E: T1 ?6 x$ n
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 x+ s( l1 y- Z  {7 `" |8 D! ~) y* R
  812. - E2 M# X- S; K: ^
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) i& t: Q3 k; d7 F+ k5 h
  814.               dwStartUpSteps=99;* k8 T$ u, n) x5 G
  815.               bFinishUpdated=TRUE;
    . n$ l% _7 S  ?
  816.               bCanUpdate=TRUE;
    % }8 _, _  K$ W( x8 y
  817.             }8 |5 H+ u/ ^7 W9 R. x% ^) n
  818.           }! t, X* E, `3 m2 [$ P, v
  819.           else
    ! N, ~( w( L, t. [2 W
  820.           {
    % `* T+ }! ]' O" ?- ]( d
  821.             if(!Dn.Connected())
    ( t! N* [1 m5 \& Y: Z
  822.             {
    * \7 P8 `9 \, a
  823.               bFirstUpdate=TRUE;
    ' \8 u  a$ v4 h  ^  U
  824.               dwTotalFiles=1;6 o- y( V' W- ]- U* a
  825.               dwDownLoaded=0;: U/ T+ n1 W+ h/ u3 g# o
  826.               bSilentStep=FALSE;
      F: L" L) U6 {* N. I* \' i- f7 l: d
  827.               bCompressed=TRUE;
    9 i, v  s6 B  C$ P6 _. R: Y9 O! Z2 w
  828.               strExtLocal=".\\DownLoad\";" S* R2 D5 \* R3 c* n' e
  829.               strFullName="update.txt";2 y- m2 H$ J* b% b
  830.               dwProgramState=AP_CONNECT;
    2 T* {9 e" J8 e6 Z0 L
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 Y* A+ H8 r3 \% C* B
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 R2 D1 A2 m" m2 t) L4 |% h4 T/ }
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    0 A: g3 Q) b/ \
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 r: a. w9 @8 e2 }0 q' y9 j
  835.               unlink(".\\DownLoad\\checkversion.txt");
    1 N+ U$ I1 [" P2 v3 A  {* C; H
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    " F0 I) h+ u, ]6 N) X- G
  837.               {
    ' ]$ X) i, X( r7 ]* V  u# ]3 v) O  d
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");! j6 ^0 A8 m% e* B) l, `
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");8 B1 S, U; X, T! M% r  i( A. ~/ u
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    * g) q% y* J$ q% _
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 J' C9 Z7 s- F6 w, M; v# ~, s
  842.                 $ F5 k* [; V. e# ?2 B2 Z
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  i  a9 {/ v; ~; H/ H9 y/ B
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 }  d+ _7 F1 A8 B" m5 }2 f
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");! t1 @; c$ b0 G, p
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 L3 f& q% w( ]" K# |+ A
  847.               }
    8 ~; o4 r# l& D; l
  848.               dwStartUpSteps=5;
    7 r& m( E8 l9 J" W! v0 r5 ~
  849.             }
    1 g% V8 a6 M  A  x2 l
  850.           }' @/ k0 l; t3 u6 v( }4 h
  851.         }
    * F. e# b! ~0 p/ T
  852.         else
    % e" N, r2 r/ E4 a
  853.         {: r+ H. V1 a& N- ]; n
  854.           dwStartUpSteps=3;
    7 \* Q. _  z) d  [4 |0 t* p
  855.         }
    5 C- C7 n6 K3 ^4 X1 \) L$ O, |
  856.       }6 T: u8 c& P# ]' ~
  857.       break;
    3 }1 M9 j0 u  s( V! N0 [" E4 {
  858.     case 5:2 J% g9 c+ u8 y/ l
  859.       {
    ' W0 T3 W4 e% f" }- L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)/ \* u: M% `8 P3 v, ?* ~2 ]! f/ w
  861.         {3 N' D4 _1 ]3 @, c. h/ R/ v. B
  862.           int opt_overwrite=1;
    ' h9 c8 @" p; g3 h
  863.           int opt_do_extract_withoutpath=0;3 x% w# ]; K- o5 s
  864.           unzFile uf=NULL;
    * b+ }+ p9 j: H( i( d2 F7 U# `& U

  865. 3 Z$ e# c, J. ^' Q
  866.           uf=unzOpen("Wsa.zip");
    / C  f' F3 F/ U5 f( G
  867.           if(uf)1 V6 o6 m, a" F7 D& a. H* b3 X+ O% o
  868.           {2 Q3 U9 ?& V$ V6 h2 y$ N8 j
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);" z3 u; A4 Q. T$ E: x+ F
  870.             unzClose(uf);
    1 Q# ~5 b9 |- P( E- {0 e% e
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");; N8 L8 [/ b! [" _# L+ q$ t# l/ B
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    3 W0 p+ n3 ~2 J# G  N
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");. K5 j, {- L2 \% I5 J4 Y/ I3 i
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 ^( Y; r7 h7 ~2 u, ?- w7 N2 b
  875.           }8 B+ R0 r* Y4 |
  876.           DeleteFile("Wsa.zip" );
    & t) ?" v: A' y9 ~3 i
  877.         }
    1 ?& |  K" ~1 w: O- o* }
  878. ) y$ q3 m( n/ p! p' o+ n
  879.         if(CheckLocalVersion())
    6 \7 f, c' ~3 {( y+ t
  880.         {! M; \3 V" Q+ u5 N9 b, C
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
      z% {6 A; v! f' k/ c7 F, y) c7 \
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ( ^( O# ~/ ]9 B
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ; g+ [& |* O, f. i0 C
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 i2 W7 ^) K" }3 n9 c% G
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);' I! l: o& ~$ }& g2 Q
  886.           dwStartUpSteps=99;
    ' O& p2 q! \8 {& \; T. d! u' y
  887.         }
    1 i8 R: V+ o' I3 k6 v" S% u
  888.         else& `7 T( W; I  o1 Z
  889.         {
    ) w7 _' R" h& k4 E
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");/ i% x* L9 l+ I2 @7 |. j# h! E' u
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ D  x0 a& M/ g  D$ @
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");0 |9 |1 M; v! b* k) G

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

6 B) S' w" D$ M( z0 D

評分

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