CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
# i2 c$ D# T& \' p$ @+ G
  1. / RevApp.cpp : Defines the class behaviors for the application.! p& U; ^: ], q& t
  2. //
    * i! o' M1 K6 P4 j' m

  3. 4 N3 x; |" b: n! ^" X6 a/ b
  4. #include "stdafx.h"8 q4 @' ?! z% {3 y- p) U
  5. , U$ T( }" d- \0 k  ^0 W( y, T3 _7 J
  6. //#define UNICODE4 U( C7 V% U, m$ T) L
  7. //#include <gdiplus.h>
    # c/ G! u2 T7 y' Z" i( k# a
  8. //using namespace Gdiplus;) S! d7 B, o, ]
  9. 9 Z  |: E9 ~! w* M
  10. #include "RevApp.h"
    : d8 F# r: i9 F  p- k0 j" S7 |
  11. #include "RevAppDlg.h") Q, l) K" b: t# \: S# l8 ^

  12. ! K; f6 `, I. X4 m0 z, y- c
  13. #pragma warning(disable:4786)' ?5 a) `# P4 f& R5 q$ l8 R, n1 Q
  14. #include <map>
    & L& `; P4 h/ w( V. P) [; i( m$ t
  15. #include <list>
    6 a, _- ~5 b$ ^  z3 m) Y
  16. #include <direct.h>( _6 V+ N+ h0 |* C

  17. . p3 c) w/ L/ b4 A, q. N- Y+ q
  18. #ifdef _DEBUG
    6 G4 k4 h" L) x
  19. #define new DEBUG_NEW
      @0 W: B1 j1 Q3 M; K6 P( ]% v
  20. #undef THIS_FILE
    : ^& z& D1 D8 I5 F/ A. l7 X
  21. static char THIS_FILE[] = __FILE__;  U/ R8 N% R7 w, C8 C) A5 Z8 I
  22. #endif5 O* c8 s$ z; o" y5 j
  23. #include "SkinResDef.h"- b8 f/ K+ I/ p; c# s
  24. #include "ChangeBG.h"  x. d1 m2 m0 b& U$ ?* k
  25. #include "AFXINET.H"3 g% @, U0 h9 U: K4 a0 y9 Z! |+ ?
  26. : X5 h; K9 A( n, B+ Q
  27. #define TRADITIONAL_CHINESE 0
    7 b. X9 o& U7 X( y8 ]% I; z6 j% b
  28. #define SIMPLIFY_CHINESE 1* u! S+ B: v' q' z
  29. #define ENGLISH 24 t" |$ n2 W' P, |; \* \+ y
  30. int m_iLanguage = ENGLISH;. `- m' t/ W: d/ c( F, G* Q
  31. /////////////////////////////////////////////////////////////////////////////
    $ f5 g% F5 j/ g  M6 _
  32. // CRevAppApp
    * i0 h9 h7 L" y+ `/ J) D; g- G
  33. 5 V; [4 B! m) h" T
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)- m9 q% O) P$ {# M
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    5 ]1 ]6 O+ T% ?+ i  @5 ~8 X3 l( I
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ) w* Q. W3 h" B
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    - ?1 @( d( S$ W, C. U; |. w; m
  38.         //}}AFX_MSG' V/ }- J" L6 V" ?* j9 m
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)) I' N7 N8 m4 R  J( f9 v( c
  40. END_MESSAGE_MAP()
    " m. V; J* g3 a) a/ W
  41. 0 D3 M; s$ B3 b) f: K
  42. /////////////////////////////////////////////////////////////////////////////
    , r7 ?6 o! z7 p& {3 |5 F
  43. // CRevAppApp construction+ q/ ~6 y& d" @( X8 c; Z

  44. & @8 X7 M- n+ P, b% i/ \* X& x( \
  45. CRevAppApp::CRevAppApp()
    # _) ?/ _3 c5 c7 K8 q
  46. {
    2 n7 {! ?# z' V- `* g
  47.         // TODO: add construction code here,
    & r! p. }& v% }( Q
  48.         // Place all significant initialization in InitInstance  U  Y) b3 V, \% b3 P4 N: ~
  49.   bDisplayIsBig5=FALSE;
    - |- @0 r9 D$ j: P9 a3 ^7 O
  50.   bRestartUpdater=FALSE;6 v, N, T. a1 @  i8 N8 T
  51.   bFinishUpdated=FALSE;
    6 H; {7 @; R4 B( M( |
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 G6 t9 M5 j4 L7 m
  53.   InitChangeDataBig52GBKS();
    ! }0 C# v0 ^' X4 J( K& ^" {. p
  54.   InitChangeDataGBKS2Big5();! Z7 k+ x7 G9 D! o
  55.         //) r" ]9 s. E1 A. @
  56.         bClickRunExe = FALSE;* u7 o" v3 u! F/ h  J
  57.         //
      m; N4 ^% X- c; ]4 \
  58. }* B6 h* z  t) n5 @! f
  59. 4 l( m0 a$ ^& w
  60. CRevAppApp::~CRevAppApp()1 I# }$ H) P2 t$ n; g( q# q  M: h
  61. {
    * @; b! x7 g$ C
  62.         // TODO: add construction code here,
    - L% g" T2 d; o" o
  63.         // Place all significant initialization in InitInstance
    9 w5 v5 C! w) t) \* P4 o& t
  64.   EndChangeData();
    5 ^, X% b: f; [/ N$ m4 R
  65. }+ ^# ]3 z3 J1 x! F. l. `  P, x

  66. 3 S" F' @1 {: u8 x/ R2 t$ H5 k2 B
  67. /////////////////////////////////////////////////////////////////////////////! R/ x6 A# I' B( C+ D2 U2 B, t
  68. // The one and only CRevAppApp object" l! r/ H, r( X
  69. : n- M' A9 X) M7 z
  70. CRevAppApp theApp;+ O/ X% f% \* ?! s1 Y

  71. / A7 m6 o) r4 s- @7 y9 {
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)+ m/ u4 M+ x4 D7 U" e
  73. {
    % R+ {  P- [1 z0 r
  74.   int iEOF=0;7 X2 U' [* k; |1 A0 B
  75.   char szTempName[MAX_PATH];
    0 a; ^+ v5 t, _& e9 E
  76.   *szFileName=0;
    0 U0 ^) M% Y2 J3 z8 k$ J* o3 X
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 m" L' B7 Z% A
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    7 I2 [/ ~( b9 m
  79.   {
    0 t+ t; V2 g( U
  80.     strcpy(szFileName,&szTempName[1]);8 o1 ^8 Y( [0 ?; O9 I% G9 D
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF). C) A2 h6 U5 w! c) ^1 H7 K
  82.     {
    . D0 _  X3 Z: t+ X) M. H
  83.       iEOF=fscanf(fp,"%s",szTempName);; V2 f; A5 j* q
  84.       strcat(szFileName," ");
    5 s$ V% q3 R  ]8 ?% M/ L
  85.       strcat(szFileName,szTempName);% [( Q8 W; A# A. V
  86.     }9 G# s3 I7 {/ C% x- }
  87.     if(strlen(szFileName)>=1)
    + B0 x7 {! t3 n, |8 `
  88.     {
    . K" e' d" X7 o! k+ e
  89.       szFileName[strlen(szFileName)-1]=0;
    ( y) `1 [" R- e5 R# U0 _
  90.     }& b9 Y! h- T( C" _0 b% h4 X
  91.   }
    ! X# C8 a  Y9 c. Y6 B% w  d
  92.   return szFileName;: l6 i$ f( W# |& D8 `  ^2 V
  93. }
    0 n0 V2 W4 }6 L4 ]4 z

  94. 3 d# d2 k8 e, `2 m
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)9 @2 a; D+ N# j3 [4 f
  96. {4 y( n; N2 L, W; t  t! z5 K4 i3 e5 j
  97.   FILE *fp;; q( @( A8 L; @# k  T
  98.   char *key=NULL;' F. I( G. b5 |1 p( ]0 h6 K. {: c& B
  99.   char version[MAX_PATH];% Z8 m# U& [1 D6 T) N: b: o
  100.   LPUPDATEFILE file,olds;
    4 z5 w- S; X, c6 ~  s: h* g
  101.   std::map<CString,LPUPDATEFILE>::iterator p;4 g8 G, b% v: V# h; u1 Q
  102. 3 ]0 c, E5 b# C6 L
  103.   UpdateList.clear();2 Z2 ^5 _' I* {" m8 ^7 Q
  104.   UpdateFile.clear();2 X+ i  n+ x- T3 H
  105.   if(GetFileAttributes(filename)==-1) return false;
    . C0 R0 n! v8 f/ K* d) J/ L" }. L
  106.   if(!(fp=fopen(filename,"r"))) return false;3 G6 e3 D9 E% f! w) T' l) U
  107.   fscanf(fp,"%s",version);
    $ f$ ]1 \0 H8 V& ]
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    * O; z* j% o) |. g7 n
  109.   while(fscanf(fp,"%s",version)!=EOF)
    + D. x5 E2 B. y; u) S5 B
  110.   {4 b7 |& Z7 m. ~, N# y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 f, ]9 [% K2 v6 {4 B9 l0 V6 Z
  112.     fscanf(fp,"%s",file->path);# _( g1 e/ N/ ?. A- k
  113.     ReadFileNames(fp,file->file);
    0 x, |) _* i. n  @- Q* n
  114.     strcpy(file->full,".");: O) L# M" w0 @$ ~" F
  115.     strcat(file->full,file->path);
    & q9 C/ k/ y% [) R
  116.     strcat(file->full,file->file);
    ; ~) u/ V$ s, f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())' }) f& [: t0 ]. B/ M% J2 ~
  118.     {# z5 g* P  E" z
  119.       file->vers=(float)atof(version);
    1 ?0 K0 D$ C: S* n! }
  120.       UpdateList.push_back(file->full);
    9 E* Q2 J) |! {
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));- f& i. T2 E. S
  122.     }4 t. C$ P/ n/ c0 W& B2 z
  123.     else
    # [8 |$ m' N8 `3 B
  124.     {1 ^* d1 t- U+ }1 d. E/ C8 N( x8 M
  125.       olds=(*p).second;) a$ d. }, U. A& ?0 T* C- r
  126.       if(olds->vers<(float)atof(version))
    # C+ E1 v) E" Y. U* Z
  127.       {& \; Q) P$ T( A+ v4 G2 L# L
  128.         olds->vers=(float)atof(version);1 [; E4 \( D3 d7 R
  129.       }
    1 _, y( g1 k" T) l- D
  130.       free(file);: w7 @4 r. H5 ?  J, P4 T
  131.     }+ m, }; O# b8 S- F
  132.   }
    ; y, A1 s) Z, H+ p1 y" h
  133.   fclose(fp);, d9 I+ f/ b! g; s0 c; q  S8 k' C+ c
  134.   return true;: T4 S: ?( |- O7 |
  135. }
    * T1 _+ y& r( k2 s0 t! o; |

  136. 2 t: z6 n+ b8 T1 G
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    $ I9 t8 V* s5 D* W% F7 f
  138. {
    - g0 T& [, m# K3 q; B2 h
  139.   TCHAR  szFull[MAX_PATH];5 V4 r* N1 z7 Q' ~: {" E, B
  140.   TCHAR *token,*inter;
    , `8 a& O' K' p$ Q" [
  141.   *szPath=0;
    # N$ @3 p7 v# e7 E' m: H
  142.   strcpy(szFull,szFullPath);
    4 a9 }+ U2 f) t
  143.   token=strtok(szFull,"\\/");
    ) @+ f" R( v: b. e$ [. G6 A
  144.   inter=token;
    ' b* ?, i! g( |
  145.   while(token=strtok(NULL,"\\/"))
    9 q+ a3 _* q% r7 H1 ]* l
  146.   {
    . w0 n6 h, p4 @: }1 k
  147.     strcat(szPath,inter);4 [* n: ^! t0 c( \( ]5 L. ~: ]4 u
  148.     strcat(szPath,"\");
    $ Q, Z; D/ Z# h8 a% u4 h. z
  149.     inter=token;7 W& E6 t2 B% q6 m9 A
  150.   }
    * Q# ]+ H9 e; T( i
  151.   return strlen(szPath);& e  q8 R  @2 i! R5 @6 |/ t" `
  152. }  n" P) [% ]" W  s0 _

  153. 7 k" o6 u& F( K" B  E( H# f; K
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' c, K9 e& v/ i1 v1 {
  155. {
    9 U2 X$ R9 X9 J% ~8 ]* N) M. Y
  156.   DWORD attrib=GetFileAttributes(Target);
    ; V4 W' h) e& a) }
  157.   if(attrib!=-1)* H' x; R/ y4 g0 C1 Y+ ~
  158.   {2 [" y/ }* v2 c1 R, N. {. K7 H, e% t
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))- U$ k6 _, N+ J, ^4 b& U2 E0 [
  160.     {2 q# U  Q0 ~! ]& o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);1 j) s: X3 I8 F/ j1 x: }5 j; Q5 s
  162.       SetFileAttributes(Target,attrib);. \. o! F: Q% A9 C6 ^' S% Z/ p
  163.     }( a; I" {/ O; z( O4 J7 _
  164.   }
    " \4 s3 _/ X' u. W
  165.   CopyFile(Source,Target,Erase);6 ]1 S) x- C) R7 {8 U( o& {: M
  166. }$ C. _+ n* d# c0 x
  167. 2 J7 k6 `- b6 b# n( M! l8 W3 y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ; g& n6 ?6 t' E3 H4 s  X5 ~1 q
  169. {
    0 K  D( f+ E1 u# \4 B" P# O3 a
  170.      FILE *fp;/ j# z' p% w( q
  171.      char  szBuffer[8192];& D3 c0 e+ s$ b6 s3 O- @
  172.   va_list  argptr;
    , o3 K# w/ i/ W8 ~
  173. ( y; z' F; |  I5 O- K0 u
  174.         va_start(argptr,message);% X2 j5 q2 L1 J1 V$ C
  175.         vsprintf(szBuffer,message,argptr);$ o* v2 q* v, o* ]: E
  176.         va_end(argptr);$ y# M& y& R7 ?9 A) }7 Q' T" g
  177.   fp=fopen(FileName,"a");: G7 w! U' A5 ~
  178.   if(fp)
    , ]! P- v0 X) g+ X
  179.   {
    & Y/ l; ]) {. S( \/ O
  180.     fprintf(fp,szBuffer);
    ' L; u0 o* g" K  B3 d+ d
  181.     fclose(fp);1 q9 k; D5 K6 ^
  182.           _flushall();
    ( H! o$ a: y& p( ^6 w1 }2 ^) A
  183.   }% W% i2 i1 j: H$ [, S
  184. }6 V$ M7 a- b) B# n

  185. ; n8 X# T" o/ c6 I' I  [8 Y
  186. BOOL CRevAppApp::Fclearf(char *FileName)/ E- f3 ~7 ^% g$ D6 l
  187. {
    : j9 C+ N% P" z) b. j/ J* Z2 ]
  188.      FILE *fp;  I$ m( Q( z) c  q! u
  189.     DWORD  attrib;
    . S# d. o, o, K, U) w
  190.   attrib=GetFileAttributes(FileName);
    + f% I, t! D3 i, |: B
  191.   if(attrib!=-1)
    % T! ^' h0 ]$ l5 t  H6 k; l, y1 W; _
  192.   {
    " Q+ ]# N. o* x  M) m
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    . K" `& l! t" Z8 H
  194.     if(!SetFileAttributes(FileName,attrib))
    7 y! E+ k! e5 F
  195.     {8 L# ^0 Z# t' b3 V
  196.       return FALSE;
    + z7 f/ `+ o( Y8 m9 c0 {# \
  197.     }# m  ]0 i2 c1 d. R: v
  198.   }9 w8 L1 Y2 X& E  Z# O
  199.   fp=fopen(FileName,"wb");
    . l' K7 u! x0 j! y5 ^, A/ X
  200.   if(fp)" R0 Q& W& ]( \9 u1 j( r+ `
  201.   {
    0 S0 j$ L1 X& t2 w* }$ y) {2 @
  202.     fclose(fp);- z: [" @/ A' Y; H( b+ S9 A+ U
  203.   }: c# f3 M  [- y1 ]$ w
  204.   return TRUE;7 E; s: P+ L6 E" d8 f3 @: F
  205. }
    8 A% S  K* A1 O/ n0 b
  206.   j1 L, k4 ~2 x  G
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ; I$ A7 d* c0 ~
  208. {# \% y- Z6 \& h: ^4 u# c
  209.   char filename[MAX_PATH];
    ) {+ u: v& _2 Z% ]9 \
  210.   LPUPDATEFILE file,olds;# G$ ?2 S1 W7 M8 n$ @6 `( K, x8 k
  211.   std::map<int,CString>::iterator i;
    2 m7 @+ Y1 B) r
  212.   std::map<CString,LPUPDATEFILE>::iterator p;  B+ `1 r  U/ l
  213.   std::list<CString>::iterator l;  W" y) L! P* d1 {# H

  214. 7 f9 p6 ?% d* k+ }+ R
  215.   if(bFirstUpdate)
    / T. |8 H+ e4 P( ~' J: a
  216.   {* n0 m9 @+ P+ r% ?# y
  217.     dwCurrFile=0;# @( \9 t- v( E* e
  218.     bFirstUpdate=FALSE;
    & u, B: k1 x; {) X0 I2 \: T5 `
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# o, a: P+ H3 s; V
  220.     {
    : l5 }  ]% O  W( R
  221.       dwTotalFiles=UpdateLocal.size();: K& S* e5 t- H5 V, m/ [5 M
  222.       dwDownLoaded=0;
    ; T. L/ S+ J6 y# F5 a3 W
  223.       bSilentStep=FALSE;4 V* ~) a& b( Y- I  [3 o
  224.       bCompressed=TRUE;
    * ~# O: ?2 E* {9 H4 r7 P: `
  225.       strExtLocal.Empty();
    ) r# C) i/ W3 J' T7 r" _0 E/ b
  226.       strFullName=(*i).second;
    1 W; ^( r4 U$ ^+ h6 M( j9 a1 k
  227.       dwProgramState=AP_CONNECT;! \6 ]8 p, [8 s1 i# x2 p
  228.       return TRUE;* ~2 i0 Y! l: p0 F' P% `$ m
  229.     }( `9 a1 x/ v( A6 D
  230.   }0 Z: f; J( F) h8 P3 o
  231.   else if(bRestartUpdater==FALSE)  A7 H  V2 f9 A+ m. z- Q: x) E
  232.   {2 j& S) Y: }& I' [! @
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    + K* `/ C" z; s- d; b
  234.     {
    ; K% n! M4 }+ X/ S
  235.       file=(*p).second;
    $ d* h7 z3 W) B6 R0 Y9 p" @
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()); |7 C6 B) ?2 G' Z( i: w
  237.       {
    ! X2 W# [# q5 @$ G) C+ m
  238.         olds=(*p).second;
    & E" U- s, @( J0 C, b: g$ z& v( o
  239.         olds->vers=file->vers;
    $ Q: I5 ?" W: p+ }
  240.       }
    3 l% D' b" F. M) c  |/ X1 z6 [
  241.       else
    / z/ S" V7 \, H) g6 H" E
  242.       {
    6 ?* e* Z7 ?& A+ {, x9 i
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 d+ @" s) M' K! d
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    . X9 y7 b4 W$ D# v5 I( |" y' q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));* t6 e! k7 x- ?) u$ t
  246.       }
    ' ?" F. b  ~; ]/ a
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    & @$ p; b* `2 @0 L
  248.       sprintf(filename,"(%s)",file->file);( h1 |5 e4 z0 B8 `# a# B3 r
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & N4 ?. l( d5 E' U5 j: _
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    / [' ]. ^# r2 X
  251.     }6 I( m+ Z4 _: G# @3 p1 ], n/ M
  252.     dwCurrFile++;
    % F& b( K8 }$ W
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 h2 k6 P# n4 k# u0 n* N
  254.     {
    # \% `  @/ D" F/ J3 |
  255.       bSilentStep=FALSE;
    ! t5 _$ O6 }. L( E# {( P
  256.       bCompressed=TRUE;4 O5 S  a+ Q5 l; t& U# Z) ^& a7 J+ C
  257.       strExtLocal.Empty();) D- H& x( f5 Y: M0 f1 ^  `% f
  258.       strFullName=(*i).second;
    + ~+ q0 _4 q% Y7 p: u
  259.       dwProgramState=AP_CONNECT;/ M( Y% t1 q& `$ J5 c" w) B
  260.       return TRUE;
    ; J9 O' d+ \: Y! u" W& e
  261.     }5 `. u5 \' e& C
  262.     if(!bRestartUpdater)8 E. M" O* ^, H1 z# A" z1 n
  263.     {. ~! }' S6 E* h
  264.       int iCurrSize,iFileSize;7 B$ i* B6 T5 Y2 e
  265.       iCurrSize=0;7 F- B! u6 c2 f
  266.       iFileSize=UpdateList2.size();6 e- V% G! A* d$ s- Q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");( g8 W* A+ V* U) l
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");/ f# W7 C9 l/ _2 U) A7 M- y& ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");+ F) U+ q- u2 j! o
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 P) L$ `# o8 k! t4 F8 W2 l+ y! i/ V
  271.       Fclearf(".\\update.dat");2 O- m, k* y6 D
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    5 ]& d4 {! M7 U; Q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , P0 i, P3 D/ i
  274.       {8 l( [  |* C' e9 P( r% W! u
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()). m* ~$ m  H  r4 _! F! {
  276.         {
    8 B3 b. d5 F, g9 U0 f0 F' B
  277.           file=(*p).second;3 V, T4 q3 e9 B+ \  I) e# x0 G
  278.           sprintf(filename,"(%s)",file->file);. {5 @% M6 o) e) K# D
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * `. f7 s  X. f) k1 j
  280.           iCurrSize++;
    " Y" N& N4 d0 a! \/ A1 v
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));" A6 q& ^) G7 K6 G% Y
  282.         }3 @! b3 K- S5 I6 L( t& X) F
  283.       }
    # }) j* `! x* A% V6 v7 y3 [
  284.       unlink(".\\update.txt");
    1 a$ r: O7 Z* J) y0 r! F* |
  285.       unlink(".\\update.tmp");1 ^$ J8 W! z5 e$ E$ ^* W+ ^
  286.       Fclearf(".\\checkversion.dat");5 w. I1 C" @0 K0 L! o
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);: l# `$ }% a+ G. b8 z0 @- `
  288.       if(UpdateLocal.size())0 U) q: W* v. q0 e! u
  289.       {. V4 k) V+ T* L& ]1 l
  290.         UpdateLocal.clear();: L- C+ ?+ X' A! E
  291.       }3 n4 A$ R, c& ?3 O. O/ r
  292.       if(UpdateFile3.size())* I. L5 X  Z/ ]2 E7 {) b0 y
  293.       {
    3 O# |3 q) {) b- k# T6 o
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; C- G2 J7 Q, `* Z4 J3 `
  295.         {! Q6 P9 \8 v2 \+ ?( m( e
  296.           file=(*p).second;+ g, ^4 l3 Q6 p% i; p3 H
  297.           free(file);
    / L' |( Y; @+ F6 v2 o/ |; H+ }
  298.         }/ W- Z( x, G2 |' T  k2 o3 r) H3 w
  299.         UpdateFile3.clear();/ E& s- `. P5 o2 H
  300.         UpdateList3.clear();4 K+ j% g/ h( j/ F+ r. ?
  301.       }
    / ]6 @# ^( x2 {1 L. u5 |2 w+ ^$ P
  302.       if(UpdateFile2.size())+ M( C4 P' k0 J, h+ z
  303.       {% k4 K8 q  M  c: }4 O3 l  j
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++): b& o2 y, e8 V; h" A4 t  d6 ?# p( {
  305.         {
    5 J$ w/ `3 ]3 @4 x: A- f
  306.           file=(*p).second;
    * R8 }: u! n; g2 P) e1 L
  307.           free(file);6 C- j9 N2 V8 o6 O
  308.         }- B: W3 _7 B0 I
  309.         UpdateFile2.clear();
    ) \- j9 U6 [& l2 v: f# A! e
  310.         UpdateList2.clear();+ a" t0 h9 j- v. v
  311.       }; M6 W" I; U+ A9 v
  312.       if(UpdateFile1.size())
    2 G4 }) m) r9 P! `1 d$ B
  313.       {$ W, I( ~. j# @; G) g* U# ?
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 T6 z' X2 l3 N2 ^9 W3 T5 X
  315.         {6 v: T7 w4 t: ~* _  g; m
  316.           file=(*p).second;
    : }+ I- g# T' [0 V7 i- S$ N5 x
  317.           free(file);/ B) u% _9 U. R4 L) ?* k2 |3 F
  318.         }
    4 Y% r% T+ B- n( U3 l# F
  319.         UpdateFile1.clear();& z3 O" X1 _3 f& c  `/ G
  320.         UpdateList1.clear();
      \" D6 s1 ]& j) T& h1 ]
  321.       }
    3 K! u! H9 f' I7 o& G9 |
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % R3 w) |' _. {5 ]/ g9 C
  323.     }
    8 O# l$ ]/ c  H
  324.   }% S" }! E6 o( |
  325.   return FALSE;; s: j. d8 y) c4 R
  326. }. x( t9 m! |' x% n3 A

  327. * G2 m" a! T: f" I; [" ~1 @, c+ L
  328. void CRevAppApp::ClearAll(void)
    - d( ]7 D  S1 m4 d; O) p% E, R
  329. {
    ! o3 c! F2 v$ j2 q/ Z$ z
  330.   LPUPDATEFILE file;
    ' B: G7 X7 m5 V" a
  331.   std::map<CString,LPUPDATEFILE>::iterator p;  D* x# r! C& j! l
  332. # g: f% ]6 B# P6 H
  333.   if(UpdateLocal.size())' m- p. C* M0 r% u
  334.   {2 l$ K+ d. K+ m+ E' s
  335.     UpdateLocal.clear();7 N4 ?, a, Q* M" K! j7 G- i7 @
  336.   }7 ?2 K2 @3 G0 u$ v9 ]1 @% G
  337.   if(UpdateFile3.size()); }# E1 K) O* c) K8 w/ `" m6 F
  338.   {
    + ~% C7 p8 P8 @$ J
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & q% o; I7 d( ]0 L6 f9 D5 K7 Z
  340.     {- b- M$ b5 }; H- W3 t. U
  341.       file=(*p).second;$ K: ]/ S+ ^" v" O0 m
  342.       free(file);
    # [# H$ R# W( w4 i  V
  343.     }
    5 B: Q, q, X4 |: d! ]3 i
  344.     UpdateFile3.clear();6 \; s/ p& O1 O6 E& D
  345.     UpdateList3.clear();
    & l. Q& Q; y1 ?& o& a' l; _
  346.   }
    ' j  `" O# c- N5 R
  347.   if(UpdateFile2.size())/ p: i( ?; x# [4 F( }/ l0 F
  348.   {
    " i# G* R4 b! \0 M
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 U$ z0 B3 W$ E' r
  350.     {
    ; j8 d, P' |: H$ z6 \
  351.       file=(*p).second;
    4 T3 Y( Q; s. R5 x: j2 [: t
  352.       free(file);
    & ~/ D  z3 Y+ F/ C) g
  353.     }" b, V3 _9 t4 p! m1 O; E
  354.     UpdateFile2.clear();/ Q2 n4 H' H1 o2 k1 V
  355.     UpdateList2.clear();
      I* i$ @7 N) E
  356.   }( c7 q4 q  C5 X8 a  Z
  357.   if(UpdateFile1.size())
    7 M! P) f$ _; M. N) `2 Y& G
  358.   {
    + Z. ?8 C1 o% T6 |
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    1 ~' c5 V8 Q1 ^% N
  360.     {( \3 ^2 U7 l- Z
  361.       file=(*p).second;7 d$ D- @1 O7 Z# a2 o. |
  362.       free(file);
      D0 g. B8 ?) n8 @1 o
  363.     }
    9 O. z2 Z5 ?+ Z  F. D! |7 g
  364.     UpdateFile1.clear();5 j/ M1 i1 n# n' j/ K, u  k2 D
  365.     UpdateList1.clear();  c, `3 Q; a- e: _, [
  366.   }! B% {, m: D9 l) z& R0 M
  367. }  . g2 K* s  n. W: ?( y( k8 P5 A
  368.   % Y# s3 }7 A- ]3 M$ R3 o
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ; ^1 g. n; I. x2 A" L6 `# v4 I! H
  370. {
    ! U) Q" ]  ^1 c4 U; X
  371.   int c;# r1 V& h) D/ Z1 n: g! j( {2 `
  372.   LPUPDATEFILE file1,file2;
    ! f7 s1 B) v* d8 ]+ p  _. O% j' z
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ' H8 r! j, a; R* S
  374.   std::list<CString>::iterator l;
    + S) L$ u0 g% f  u, G! ?" X7 R9 V
  375. - _8 v, w' ^) U! Q
  376.   UpdateLocal.clear();& J! x' ?; q& C
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);, T. O( n$ w: N& c$ }
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);6 l' T* b. [+ m3 D. P8 h: S1 G. {3 K
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);1 N# G0 H  O7 H' S9 Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    1 T+ r. M( T0 d, _& @
  381.   if(UpdateFile3.size())1 a0 v, T9 l$ @) ]0 o  B+ I% x6 H
  382.   {
    2 E8 n6 _8 t! y, M: m
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    & g4 {  [; x4 T" j, A2 i+ Q; J/ u3 T
  384.     {
    " ]; k% L/ Q# M4 O, j
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! N$ S9 H  S( O' F5 N6 u0 c$ u
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ i/ p! l+ x9 r
  387.       {% [% U2 e; R1 \" a/ ~6 E
  388.         file1=(LPUPDATEFILE)(*p).second;
    6 ~6 [8 Z% Y& Z: E6 T& R
  389.         file1->vers=file2->vers;1 W! E5 r" X4 x
  390.       }/ I7 o6 V, @0 m6 T1 }2 r$ W
  391.       else
    6 K  C; r( l6 Y7 m, T$ a9 u$ {
  392.       {
    % S8 [$ m% \( [. M' J
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 ]# C8 [0 S; p5 U) p7 n
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    4 y9 J' Q/ s: q8 _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    3 x0 A( l  {  Z
  396.       }
    * ~$ i, I! u8 P4 \
  397.     }
    5 T3 U, F/ h( @; ]9 J6 ]1 c5 p* p) o
  398.   }2 ]& q9 w* J0 g6 ^: g/ l
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)2 m: W5 a' ~+ y( q
  400.   {0 N" v8 q  Z+ y2 k: G
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    - ?8 `! E9 ~. u6 R/ o  I* W2 B
  402.     {' ~5 b5 w0 a$ ^  N
  403.       file2=(LPUPDATEFILE)(*i).second;: M/ s9 F4 o, p0 K/ T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) O- p/ l: z# W" e
  405.       {
    + m9 v  {4 I1 t, J/ d2 V
  406.         file1=(LPUPDATEFILE)(*p).second;
    ' i% F0 ~# @& I& Z* l2 O7 D) G
  407.         if(file1->vers!=file2->vers)
    + r4 l% j; Q6 W$ N( n- `
  408.         {
    " f# Z6 n6 X) ^* ?6 k
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: K: G/ C3 T; g7 C
  410.           c++;
    $ l1 U" c; _: Y7 w- Z: _
  411.         }
    ! Q5 m" L3 [$ \3 m. d
  412.       }  t! @9 q8 p% b. ?: v# a
  413.       else
    : z" @6 o- \; y
  414.       {8 ?  x. u7 J- z2 }
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. J5 l& ^  a: R/ F! X7 E3 F( V
  416.         c++;" d( N& N; l% g6 V8 R& L1 V
  417.       }
    1 Q9 Y) u; m0 p: c' F* J
  418.     }( R. S2 P* T, k' y/ x/ I& [
  419.   }
    ; l7 t! Z" l: H# ]6 N
  420.   unlink(".\\DownLoad\\update.txt");8 w/ H1 l! A8 A# x
  421.   if(UpdateLocal.size()) return TRUE;3 d8 `* i( ?6 R" `+ ~& o
  422.   else                   return FALSE;' s& @/ G+ g% c# A- Q
  423. }% ?' @/ q! g" R4 J# E

  424. 0 @' `% [- p* m0 f
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    # H5 O; _# t' V2 C. P
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    # ^# ^% W% |: z
  427. 1 S& K: B! K  y/ a% V/ N
  428. & h$ P: q+ d0 h

  429. & y- P, ~& M5 H, h2 Y" E& [1 z/ v
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    , U" k5 |( a0 I
  431. {: l1 p* `. ~0 ]  {+ ?
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ; d+ J8 R! A3 e0 q' s5 h( j
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . |5 q- D& l2 W% q) m3 H
  434.   {
    * `0 G2 }8 T: k& E  o& ?7 c
  435.     char szLanguage[50];9 l. H" G9 K5 K1 e: B2 j( V% l1 g
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % D5 ?' I& j- i0 w7 ?. {
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! t9 C: m9 W9 ~1 q& W( Y% G
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + z9 b8 Z* r8 B$ o! H. Q
  439.     else                                   m_iLanguage=ENGLISH;* l1 E" M7 S9 o# X0 m
  440.     char szRegister[100];
    ) m! l/ m; A* u" j3 x0 p2 F. o
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    9 p  a; U+ x% d
  442.     strRegsName=szRegister;
    4 V' W# N$ O& |! l1 j
  443.     char szPatchURL[100];
    6 ?6 u6 Z$ P" }  ^4 c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # v7 x1 J# m$ a$ n1 l6 A
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 M# S3 o) S8 c; ]3 B
  446.   }
    5 ~! W" f! k+ B8 U! s
  447.   else- O4 V0 k4 I4 p$ M
  448.   {
    , Y' W( m; q+ M) r8 @
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 ]( s! R, Z3 Q  S$ o1 X* |" ?
  450.     strRegsName=DEFAULT_REG_URL;
    0 ?7 w$ A" y& l- l8 }
  451.   }7 a) l! M: m& p3 k
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 N/ f$ n% p. z
  453.   {/ g8 m: \% H" O* y( G
  454.     char szIP[50];3 u8 T8 ?9 \( k0 b7 D$ S
  455.     char szDIR[300];
      b! O( r! G3 d$ l0 x$ |- D" K
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))" j! v2 l- R* L6 _" ^$ F# i
  457.     {
    ' W# [- I/ x3 Q# i6 C' @. f, `
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    # Z  v8 x8 ^1 R$ }
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");% O. I6 m2 ^4 R2 o" Z9 v9 s
  460.       strHostName=szIP;" D1 V% h2 u% U1 k  |7 p3 R
  461.       strHostPath.Format("/%s",szDIR);9 K) J( W  r3 Z2 o3 ^+ l" h
  462.     }8 k, ~3 j' @$ I2 P' X. [
  463.     else
    ' c6 M! |( `0 j. ?: c. R# v
  464.     {
    - D. s7 u0 K. `( j4 x% }, k$ f
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 p% d) e. S" s: S/ G
  466.       {! O4 y' U# _! b9 b+ \. L- g* ]2 d
  467.         char szLanguage[50];) T5 [# O$ {! ]- V
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, U4 d$ [; I$ B, V$ m
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! u6 y2 G! d. m$ @+ R$ t
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 S% M- x. `' |
  471.         else                                   m_iLanguage=ENGLISH;/ c  \9 l" v$ \% G) S0 N
  472.         char szRegister[100];  b. I! [$ l! A; u
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    * L) L2 Q; Z3 u
  474.         strRegsName=szRegister;3 V1 m$ Q( Y- h' C- b" O: Y! \
  475.         char szPatchURL[100];
    0 ?5 I' N+ A% E; g- K
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 A4 u3 C. u, x7 ]2 D
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ X" y& t7 S0 f( W" v( n: I4 W1 t
  478.       }
    ' N  v4 M2 Y0 j4 F, {3 t
  479.       else1 t7 h# v* o5 }% j
  480.       {
    & c( a! @- ]$ V  e- k0 n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. A3 `% X2 u% C4 `* \
  482.         strRegsName=DEFAULT_REG_URL;- a( K& z! s4 P* n2 z/ Y
  483.       }
    ( V/ `/ @! w# F! Y- W3 I- a& w
  484.     }
    5 ]9 r6 u; {" f+ X$ Y- C4 |2 _
  485.   }" @5 u" M! o: p+ e8 n6 g6 |
  486.   return true;
    ' v, R5 u- h2 N
  487. }
    3 t) ^. \1 U' Y4 ~8 |. O  F

  488. $ J! j  Y4 |9 L9 h0 R; X
  489. #include ".\ZLib\unzip.h"
    * j" B; |* s; x' x" U
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    # o3 W+ `7 {2 A
  491. /////////////////////////////////////////////////////////////////////////////
    - K: g! x$ v0 J) B- W1 z9 M8 q- I, w( L* G
  492. // CRevAppApp initialization
    # T6 P" F. \" d2 N6 ~

  493. + V1 r/ @0 n  h" D
  494. BOOL CRevAppApp::InitInstance()
    8 P' j, c, U* W
  495. {& G# G& n" p# l: B2 b
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];$ G3 [  R1 u3 S( W& ~6 F$ t
  497. , W7 p; y" ?5 F5 j3 R1 w1 W$ k; G$ b
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    $ o) B  `: L! n6 G. G( X% ?
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))! v1 }8 i+ `" X1 g
  500.   {
    . d! d: U1 s$ E1 k, X1 ?
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");, q) E1 g) Z! Z. \
  502.     GetPathFromFullPath(szPathTarget,szPathSource);, x7 Y! D$ @, p1 j& w4 v
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))! n9 F4 L( M1 N; N
  504.     {! B2 }( O, M# {2 p0 M
  505.       strcpy(szPath,szPathTarget);' ], F. x, L  U. p3 U: A0 r! c
  506.       SetCurrentDirectory(szPath);
    & L" _( N6 ]9 v
  507.     }
    ' E8 L+ T6 U0 ]) u
  508.   }7 w1 B: W% }0 r9 J
  509. #ifdef _DEBUG6 w! x. h1 w, m3 B3 P. g% X
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% W" |6 j% W& G& q
  511. #else6 `, A0 r* D3 a" U! `: I
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). _% C. c0 b  c
  513. #endif' k" ]0 n' ?6 Q6 W" I! R, A5 @' u4 }
  514.   {, C, ~- x9 Z# g" z, |2 u( {$ H7 {
  515.     char tempFileName[MAX_PATH];
    ( x# X: [/ T4 J0 A0 {8 s. g
  516.     strcpy(tempFileName,szPathSource);! J, C8 x& u1 l
  517.     tempFileName[strlen(szPathSource)-12]=0;
    9 Z, C, J; P/ q# I* {9 }9 h1 Q9 _0 J+ U
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    3 w: ?# Q! s0 u; z$ U6 V9 A6 T
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    : t8 j5 Y$ k; k8 ?8 ]; F' Q5 D! f$ l
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    " d6 a. U! H1 D- K2 }0 B3 i
  521.     return TRUE;3 e8 c# N# q% v2 \% B, t, c2 A# J
  522.   }
    % S) J8 T6 |$ A9 y
  523.   // Nuke 0118: Delete run.exe( \& R5 W1 h# O- @5 f, s
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );1 Y& W+ y5 O- @) M+ d0 @  I* i
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");7 B- Q) _4 K8 q5 ^- s
  526.   if(!ReadCfgFile("Config.ini"))
    3 |2 }& U3 T& K" N+ c2 F
  527.   {
    & y  \* Q$ i- o" o/ o
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);- N$ P1 J/ f8 n. U$ c8 a/ k( p, ]; X
  529.     return TRUE;' [7 S9 U. O7 X( Q4 z
  530.   }
    5 a: n4 l- i- C
  531.   HANDLE mutex;' ]  ]7 W; ~" P7 y. }
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    / s: ~. q: e  j* f7 a6 L0 v
  533.   {6 `# e+ x$ O8 M) x% @+ F' @
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)! h; C0 s. b2 T& T
  535.     {
    / M* y; J# [: S7 O5 R
  536.       CloseHandle(mutex);
    ( R' H0 ?& I2 Y6 U
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* A  q" c8 ~6 j/ d6 A2 V. @
  538.       return TRUE;0 d5 a( X7 I& R) E
  539.     }4 N$ n' P$ F7 v/ n! h) ^+ k: f
  540.   }  
    % d! L. ^5 z6 B' T9 J/ C( O/ P
  541.   CloseHandle(mutex);
      e  c! v* Z3 W6 P7 N! {* ?& }
  542. 3 a0 d1 r1 T8 m0 O/ V' h
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    - s0 W$ h/ o% c; `8 S7 R
  544. / _9 t: m- S# u
  545.         AfxEnableControlContainer();$ J. P9 u9 Q. v: D5 B
  546. 2 L% u& T0 C: m" f; Z; R; y1 Z
  547.   bCanUpdate=FALSE;
    5 \3 x) L# g9 j$ f' j
  548.   dwStartUpSteps=1;
    $ h' x- U# C& \7 C* B2 z: z
  549.   dwProgramState=AP_NOTHING;
    ! Q, v% }  E9 ?, O2 Q" r4 V

  550. ' W7 q* V6 m0 r) o6 R/ H5 H
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    2 b! n+ P: g4 o+ X* L

  552. # `( l. h4 T* [) y+ ?
  553.         // Standard initialization
    ; S! b% V) ~! |( e# ?
  554.         // If you are not using these features and wish to reduce the size
    4 P; y' v$ q4 t
  555.         //  of your final executable, you should remove from the following
    5 A+ i2 j5 r+ V# X1 m6 b
  556.         //  the specific initialization routines you do not need.
    - j' p) R9 d6 I, H+ R; [7 w

  557. % P. c, ?! `5 h6 C7 d/ b8 G
  558. #ifdef _AFXDLL) X/ T8 H4 }9 j$ r  t$ N
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    # {0 Z5 E4 \4 Q' E0 G9 b- F
  560. #else
    & V* E4 k* x4 A) ?$ s. n! ~
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically! {( Q5 A" p" N5 {$ w: A! q4 h
  562. #endif  s* O0 W9 F2 e8 I' G

  563. / _) s. _7 U2 k) X4 T
  564.   dlg=new CRevAppDlg;, K( h2 Z4 F2 U
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    / ?; z6 a: k; {8 W+ d- o/ r& E
  566.   dlg->ShowWindow(SW_SHOWNORMAL);% A- L6 z, V* v8 L# C- r: \3 W
  567.   m_pMainWnd=dlg;
    . @* ?  C$ y4 X3 n: H& [

  568. , v# d1 [; }% {( N* ]. z
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    7 N* g" Y& V4 S

  570. & e- @1 Y& q3 r( k& `
  571. //  GdiplusStartupInput gdiplusStartupInput;
    5 Z; t) N9 ^5 L2 a/ [
  572. //  ULONG_PTR gdiplusToken;
    % e- J" J5 G" D% ^
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    4 g. z* v  h3 q: ?& Y
  574. 4 H  |+ v0 h1 Q- Y! ]* C: |8 A
  575. //        CRevAppDlg dlg;
    ! S, G6 e8 }- c0 M* Z; {" S
  576. //        int nResponse = dlg.DoModal();; M7 W/ X! T3 ~3 P
  577. //        if (nResponse == IDOK)
      F4 Y# o. [9 Q- x
  578. //        {
    7 i0 m0 o3 ~; X5 Z) _
  579. //                // TODO: Place code here to handle when the dialog is9 _7 E& ]  [3 V! [2 x% G0 ^+ R
  580. //                //  dismissed with OK
    4 z! q' W- T' m# R
  581. //        }
    $ H. s& \6 T8 K
  582. //        else if (nResponse == IDCANCEL)
    4 q$ \) n) a4 `+ u) m5 l  m
  583. //        {/ s* N  p6 B% t. W
  584. //                // TODO: Place code here to handle when the dialog is) E8 C& [( u) o8 e9 q; @4 O* ]) M2 s+ f
  585. //                //  dismissed with Cancel
    0 ?: Q; Q: i" Z- Q' T( [
  586. //        }) G* f* o& c3 g5 m8 M, \( N

  587. 4 v9 S( A; m' f# z
  588.         // Since the dialog has been closed, return FALSE so that we exit the- H2 O. I/ D2 V# `* U  l$ @
  589.         //  application, rather than start the application's message pump.
    7 J; e. u# _6 T
  590.         return TRUE;" ], B' U# U4 t
  591. }
    % w+ b' G# A4 }: t# ?+ E

  592. 8 t+ P5 ]7 ~) u! }, x2 f. z8 R8 L
  593. char *CRevAppApp::strtok3(char *pSource,char *token)# z, J% |0 P( X( `
  594. {
    9 |) H+ ~% m" [8 a
  595.   int i;* x7 U' `6 }: I  X4 z- o+ X2 B2 U
  596.   char *szRet;0 J4 I- `3 e6 S, X
  597. * p) L% j1 m! s- Q7 U& D
  598.   if(pSource) { itoken=0; sztoken=pSource; }' X- ?8 ^, F! i1 _( j) L3 d
  599.   if(sztoken)
    , I; z5 k2 _- k
  600.   {" j  Y" ~( Z( L# I4 ~$ {" K5 p
  601.     szRet=&sztoken[itoken];
    3 E, W6 S0 b* L0 ^6 N- Z
  602.     while(sztoken[itoken])/ J+ O& S8 T6 e: U) v
  603.     {: v* z" v. k- E3 W# V2 h- w+ m
  604.       for(i=0;i<(int)strlen(token);i++)
    ) w/ p3 d, \% T
  605.       {
    $ X$ O* Q& E  I8 h
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    5 ]2 x  P  w  I* f9 d! j) Y' n
  607.         {8 i1 ?; E  @# v% Z# j( s1 a
  608.           sztoken[itoken++]=0;2 H* V7 b9 e( H; i+ o, `
  609.           sztoken[itoken++]=0;4 @8 p& A2 `/ F/ K8 _
  610.           return szRet;- |) ]: H1 \5 a& f
  611.         }! @1 ]+ \+ L' o/ x
  612.       }
    ' `+ a5 @* \" t+ L+ e% R
  613.       itoken++;
    " o6 L2 q, M5 R8 p1 b. X' Q  @
  614.     }
    2 R4 o, y3 ?  Y. x2 ]; e- k0 Z
  615.   }
    ! F4 K7 E  a0 e- s8 D& ^
  616.   return NULL;9 U. u" I) V; O8 R
  617. }  L: l' B, G* e

  618. # ^: _/ q3 W& }! M
  619. void ProcessProc(long Total,long Current)  y' @4 K% H! `# {4 g5 S
  620. {
    . [: H% [# q4 b3 l/ t2 t
  621.         MSG msg;( X/ k( J) w( Y2 d5 v* l( s+ k
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);* A: m% D% J+ f- a
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' I6 b" ^% G( P9 m4 r
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    - Q* I6 @0 r+ m' b& T
  625.         {
    " b- }- N2 h- X$ G& A6 Y: L  T
  626.                 if(!GetMessage(&msg,NULL,0,0))
    # G+ {) X/ [0 s" ~- G" E: b5 I) Q
  627.                 {
    " |9 \0 Z& @; M
  628.                         return;. `- x/ ?5 y2 l) w1 m) v3 X
  629.                 }5 U$ }: w4 o8 j5 h9 i: E# Q
  630.                 TranslateMessage(&msg);/ D- p8 U4 M( p5 P. n; P. I  a4 I
  631.                 DispatchMessage(&msg);
    0 k+ y5 E6 X! y" s+ A& U
  632.         }       
    1 j  O6 e/ C: _3 \2 [- A' a' Y
  633. }
    $ y3 k6 _' `# T
  634. , W# ~5 ]5 N: z$ C9 g7 W+ b( T
  635. BOOL bFirstChar=TRUE;6 C& ]: W0 }$ |$ }8 ~. L2 P/ g$ P

  636. - d: h3 Y, k) y: T" |8 c
  637. BOOL CRevAppApp::OnIdle(LONG lCount)8 }/ {9 U' C3 O5 ^* N5 @+ w& T# l
  638. {2 {  |- I2 S9 j' V3 X
  639.         // TODO: Add your specialized code here and/or call the base class
    5 ~& @$ v0 w8 N  X; v
  640.   switch(dwProgramState)
    ' V0 j+ F) x8 a& X3 G# E" R) O
  641.   {2 e: Y. D5 B+ U; o* P% F
  642.   case AP_NOTHING:
    6 r1 k2 Q' F+ A1 C0 I8 w
  643.     switch(dwStartUpSteps)
    5 h1 e3 F3 M8 ^  w- C/ `
  644.     {5 ]9 g7 y  ~$ k9 K& Z7 Q
  645.     case 1:
    6 m4 @. H7 x4 z( f& {! `
  646.       {' x" z% O5 U: |
  647.         int i;
    2 k; W/ l* z% b2 \# U# F
  648.         CDC *pCDC=dlg->GetDC();/ k! ~9 s6 j; ~, W3 A
  649.         HDC hdcwnd=pCDC->m_hDC;
    $ U) d; [$ m0 t8 B) b1 |
  650. //        Graphics graphics(hdcwnd);) F+ e5 c2 S. L! C3 j5 y, f
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    8 ^* a) Q! t& Z6 K0 I, _) Y; U/ m* b  z
  652. //        INT iWidth=bitmap.GetWidth();2 }0 @$ ]- s, P( @- D
  653. //        INT iHeight=bitmap.GetHeight();
    ( V2 R3 z( E6 T( q
  654. //        Color color,colorTemp;% {( }) E+ V+ A! ~, O& {% m1 o
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& y/ A6 @9 K3 \) t' l! {
  656. //        {
    1 T2 K- |* ]' \& k0 S
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)( @0 ]. `% u# H4 W& \) ?
  658. //          {
    ; h# D9 m# n- Y4 g* `' P
  659. //            bitmap.GetPixel(iColumn,iRow,&color);% G" \9 i- m6 g
  660. //            colorTemp.SetValue(color.MakeARGB(! L1 l0 C/ x8 B* q
  661. //              (BYTE)(255*iColumn/iWidth),3 N! {8 o5 Q4 a
  662. //              color.GetRed(),
    + R! Y6 F8 |4 w3 Y" q
  663. //              color.GetGreen(),
    , s4 y+ @( y' t) M
  664. //              color.GetBlue()));
    & a. L) A: a; D! d3 |
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    : {6 O# O+ r0 @0 g
  666. //          }
    - l  y& c  |0 [
  667. //        }, `0 Y6 z- [" n" L' F5 v' b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);, \  p! }  C2 c
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 E. i8 L! \6 P4 _  m0 ]
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # ]/ ~% |9 b" [( b  b- u, f
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % k4 I1 J9 H9 q7 e2 r' K6 n
  672.         for(i=0;i<240;i+=8)3 [" l# y, S- Z" Y9 L
  673.         {
    7 H  J# K  }+ r. P6 L. K
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 [5 o: V3 p7 }, l; R
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 ~; ], R) E# |# p; p! ?- A( |: L
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* d5 R1 m0 g% y% ~
  677.           Sleep(33);8 H2 ]3 ?4 Z/ Z) H0 v8 z4 f+ d3 y
  678.         }; S- @9 p* L$ W/ V1 I% s( j0 s
  679.         Sleep(1000);# f* q" {2 \7 K5 B- ]
  680.         for(i=240;i>0;i-=8)/ ?, `/ L& C  b% v$ X2 W8 N
  681.         {" i+ u7 u, c4 r( j
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. z  R" S% I4 C- C& O
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 }, Z& u- ^) H/ c- T
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 j! M6 a8 `8 c7 }0 N7 {8 }* `
  685.           Sleep(33);
    & p2 m6 v: K+ V0 s5 n
  686.         }
    # p8 a' w: x/ [; A7 ?
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);* v2 G. ]. b* b8 q
  688.         dlg->ReleaseDC(pCDC);
    6 s! J% q/ M. O5 o) w* P4 D
  689.         DeleteDC(hdctar);8 J$ e. N9 o& k2 W! D
  690.         DeleteDC(hdcsrc);2 E# W0 o7 a/ \
  691.         DeleteDC(hdcorg);
    5 U1 x6 j7 \" R- t! W
  692.       }: }9 l  S* ~! D+ ~  R; ^
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    1 t; ?+ e/ c1 c1 ?
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    1 Z) V3 b+ L, C- L  B4 ~  t
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    0 R& [& P2 l: V% l8 S0 R4 E
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    2 _/ @* Y2 [, ^( o
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& P3 m3 C4 I$ N8 z' m
  698.       if(!Dn.Connected())
    * @- L* [; t& w
  699.       {
    " v& `: ]! ~8 G
  700.         dwTotalFiles=1;
    ( `/ f! C/ R% X2 B/ m" y4 |2 X
  701.         dwDownLoaded=0;
      P! ]8 u& b* W6 s) Z4 i2 }
  702.         bSilentStep=TRUE;
    . c  J; Q$ P4 y; C" v8 L. @  [
  703.         bCompressed=FALSE;) g& i1 X1 h4 m( r% Z: Z; y2 e. l
  704.         strExtLocal.Empty();
    ' ]" q% q5 {4 S+ l, y
  705.         strFullName="readme.txt";6 k8 t. G- m1 H- Q7 g; N$ v
  706.         dwProgramState=AP_CONNECT;
    ( i" B2 l' {0 M  \9 K* U# ~
  707.       }
    3 L, D# T% A. i! Z" z! d6 V& r( q* [
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    4 Z! z3 ]) t8 U; W( X
  709.       dwStartUpSteps=2;* A- s; x6 C# M
  710.       break;
    . J! C" P2 O7 F0 y7 ^
  711.     case 2:9 [8 w* b& V2 I  c8 C
  712.       {* I8 ^" \/ ~2 E. i! n0 p$ n& A
  713.         int iEOF;& A9 S, Y) V7 A
  714.         FILE *fp;
    * X# x' W5 r" h% _* {& w$ v& e
  715.         char szString[512];
    + I. S9 F9 E( P5 n% ?/ X; p& X
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 h5 O( w5 d! a! V" T
  717.         if(fp), Y% N& h2 I- S! I
  718.         {
    + j/ N/ t+ @) R, n. |
  719.           do8 Y, L% N8 q& M7 }& N
  720.           {
    7 F5 ]4 {2 W$ ~% R; h8 D
  721.             iEOF=fscanf(fp,"%s",szString);
    + Z3 n1 H/ T9 t6 c. i/ c5 H
  722.             if(strlen(szString))
    ( d& T* X& [' T& c* l  y
  723.             {/ w& ?4 X1 ~+ }; O0 O: e7 Y
  724.               if(bFirstChar)
    # j1 l2 i7 h+ k$ e9 f
  725.               {
    / `* m& D" v2 u- @7 M4 ?8 c
  726.                 bFirstChar=FALSE;
    / a8 a8 ]! w' t5 n  r
  727.                 bConnectIsBig5=FALSE;
    $ l' o, b$ ?8 f/ T; V$ j! d
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    0 W3 R+ v6 o' C+ W1 c# C
  729.               }% {( t" {; s1 n! S  q4 v
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    % [! g/ s5 z! P5 _2 a1 U
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - f) E7 `; ^% B
  732.               dlg->m_ListText.AddString(szString);
    ) _+ L. L/ a& G+ F! {: e. E
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ R# J0 f: R8 F  ~% \
  734.               *szString=0;( C6 }2 R4 _+ ~! V' }+ b
  735.             }! R' `2 \/ f, r* q
  736.           } while(iEOF!=EOF);
    * P- }6 }* ^$ U1 I  d* e# \8 G0 k$ w
  737.           fclose(fp);" a8 S7 r+ y+ u$ j2 u
  738.           unlink(".\\DownLoad\\readme.txt");# w/ M7 @' n. \% _/ m
  739.           dwStartUpSteps=3;  c# z/ P- g, c7 @- Q& z4 X5 L
  740.         }; M; C0 o$ `% M3 A" [9 s
  741.       }6 T  p+ ^! j! ]% H- D
  742.       break;
    + i: E( H, `# r# h$ w
  743.     case 3:
    7 A6 v6 w1 T/ J" m
  744.       if(!Dn.Connected())  d4 _# l# c4 B. _2 ~: Q1 n7 H
  745.       {
    $ r  V4 J- |; L2 l, w% M
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);" A9 r  s( v5 e! U
  747.         dwTotalFiles=1;/ c/ B! x" J9 g) j
  748.         dwDownLoaded=0;
    ; }( A5 A2 s- r" ]+ Q  l
  749.         bSilentStep=TRUE;
    5 X* }& K' n, u' p, j+ W' n
  750.         bCompressed=FALSE;0 f, H6 B9 i. p4 i3 D4 O
  751.         strExtLocal.Empty();* f+ E4 J/ t- W3 r9 S" k+ z1 L9 z
  752.         strFullName="checkversion.txt";* s  C# p5 ~4 [5 W
  753.         dwProgramState=AP_CONNECT;: i# p% D  G2 H1 |$ r* |# y
  754.       }
    5 h, d1 Q' ]5 I6 D7 d
  755.       dwStartUpSteps=4;
    8 s4 U; h/ c4 ?) p1 A1 E5 P
  756.       break;/ x: U6 k8 P2 s* i
  757.     case 4:& I' H) O1 [6 G- R7 ^! P6 q0 N
  758.       {1 {. |8 W: r1 o
  759.         FILE *fp;
    9 @, m0 A9 q: D! I
  760.         char szString1[128];; ]* [7 a/ ~1 Z5 ?- t. D! v
  761.         char szString2[128];
    9 P& s3 d% a' m- @7 I% z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    9 w% [& L% _# j4 A; c. @
  763.         if(fp)8 ~  r  w0 I* X  _: O
  764.         {
    ( x3 ?! h! b4 u
  765.           fscanf(fp,"%s",szString1);
    % Y# h1 m5 R* y) g% z$ K
  766.           fclose(fp);
    2 ^; |" g) c4 W7 D# ?7 T0 k
  767.           fCheckVersion=atof(szString1);7 U1 T! A6 c& ]/ q( d4 B) q
  768.           fp=fopen(".\\checkversion.dat","r");; {7 q5 h; `( j7 ]- W6 }/ k$ s
  769.           if(fp)
    ( D/ t: _. r# j1 ?2 b; ^+ p& W* h8 Z1 V
  770.           {
    6 c( |3 ]  i. ^" b) a( I
  771.             fscanf(fp,"%s",szString2);4 N2 u+ V. g, g5 {4 a- _; {
  772.             fclose(fp);$ m) p8 t% ~: X: f5 O
  773.             if(atof(szString1)!=atof(szString2))
    5 i9 I! x2 J' x7 e' h
  774.             {
    # U0 Z5 H# @# W' R
  775.               if(!Dn.Connected())
    8 d! |0 n3 _& w4 Q
  776.               {3 l- p7 v$ |3 C, Y
  777.                 bFirstUpdate=TRUE;2 n, U: [) Q2 S  [/ c6 C
  778.                 dwTotalFiles=1;
    " z6 {, |* Y# W1 ~6 C
  779.                 dwDownLoaded=0;
    , a; I! H3 E5 W3 f! u+ [, {
  780.                 bSilentStep=FALSE;
    ( d% @) i7 U  N& D4 _4 a
  781.                 bCompressed=TRUE;! i4 t# F0 N% D) E) o; \# {
  782.                 strExtLocal=".\\DownLoad\";
    . f' \" D* y  k
  783.                 strFullName="update.txt";6 c3 `7 Y; o( T" g: _
  784.                 dwProgramState=AP_CONNECT;$ N8 l1 q- P6 ^) U1 ]7 E, E$ U; U- \
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 u3 `. Y4 W) m5 O6 A
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / B" R$ b7 o/ h0 I2 `: s
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");; f( F6 F! d2 P0 O! t

  788. / V3 k3 f5 q! F1 {
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - T/ I7 z9 N0 x* S) y" L
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    9 U+ V; I! n( Y2 M
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1): V2 v# ^" J7 K& _: S& B1 ]6 Z2 Q
  792.                 {6 {& C6 s- E. ?: |& [  _
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");9 h$ D) T$ e' D2 M+ u; w: v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    - t8 X! N) S5 r: ^. t7 w' |- R
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");  @8 W9 @; N7 n9 S4 I& V- C, _
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / @( H: w" F1 k% _- G

  797. ' I% \7 D) c$ X# I$ a3 u
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! L9 V% v6 D# v  S1 }: l/ \
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 D' M; `9 D& y4 l9 Z4 s7 l/ w) Q3 M
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");; O3 E8 g. Q: W9 N! J$ W6 a. B9 \1 |
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) K3 t8 f. S7 W8 i+ ]* S; R
  802.                 }5 n" w- k# o- }2 A* L3 o( T/ ^& X
  803.                 dwStartUpSteps=5;: T# f" S. F8 F" B' G) I* D2 S
  804.               }
    : p# F! |  K5 y
  805.             }
    : N+ S  a3 j7 E
  806.             else) |3 J! _. @  `2 _
  807.             {- z4 e4 [* |! U& q% S
  808.               unlink(".\\DownLoad\\checkversion.txt");
    3 x; C$ ~  c& e( O) F& [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    % c7 E) T1 ^0 e( u& ^5 i8 x
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    & d% C) Z0 A+ L  D
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 _  l- H# Y1 P0 i
  812. $ K# U( K  F7 r1 ]0 ^; R
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 q% x3 Z$ o! A* I" S% c3 ~
  814.               dwStartUpSteps=99;
    / J7 _% V/ [7 @, `% a
  815.               bFinishUpdated=TRUE;7 _+ d. T; z: v7 X7 e
  816.               bCanUpdate=TRUE;
    $ Z4 v) }) }' B' M( y1 ?8 r
  817.             }7 P/ y8 \% E; X- f8 Z/ Z- w: X
  818.           }
    / P9 L' _. Z4 {% D& D
  819.           else' j: x- ]3 `* F- N- m1 n
  820.           {
    3 |9 T- j/ p" }! A3 l/ T
  821.             if(!Dn.Connected())! ?7 L- p9 J1 |1 s8 E3 `
  822.             {/ \2 W, V' z5 K% R) ^
  823.               bFirstUpdate=TRUE;
    , u6 H1 c6 Z5 t* O0 w
  824.               dwTotalFiles=1;, M! L: j: E: S; V9 w
  825.               dwDownLoaded=0;
    : K+ K- w  [2 ^5 r# p5 k/ r( m: a
  826.               bSilentStep=FALSE;0 V& K- s5 y0 x/ _4 D' K
  827.               bCompressed=TRUE;
    8 S0 j% `5 x! s. q& I2 r0 S0 R
  828.               strExtLocal=".\\DownLoad\";
    5 U" a. t3 l% i
  829.               strFullName="update.txt";8 ~- q& \: \# ?* O$ ?
  830.               dwProgramState=AP_CONNECT;
    5 v% v+ d( _% c1 s
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: k1 v. n1 W5 w6 {' b- O! k
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 Y' J7 T, d- p* |
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * X6 z' F. w- [" A
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ k. H" Q6 g: E$ S" u+ R
  835.               unlink(".\\DownLoad\\checkversion.txt");7 H# d, ?$ l# l4 O3 w6 t# A
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    # z' ]4 f' e2 K$ Z; `  r9 F% g, N
  837.               {5 ~$ {5 b, n+ D0 J  X- |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    9 }, e# d/ N( h9 D; h% W, b
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    / e+ I7 ^. @  w2 H& k1 k8 P
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    9 v8 B- Q) G$ M) Y& S2 e$ W0 I
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 T  p, m$ L+ }0 |6 |, X
  842.                
    8 ?+ N3 X# t; x, d7 T
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - s# C' F1 h- Y; M+ X3 t' i
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 Z% {& O3 U2 W7 M, F- ?$ A. J
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 r  {4 `; {9 p0 W9 g+ Q
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / q+ A, x% `# s2 r! r  S
  847.               }
    7 @: \" ^- |+ B, w3 v/ l9 F' J8 r& P
  848.               dwStartUpSteps=5;( Z( D0 ^. m8 M! `6 _7 S
  849.             }
    " x" S9 w, ?; [) P+ S1 I
  850.           }) B/ f2 k; M' A: r
  851.         }
    ! i$ L6 _4 q! W0 }
  852.         else; E$ M2 J& |  y, a4 G1 Z
  853.         {: K, ?/ W: _0 S1 U* C. c
  854.           dwStartUpSteps=3;
    . b# p/ _3 N% u. @- t
  855.         }9 M% O5 J+ d1 B! _4 c) d
  856.       }
    8 t2 V6 |9 U8 Q- F2 h$ E) p+ @) j
  857.       break;. l- v; P9 L+ w5 e  h- L
  858.     case 5:2 E. u  _! v9 p" H" V
  859.       {3 z6 q0 `* z$ x, W
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)/ r9 D- a; J, |9 R. c3 z5 P: @
  861.         {
    7 A8 [9 r0 V1 C( N6 ^( C
  862.           int opt_overwrite=1;
    ! g$ u: y' @. G7 v/ `
  863.           int opt_do_extract_withoutpath=0;
    ) {' Q& V& X0 @0 i/ c+ ]7 d
  864.           unzFile uf=NULL;% _# N' B8 L0 U0 q
  865. # T2 y/ R4 D( x  q5 S- {
  866.           uf=unzOpen("Wsa.zip");
    1 G6 b! ?4 A( n7 R' W& _9 z, N. K
  867.           if(uf)* n3 O$ Q3 J4 m% s+ |
  868.           {" g, {7 K) i* k! \. y7 q* L
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);0 u5 X! w# l% \( I+ i0 t. [/ e
  870.             unzClose(uf);* D8 P! H; k3 a3 \0 p7 }) V
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");$ b3 s, r- H* z4 M+ j# ]" [7 b$ I
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");9 D3 j3 j7 a1 n5 h3 {2 @# x- B# P
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    9 y$ S2 K) M/ C5 {& H
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. h% m. K; Q) ^, c
  875.           }9 R4 Y# S1 ?: _/ b8 G. {& O
  876.           DeleteFile("Wsa.zip" );! @2 o* B( \0 B' V
  877.         }
    % ~$ P% I$ Z5 j/ K  B

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

+ p/ V9 S2 w9 }$ q9 b# K9 s+ ~' V$ R  Q: W3 }4 m

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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