找回密碼
 立即注册

CSUpdate.exe源代码

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

$ f* X  P) c1 D5 m$ G" C: g/ D
  1. / RevApp.cpp : Defines the class behaviors for the application.5 o7 i+ a9 t- J
  2. //
    # v& Z- c) D) c" x, ^
  3. ' d' A& e5 V) @4 s8 ]( w
  4. #include "stdafx.h"5 f! }4 g/ G5 N' i

  5. ) W. t) v- v9 m5 w( ~0 A( I
  6. //#define UNICODE
    7 f/ [! K# z8 J
  7. //#include <gdiplus.h>+ s1 G1 S  h! Y3 f
  8. //using namespace Gdiplus;
    0 O( w. Y$ Q) A5 h) k* A! Z
  9. 4 U7 W1 L2 _) E! l. {7 x
  10. #include "RevApp.h"
    0 p5 y* Y8 ?0 a: U: z' N
  11. #include "RevAppDlg.h"
    $ n! _) a" E6 P2 m5 f/ b

  12. 2 X. K- Z$ C  q. g3 }& P$ C/ |
  13. #pragma warning(disable:4786)
    : w9 i0 @8 g6 B" J. r
  14. #include <map># h6 N2 g8 r2 T: C# [" ?
  15. #include <list>5 b  t4 ?. r( n" X2 b
  16. #include <direct.h>
    ) Z* ?" N; L- B3 {" e$ ^+ c

  17. / k# s0 `- A% |
  18. #ifdef _DEBUG9 k" f  k7 x) F  Z! W; [$ z
  19. #define new DEBUG_NEW
    ( M7 J) X% I# g0 M: _6 R
  20. #undef THIS_FILE7 d; |. F0 S1 q/ D. `8 O) B0 T9 B% |$ ]
  21. static char THIS_FILE[] = __FILE__;
    8 `! o" ~; \7 {5 P
  22. #endif' u( a8 n$ c% z. h; \% _
  23. #include "SkinResDef.h"
    $ d0 q! Y  ]& N* [; b+ E; b
  24. #include "ChangeBG.h"* K( G5 b- ~. q5 d; }3 R
  25. #include "AFXINET.H"- P8 [+ z$ E1 R

  26. " l* I. k1 D  ^1 g" a9 e
  27. #define TRADITIONAL_CHINESE 09 E0 t" g- w. R
  28. #define SIMPLIFY_CHINESE 15 r9 d: ~! I9 a4 m5 W
  29. #define ENGLISH 2- m+ W4 t/ k) J
  30. int m_iLanguage = ENGLISH;9 s. l1 X5 R4 V  j5 B1 h
  31. /////////////////////////////////////////////////////////////////////////////
    ' B2 g3 q/ G1 m) Y" N2 z
  32. // CRevAppApp: i! w2 G5 `( }5 J* r/ T  k
  33. - l' q" W; E% d
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" N8 O# N0 I! a( O, @) U+ K
  35.         //{{AFX_MSG_MAP(CRevAppApp)$ f! E9 G0 \) P& L* d6 I  y2 f4 L
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.7 y4 Z% Z- A, a9 E: a1 d) a2 Q% u" F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!7 A: G( z+ e" P* J6 U" \
  38.         //}}AFX_MSG
    ) I2 u; U# \  i' M- }- R
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    " _# J. {0 `) b, B! l: ]
  40. END_MESSAGE_MAP()% s/ d) j( ?1 p/ N& p2 x$ o* C9 F0 T

  41. , P+ {4 ^9 ]4 V. p4 N# D
  42. /////////////////////////////////////////////////////////////////////////////1 F! c  w! n3 o4 B3 s. p' ]* U
  43. // CRevAppApp construction
    ) [8 L  _3 t. I" Q

  44. % @$ S  a, s: e6 z7 ~
  45. CRevAppApp::CRevAppApp()3 X# X2 X/ n9 r# z* Q
  46. {% {$ v% [" |& u& ]- f- N. _
  47.         // TODO: add construction code here,; H; o: ^8 S+ k* U& y
  48.         // Place all significant initialization in InitInstance
    ( h/ U; d$ }; ^1 h: m% h1 o
  49.   bDisplayIsBig5=FALSE;2 V$ V8 O8 V8 ^4 [6 Q) M
  50.   bRestartUpdater=FALSE;5 x' \, J/ g$ N  _+ ?# f: p
  51.   bFinishUpdated=FALSE;* t3 c% E( @7 s! @
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;' G$ j8 P) R3 J& W1 v5 o
  53.   InitChangeDataBig52GBKS();
    * Z$ }1 d# i' C7 e; Y
  54.   InitChangeDataGBKS2Big5();
    , ~* g* c8 f8 r/ ~3 [( t5 h
  55.         //
    2 k2 L; h3 v7 [" s8 y! U% s  N
  56.         bClickRunExe = FALSE;
    8 ?& i, s, I+ c4 H/ |
  57.         //
    / P3 [5 Q; _1 w3 N8 R6 F% k
  58. }
    8 U% m7 ~8 p' i* ~# I8 n
  59. 3 s9 o. v' f0 A  X# |/ Q
  60. CRevAppApp::~CRevAppApp()
    6 a* i+ t9 v! s) o
  61. {
    + {) C/ _9 E* ?) u; Z
  62.         // TODO: add construction code here,
    " a% C& S2 ]& g" Q' M
  63.         // Place all significant initialization in InitInstance/ `( J' G6 X4 K( t
  64.   EndChangeData();" W) w: R6 n+ g; ~, T
  65. }) D  T( E$ ]* t/ d$ ?- ?8 c; t. z
  66.   F1 R! d4 `  Q) h
  67. /////////////////////////////////////////////////////////////////////////////
    1 U4 _% k! |# m3 Z
  68. // The one and only CRevAppApp object
    $ q+ T' S$ {8 {( c
  69. ; f) i- D: [' I! S
  70. CRevAppApp theApp;
    2 {5 m" D- \, L+ K9 {" J! G, R# B4 `8 y

  71. 1 v: U# H7 ^2 O2 W0 ?$ j9 {
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    0 e5 Y) b( p5 X& |9 @1 \7 {7 [% X
  73. {8 @. a: a- P; W4 W0 h' T# l
  74.   int iEOF=0;
    9 i" l1 s9 F1 n* P
  75.   char szTempName[MAX_PATH];
    9 J3 F" }3 Y5 ^: f
  76.   *szFileName=0;& x8 ^9 V: `, b; t
  77.   iEOF=fscanf(fp,"%s",szTempName);! N, `$ k$ Q' M
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& @' I, X9 \$ B, B
  79.   {7 I5 Y5 W9 o1 G3 K. a0 C
  80.     strcpy(szFileName,&szTempName[1]);
    2 Z6 |1 X& y- Q) }0 F1 y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF); ?1 W: `+ [' ^4 D, {! p  E
  82.     {
    3 k; A2 V, a2 r: }
  83.       iEOF=fscanf(fp,"%s",szTempName);
    0 h( o, m" `6 J- i& V: J7 t
  84.       strcat(szFileName," ");
    1 ^  c# w. ^: p4 l: x
  85.       strcat(szFileName,szTempName);6 G& C6 C) h9 Z# l2 V5 a& l
  86.     }  ?" Q  d( ?3 E1 L
  87.     if(strlen(szFileName)>=1)
    2 E; L8 r* `* R/ \0 @
  88.     {
    2 N( m: Y9 s! P
  89.       szFileName[strlen(szFileName)-1]=0;4 D. `# Q$ w' l. C
  90.     }4 ]" j! w, R% x3 k( D# h% p
  91.   }
    & I3 R$ Q- `+ J- C7 J
  92.   return szFileName;& k" k4 e1 ~" ~, N2 ]) e8 j# g5 D* P
  93. }
    ) _. l- f4 t6 w
  94. 1 z0 l8 s: Q% e) g0 K- z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    & v, r8 M$ B; c) {8 W4 w
  96. {0 i) M5 q& C& J2 k9 F  ?; \
  97.   FILE *fp;
    5 \4 V0 w$ r, T( j, J7 {
  98.   char *key=NULL;- v9 j) V8 t: c
  99.   char version[MAX_PATH];
    * S: z' @0 _5 J, `" T0 E: u) a
  100.   LPUPDATEFILE file,olds;& H' G( C& M; I$ G3 X
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! V# K9 o. |" D% Y0 v

  102. : j0 Q3 `1 E) F8 c* u
  103.   UpdateList.clear();% a4 x  \+ i: o; C* D2 t
  104.   UpdateFile.clear();6 Q3 j* {2 q, i# F  Z3 d
  105.   if(GetFileAttributes(filename)==-1) return false;  Y) z1 p% z4 w! z
  106.   if(!(fp=fopen(filename,"r"))) return false;% K6 _7 h. V1 `
  107.   fscanf(fp,"%s",version);
    . m4 q# L" Y5 U" b" c9 o
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }( g9 S' c3 L* o- L( P# _- ?
  109.   while(fscanf(fp,"%s",version)!=EOF)
    & ]# f) l1 @% S+ K" ^
  110.   {; R/ {  t9 q; i2 q% L0 Q
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! @$ a7 g! A$ K" x, ^
  112.     fscanf(fp,"%s",file->path);
    ; e$ j" ^4 x2 M8 Q) l6 ^. y% R) v
  113.     ReadFileNames(fp,file->file);9 v2 J6 s3 @8 @; J; |: t
  114.     strcpy(file->full,".");
    : d: ]% W9 ^) A% g2 u& W" N4 R
  115.     strcat(file->full,file->path);
    0 @- j$ e8 J0 S* `
  116.     strcat(file->full,file->file);: m7 y: t) H" m8 q- S+ k
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    % {9 t! e  R9 d9 t% j8 z  Z! T" Y
  118.     {6 k* J: p) ]. H5 z% @9 ^( b
  119.       file->vers=(float)atof(version);
    ! v- b  N% M; F2 o! }! U6 g
  120.       UpdateList.push_back(file->full);
    9 V+ k9 F* J, ]. g' I
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));. R2 ~# Z) X1 w+ b" P8 N0 i$ Q
  122.     }+ ^) D2 B, {$ U4 A0 }# }  A- b
  123.     else0 _' K2 I  c# \9 G$ F: O
  124.     {* X. F! i3 }4 t$ I6 O( b6 S' \
  125.       olds=(*p).second;  Z4 K$ e" w$ y" j9 t
  126.       if(olds->vers<(float)atof(version))$ H; n6 e  e, w7 U/ V
  127.       {8 `$ z3 Q& y' s+ Z. h% E
  128.         olds->vers=(float)atof(version);
    - B9 ?# {& I3 ^
  129.       }, V" B, s& e1 Y; B* b' A
  130.       free(file);$ R& A5 V0 S7 K
  131.     }
    4 j8 q' ~! [+ ~# M
  132.   }
    ( f9 }4 F0 b8 H; \
  133.   fclose(fp);
    . I8 @- O' w# y% J' C
  134.   return true;
    , e& U' E7 N9 l9 u/ x' {
  135. }; b# u  j* z! r( p8 v' y( M: K
  136. 6 w' [$ Y3 W$ U( i& W! P$ N
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)" [$ Z2 J0 [+ o" v7 X9 C
  138. {
    / q: a; l( w5 D, S* d
  139.   TCHAR  szFull[MAX_PATH];( C" ?- D6 y8 H* B
  140.   TCHAR *token,*inter;
    5 S& p8 J: y  ]/ V
  141.   *szPath=0;
    0 I9 |  N& R' Q) [6 A
  142.   strcpy(szFull,szFullPath);
    ( p; T5 i" ~4 E8 E- m7 ~/ r
  143.   token=strtok(szFull,"\\/");
    + q) w$ F# D' S9 I0 |
  144.   inter=token;
    % u, Y! K  o2 p# c" x8 E, |
  145.   while(token=strtok(NULL,"\\/")), \5 g' c! V$ d# V/ O0 z- {+ E
  146.   {
    ) O0 ?" x( b- T! e- T
  147.     strcat(szPath,inter);
    / V5 ?  s! u! w, h! V
  148.     strcat(szPath,"\");
    4 q6 \3 \2 H4 M! D) G; ~8 K# |; S
  149.     inter=token;0 e% t1 y# G7 n. Z! [- Q
  150.   }; s5 m" k9 \; k. y1 ?
  151.   return strlen(szPath);
    # U* Z: }. _" I8 v. N( l! j: w
  152. }# f$ E8 j2 S; }7 ~- K
  153. + S. _- V2 \. m; Z* V" p
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)& E9 D, m* ^' E( t/ m( B* F
  155. {
    / K) h: @+ U3 N
  156.   DWORD attrib=GetFileAttributes(Target);
    2 J; ]. B: k+ B5 F6 N: r% D. w/ J
  157.   if(attrib!=-1)
    : B. H- F  L2 _# Y+ O* R
  158.   {3 L) D  K% E- x
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    7 W. P0 ?% U. b
  160.     {& g$ v0 {- @6 K* `$ P  s
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);: R9 [- m( l7 ~4 c$ W9 _! c
  162.       SetFileAttributes(Target,attrib);
    : N  ~) ^! @7 l" s0 o
  163.     }
    ; Z6 l  z5 X* w0 a/ g5 ]/ c: O; O
  164.   }
    " {0 ]( y- m! f
  165.   CopyFile(Source,Target,Erase);# K( ?: W( V+ N4 W( I4 B, m
  166. }) {6 ?/ B; I' g- F0 j& w
  167. 5 @; R1 ?+ O6 C% }) v# h% w; S
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . O  t: U0 l* v
  169. {" _0 v/ ?: p$ u' `' ?. |. b/ ?$ h
  170.      FILE *fp;# R# e; Y! k' [/ Z
  171.      char  szBuffer[8192];
    0 o1 l; F; ^* A  a: x/ i- F: i! U
  172.   va_list  argptr;
    9 `6 Q; Q6 j' i. O& L+ I* K0 B
  173. 0 s1 [0 y& I* c& l& L" a% O
  174.         va_start(argptr,message);2 `) ^. Q3 V* e4 r, w: b
  175.         vsprintf(szBuffer,message,argptr);
    1 D1 a! o5 m9 K% [! b9 t9 c
  176.         va_end(argptr);: I' `8 I. q6 b" U
  177.   fp=fopen(FileName,"a");
    # |( k/ _: q5 d6 P
  178.   if(fp)$ F  `* d7 r" ]+ n' n$ z! T
  179.   {9 L2 W& S4 t) p% \/ S" h/ ?
  180.     fprintf(fp,szBuffer);. `* t# a4 K% `2 q9 V
  181.     fclose(fp);7 S0 R$ C* s* S" ]
  182.           _flushall();! I( \1 o2 C# W7 T: i! [# l
  183.   }, n) C. m; y& M3 N9 N* z
  184. }! }( _0 F9 T. a
  185. % n6 \+ Y1 t9 @6 }3 o( }$ h! I$ C
  186. BOOL CRevAppApp::Fclearf(char *FileName)" w# f! G; o+ I9 u+ k4 ~% N: n5 w& o) U8 a
  187. {
    9 M7 H2 {# W+ n/ [7 R6 j
  188.      FILE *fp;4 X/ @$ z5 ^, ?# b! Z( P
  189.     DWORD  attrib;6 c. P- Q- h- Q
  190.   attrib=GetFileAttributes(FileName);' k; w% A& L+ j* m! z8 R
  191.   if(attrib!=-1)
    7 e: L; U8 O' G0 t7 W
  192.   {
    3 h9 B, |. X- I$ N; W: r- w
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    * R) e# b6 H; L1 V* D8 a2 W
  194.     if(!SetFileAttributes(FileName,attrib))
    ( _) N5 {/ `& ^# d+ s
  195.     {  i; R" S% t8 D" i4 o
  196.       return FALSE;# {$ k) D$ f, l4 u2 B
  197.     }; c- u8 p7 u6 p4 h( E
  198.   }
    ( K/ g8 `! N+ E6 x# [
  199.   fp=fopen(FileName,"wb");( Q/ ~2 H- m- K% @8 T" z
  200.   if(fp)
    2 t- Q( q. U( J2 U. I3 d
  201.   {
    8 [4 X, E9 ^- @7 b
  202.     fclose(fp);
    ; w; f' j  X  t9 q& M+ Y0 l2 ^! b; V
  203.   }
    + h0 Q. ~7 Z& C* [3 N
  204.   return TRUE;* m, Z  G/ n* E$ J
  205. }1 H" S' N! f7 I! \
  206. 5 O0 [( e' {3 m9 ~) h; R
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ c1 W% Z2 R9 s2 u% u; n/ x
  208. {
    7 Q$ }1 B# {2 Q& v2 ~
  209.   char filename[MAX_PATH];
      M# u  h0 t& {2 y6 F0 q
  210.   LPUPDATEFILE file,olds;
    1 S/ p' f/ ~9 r& ~0 [  J( y6 N
  211.   std::map<int,CString>::iterator i;$ B& C3 p3 A+ K$ b6 f* y) I' m; \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;/ D+ z: l6 Y! M$ y3 X: p1 V6 n' o
  213.   std::list<CString>::iterator l;- Y; @- @1 e( z! V0 ]
  214. / \" d4 Y) Y% G" R- e0 P. }4 V
  215.   if(bFirstUpdate)2 P3 F/ H2 ]8 ?) G" S  X. J( S( ^* u
  216.   {! W$ W( ?+ W2 v( q, w1 @
  217.     dwCurrFile=0;
    & V$ }4 r; s, c. B* k) ?4 W
  218.     bFirstUpdate=FALSE;
    / i+ F- b: }6 w& W+ e# l# C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ x- _: T5 [8 V1 c
  220.     {8 m3 c1 n$ F' ?4 L
  221.       dwTotalFiles=UpdateLocal.size();
    3 {3 Z3 K$ T4 c
  222.       dwDownLoaded=0;) J% w$ ^: c  v
  223.       bSilentStep=FALSE;! B3 J/ ~3 `' }
  224.       bCompressed=TRUE;
    4 T  c& C. c; `/ w8 q/ l. i
  225.       strExtLocal.Empty();
    ! a# L7 j% Z/ K' V$ B8 o% j) e% y5 w( x
  226.       strFullName=(*i).second;
    " u( l- ?# X3 |3 o
  227.       dwProgramState=AP_CONNECT;+ }8 e# E0 n# R6 {; R
  228.       return TRUE;
    5 b" q0 m: v% g: B4 h/ F
  229.     }& N) X3 n2 v& h3 g' n
  230.   }
    2 V& ^  h- G5 W" k" ?3 K- a; ?, i
  231.   else if(bRestartUpdater==FALSE)
      W9 d# t' J3 W- v# B. Y3 v, R
  232.   {
    ! Z. q7 r# s( d* k5 S! i2 y! n8 J
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- n0 n. d1 F. \" ]- x- M( X
  234.     {
    8 b0 A" [# b3 Y. w
  235.       file=(*p).second;) A: F/ z: E! Z  P$ T) F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    : r: b, H' y: Y3 S
  237.       {
    - Q! k9 }( e3 Q* q5 N1 J
  238.         olds=(*p).second;5 }; f4 P0 w$ i* C" U+ d
  239.         olds->vers=file->vers;0 P& j- X3 P9 a5 ^
  240.       }2 f8 G+ r' |- a# h
  241.       else. j: Y! N# I' n6 b
  242.       {
    + j- y& h( F5 P
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! z5 K& b6 {" b( m0 K7 U
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* a$ \5 ?. v. t; V/ G* D
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));; G$ T2 F  G& h7 T
  246.       }
    & @& S: I( G. j1 T3 Q: ~: M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    $ S, q2 N! f1 g; x4 e
  248.       sprintf(filename,"(%s)",file->file);* x: o% x1 J8 u, j% r/ i
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 j4 h5 u+ u; [- Z/ L" y% F. C& f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ( a+ a% W6 }$ |% Z# }8 f$ T1 c
  251.     }& R1 W) ~3 p1 l! F2 {5 ?
  252.     dwCurrFile++;
    4 l" P- ?# a' O- H4 R& D4 Z- ^
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 z# S# d0 ?+ s! z. X% S
  254.     {- L: X% F+ f/ f+ q
  255.       bSilentStep=FALSE;0 ]- Z7 {+ w4 A6 S; ^0 M, \8 j
  256.       bCompressed=TRUE;0 [; q+ L7 q/ s/ U) T% k5 Y
  257.       strExtLocal.Empty();* C8 d. E$ i0 g4 N! m- U
  258.       strFullName=(*i).second;
    ' y9 V" F% X& Q6 R* i. I1 L4 K; I# s
  259.       dwProgramState=AP_CONNECT;9 V+ g( i6 h, P3 {) |
  260.       return TRUE;
    1 \5 _) {' w, }# R& e7 p
  261.     }! G6 c% l+ E- E' W* W
  262.     if(!bRestartUpdater)0 u) c4 b& w( q1 B! y4 M: e
  263.     {
    * A7 F$ I# n' i. R# C! R- O5 ^
  264.       int iCurrSize,iFileSize;+ t& ^/ N8 M6 i! Y+ j% z
  265.       iCurrSize=0;
    ; Y- a1 }& B- C* l1 |6 ]
  266.       iFileSize=UpdateList2.size();  C; @5 f5 n. @: c6 S
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    3 b' y, Q0 e# M% n+ f$ \3 i
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");' J$ P6 V; A; j; \
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");* x  }5 c- D4 o) m
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , s7 G" q% d9 R8 S& }. I( _
  271.       Fclearf(".\\update.dat");
    $ q0 d, n. T, J0 P& v
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    . y+ S8 X5 W8 L5 [6 L; W
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 c2 t5 m8 I7 R
  274.       {/ G+ h) R$ L; ]& C' t
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    " C, _# ^; s7 t
  276.         {
    5 q) j2 C/ @# Z, [7 z! \
  277.           file=(*p).second;9 |) G' h& t9 `& g- f$ P
  278.           sprintf(filename,"(%s)",file->file);
    1 l) o4 k, S! N, ]7 J5 i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);" M% z0 \! g. L# y. X" q
  280.           iCurrSize++;3 z/ e0 b2 e; A4 d' z) o* O
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));7 O( ^* R. ~% Z7 Q! H5 Z- j
  282.         }2 |3 y9 A. D3 {/ I% `) H
  283.       }
    $ H8 L% E3 p+ i' s. p8 _
  284.       unlink(".\\update.txt");
    5 A. R) L2 N6 p, R/ x. A
  285.       unlink(".\\update.tmp");
    - Z* |: m4 A/ [. s" F0 `) F
  286.       Fclearf(".\\checkversion.dat");+ l% n( \: i- i8 R- M7 h" u) G. c
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);- d  z; n9 [# M4 V% U
  288.       if(UpdateLocal.size())5 g/ |# @6 ~. f; }& \( p- q+ n3 z" T
  289.       {
    9 o: r7 t2 _" A6 l
  290.         UpdateLocal.clear();* s6 B+ v- Q" y
  291.       }* C- j1 f, Q# F; Y) Z$ W
  292.       if(UpdateFile3.size())) A7 B$ x' ^& S
  293.       {
    8 n) Z: `3 L" T1 U
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), Z* p; \: x  g& ?* Z* a' r' h3 @
  295.         {
    * o# ^  i- j" ^8 m) h5 |; R& j2 W
  296.           file=(*p).second;
    ! `5 k! e: T) N0 ]
  297.           free(file);. A4 q; p% S$ E$ V; D
  298.         }, U% O  w* a% c
  299.         UpdateFile3.clear();
    4 x7 l2 Q& t- `# E
  300.         UpdateList3.clear();
    5 g$ {8 B- E! B4 s( ?, @: a  ]- n
  301.       }
      O* Z) A  z, B# F% p" W3 \
  302.       if(UpdateFile2.size())
      K) T3 ]' F/ e6 x
  303.       {
    ! D- t4 t  N4 ~2 O9 N9 R
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( Y0 u' p/ ]2 z# I
  305.         {
    : p+ k# M! o/ L% N0 n$ V* `( X
  306.           file=(*p).second;4 \5 b+ e, t. z! L+ x! B' Z
  307.           free(file);0 s/ r& G7 e) j
  308.         }
    & v# v: n- k: W/ P; R4 h& b$ g
  309.         UpdateFile2.clear();
    ' Y- e  C  d: h3 {/ Z
  310.         UpdateList2.clear();
    0 M& R  f$ H+ |- K5 S& }
  311.       }
    - A+ j% N$ i0 h7 _2 Q, N4 m
  312.       if(UpdateFile1.size())
    2 }# Y, Q1 e3 x3 p  t8 E3 l  Q: F
  313.       {
    - o& ^5 f0 Q- q- d, a
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ s$ M9 ^$ a, Q; _8 d$ v
  315.         {! f" u% h% c: F* g; E' }7 j) Q/ M
  316.           file=(*p).second;3 l: K# E4 C2 ?* b. T
  317.           free(file);% ~6 o# L' S5 h, h
  318.         }
    # V. e- x7 o3 P* r9 L# F
  319.         UpdateFile1.clear();5 m3 J7 k- d0 m, D
  320.         UpdateList1.clear();
    0 ^7 l0 ^2 ^. c# p( w, V! u
  321.       }
    2 K; B# e( d& q# H3 x, B
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));# y& I1 K6 d; `5 F" j. \
  323.     }
    . P* G) A8 Y3 {1 L& h- ^9 x
  324.   }
    ( y1 l& S# w* m' C2 [
  325.   return FALSE;
    ) U1 w7 F6 j8 r* B$ l- M
  326. }. t! Z) _& X5 s, }& H' d
  327. 8 p7 j$ I1 Q$ ~
  328. void CRevAppApp::ClearAll(void)
    & X4 p; S7 n' C4 G% k' i
  329. {0 W/ R1 {5 V8 a1 _* Q- k+ }$ E
  330.   LPUPDATEFILE file;* j& S5 m: U+ q5 [( ]# h' I/ K
  331.   std::map<CString,LPUPDATEFILE>::iterator p;7 W# @$ z, X6 d5 @" X; d
  332. : K/ A, P, p8 s0 v
  333.   if(UpdateLocal.size()), B, W" L) o* h/ N; D8 G
  334.   {! {4 s3 ~# w3 q) s% [6 T
  335.     UpdateLocal.clear();0 v8 f9 c3 ]  s5 B. c& c) F8 C
  336.   }
      y! l- F) |7 h# l$ u; l1 y' Q
  337.   if(UpdateFile3.size()): `/ ?! I8 y; s. k( W
  338.   {7 D4 s5 x/ Z0 N3 E; F" {! N
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 h: S+ I' L/ J- X# T' ?
  340.     {* G$ ?3 ~" o3 |" K
  341.       file=(*p).second;5 T' A) d' ]% D3 A; d
  342.       free(file);* z1 P; N. _( i3 f# V' n
  343.     }
    ! h# k9 g" I5 i2 s; g7 j) O3 F
  344.     UpdateFile3.clear();) {: u' n# m+ }) A3 W5 }6 Z* x
  345.     UpdateList3.clear();: ^# ^* c% g6 z% P$ {& [3 Z$ n
  346.   }' J9 ?+ Z3 g2 x. `) m+ u4 ?# C0 z
  347.   if(UpdateFile2.size())
    2 L% T- ]0 u2 \1 u
  348.   {
    % h7 I; J: v9 r4 i0 P0 Q* U
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 ~: E# V+ c  P  N! P
  350.     {$ D( \" ^+ S9 P3 J
  351.       file=(*p).second;/ L/ W6 [: T: F" v/ d' D
  352.       free(file);8 Y; U4 d0 G: s
  353.     }, o( C6 o1 u8 _' ]% _3 y9 X6 e
  354.     UpdateFile2.clear();3 D3 `. L, j* J# x: S, Y
  355.     UpdateList2.clear();# A: ^) p* A# c& z/ Z* t5 R4 j
  356.   }
    6 L5 A# a0 G1 A$ \( ^
  357.   if(UpdateFile1.size())
    4 ~/ k. {; H* D) H( P4 Q3 _. ?
  358.   {. ?& ?' ]& Q9 Z& w% _8 O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 |4 D/ l4 p  Z
  360.     {( B( g3 S# L! m9 v3 f3 l
  361.       file=(*p).second;+ I! ?, W0 ^0 j8 e2 ~- I, U
  362.       free(file);, c( K. u7 F6 ^# l& x; W4 C
  363.     }7 H9 q. C; Z0 V9 l1 i7 S
  364.     UpdateFile1.clear();2 Z! C, n' e& j* b& K
  365.     UpdateList1.clear();4 B! ^0 a4 E1 A
  366.   }
    + O7 }* u/ u. I9 [
  367. }  ' S, e+ X1 e8 [0 h  K4 f; h! @4 J; v
  368.   ' a) q9 u: J+ x0 l9 H5 N
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ) u  [7 i% t6 ]+ N
  370. {3 b2 Z1 N2 C7 u: n2 w' ~
  371.   int c;
    1 P2 j! [) C+ |9 X
  372.   LPUPDATEFILE file1,file2;* E( s( ^% [( W* T, O
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ) H9 A$ ~, l5 p; m( W
  374.   std::list<CString>::iterator l;! a( }) Z. ^" {- O3 O) ^

  375. % O0 D7 {4 r; i4 [
  376.   UpdateLocal.clear();; {3 V$ S; I4 {6 ?+ K9 ]& r
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);4 n, N9 m' g; \, `/ l: B
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    " H. P. n/ I! e9 Y8 q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);. ]7 F3 J( ?  E
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    + |& c! F9 B8 w; X! t% x* C6 \
  381.   if(UpdateFile3.size())
    3 P  i7 H$ U% V4 K+ [
  382.   {
    2 F; v2 ^! |' {( V  I. m  Z) k' m
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)6 D+ j. B& e8 k/ {, l3 }
  384.     {! e( R/ g  n. T- ~9 Z  _, v1 t
  385.       file2=(LPUPDATEFILE)(*i).second;& ^+ r$ C1 B5 d8 f2 _. }
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ u! N& v# L  o3 @: W
  387.       {
    , n. u" O2 s7 L
  388.         file1=(LPUPDATEFILE)(*p).second;9 n" t$ ?( h1 V& y, k. l
  389.         file1->vers=file2->vers;  G" \( E9 n. a' j& u4 \
  390.       }; G, J( \6 f& N
  391.       else  j: f- A0 ]) O" }) K
  392.       {5 q5 u+ ~1 F5 `
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; W7 e: ~: @! }0 u
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));& N) Q$ }# t: i) f5 Q- h8 J
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    / E, W- M+ z$ k4 |1 I
  396.       }
    6 _1 a) d. ?* K1 p7 |. _# M
  397.     }
    ' Z7 e; M+ W' H5 x
  398.   }+ H* y2 ~- \* e0 [* R
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 o( Y) F( ^2 Y1 _$ f6 l( u
  400.   {/ i/ s" x1 C4 w3 Q- y
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())/ @8 ~" z$ V5 \& P8 o' |$ `0 Q, D( V
  402.     {5 e6 a7 Y" N- w! ^
  403.       file2=(LPUPDATEFILE)(*i).second;1 `* Y+ y* I8 G7 ~
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 t: a* @, ^, P, r
  405.       {8 S+ Y8 M2 \% j) u5 I
  406.         file1=(LPUPDATEFILE)(*p).second;+ @( K# P8 o$ M2 _" P# W+ G, W
  407.         if(file1->vers!=file2->vers)
    * P. {# o/ b  u2 m, K0 U
  408.         {
    - e& T. _7 M0 n  y: ?( k9 h
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( J$ b, J+ H5 ?' r4 `
  410.           c++;* F# `: Q- [9 d
  411.         }- R) l7 x% B/ v# c/ E
  412.       }; J8 U3 O2 w2 g! F- C
  413.       else
    9 B9 n! E6 f) d) l
  414.       {6 r' @% F( t" t/ l2 a0 ^
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! C0 g5 t( X) }" j  j
  416.         c++;
    ! Z/ N2 U$ |7 w+ ~0 |
  417.       }
    " I* q# R2 [7 M6 G
  418.     }
    7 r" g: C/ J9 w
  419.   }
    # y! {1 |' e1 z. y5 O3 K
  420.   unlink(".\\DownLoad\\update.txt");- i6 A7 i% u. K' Y
  421.   if(UpdateLocal.size()) return TRUE;/ d1 b( Z5 O+ _5 |
  422.   else                   return FALSE;
    ' F( V1 f5 f- B3 N3 L6 g1 e
  423. }: f  ?0 ^2 P; y7 y! m% i) x

  424.   ]3 {* Y; s4 f+ Y: p7 ]+ n. i7 G
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    $ B3 F; E& d: y: `4 E
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    7 `3 C  `7 g8 v1 d
  427. 5 ^) b" P) P4 O! H5 ^
  428. - f7 S1 _5 f  T- n/ m
  429. 4 Q7 Q* \  m" H% L9 i& I
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)$ A- Z- o  S, W: H+ T* N- e% M
  431. {
    ! P  n) l/ m9 L  Y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    , i; r1 M9 b& m% Q( g2 i2 O
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( R, v* Y1 e0 u
  434.   {
    , f; ]- W7 j4 M
  435.     char szLanguage[50];+ a, X2 y# v3 M8 ~0 D. P
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 M6 M4 J6 c* N  G# T% T  Q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 s6 f9 X$ j8 d4 ?0 B
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  ?1 S- q% X2 o) I0 d2 e  }0 w, ^
  439.     else                                   m_iLanguage=ENGLISH;! p  c* E1 ~" f' @. z, d
  440.     char szRegister[100];; P! T6 l% F' K5 o/ L4 j: c
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - K, g( Z( j- K8 m5 t- p5 ^
  442.     strRegsName=szRegister;: h  n( ]; y" a
  443.     char szPatchURL[100];
    " x; t0 l7 S9 S/ I& F8 P
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ X  \1 N) g5 z! V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 S6 ~) L* g) ~1 K' z+ \$ b  _
  446.   }
    * x/ j  e+ `# M% g% h
  447.   else
    ) e  n1 [7 x# J! v
  448.   {9 y( L0 z' h2 P2 n
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - ?3 g& b: h( N- u# P% Y  Y# S! Y7 }" h
  450.     strRegsName=DEFAULT_REG_URL;
    $ _3 d% f6 D: J+ o$ p
  451.   }
    & e  U* }6 I! Q+ C6 y
  452.   if(GetFileAttributes("hosts.ini")!=-1)5 R( S: B; G% D8 f7 [. S
  453.   {% b! b. q9 k* J9 M) \" |9 z
  454.     char szIP[50];! c" H; ?- S: j% X
  455.     char szDIR[300];
    4 T2 k- E7 p: J6 A) m7 B* c: X
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")); D- s. B% m- \' d9 t* h
  457.     {
    2 z( u0 f" f2 a/ R# h
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");+ s! A% l% @; m1 j8 y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    1 H1 o, B! N% E& W2 @
  460.       strHostName=szIP;2 {/ n- }* u0 H
  461.       strHostPath.Format("/%s",szDIR);
    5 |& V) S3 m- s" f/ J6 J  G% q6 m
  462.     }; z" Q2 u& k* d1 u8 f9 e8 o
  463.     else
    - P1 Y3 l# {) q  `; a2 D6 h
  464.     {3 z, `$ L. V/ o* U+ E  L" L8 r( F
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 `. E1 H6 N0 N$ w
  466.       {
    ) W. ]$ o$ ~; _2 a+ c' o6 s
  467.         char szLanguage[50];
    : e6 E+ c4 e1 \8 k& v
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- G4 b8 c  F4 a4 ]7 b) J2 x# V
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& h+ M. c& v" G( a
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" j5 `7 z% a& M: n! f
  471.         else                                   m_iLanguage=ENGLISH;) X) ~' a) ^3 ?
  472.         char szRegister[100];, P6 i# B/ ]. `9 H% I7 v% G
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. z" S: h0 A6 V+ d$ e
  474.         strRegsName=szRegister;
    4 A$ I& j, U/ C
  475.         char szPatchURL[100];9 b2 a8 G- W' p4 Q9 J6 b. O5 n
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' G% ~, S8 N. E0 e
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; |* T" a' a9 _. ~* R/ X1 S, u
  478.       }
    & ^, G! B7 E. m/ v. t
  479.       else) M- ~& P4 X) \# O" e/ w6 O; H
  480.       {
    2 y. G& s! q' [7 `. @
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    5 p! |& [- @7 X$ [$ b2 D2 M: @7 j
  482.         strRegsName=DEFAULT_REG_URL;
    $ \. C6 g* R8 V) i% H2 P9 g
  483.       }
    2 T+ {6 U$ L5 L5 W! k: ]
  484.     }7 n! Y9 [& W: K$ d$ R
  485.   }( e& ?0 h6 Z9 K" H) ?
  486.   return true;1 H( ^- G. u, u. }& t
  487. }4 X% D. k( m- i3 w
  488. + M6 C: f# F# y
  489. #include ".\ZLib\unzip.h"+ Q- H, G! ~( k1 l7 E/ W; \! J
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    + h  t# @4 F& K. b+ _6 D
  491. /////////////////////////////////////////////////////////////////////////////
    % Y: t$ c) |5 O3 p+ R
  492. // CRevAppApp initialization
    - e: i& z- K3 |2 ]) w

  493. 5 P2 d# r: J# t, Q
  494. BOOL CRevAppApp::InitInstance()
    % n# Q" }" k, |  C: O9 `, K* U
  495. {5 s9 W! A. i: q& l* t
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];2 Y0 ]/ C, {2 }# \+ t
  497. ( o* q  }# F7 E+ a* ]+ W7 L
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);4 @& H& Z5 b. f+ K  o, p' o2 V* F
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    / M9 v7 j6 v7 C' N6 P
  500.   {
    , r: z/ G4 Q! d# y7 o, M
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");3 u6 X+ U5 z  z& D/ x+ e* e
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; o# I5 _5 m' `5 {
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    - L& r5 U; B' G: ?) ]3 e/ ]
  504.     {
    2 z1 h; w$ z6 e, ?2 T' F5 U' {
  505.       strcpy(szPath,szPathTarget);
    ; I" `% o: {2 h" A1 K* z
  506.       SetCurrentDirectory(szPath);
    # }- q3 ~1 I! C
  507.     }
    / o, v6 \) \% ?& b
  508.   }! e! {$ G6 H+ x# j* X% P. ^
  509. #ifdef _DEBUG
    ! \8 V6 O+ C( f( ?! T- v9 G
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  }( |& v0 N2 T
  511. #else2 o4 M2 w* s$ g! d+ Q
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) l  L2 h+ m6 f: g6 C; i/ ^
  513. #endif
    # U/ o+ t) F; d+ A
  514.   {6 o/ a  |, @3 n+ w
  515.     char tempFileName[MAX_PATH];3 h1 q; H( _# F- e5 M9 Y( i
  516.     strcpy(tempFileName,szPathSource);
    2 }. c8 j1 E( _* X( d
  517.     tempFileName[strlen(szPathSource)-12]=0;
    9 m/ \9 W3 j+ a$ ^- l, n
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    6 Q0 `  L# X2 B. S
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    % o, N! Z, }3 B3 |
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    , [' l1 a% }* C* w5 I2 V/ J, F
  521.     return TRUE;* F" y! x0 B! V
  522.   }
    6 h7 G" `& `+ A5 F( I
  523.   // Nuke 0118: Delete run.exe7 ~( }! v8 S+ H6 |! \* c6 w* ~
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    % x* m' K: e/ A" B1 {8 e+ U* b( F1 W
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");" }( n/ r/ _  h/ `; I" M
  526.   if(!ReadCfgFile("Config.ini"))
    2 ~3 A% N- a0 I, f! z* z
  527.   {% k5 b2 F; T! Q% C$ s
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);! F1 A" C+ w. Q$ i7 }
  529.     return TRUE;
    0 j7 _* R$ d1 k6 P
  530.   }
    - R7 {4 h0 C5 Q' V- p$ V% `
  531.   HANDLE mutex;
    + l. d2 _6 m. x; Y
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 ]3 P( i8 A7 {- G9 j
  533.   {
    ! \" m9 F/ [; g2 I% s) D
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 m: Y+ G& D# o/ _
  535.     {; b5 e0 @4 J! k0 I/ n( s
  536.       CloseHandle(mutex);6 X0 L9 r! B% }& N
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. h: R) T3 @- ]( s
  538.       return TRUE;
    : N9 g! e( ~5 I  s% i+ W" o" M
  539.     }! }9 D% C7 `' t7 x
  540.   }  
    8 F7 [" j% D' V7 k/ @- d2 y
  541.   CloseHandle(mutex);
    ; b& @: l0 `8 ?. n* B% O

  542. # d3 v) Y; K' Q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    " ]1 L: `; c( k. S

  544. 1 e7 [, e- N5 x' R5 E5 D7 g( I
  545.         AfxEnableControlContainer();* r2 u. g/ U) l  V) k9 _

  546. - F5 @$ r, Q7 N- f- A; o9 j
  547.   bCanUpdate=FALSE;# l( p7 j- m6 V2 A. f" l/ m* U8 X
  548.   dwStartUpSteps=1;
      d/ J1 _9 j! o6 g; ~( Y
  549.   dwProgramState=AP_NOTHING;
    8 s3 z, K% [+ A) h1 v

  550. 0 p7 |4 b5 \* I, @+ ]; B; p
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ F+ O+ Z/ R' @, Y
  552. * z' s/ Q, ~6 F! O. W" N
  553.         // Standard initialization
    4 X5 \. q4 j, [( B" c8 C
  554.         // If you are not using these features and wish to reduce the size5 Q) p- F) Z, ^8 Y
  555.         //  of your final executable, you should remove from the following
    ( ~. }. [! @; ?
  556.         //  the specific initialization routines you do not need.+ j  z# [: e' W* p; c9 x
  557. 2 t7 @! ?" N3 a5 }, T% W7 a
  558. #ifdef _AFXDLL
    , L4 C% \" k7 ]- [
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL- i& z4 ^5 R' i- U; I6 R
  560. #else$ \- z' @; ^9 z5 A. P
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    0 c/ A0 `6 s1 m1 Y8 N9 F1 y& t
  562. #endif2 v; ?, Q* D# z

  563. 4 e, E8 n; s/ L$ ?3 ]! h
  564.   dlg=new CRevAppDlg;
      ^) q* r) q* B. w- b
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    1 |; z8 F8 ]# [6 l
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ) K: C5 @9 a% p# `' @, T+ Y) S
  567.   m_pMainWnd=dlg;4 W( t$ Q8 w. o
  568. ' \% X* p3 _  U- u; X" m
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);' L" {+ n+ r& g( i; N2 H
  570. . ]) k. `' s) {+ |
  571. //  GdiplusStartupInput gdiplusStartupInput;
    & z' E. ]# @5 r  Q
  572. //  ULONG_PTR gdiplusToken;
    - K6 h% P3 E$ g
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ' b! P! W& z' ?& q9 n6 ^

  574. - @* T- ?. b8 N" Y- H
  575. //        CRevAppDlg dlg;4 h% x% I. v2 Z1 A* E5 }# I
  576. //        int nResponse = dlg.DoModal();
    & y* {2 [" A( U4 ?# U+ b+ G
  577. //        if (nResponse == IDOK)3 J3 C2 \+ C' x/ _6 Z5 ?/ f; [
  578. //        {8 k! q4 v. e6 k' p
  579. //                // TODO: Place code here to handle when the dialog is
    6 w. O! Y5 p; w, F
  580. //                //  dismissed with OK" k9 o! n: r( O  m1 m2 x
  581. //        }" I: R/ u4 P2 P; q; j, `/ |# h
  582. //        else if (nResponse == IDCANCEL)+ R7 h. T5 o& I' P+ C
  583. //        {
    # h  C! a8 q6 u" n7 ^  Q9 Y
  584. //                // TODO: Place code here to handle when the dialog is' P" n2 E: s  W5 Q; Q
  585. //                //  dismissed with Cancel3 K1 N7 `/ t- p
  586. //        }
    6 G+ B' ~0 V8 v0 I
  587. * p7 w8 U1 c# D* K
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    2 s9 l* `! p" F9 f$ S# m! V* M# N0 }
  589.         //  application, rather than start the application's message pump.+ w$ K0 o! a7 P8 {/ Y* F
  590.         return TRUE;
      J/ U$ M) H% |
  591. }# N- d) m& s2 ^6 C& X) Z* n8 J3 z

  592. / Y* Z8 ?3 z, {: k: t# M6 t' _
  593. char *CRevAppApp::strtok3(char *pSource,char *token)  n' U, L2 v( n6 j8 \
  594. {+ y  X! y$ e: W+ F
  595.   int i;
    ! L, x3 g' }0 A+ y8 Q  q
  596.   char *szRet;% H9 i! L! F! p/ e- s8 n

  597. 0 Z. S3 e6 P$ E8 e# w1 a
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 ]. w4 ~) B! h
  599.   if(sztoken)* Q3 ?$ A/ [& Y$ u5 v5 s5 c. I
  600.   {* x4 D! j; i$ X) o3 J; T5 F
  601.     szRet=&sztoken[itoken];
    ! }+ ^# T- I8 g4 r0 ]
  602.     while(sztoken[itoken])
    " }+ b& E8 x& t! H( ~! K+ {
  603.     {/ k" ^* c8 A2 R) z; B. Y% |
  604.       for(i=0;i<(int)strlen(token);i++)
    # ~0 m4 N; |$ z
  605.       {
    $ y$ z2 L* z2 n! ~( e
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]). u8 V0 L% `0 [6 j
  607.         {1 v! ?+ G7 _$ b
  608.           sztoken[itoken++]=0;) q- L$ S# [1 e0 `
  609.           sztoken[itoken++]=0;. L+ x% c( h' L! S% ~3 w/ c
  610.           return szRet;) `3 Q5 i3 P( }5 a" t/ C
  611.         }
    9 D# d) ?/ f2 j8 F0 ]% R* }& Z9 q
  612.       }
    " j1 m7 d  n7 H. F* b* J/ Z2 H& R0 }
  613.       itoken++;
    * z# J& f6 t* L6 @; C2 Z, o9 ~7 o
  614.     }* `- z+ C; J3 ^, L% g
  615.   }5 Y/ w8 k" D7 ]+ L' i( z$ [& x
  616.   return NULL;  K" d8 L! d' q
  617. }
    7 v- u0 \6 P; \' P! B! P) T$ f

  618. / S2 |% Y9 O6 K5 x1 w" D8 f
  619. void ProcessProc(long Total,long Current)
    ( _3 x) Q5 D" H( N, F: ~
  620. {
    , ^# ~7 w) |; P5 G: P  n- A
  621.         MSG msg;
    * q2 G9 V4 Z: ^3 G5 K' e) b
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);+ L  g; X/ V7 e. z$ C, i& b
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));+ c5 R. K% d" u8 @: n! Q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ |4 q; [/ R" m  z" z* _
  625.         {6 P" J2 J3 M( h# i; `
  626.                 if(!GetMessage(&msg,NULL,0,0))" |: X8 ~& c2 T
  627.                 {
    5 Y. Z) f$ p1 J$ M# d
  628.                         return;
    ( j7 s7 v- D8 X& o9 V% B* Z
  629.                 }& d& U1 }) d7 ]/ r% {! R
  630.                 TranslateMessage(&msg);
    - k7 _& m$ M9 v( K) v
  631.                 DispatchMessage(&msg);. W0 O5 t  z0 a3 k! j( ~
  632.         }        & C2 u1 V! `6 P
  633. }
    $ @9 L. k+ i6 }4 V4 N$ o

  634. 5 d6 v3 h* W. g* y
  635. BOOL bFirstChar=TRUE;3 s8 V$ v$ M$ F( B& R3 H/ K# U6 x
  636. % ~# h" J2 k$ w% t/ ?& T3 J6 l. j2 @
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    4 ]& |6 O. Q) T  H/ ~
  638. {
      P& S( `# ^2 K- `) x
  639.         // TODO: Add your specialized code here and/or call the base class
    0 x4 f" B7 }$ N3 l
  640.   switch(dwProgramState)
    ; g" N, J5 K) O- g* ]! @' o
  641.   {
    * w. t4 W. y! f) A, d
  642.   case AP_NOTHING:" `; \5 d* l; R6 ?5 S$ c
  643.     switch(dwStartUpSteps)
    * V7 ], B. c" ~# _- r1 u
  644.     {
    7 q. X( a2 m* T9 {
  645.     case 1:, m* N+ U2 v- F8 L% {
  646.       {
    / \( l7 h# d: j6 u* v0 c
  647.         int i;
    ! h  B9 o- M+ \) |6 x% h
  648.         CDC *pCDC=dlg->GetDC();' `7 R% ?# F- N- A' c
  649.         HDC hdcwnd=pCDC->m_hDC;% v* N% M/ {' l# ~! H6 O9 D
  650. //        Graphics graphics(hdcwnd);
    7 b% v* L7 U. J" C6 m) e
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");- c& G# X# R: }% z7 k; j+ J
  652. //        INT iWidth=bitmap.GetWidth();/ H6 W% |6 w- H
  653. //        INT iHeight=bitmap.GetHeight();. x2 S' g1 e9 \# {+ H
  654. //        Color color,colorTemp;* {3 B: o2 D# x
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    5 b: @/ i: Q. V" J0 F* \; l$ F
  656. //        {
      |- s8 A9 x; X+ [
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
      |% ~6 G& }4 i; V$ Y2 d
  658. //          {; B  b5 o0 c2 c( L& G1 h/ B
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    $ i+ l6 d+ L6 e- S
  660. //            colorTemp.SetValue(color.MakeARGB(' u1 L& P+ X2 T2 {+ N
  661. //              (BYTE)(255*iColumn/iWidth),9 M+ o0 \! f& u2 g
  662. //              color.GetRed(),+ y1 |6 J6 p# M& C6 v
  663. //              color.GetGreen(),
    6 N4 Z  F! X; V! z* X; K, [3 E' E& R, j
  664. //              color.GetBlue()));3 c" n& ]3 c" u# y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    2 R, o" d* |/ n5 n8 B# x
  666. //          }6 ?6 p) I" S2 \6 N* t8 K, \
  667. //        }
    ; C* T3 `7 @; D* h0 @! n6 }
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);1 c+ @/ P1 _/ `3 n. e0 ]! J
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- I7 V# T! W) E: H! a- q$ X( P
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");* y  u) m- U% j! ~' P; D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - q& k8 ]5 T8 {1 a
  672.         for(i=0;i<240;i+=8)$ T. S0 i$ S# F1 ]% q, U
  673.         {! V1 {$ i6 H& G5 g) y: i
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 Y( O( d1 c( ?: ?/ F! z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 L# p3 h* z" m! P5 o( k! @
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  v( v+ a9 Z7 Z9 x/ V% C, |8 t* e
  677.           Sleep(33);# D) ]; x( C* P/ ]. y  a- g; I4 k
  678.         }
    * ^1 u# X: x' W4 h- `, i
  679.         Sleep(1000);
    % T! k0 M/ A7 `" i5 Y; s  c0 F) I
  680.         for(i=240;i>0;i-=8)
    / M+ f# W1 ^( p$ e5 K) v' h. w- C
  681.         {
    3 I4 I) |- W, X7 V; n- H/ L
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % X; ?. }6 K& ^
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, ]7 y' ]1 l5 l* t; F- n
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & x" D0 y+ @/ M  l$ B. E
  685.           Sleep(33);
    / p+ @/ {$ B- q! y
  686.         }
    ( z. H$ t0 s$ B4 F2 i
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ; z$ D  I+ _* M. ~4 [: ~7 a
  688.         dlg->ReleaseDC(pCDC);
    5 D6 `5 j4 P% j$ V, S
  689.         DeleteDC(hdctar);
    ! [7 F" }6 A5 G/ f& J
  690.         DeleteDC(hdcsrc);+ [) @; P! Q# k0 }$ T$ n
  691.         DeleteDC(hdcorg);  H3 N# J/ t0 \% G* _
  692.       }
    $ I; C+ [8 _, j
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);" h9 ]0 u! m* i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    " `/ w$ b% w4 U. B: d" v3 U
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    # J* r, e- S3 @( f# C# X6 X/ c
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    . _% T8 m) t0 C- B- ]
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ r% M, }. U6 N% V& E; \3 M7 g
  698.       if(!Dn.Connected())
      d0 g2 Q: P6 [% V1 E4 u; Z5 H/ f$ p
  699.       {
    # A& D1 _! J9 x
  700.         dwTotalFiles=1;9 B, y3 P, b% d
  701.         dwDownLoaded=0;
    3 a" e  k/ |4 a: v$ m2 V& E
  702.         bSilentStep=TRUE;
    : x% L" |- p% `" e5 D: E
  703.         bCompressed=FALSE;
    4 |' G6 K) ?. x8 a1 h+ A& e
  704.         strExtLocal.Empty();; X$ a4 [3 U0 C* ?, D
  705.         strFullName="readme.txt";5 m. r) K0 l- \$ P- X
  706.         dwProgramState=AP_CONNECT;
    2 D) h: Y( {: X; M% G" K$ ~
  707.       }1 G# g5 Z4 F$ y2 A
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 a2 y6 {& R7 l
  709.       dwStartUpSteps=2;
    " n+ r6 Z/ ]! m8 K5 P
  710.       break;
    2 A; E8 k. k& V: }4 m7 h
  711.     case 2:
    8 l7 I5 V# Y2 X- ^+ W' Z
  712.       {2 q1 T- W; `3 u8 I- H
  713.         int iEOF;! ]- s; ?3 s" t$ l4 }# s; g9 `7 m
  714.         FILE *fp;1 U. L9 W* Z2 ~7 }* _# o
  715.         char szString[512];
    ; R: }& ~, \9 b# Z* N
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");: j+ N5 H% L) s+ u" d! C- b0 x9 j
  717.         if(fp)) O$ A1 I3 B% O3 E$ Q
  718.         {
    + o+ _7 _9 P) U6 _4 X4 M
  719.           do
    & X6 b9 B* R! u4 l
  720.           {
    " g4 R. @/ J: v, O9 |
  721.             iEOF=fscanf(fp,"%s",szString);- ]8 h. G/ {5 f
  722.             if(strlen(szString))
    ' q9 G3 g/ U+ b$ a
  723.             {
    8 I2 _1 y6 H9 g
  724.               if(bFirstChar)
      @) h5 E( t7 i5 `, F
  725.               {
    : v8 M+ J. B! W
  726.                 bFirstChar=FALSE;2 A3 \% u+ `& ^. }( z5 v$ S% S
  727.                 bConnectIsBig5=FALSE;0 Y8 R4 v" O( l  |& T; a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    # y. V1 k  z8 o, ~% O" W! e  w
  729.               }% b, h5 f2 |. m
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 i% M% [; Q/ g, _. M; w
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));6 V- E7 Z1 D# S5 L) B
  732.               dlg->m_ListText.AddString(szString);
    - P6 M% {6 O( S0 f
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " S6 o* t7 A7 k* J, b9 L0 f7 q. L
  734.               *szString=0;7 m- w2 P; s; A
  735.             }
    , H% P: J! u4 g+ e8 ~3 N: Y3 ^
  736.           } while(iEOF!=EOF);( s) V+ U7 P0 }% s
  737.           fclose(fp);9 O! r7 |% T: V6 n0 M+ c
  738.           unlink(".\\DownLoad\\readme.txt");
    1 o+ U" K' s) P5 ]) w% ]
  739.           dwStartUpSteps=3;
    4 Y4 a1 G# Z0 X4 z+ H: T, I
  740.         }
    ! l' t. m+ P: ?1 Z8 ?
  741.       }# i3 u1 p& j" s5 b8 n, s8 N# p5 h* T) ~2 _
  742.       break;
    ( |& J' T* l; W' d& O, k: w, p
  743.     case 3:6 h/ L! F0 m$ D& ~
  744.       if(!Dn.Connected())$ h+ r0 v1 T' n% C5 V9 ^2 R' T+ c
  745.       {
    & s' x, A& M7 ]+ u) o
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 p) b$ k- k, h* v2 Z! C
  747.         dwTotalFiles=1;
    , i+ E! u; `; I
  748.         dwDownLoaded=0;% ]( A- A5 E4 G1 P0 ]& g$ L6 }
  749.         bSilentStep=TRUE;* E$ t. k. c! x. Y7 B7 z) g* h: Z
  750.         bCompressed=FALSE;9 g! u6 O9 r( f( f# t
  751.         strExtLocal.Empty();6 A( p- a4 K, U/ m6 I' w$ J
  752.         strFullName="checkversion.txt";
    ) G5 S$ A" Q: n  x( P+ \- k
  753.         dwProgramState=AP_CONNECT;
    - C+ F; t' I+ t
  754.       }
    / l1 K, \  _, p" E& \
  755.       dwStartUpSteps=4;! i' \5 m& Z( ~- N1 L1 L1 [' A. Q+ `
  756.       break;' b: L0 {# m0 k* h; b$ ~
  757.     case 4:
    ' Q2 @* N" S$ G1 v
  758.       {
    % ~6 Z* y6 i' P/ ~8 V; e
  759.         FILE *fp;4 o- c3 y  Z( S9 d/ p: M) x
  760.         char szString1[128];: S, g; u; }. d- J6 s4 F, Y0 }7 v
  761.         char szString2[128];! [, Q/ N- c9 F4 j  V. r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , [4 U! |1 h* w: y3 D
  763.         if(fp)
    1 U& q; w$ h, E0 d3 k; l+ E
  764.         {
    4 z4 j' E" M+ p+ O
  765.           fscanf(fp,"%s",szString1);
    ' r5 O5 h& D/ }- v5 j
  766.           fclose(fp);
    8 g+ w# F9 q' B  S+ ]6 y
  767.           fCheckVersion=atof(szString1);
    9 [0 j8 `  C% J+ E
  768.           fp=fopen(".\\checkversion.dat","r");
    ) k0 t8 s4 c- G
  769.           if(fp); N5 j8 F# r( H3 k% o) P
  770.           {" S% A; S3 k$ G( |( ?- a1 g, U
  771.             fscanf(fp,"%s",szString2);
    $ p: B# J; W/ z6 H) V# }
  772.             fclose(fp);
    . I* p$ q: D$ L5 q' x/ |
  773.             if(atof(szString1)!=atof(szString2))7 t4 }$ h6 u: D# B  ]
  774.             {: J0 R9 G6 @8 i# S9 Q0 S: x( U: O7 H, w
  775.               if(!Dn.Connected())( W8 k5 b4 B  B7 j  ^7 G, N
  776.               {5 \8 a* r* ]2 K$ g! k/ y* E1 m- M# d/ n% b
  777.                 bFirstUpdate=TRUE;# N2 Z  Y! Z" U' N2 w
  778.                 dwTotalFiles=1;
    . s1 W# q' E; @" ], `: z
  779.                 dwDownLoaded=0;9 p& y. b, c0 j  V& u' ]
  780.                 bSilentStep=FALSE;/ s$ T! y5 y6 t- s- {
  781.                 bCompressed=TRUE;
    / c+ \1 _( p' B
  782.                 strExtLocal=".\\DownLoad\";" W. l! i4 i: i/ K, G& }
  783.                 strFullName="update.txt";
    " c* M- b) |2 b8 ?! `
  784.                 dwProgramState=AP_CONNECT;
    9 h( w. S$ t: x7 K: o- u2 n5 a
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");& Z; |7 D$ k5 w6 v9 }+ I4 M% L1 N/ i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    + f9 c& b# a4 s+ x- M
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / k" Y; w: E2 v8 O1 p# g5 z, F

  788. $ E% b* g, R, T7 H
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ h3 J1 {  J; H' g/ `9 d* N, ~& Z7 Z
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ e& h9 D8 S1 Z7 H
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    5 S  y, J* F' o. z- |$ s- {& X
  792.                 {
    - s. g/ ~8 I, c, E$ B9 k" i+ c) E, t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    7 d. B* B/ f/ P! u
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");- d& L9 ^' q1 v: G5 B' n
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");4 Z  s% p  h3 G  S5 x7 V6 Y) W+ P
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % t( X. t3 n+ X/ Z* }
  797. ! T: a9 u) m# S. ?% _
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");( R/ K0 b. t7 ?* a4 T3 R
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - s! G' z& S- i* |* E+ c& n" R
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) H" t8 D: E# ?9 F3 j$ A
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 `; v7 O, d+ K5 x' H5 Q  J2 y
  802.                 }
    & q: ^) ^: c2 C% d7 m8 u# I$ _9 O
  803.                 dwStartUpSteps=5;% r3 Z9 a: a" z' N' M& G
  804.               }
    ; k9 @( D8 `- J+ X
  805.             }
    9 }1 U+ x* `. n
  806.             else# ~% V7 F7 B% D4 m$ t
  807.             {& c2 ?+ M: f% W
  808.               unlink(".\\DownLoad\\checkversion.txt");/ i/ o' {  U- ?6 ?
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* g4 m* h- {5 Z7 O* E( o7 s+ @
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' e: f6 I5 m7 |* s2 }: d7 |7 {
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");. M: k+ t& D6 s/ g
  812. 8 h( `, B: Y7 I7 ~4 e# y% E
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' L' ?# C, f9 z
  814.               dwStartUpSteps=99;
    % ~5 m; j- c6 w) a
  815.               bFinishUpdated=TRUE;
    ; a/ ~+ B8 x) x% g# }8 f$ p7 d" F
  816.               bCanUpdate=TRUE;/ P1 b" n3 c8 S
  817.             }
    / }* ^% q; i! @# V* h4 |* W
  818.           }
    ! p" H5 G) a/ @% R) H! H
  819.           else
    0 [- k* Y+ I8 y
  820.           {% u3 }7 N$ h2 T+ l! F
  821.             if(!Dn.Connected())
    2 V4 |# q$ B2 N
  822.             {! `8 w8 Q6 ]: M* e$ O' D5 K
  823.               bFirstUpdate=TRUE;
    , Q8 h) X/ H% f+ A. X& ^$ k7 b
  824.               dwTotalFiles=1;  ^+ n+ J: V' b: J, i5 Y  Z& F
  825.               dwDownLoaded=0;$ J: b+ R  L0 K% {  z
  826.               bSilentStep=FALSE;& a9 u: |+ w8 r/ y$ r' ]
  827.               bCompressed=TRUE;1 f- t5 _0 x& P
  828.               strExtLocal=".\\DownLoad\";
    5 n2 n7 }+ {/ c. g- X, c: Q$ l
  829.               strFullName="update.txt";9 l& {" Z, o% \+ h. e" ]
  830.               dwProgramState=AP_CONNECT;- k8 m4 L2 E6 {& X% `( U
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: ?) ?' M3 W2 j5 e* l9 B! D
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 I4 n3 r3 n+ C! g, g! X1 D
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");1 N4 e/ T# l3 C+ h# V
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( [4 z) n  w  L
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ( E' h6 n# r8 C+ x: r1 f1 e( i
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . g/ R0 H8 n4 S+ L; i8 \
  837.               {2 E5 Y6 }3 H; E: n1 a% N9 o4 n
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");& P' z1 S; }! p: b) T! S
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ( N, l/ V3 [) H
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");1 W$ L, h" ]" l: A: ~& ^4 U
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 Q, a$ X7 O- ?: \/ i
  842.                 . i3 o. J4 N& s, h  f, _
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; _. P1 G8 I, ~9 f. j
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, ?) X1 E+ {* R# A& w
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");( }# o7 d$ H. Y6 K4 q- E
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % j) I2 ^, P, ^/ r
  847.               }6 q$ |+ U  @4 M2 k: c; ]1 X9 o
  848.               dwStartUpSteps=5;
    " _9 F% S: c! X
  849.             }
    ' `' Z- U) C( \) l
  850.           }
    ) K! b3 R+ L) y: M, z( F5 ^
  851.         }" g6 l! F1 o+ E) L) P$ t' k9 f& v
  852.         else! g/ @( [* v( `
  853.         {
    & k( R( I+ q9 I; V( _; Y1 C
  854.           dwStartUpSteps=3;
    / v  i$ s1 V5 D( ^
  855.         }
    9 p3 w6 ~3 m& G. V9 O; B
  856.       }; U: m8 F1 Q+ [# R& c/ b# w
  857.       break;; @/ i* V$ R3 M
  858.     case 5:$ A) t9 r  O. c  ]2 K8 U
  859.       {
    % m: C2 ~5 u. U: Q: c2 ~
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ( E, Z  O0 u, x' J# l$ A
  861.         {
    2 _, h/ C7 R# @( N; z* v
  862.           int opt_overwrite=1;
    ' p& b; ?8 E' j9 k  P7 ~
  863.           int opt_do_extract_withoutpath=0;
    . R1 `( n0 R4 c  v" F8 q, C
  864.           unzFile uf=NULL;0 x% u4 R  s$ U+ C/ M5 @

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-17 23:47

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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