CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
! ^4 L" S1 G6 P
  1. / RevApp.cpp : Defines the class behaviors for the application.2 H' L7 E$ Q0 |
  2. //5 C" ?, i' G% U2 O' S

  3. , L' w, ?/ b. P3 W) i- |  w* u- f. C
  4. #include "stdafx.h"
    & F. i. U# k: ^+ W7 X% p# @! ~
  5. 0 C5 u2 X: u* s% U7 i! T
  6. //#define UNICODE; s" ?% O! K" ~0 |0 l
  7. //#include <gdiplus.h>- e8 L& T" e; C; \3 w+ z/ I; I5 `$ `
  8. //using namespace Gdiplus;
    1 d7 y: s, o- u+ @) f5 f( P
  9. 5 D0 U% _8 ?: ~2 e! Z, r0 ?+ H/ @
  10. #include "RevApp.h"
    / D* o' e/ q4 W; a9 q4 K
  11. #include "RevAppDlg.h": Q" ?! p& T% N; E, t2 c& M, H0 w

  12.   X$ Q4 ]& S1 F& g5 p
  13. #pragma warning(disable:4786), E2 A$ |# i- `8 w4 N" A/ }$ Y; M
  14. #include <map>
      X- C! v* O- Y& w
  15. #include <list>" O8 [2 ^9 D3 [1 [, e' A8 x
  16. #include <direct.h>) w8 Y8 d# S0 n6 u* j* i$ B, l
  17. ) W2 p: D/ O. u+ _
  18. #ifdef _DEBUG
    - A& S9 D) U  N( l9 L% B/ p
  19. #define new DEBUG_NEW( |/ w7 Y' P; V/ x# i  g( w
  20. #undef THIS_FILE
    5 D7 \- k- k! U. j& |) x
  21. static char THIS_FILE[] = __FILE__;  s7 p3 _$ k% d
  22. #endif' \% h9 J7 `6 }; M. X4 i
  23. #include "SkinResDef.h"
    0 R! x( r- i' b. s( d6 Q, u% C5 @
  24. #include "ChangeBG.h"
    " m" ^- i2 X; G: q" E# p+ _
  25. #include "AFXINET.H"$ x0 M$ |1 Z1 T% m8 Z9 o+ F3 w: t
  26. " F# k1 X, s) ~( L0 Z
  27. #define TRADITIONAL_CHINESE 0/ w% Q% A8 M# h0 R6 }, \( K& l
  28. #define SIMPLIFY_CHINESE 1
    ) o5 @- c6 I7 ]: q5 F& R/ \
  29. #define ENGLISH 2/ O" k3 A1 c) h
  30. int m_iLanguage = ENGLISH;
    ( l* d; l& C* W% ?
  31. /////////////////////////////////////////////////////////////////////////////3 h# O/ y7 e; E# g$ j+ h& ~
  32. // CRevAppApp" X  E: q$ U- R2 j4 x9 L
  33. : M7 k* J2 [8 A& i# e- E; n# L* S! e
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    & D9 c* @8 b: H
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    + h+ x( l! E0 W2 f9 i
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    5 q9 D' v2 J" k! B2 ^6 O& H) P
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    8 p7 u! v! b  [6 W$ E
  38.         //}}AFX_MSG
    ; n& k8 O( y1 O, a0 O+ Q' f
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)! m/ W: @  P8 R- l' n3 @
  40. END_MESSAGE_MAP()
    5 d$ N, ^$ o. P6 E4 I2 B; o

  41. 3 s2 d: p7 X6 q% P7 V: e
  42. /////////////////////////////////////////////////////////////////////////////
    ) d" J, L: ^% e7 ?
  43. // CRevAppApp construction0 |: e( w% A# T5 I- ^5 _

  44. 4 K9 L9 [. o+ ]$ o2 J0 g" F
  45. CRevAppApp::CRevAppApp(); f1 U5 d0 D5 j- S. G: x
  46. {6 B% h5 U- ]; C. J
  47.         // TODO: add construction code here,
    2 k3 n; y4 n# R) x. z
  48.         // Place all significant initialization in InitInstance$ H* }; f" q& B2 d
  49.   bDisplayIsBig5=FALSE;
    - A& c; e( K1 q2 H' _
  50.   bRestartUpdater=FALSE;8 T7 M6 G3 R6 S- z$ y7 [
  51.   bFinishUpdated=FALSE;
    9 w3 a! _7 f7 ^( q, O4 y4 z9 T
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;; q! Q6 H  N$ _
  53.   InitChangeDataBig52GBKS();  t4 W8 ~/ B) d. i& Q
  54.   InitChangeDataGBKS2Big5();
    + o  ?% e$ ]/ P$ a  i
  55.         //
    9 ~* d' |$ B0 {; e- n  p: X
  56.         bClickRunExe = FALSE;, ?) h$ N1 j; ?. E
  57.         //
    5 X; E" Q2 W, x* h5 \& ]
  58. }
    ! {' p  p) C0 x5 m5 T: \) m
  59. 4 L' ^9 {0 [- F, M( X
  60. CRevAppApp::~CRevAppApp()2 W- x3 y3 v" A6 n  C. S. h, j( v
  61. {  ^. K' @* g4 o  D' k4 F
  62.         // TODO: add construction code here,
    ; n+ u8 L: _' c+ ^" l2 V
  63.         // Place all significant initialization in InitInstance" C1 M/ X; Y6 G
  64.   EndChangeData();
    ) c3 E' D" \7 D: H# V, C
  65. }; V7 k- c% `6 b. P  }7 D

  66. 9 v# X  N7 x( `. b- o% v
  67. /////////////////////////////////////////////////////////////////////////////
    " u) A  r' H5 `' i  w% z
  68. // The one and only CRevAppApp object
    4 @/ w9 e. L1 _: M" i

  69. 5 Y/ g6 o) m/ `1 _
  70. CRevAppApp theApp;
    8 e+ Y0 G  A1 N7 W" i. D: t9 r

  71. ' G, l% I% e! U5 p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    " h9 ^: n1 w) \, u- X
  73. {! N5 d, s0 k2 f1 G2 q( B
  74.   int iEOF=0;. I" o( Z9 I5 b7 N4 {: L" V
  75.   char szTempName[MAX_PATH];
    , ?! `/ H( O% r
  76.   *szFileName=0;
    - Z' @* X9 T8 C
  77.   iEOF=fscanf(fp,"%s",szTempName);
    3 d/ [, z. r" ]$ I! T8 f0 |
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')3 b* e2 j' l& w3 C- e7 E' |8 C
  79.   {0 d7 x7 G1 S( V& d
  80.     strcpy(szFileName,&szTempName[1]);
    : @  H, b. k; N4 ?- T' Q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ' b7 }- o5 C+ w! h, |
  82.     {, C$ m* D/ S2 H% [; q8 H6 u' }
  83.       iEOF=fscanf(fp,"%s",szTempName);, r, ]; C: e) z8 p) ]
  84.       strcat(szFileName," ");
    4 M4 C8 ^8 f- e
  85.       strcat(szFileName,szTempName);$ H) w& _) p9 S. f: U+ b$ a; `
  86.     }
    1 q/ a2 b  t" h
  87.     if(strlen(szFileName)>=1)  |) Y0 [; q' }. ^! |2 \
  88.     {
    / e+ L4 V' p. W5 r0 D, ^
  89.       szFileName[strlen(szFileName)-1]=0;
    3 M$ m6 |5 {. U6 v) q- v: P9 U; B
  90.     }
      Z; |+ A0 x5 N
  91.   }
    ' A( Y% y/ v) e
  92.   return szFileName;
    " B3 D3 h; K4 Y6 m3 K
  93. }- F* {) Q# I! G
  94. 9 E" _0 G7 t& q/ R) ^
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)& o. f5 I  [. e0 g- w
  96. {
    $ P( \& o3 q0 t7 ^% ?/ {
  97.   FILE *fp;
    4 {( P+ T" I+ y! ?  G5 C* D
  98.   char *key=NULL;
      o% w- T1 {, e: B8 ]+ a! @
  99.   char version[MAX_PATH];1 T/ k; r. x6 y5 }# k
  100.   LPUPDATEFILE file,olds;
    , u9 `. {9 A, ]# _
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , o5 Z1 @/ F4 l
  102. * G8 g) m4 y# ~/ X/ p. w2 g
  103.   UpdateList.clear();1 h- p5 e- R" B  P, R
  104.   UpdateFile.clear();
    ; [+ O0 ?+ b: s# O7 `, S  h
  105.   if(GetFileAttributes(filename)==-1) return false;
    3 O( R1 q# G+ K- {- D
  106.   if(!(fp=fopen(filename,"r"))) return false;9 u, B* D, P' R& d0 C7 j6 i
  107.   fscanf(fp,"%s",version);! D. p  g$ g) Q& t' T
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }: L9 i, q7 g6 N1 ^  @6 ^
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 N1 n! f) |/ w* {: b6 r* k8 h$ Q" i
  110.   {: Z$ w% x; j- w
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" [- k& h- g. f; ?% {' }. T
  112.     fscanf(fp,"%s",file->path);( O3 K' U$ a' e; g+ {
  113.     ReadFileNames(fp,file->file);
    ; I' T- N' x: B# g! q
  114.     strcpy(file->full,".");
    / H+ t% j0 l0 p5 N* W9 \! k8 q4 {) _
  115.     strcat(file->full,file->path);
    ) ~; `, U. {% J# q/ n
  116.     strcat(file->full,file->file);
    0 |- N: X( m# }$ S1 b9 |2 Z% K) v
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())# U8 W0 N' d9 V) E) J
  118.     {  p8 }8 v! c' z0 i3 l
  119.       file->vers=(float)atof(version);
    ; Z7 f- z% w- ?& g6 W  ~* t
  120.       UpdateList.push_back(file->full);
    - [* J4 ~; m& l* J! E
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ; b7 C- d. \) e% a* g2 q
  122.     }
    5 ]5 C. V: s6 C. v( t5 o# o
  123.     else
    * |: R0 G: X- K- g( n6 f, D5 D' I
  124.     {. w% }" c1 V7 Q! J, ]( {
  125.       olds=(*p).second;0 O8 Q2 s. a0 [& O
  126.       if(olds->vers<(float)atof(version))
    - G: {8 l5 t8 P( c; X2 F
  127.       {' s, @5 r$ m7 ?5 Q
  128.         olds->vers=(float)atof(version);
    ; @8 C- x* [$ U: V7 q& {
  129.       }5 r4 h' k4 F7 ^
  130.       free(file);
    $ g& t6 t! k! ]" Q" q% x
  131.     }
    + `# Z2 m/ v) \) H
  132.   }
    8 `4 A) B4 K; I) `" ^7 ?
  133.   fclose(fp);
    # S) R0 [+ O  S: z0 R( L
  134.   return true;
    % I1 X- c( U' ?5 Y* n, t+ ^
  135. }* B8 n  D; p6 U* [3 M/ ]6 R6 H
  136. 9 _8 r% G4 ?# O0 M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    6 v+ j' _3 K( u; ]
  138. {! \2 a+ w  V+ V* t) k, ^
  139.   TCHAR  szFull[MAX_PATH];. [$ s, V( n6 f' {# u3 ?8 {6 f
  140.   TCHAR *token,*inter;0 ]7 y! i0 Z% M$ Z( X: E& `
  141.   *szPath=0;
    ' e% [& M& L& A. E4 j! q3 ^
  142.   strcpy(szFull,szFullPath);/ o# g- b' M, X! G
  143.   token=strtok(szFull,"\\/");
    2 v  s4 P/ G4 r% G
  144.   inter=token;; }, m( ~7 |, d# o7 T7 F
  145.   while(token=strtok(NULL,"\\/"))4 \' i* o5 ?# `) {0 h7 _8 i
  146.   {" j+ E% e2 {8 W& d/ p6 C( _
  147.     strcat(szPath,inter);
    5 q1 |; K* Z" P* U" b
  148.     strcat(szPath,"\");, Z1 v) v' b8 H  E
  149.     inter=token;
    7 R' J( Y' Z; m/ @0 r
  150.   }
    ! E0 j6 [; N- p  `
  151.   return strlen(szPath);' ?2 O9 I7 N  v- h2 [
  152. }& @- l! d2 w+ f+ t% e1 q; y
  153. + J( {4 w" o; ~/ i9 F6 F
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
      n0 W% l9 ~( U/ z" T( y
  155. {0 z7 Q. o& G: {1 F3 L
  156.   DWORD attrib=GetFileAttributes(Target);
    - J. b, x+ ]1 L4 e
  157.   if(attrib!=-1)
    5 i2 Y+ u4 [3 {( Q$ u
  158.   {
      m9 s8 {* L; x& ?9 C  J1 x% H2 v
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)), Q5 H- n6 T& O' I
  160.     {/ }& j$ O! E/ O  e/ U& j
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ ^- I+ x3 D: E6 Y4 y" d
  162.       SetFileAttributes(Target,attrib);5 q1 A3 ^( Z- Z# V& _
  163.     }
    $ A: T! K4 ?) d
  164.   }
    8 s! Y- c: }3 b) @" _% ~/ e8 Y
  165.   CopyFile(Source,Target,Erase);( P5 n0 Q: p+ }8 ]- r2 m( w1 C
  166. }3 U' y5 H- F3 V/ Z. c/ f0 V( a: X

  167. : g8 k; \; i& }) E
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...), h6 x3 ]6 c7 ~9 v
  169. {) P* \+ j3 r# ~. h2 F# b- Z0 P
  170.      FILE *fp;! f9 G! U) Y' `9 H, o& G$ U% q# K8 l- p
  171.      char  szBuffer[8192];2 e5 {: c' r4 q7 R: c
  172.   va_list  argptr;, C4 T) S. B: }& P- `- i5 r8 T

  173. 4 J7 O' d# I( k2 I  E6 ?
  174.         va_start(argptr,message);3 u6 x% z8 ?9 x) W  `( d7 A
  175.         vsprintf(szBuffer,message,argptr);
    / y5 J) w0 W" X; c7 L
  176.         va_end(argptr);# g9 M& P. [8 u  C2 W
  177.   fp=fopen(FileName,"a");% w8 e) U# ^" P* e
  178.   if(fp)- m% p; P" h, y9 u/ S. _" J# j
  179.   {
    9 ?0 u$ U: q0 d) K% v* F! J
  180.     fprintf(fp,szBuffer);4 w9 D2 r% H1 e3 D2 r. \
  181.     fclose(fp);
    5 d% ^9 _$ ^$ J8 v6 A2 ^2 l
  182.           _flushall();
    2 M& F3 K8 |4 w* }9 g
  183.   }
    7 y8 X0 |; a* T  ?; @, W
  184. }6 l: v. r1 s& h# A0 S
  185. & h6 a0 k# j( {7 m
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ' l3 r( q/ b' G) i" s. S& h5 R
  187. {' L# V3 i4 V) P+ C: ~# k
  188.      FILE *fp;
    8 R! V' d" c% l
  189.     DWORD  attrib;
    , i' H; j4 o& p, x' I) i! j
  190.   attrib=GetFileAttributes(FileName);! p5 F9 f! F, K
  191.   if(attrib!=-1)
    5 z  u% [) O+ J* v
  192.   {* e) w6 B( P; A% f7 L) H7 h( \
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 ~. W" Q2 j$ E% a. s
  194.     if(!SetFileAttributes(FileName,attrib))
    0 [! D/ s/ ^8 @
  195.     {4 e& m2 O+ @  E
  196.       return FALSE;( n2 E* D+ P' K$ s' D' Y9 V
  197.     }
    2 C2 F8 |1 F; `; m4 B5 K
  198.   }
    + v. S. [2 K; g( T( z- c
  199.   fp=fopen(FileName,"wb");
    / S' n* h( ?  J1 X3 h0 p
  200.   if(fp)
    % A# H" p) i* O. c
  201.   {
    9 i- ], M3 C$ [; T( q# r
  202.     fclose(fp);
    5 i9 \) e) u. R& T( E
  203.   }5 o1 E! d) S- i/ |4 ]
  204.   return TRUE;  g- T# r0 g) G$ q2 e" S
  205. }
    & _* ?$ d) ]7 N8 o3 {
  206. - m9 q# M' j+ C8 d8 M7 ]
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    3 I" C+ W( Y' \2 v( \
  208. {
    7 b! C5 f* I( _- U8 N5 f. J2 O2 f; f
  209.   char filename[MAX_PATH];
    3 q1 H1 {- l  l0 ]0 y# j7 W
  210.   LPUPDATEFILE file,olds;3 U4 j/ E  o+ t
  211.   std::map<int,CString>::iterator i;% J2 q3 P8 d- a0 O# M
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . ?; c: c: Z& U8 |  _
  213.   std::list<CString>::iterator l;
    2 ^" ~! F3 I8 E  e

  214. 7 B# P1 O; d; ]& x: N' }
  215.   if(bFirstUpdate)& e# B; C/ p( c' t
  216.   {
    . |. `* {' n/ R  Y* n, S
  217.     dwCurrFile=0;
    7 G  O8 W6 M" q1 @
  218.     bFirstUpdate=FALSE;
    % P7 [. {. K; ]" z8 @, k( H/ l+ b7 e
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      b+ T4 V0 G8 k9 o: h4 }9 w
  220.     {2 Q8 z  e, a: A
  221.       dwTotalFiles=UpdateLocal.size();
    * Q9 o% @5 e# R) A* d
  222.       dwDownLoaded=0;
    " I; V$ ?1 {- M# p
  223.       bSilentStep=FALSE;' {! n& q9 \1 ]  ]8 r/ v
  224.       bCompressed=TRUE;3 H/ w$ x* o1 n4 @* Z
  225.       strExtLocal.Empty();* y: G6 G8 @- N, v- u9 U: ^& X
  226.       strFullName=(*i).second;
    9 B) m9 l  d$ d8 p) `
  227.       dwProgramState=AP_CONNECT;9 N& g/ {. @# g; n
  228.       return TRUE;) i+ K% A) e  ]  C1 K! d/ S) u9 u) {
  229.     }5 K4 L$ ?- o" e  i
  230.   }7 T2 u/ I# Y0 a$ q* f9 q$ q
  231.   else if(bRestartUpdater==FALSE)
    % n, V7 M- T* a3 o4 }
  232.   {
    $ |4 Z: F3 h0 E/ r
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())% O% c: D2 P0 B+ ^( ^. \
  234.     {
    " w4 y* a$ b2 a9 f/ E0 P3 D
  235.       file=(*p).second;
    . w3 x% h% B( a+ y; n! Y' G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ( }+ D; {" `% U6 [/ A! Y1 U
  237.       {
    + w% v/ l" f3 _* l
  238.         olds=(*p).second;6 C! v0 Q+ t! \: i' \
  239.         olds->vers=file->vers;
    / C4 A& ]5 Q' L2 r7 F/ \6 M- f! ~
  240.       }
    % R$ ^3 o# {9 k. y
  241.       else7 B2 e6 ^7 j5 g5 Y. Z
  242.       {" r/ d+ J' [$ L# e( g
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 J' p( w3 X9 L7 C8 v; k
  244.         memcpy(olds,file,sizeof(UPDATEFILE));; S5 M: R9 D# Q( j" L
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    # a. Z2 K: k5 L- c9 E
  246.       }
    2 b. `0 v9 f, k" x0 k  B6 |
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ) [& T' @* U2 W; y
  248.       sprintf(filename,"(%s)",file->file);1 s0 B" a/ f' F; O6 A4 J/ _0 o& w
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);5 m4 f# @' k0 K5 E% z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " |- k$ x! n" _6 `# ?
  251.     }
    % q: W0 l0 R$ h8 {/ |
  252.     dwCurrFile++;7 t/ @+ ~# W) m) @+ I; W& @0 U" |5 `
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # l+ E) @8 r, `* j8 Y1 o
  254.     {
    0 D0 @& K! \4 @. N( W
  255.       bSilentStep=FALSE;
    8 `! S  A( T7 a  l8 e- E
  256.       bCompressed=TRUE;# L7 c! r5 U, S# ?* p  _7 h# A9 Z
  257.       strExtLocal.Empty();$ ^2 Y( i6 `; d( N  X/ f2 k; S; `
  258.       strFullName=(*i).second;( G; M) J+ f/ K" d8 Z8 L# l. y- N2 ]
  259.       dwProgramState=AP_CONNECT;
    3 N  _( s/ K! g/ \# `! {
  260.       return TRUE;
    - E8 _7 I0 y! x( l4 K% L. B
  261.     }" w! Y. z2 j5 ~8 ?  O/ u7 q
  262.     if(!bRestartUpdater)
    ; I1 \& F1 v" v! y
  263.     {( J  p0 f: V' C
  264.       int iCurrSize,iFileSize;
    ) v3 A+ y+ k- U8 j4 T0 ^
  265.       iCurrSize=0;3 J( L( {+ w& t* h1 q7 b4 H
  266.       iFileSize=UpdateList2.size();* d0 G" Q4 e, K  P7 G5 [& B4 z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");4 J: Q3 O1 V: e2 A
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    / F9 D9 Y8 d0 S& z& S
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    : |# C, }( r, N- H: F  s; z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 T+ ]/ S$ F3 _) x6 V! P
  271.       Fclearf(".\\update.dat");+ a" R9 n. D5 g0 O3 b7 |
  272.       Fprintf(".\\update.dat","Bloodyf\n");" ?+ t9 L0 v! i6 k4 u
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! |" \6 q2 N2 [( b
  274.       {
    ( \( z5 b  R! c8 B+ J
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())% f6 R  d; X3 A6 B
  276.         {
    9 B" V# \  a3 U( T* s
  277.           file=(*p).second;
    - y' ~+ c1 D. _/ ]1 I9 F
  278.           sprintf(filename,"(%s)",file->file);3 c0 k) q/ B& s. o8 q) o
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);" l0 i% j* e6 M
  280.           iCurrSize++;. B* q& S4 F/ D# L1 {) g
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ' H6 {6 u! V) {! Q, e
  282.         }
    / w: f. Z/ n" x6 q
  283.       }$ k* r6 N1 H% N, B
  284.       unlink(".\\update.txt");
    6 L2 M4 a" L( X: L# x6 ?
  285.       unlink(".\\update.tmp");( }; @& c! i4 U6 l4 \+ @! z
  286.       Fclearf(".\\checkversion.dat");
    7 C, d6 N1 d! L) B7 r( Q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 [% G8 `" X  t3 c
  288.       if(UpdateLocal.size())
    3 f( K: Q3 C9 T3 Q' F
  289.       {
    + W/ |- l( K  q4 f& N& v. }" V
  290.         UpdateLocal.clear();
    ! _: k# T9 _, O5 X! d1 ~2 S
  291.       }) O9 D4 k- d% `" p% o/ Q
  292.       if(UpdateFile3.size())
    ; ]* ]" d7 R. R9 g
  293.       {
    " J' P$ [$ a  f- Y5 O: R
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) I& b. ]  v/ [8 d) h
  295.         {
    9 b8 P% Q' ?# U0 L
  296.           file=(*p).second;
    ! E. K9 i& E: ^+ d4 w7 I" U
  297.           free(file);
    & G2 F; @4 C) |$ m! F
  298.         }
    3 X, j+ W" \3 ^$ E- M
  299.         UpdateFile3.clear();
    1 q6 W: c4 p1 J& ?4 `' N( V
  300.         UpdateList3.clear();3 Z. @) z; F' n* O
  301.       }
    ( E. h3 B3 n7 U8 U% h
  302.       if(UpdateFile2.size())& D- f( t9 J5 p- d2 U9 `
  303.       {. A8 r2 E! W/ g- X$ z
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ x( R: y" f" M0 v0 m9 G
  305.         {. q! ]' Y: |3 Q1 h" z3 g2 Q( \
  306.           file=(*p).second;& f: V) B  C1 X5 O8 a8 \
  307.           free(file);
    % h+ J3 T7 L8 G' a' a
  308.         }3 t' u5 V9 j, [3 K, C
  309.         UpdateFile2.clear();) x5 G' p$ q$ {# T$ L1 `# R
  310.         UpdateList2.clear();& H- _# B, ~4 F2 ]
  311.       }1 A' ]' @$ T( \5 P
  312.       if(UpdateFile1.size())
    8 g9 L6 i5 Q" a, ?. y0 Z
  313.       {, r3 n' d1 r7 E3 E  ?1 X0 n
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( o/ K5 Y8 z: b7 p8 B0 v. k" f
  315.         {+ c1 H; C' {- o" o4 Z) v
  316.           file=(*p).second;# b7 |: s, \: e( `7 I
  317.           free(file);
    4 _% O& O4 ^4 J
  318.         }  f2 G' Z" W" |9 r8 S, t7 O
  319.         UpdateFile1.clear();
    2 Z* I# D/ c2 f: T
  320.         UpdateList1.clear();
    - I% M1 m+ S+ U9 n
  321.       }
    3 ?4 p) t' }9 q  W7 X
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! L6 A! Z) ^9 s, U
  323.     }
    , B, c* }" y' F( s, s+ c
  324.   }
    - `% U4 h1 ]3 G0 X7 O( I  q
  325.   return FALSE;+ E" B( Y1 k* g1 a& n& R
  326. }
    $ W" _. k- J" Q( ]4 ~4 p

  327. 6 s  w  D, X# W
  328. void CRevAppApp::ClearAll(void)5 s5 B: y8 K1 s) g( ~6 v
  329. {
    ! S2 U" i4 s# ~5 N, F: j( [& e9 M5 k
  330.   LPUPDATEFILE file;
    - A( K4 t  N$ x' i) U- a
  331.   std::map<CString,LPUPDATEFILE>::iterator p;! D+ ^0 t, H! j% }7 ~/ j& a

  332. . W# _( x' D( p; T2 }0 c6 i
  333.   if(UpdateLocal.size())9 m" _" `& B& N0 ?
  334.   {2 j4 ?! S+ k+ T* i- V4 A( }
  335.     UpdateLocal.clear();0 b: q& h( Q. f0 Z& S4 o" |
  336.   }
    , A' o! K0 @6 B5 m$ u/ l
  337.   if(UpdateFile3.size())
    3 Z1 v" ^9 ?2 e1 M1 I4 I# J5 f
  338.   {
    + t8 i! I8 f( F
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  R5 \# Y2 n! A4 R: I5 R8 q
  340.     {. z" {( K9 _- N- e6 n* ?; `+ ~0 ?. Y
  341.       file=(*p).second;
    " c$ \  @( V7 w, t4 C( ]1 F
  342.       free(file);6 M1 E. x  ^8 H5 l: Y
  343.     }
    * ^/ H0 K% G- ^2 K$ e" @
  344.     UpdateFile3.clear();9 x; f9 k( w1 G# Y7 A8 S; g% [5 H
  345.     UpdateList3.clear();" ~( r) Q  ~6 \: a2 y# ^- l
  346.   }: U  n, G9 A$ N$ w% ~8 @
  347.   if(UpdateFile2.size())% Q! i+ ^3 C2 S# E/ i
  348.   {7 a/ B. e) z' U  k" ~
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* `- Q; `/ A* I  K' N8 W& g
  350.     {
    ' P8 U  Z3 N0 j# U
  351.       file=(*p).second;
    ( k* a- E$ E' T  M6 `  }. p0 t
  352.       free(file);9 \# e- X4 j+ ^  X6 }5 _1 ~
  353.     }4 H5 ~, J, ^. O
  354.     UpdateFile2.clear();
    % z5 J+ N, I! X8 l: \) i' P
  355.     UpdateList2.clear();
    9 ~1 c( s3 E" |4 ]- s
  356.   }
    ; F5 H& \* W: W6 T+ n) m) S
  357.   if(UpdateFile1.size())7 b5 M# L1 @- |# h4 V
  358.   {
    8 Z0 v* u, m* s/ F" P2 g( v
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' I, k* Y8 t* h  `
  360.     {
    ( Q. ^( ^! k4 l9 }# ~  ~
  361.       file=(*p).second;
    1 w2 ^! R" W) M4 [! {" [4 w3 E2 U
  362.       free(file);" l' ~  C7 D0 m5 ]& b& L
  363.     }7 s3 L3 W3 Z; ^; q4 K, L
  364.     UpdateFile1.clear();- U* X/ U* L# I
  365.     UpdateList1.clear();0 s, a( g, s8 Q: Q" F! z. r6 {
  366.   }
    2 L1 z- w" d+ ~
  367. }  
    & ?0 V# o$ ]/ u) V
  368.   7 p# V7 E. |0 b
  369. BOOL CRevAppApp::CheckLocalVersion(void): \8 k% T2 _4 |2 M
  370. {
    ) a! W$ F, a- U
  371.   int c;
    . U' s  T/ N2 n) y: p7 R
  372.   LPUPDATEFILE file1,file2;
    . I9 B2 [# _/ A. B
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;3 W& @$ E: ^' X- B# H5 o
  374.   std::list<CString>::iterator l;! s) Q6 Q9 ~. A$ ~' N$ ?& c# S% P8 Y
  375. * ]% @' @5 X: m+ j& g
  376.   UpdateLocal.clear();
    ( O8 w) }. m) L0 ?& s
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);3 D8 V' F8 T/ C/ t2 t& ^
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);* ^0 k. _; o0 D1 ^4 B* M/ i$ ?+ K
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ! ~7 Q, Y! t& u7 q# a
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    # i. P2 Y& m5 v
  381.   if(UpdateFile3.size())7 V# X/ p% E3 ~
  382.   {6 {2 j% G0 C- H( e0 S
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    & D9 [  p' T( Y: M
  384.     {  ]( `/ u$ _, I1 l$ T
  385.       file2=(LPUPDATEFILE)(*i).second;
    . p- H) ?) W" m/ s- W% X: ?
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / i, Z% Z; Z2 E
  387.       {, q! l/ I) ~* @$ S: ~
  388.         file1=(LPUPDATEFILE)(*p).second;6 q9 F9 `0 x) g" t9 ]5 h; R
  389.         file1->vers=file2->vers;
    " m8 I" G# k. e7 e
  390.       }) u8 y4 ^. {# f' p1 m' ]
  391.       else
    ( o7 H- v/ H+ p: {' I1 N' k
  392.       {
    # w; U: ]+ A! q2 K5 E* k3 W
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      O0 `! H+ T+ o& Q2 |" g1 X1 Y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" j6 R/ X9 @9 l2 L4 Z4 x
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    5 a+ \# `- K; K0 m
  396.       }& H) x9 p& F3 l) p. o: ^4 D; z
  397.     }0 d! b1 Y0 Z( c7 X* I% k
  398.   }
    7 l1 @; m4 E8 {$ h: z
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 Q, F$ J! G% c" D, f3 u  d4 t
  400.   {! f  z/ K5 W$ F: F  B4 R
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    8 `: q" I  h9 g* T& H
  402.     {% K0 [- O4 Q7 q3 Z% T  o6 W7 ^
  403.       file2=(LPUPDATEFILE)(*i).second;
    7 H8 R# K- u# {9 x4 r. f7 C
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ g6 f0 e0 R6 U- j, H2 C0 o
  405.       {* x7 D7 u! m. O9 T9 G4 p3 w, |
  406.         file1=(LPUPDATEFILE)(*p).second;
    ! q( |4 b# J. @
  407.         if(file1->vers!=file2->vers)
    2 z! f' H! e. I6 Y& H
  408.         {
    : M) I! G* i' o. s
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * z  B$ V& ~( a4 b2 W
  410.           c++;
    5 {+ X& d0 _( k2 `7 H0 `. v2 C
  411.         }
    4 U' ?% D; \# W9 F# V  E. G/ r
  412.       }
    / l5 U8 Y1 u, I, d4 D
  413.       else, D$ \6 j% t5 B3 L( V6 Z- L
  414.       {& k- s8 \6 r9 p/ Q1 K0 u
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' U& @- C5 r: R* g* R  H
  416.         c++;
    " A$ }; }% A% M8 T9 W  e9 F
  417.       }
    8 x. C7 o5 }: ?
  418.     }# X* e. u% A' l0 n5 }8 n
  419.   }
    7 y; P4 O8 t  g  ]6 z
  420.   unlink(".\\DownLoad\\update.txt");
    1 S5 c/ B& n6 |3 v8 k, U
  421.   if(UpdateLocal.size()) return TRUE;3 Z8 n/ W! |( Z; \! ]' d
  422.   else                   return FALSE;+ }: u7 }. E: ?& D
  423. }" O9 @. m# t9 a5 ~, o
  424. 2 W1 S; h5 i: }
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    2 j* z! I, I; l. A. a
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    % _% q" {6 R+ f9 |8 O# [2 g

  427. 1 q; e+ L" s5 F9 g
  428. : v: \% A% t4 ^4 o. k9 x' c  j

  429. # |9 A# A+ |8 L) f1 C
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)& k4 u+ N2 U) ]8 a- ]& h0 ^
  431. {" T% V, n) t5 N
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;6 h7 P5 N: x  _
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 Y2 z& j& Z6 d  S1 E/ \
  434.   {0 L8 e3 P5 R" D) J2 J) F# \
  435.     char szLanguage[50];
    / z, J6 v" V6 T, q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ }8 C) ~8 ~  G* q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 S1 ]# f$ h% ?' w3 i& [* |# y; z
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / q9 S2 J: I' `; F+ z
  439.     else                                   m_iLanguage=ENGLISH;# T  C$ N% i$ L- t2 W, k2 O8 V4 g
  440.     char szRegister[100];  o0 p/ g6 O: t/ J" Q- S5 K4 L
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% b& b6 w: j6 F( t( a
  442.     strRegsName=szRegister;
    4 j9 v$ ~4 C0 Y2 {* O
  443.     char szPatchURL[100];
    0 l, ]% r( _$ W' T8 Y# k
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 a# o# b  K2 ^9 f" c
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # U, U, n1 ]( u& y7 p
  446.   }
    ! `3 Z, _" H% t; A* C4 n
  447.   else
    ( Q3 a; x( ?, K' j! X/ I. x  a
  448.   {
    / b, h1 X, I( P5 H* M2 M
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 g! I+ F* N' H& }$ E  T& E# j% w
  450.     strRegsName=DEFAULT_REG_URL;
    ) f6 @0 W* _8 ~% |. _5 D
  451.   }6 e( B4 T" [6 u$ i2 ]
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    - {3 j: L- }. b' g
  453.   {
    8 B- {# P' f3 u' k
  454.     char szIP[50];; Y7 F# r# z! J
  455.     char szDIR[300];! D* l! w5 A# |0 F0 M% x+ Y$ ^
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    5 y: U" I( ]  h" `1 Q; u
  457.     {: d% j5 ^. A' r/ O6 d
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    3 v; p! ^2 s4 B. B* ^
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    8 R# Q9 B6 {5 U
  460.       strHostName=szIP;6 O% C! w3 m6 w* @6 ^
  461.       strHostPath.Format("/%s",szDIR);
    # `- m$ o) @, ^; t
  462.     }
    2 w4 o! t- j7 O1 T/ e1 E
  463.     else
    ! T2 L/ v9 Z( Q5 y+ s+ ?' q
  464.     {* s& a+ T3 n8 _
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , j" Q2 R  T" K! t1 f: R
  466.       {! t9 @. t1 W. K' S# o( j: E
  467.         char szLanguage[50];
    5 i- S7 Q2 H% U/ U% r6 E
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- v: O5 w% T/ ^& ^" D1 s
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) g, F* E' y& y9 a# g
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / O+ u6 r/ e- A: ^$ j5 P
  471.         else                                   m_iLanguage=ENGLISH;
    / j9 N' {( z2 U) L
  472.         char szRegister[100];+ P+ e+ r5 _0 V6 n, m! c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! y3 g# b' O5 ^
  474.         strRegsName=szRegister;3 J. k7 J/ t. r' \
  475.         char szPatchURL[100];- E; f8 B0 u2 _+ R
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' H! V: P5 S  L. M: p. ?
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 s3 t- a! t- E! r" G- b# ]5 A
  478.       }% M7 [' S  A  \' t8 D
  479.       else
    ) V" K  N& P" f
  480.       {
    7 B7 p" q) Z$ E/ A4 l0 \+ e5 n1 [& a
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' Q$ d6 Q1 a* o
  482.         strRegsName=DEFAULT_REG_URL;. E5 ]. m% R% G! o
  483.       }% _) a0 Z0 \% m# n# ?
  484.     }
    ( ^7 G% D2 S  z, e7 @
  485.   }" z0 r* ~% @1 j! V( m% w! P
  486.   return true;
    2 F1 l% v) W3 e: X/ e( c, @
  487. }/ h' g  n) Z$ l/ d% O
  488. , D) l# ^+ n9 e( K/ l4 c* Q; x
  489. #include ".\ZLib\unzip.h") u4 m5 p  ^4 P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    , J2 D' k; L$ U% D4 T% S9 }
  491. /////////////////////////////////////////////////////////////////////////////+ [. H( X) N, S+ e+ h0 M
  492. // CRevAppApp initialization8 |& L3 V( _" i& J
  493. 2 z6 e  ?( t: `
  494. BOOL CRevAppApp::InitInstance(), j: a+ I+ d- B
  495. {
    % n/ V( W: L( m3 @$ s7 u
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];/ A% M% ?0 ?! X) _, U9 u% O# W

  497. 2 y6 |' h, X; v6 a3 J4 w
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ( l! g8 C" D; D; X1 v* {
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ( u2 M) X* F1 r) F! P
  500.   {" m& I( l3 x8 v- i) n
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    # k* M* z( }2 B2 P* z  A
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: m' D$ W! b5 {6 D5 \. T
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))# [' y0 ~3 b; @: w2 Q9 E
  504.     {
    5 ]" M$ k/ f! m' [
  505.       strcpy(szPath,szPathTarget);5 o+ A- }+ x! d9 }  }* r! o0 Z
  506.       SetCurrentDirectory(szPath);5 {$ W; v$ F( @7 \4 l; L1 K
  507.     }$ t1 `% S7 D  W
  508.   }& [- D) R  n/ }: ]) G) G9 N" M
  509. #ifdef _DEBUG
    3 ~1 i+ t2 D- R' y8 z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ x' [# |1 [2 x4 y
  511. #else4 L9 ~: O% b( ~# v" J0 Q3 Y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 w. E, `) @% Q/ P* g6 l
  513. #endif- @2 Q7 A2 K7 K$ J! P& g" y
  514.   {* n3 S8 ^7 a0 l) Z# q7 h1 c! v
  515.     char tempFileName[MAX_PATH];6 I! c) Y, ]# o) |& e5 [
  516.     strcpy(tempFileName,szPathSource);
    8 k" Q& P" o5 }* B- n. G
  517.     tempFileName[strlen(szPathSource)-12]=0;/ ^& J: `$ C, B9 i$ D5 U
  518.     strcat(tempFileName,"\\$CSUpdate.exe");( M; X3 [# B! W4 A
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);5 }5 z, @/ z, e1 O+ {
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    6 B, [7 ]2 |, O6 J' C" v1 w/ A
  521.     return TRUE;8 h  S: r+ [: z
  522.   }6 r1 P( j/ n, Q5 g
  523.   // Nuke 0118: Delete run.exe* s7 t9 k  k" x) a8 T* g, r- o- ]
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );) t$ _) r  H; P7 J/ b' p
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");" a9 }8 X- p& f- y+ q# {
  526.   if(!ReadCfgFile("Config.ini"))
    4 r2 t4 c/ v/ Z5 i( |7 B. b# v
  527.   {- w/ y1 @; Q( n) G& V. {4 E+ U6 e
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 J. J, Q8 m; Z4 p$ F; L* v
  529.     return TRUE;' J! T, ?! G1 B- W. Z
  530.   }  }( h& H3 g; S7 |! x
  531.   HANDLE mutex;+ _7 Y0 y: \" r) x- ?! G8 R0 [6 H
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; q' S  A/ c' c/ c
  533.   {
    : l3 C' p7 R3 }8 b: l. [4 L$ m
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)! w' ^8 g% L. _$ h! G) n: U  b* z9 G
  535.     {+ t, v& ?; n9 \; p4 ^) R% U) W+ K
  536.       CloseHandle(mutex);1 _4 W1 W& ~( Y; J
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    - _9 _8 |0 f- }$ Y! {
  538.       return TRUE;3 P2 g% S2 {% ]: r5 Z6 |
  539.     }8 W' }" n' e. E
  540.   }  % {3 ~8 L# M" V+ }& G
  541.   CloseHandle(mutex);$ u$ `" w9 b# U

  542. / ~& R. d6 q  G) q3 \
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) S+ a0 ]) x- b5 i$ y
  544. 2 W1 W$ }! P% D/ \! E
  545.         AfxEnableControlContainer();
    0 Y7 x$ d* ^' g9 @( R

  546. ! z# R& ]9 h9 o( {  ^. {; n
  547.   bCanUpdate=FALSE;
    2 K  x% o1 u# V# t; _
  548.   dwStartUpSteps=1;
    ' s, f+ K1 ~4 c  b
  549.   dwProgramState=AP_NOTHING;
    1 z( y* g) S7 \" u

  550. 9 t2 w. p+ Y! j8 Y/ t$ q
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    # Q" w! l8 ]# B% x# g7 l) z& y+ L
  552. * Y* M; `0 W' e  h+ H
  553.         // Standard initialization
    . S, C  L; W$ t# ^* o3 A+ d
  554.         // If you are not using these features and wish to reduce the size* m9 P6 }5 \& \% ]# s
  555.         //  of your final executable, you should remove from the following
    ) D/ v/ G* o% C, D* I3 |5 v
  556.         //  the specific initialization routines you do not need.
    4 |% y: v2 ^- _8 \1 o3 W
  557.   \5 n8 L& m/ x- t* ^
  558. #ifdef _AFXDLL
    ' ~+ e% i: V5 Z" r' i6 p% N# z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL6 W5 Y- \1 C2 ]; H* U8 H
  560. #else& z) o/ i* g" w- q+ x2 ^7 T! W& k
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( P. q; j1 I- P% x$ t5 O# i
  562. #endif
    4 z  K8 p0 p" W$ O$ R+ e8 I. p

  563. ( e6 O* S" O; O9 w8 M' m& B: R
  564.   dlg=new CRevAppDlg;6 e4 V( N( E% m2 G. d* n7 e% n% W3 H
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    7 l( p  h1 G, ?3 ]+ J9 _4 a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);5 ]! Z5 E" F7 \3 o5 E0 f2 E
  567.   m_pMainWnd=dlg;
    . R5 R9 P% ~' T2 Z5 y5 O

  568. / j/ U/ M" @+ L
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);% M8 U5 y: E4 k7 i# m6 ^' ]5 D

  570. 2 y' X# C& P- F9 J& h3 g' S
  571. //  GdiplusStartupInput gdiplusStartupInput;( v' h$ t) A. p( ^$ o3 k# X/ X
  572. //  ULONG_PTR gdiplusToken;
    ; [( }3 ?/ n- W
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    + W3 d7 `" u# E3 M5 ^

  574. 2 K9 y! ]4 _1 b* |
  575. //        CRevAppDlg dlg;
    + x0 P% L( k1 r- C* q* m& ~
  576. //        int nResponse = dlg.DoModal();3 E  z# B9 r3 P  i5 T: Z" d' B
  577. //        if (nResponse == IDOK)
    0 j5 y1 y, v: M
  578. //        {
    & ]# S  S" \/ [. W" x. p( E
  579. //                // TODO: Place code here to handle when the dialog is
    2 I0 u+ ]2 X* @2 i# V5 u( F/ q
  580. //                //  dismissed with OK; P( }0 ^0 H! ?3 y
  581. //        }
    : m  U6 |( r+ E* H6 w: T9 ?# L' p
  582. //        else if (nResponse == IDCANCEL)4 U3 ^4 q: m. \7 ]* ^  Q5 i
  583. //        {
    8 S: L# ]( h" M) z0 m, v# }
  584. //                // TODO: Place code here to handle when the dialog is+ G9 N8 H% Z$ P. ?
  585. //                //  dismissed with Cancel
    3 n0 _8 {+ [. [, q/ i. [
  586. //        }
    ' ]" v* Z6 s, c7 B& g3 a7 z
  587. * K% V6 A# q6 u) {( e
  588.         // Since the dialog has been closed, return FALSE so that we exit the7 \* L1 X" `9 S! N
  589.         //  application, rather than start the application's message pump.- D% V! ^- ~8 Q) @! c  Y
  590.         return TRUE;0 F- N) C. g, ?- V) g7 T# J
  591. }
    2 H: ]& R3 e2 c5 X) ~
  592. # ], A- S* j# f1 {/ [" T0 y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)4 l8 K9 N* R( d, |# B6 b
  594. {6 r" O- T+ |2 M$ U# r
  595.   int i;
    + H4 O3 Z- [' w' I( `
  596.   char *szRet;
    7 n1 y. k3 J$ L8 e! ~* @
  597. 6 Z. k( p" q9 k+ B4 z
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    2 p' L  {3 B& h- h# I
  599.   if(sztoken). a# a* Q6 \9 b3 ^6 z# c8 Q" w
  600.   {7 o3 I# i! |4 ~1 m9 K1 d
  601.     szRet=&sztoken[itoken];( I* y% i/ w) }% ?2 T& h" q
  602.     while(sztoken[itoken])- ~$ M: U# {3 g
  603.     {
    $ w- E: _5 N) G! {$ z. H5 ^# b
  604.       for(i=0;i<(int)strlen(token);i++)8 l6 Q" P/ y( d7 z1 y3 l; k% w
  605.       {
    5 y  C! T& b2 @) h4 j6 B9 }7 Y+ }
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    / a! h/ R4 m& f) a
  607.         {
    % L' ^! W. S- z9 G+ |
  608.           sztoken[itoken++]=0;' j7 S# O1 P0 T  r8 u
  609.           sztoken[itoken++]=0;
    ( a, x0 w! m9 O2 m  w8 V, ^
  610.           return szRet;( M; G& D, H& g6 q- E$ k* h
  611.         }) y+ ?6 d' D( i& R
  612.       }1 J: M  @3 ]$ j6 S+ m# w$ N2 R" v4 m
  613.       itoken++;( x/ J4 o- C' z! k
  614.     }
    , B4 H- I9 j1 L5 s( w& G
  615.   }
    1 ]$ X1 e  {( K! }: j
  616.   return NULL;
    ; p! I1 q& K* K; T0 A( \
  617. }
    8 ^" @6 J3 y$ k" Z0 \- B( R- l! c
  618. ! K+ c7 w3 n# l$ w
  619. void ProcessProc(long Total,long Current)- }( Q7 g! `. B1 [. q6 X$ l
  620. {
    " f2 {( n& p1 t5 B+ m
  621.         MSG msg;& C4 `: {! O1 ]9 d: w8 j
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    4 @2 d% h! r4 f. z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 \3 K+ D: o" F1 n
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))$ ?- o. u! Z1 Z# h
  625.         {
    * d' ~8 j2 _( F" G8 h
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ( F. O  Y9 n6 Q0 [' m$ b3 s
  627.                 {6 T/ w) }; l/ O4 n$ ^; n4 [, m
  628.                         return;
    8 @% x+ [& L' _2 |/ V
  629.                 }
    3 X( z' }# d' o4 A- Q! k- ~* H
  630.                 TranslateMessage(&msg);4 Z3 J8 d+ r4 ?: ^9 T! X
  631.                 DispatchMessage(&msg);
    $ _* o" c" u3 E% }6 Y* G/ h! q, j& w
  632.         }       
    " ~8 S1 f3 o* m4 n6 s4 ?; T/ w
  633. }2 A9 N( T+ h/ T# X, f! N

  634. 2 j5 C" X% E* N# h* r
  635. BOOL bFirstChar=TRUE;0 r1 K' i) t7 c/ I  r( X

  636. 4 Q5 v( X) r4 c2 U6 x
  637. BOOL CRevAppApp::OnIdle(LONG lCount); G) x+ r! A) @+ ?
  638. {
    2 a7 k) }4 |' |5 E( Q
  639.         // TODO: Add your specialized code here and/or call the base class
    & ?" \8 s/ J# S. |% e5 j* V* ?1 w) ~
  640.   switch(dwProgramState)7 R) z. r0 p' k: q, ]) }4 Q' l" o/ v
  641.   {
    0 n+ j% @! W0 I
  642.   case AP_NOTHING:
      y' H# }* ?! E0 C
  643.     switch(dwStartUpSteps)
    4 T9 _0 Z  E/ g1 E$ F, J, l+ {
  644.     {
    ; {6 T  h0 U! R' l# r3 l
  645.     case 1:
    2 t: x( R, X% ~: o; l+ j
  646.       {
    - [( {# j, Q) H1 f
  647.         int i;& l0 F6 B/ ?1 p8 }& e% l7 E2 N4 k
  648.         CDC *pCDC=dlg->GetDC();# N# B( \) R7 J/ I! y
  649.         HDC hdcwnd=pCDC->m_hDC;0 |9 X2 N! j; Y% F* F1 `. R
  650. //        Graphics graphics(hdcwnd);. z. m9 M* Z9 {+ P1 R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    + w0 Q, [* \) v: v! S, p
  652. //        INT iWidth=bitmap.GetWidth();# O1 l- C, u. p; f
  653. //        INT iHeight=bitmap.GetHeight();: q2 D+ |9 g: m# }* Q1 e
  654. //        Color color,colorTemp;
    . [8 @# J7 T4 y: @; J, O) J9 z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . A4 Q2 s6 Q  x" N. f
  656. //        {
    ; r, z# z( ?6 I/ p! \( I- k( P
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)" k5 |5 n) R  e2 @* D' ?
  658. //          {
    - L* s3 b4 \7 p- k2 P0 \
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 f, ]' \. a  q' j- M6 g( s+ w
  660. //            colorTemp.SetValue(color.MakeARGB(
    ! R! L& O/ l& R
  661. //              (BYTE)(255*iColumn/iWidth),
    & `7 c- d1 K- F' ^- |' p0 }! t
  662. //              color.GetRed(),# E1 [. k3 @) m5 A) W/ K  Y
  663. //              color.GetGreen(),
    . Y) }5 i+ l& D+ L  {' ^0 O2 |
  664. //              color.GetBlue()));
    & G4 L$ c2 |' `0 F; B" o1 `
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # R* z; I9 l4 D& _- B
  666. //          }- {7 B) f. z* c5 P# l+ M3 G
  667. //        }
    ; ^, M, m6 V( J! ^" H' O
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    & z8 Y& H1 u  b6 R9 t# A
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) C8 k5 b2 y+ D
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");' @  {" D' E! C' J& q, t
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " E+ }- F8 v- Z+ t5 b( E/ q, h
  672.         for(i=0;i<240;i+=8)0 I1 S5 l2 E; v9 W; K! R" |
  673.         {
    . m# J( A4 z8 @
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! V* k0 ]& L5 k+ ^+ s  ]
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; y; H( h% o# T4 f3 I" d! Z$ A. s9 @
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ ^6 o) V! ~6 j. ~' g
  677.           Sleep(33);
    % I$ _7 C6 ?( g) l7 y7 P
  678.         }
    - M, R2 [! v# `
  679.         Sleep(1000);
    6 D% K( h5 m- ~0 S
  680.         for(i=240;i>0;i-=8)
    7 s% b& Y1 C9 s7 Q* K- e
  681.         {
    . H7 M& R/ l0 Y0 g7 P
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # I8 s  X  ~! M! L  ]
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& L, a5 k4 |% M* B
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' z, H1 q3 u5 o
  685.           Sleep(33);) N" G& ^# P3 e+ F
  686.         }+ d( K: E) K6 U; X* w- M
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    # Y# r2 [1 `/ ]6 M9 ^" x5 s
  688.         dlg->ReleaseDC(pCDC);
    ' E7 j2 L/ F+ U" P- D: `* M' z1 \0 P3 A
  689.         DeleteDC(hdctar);% J$ z' S& f5 M" h  M* H
  690.         DeleteDC(hdcsrc);6 v3 z2 `- T" q) \% C: I. W
  691.         DeleteDC(hdcorg);
    4 `+ |; T) J& a* s+ h3 Y4 w
  692.       }
    7 ^: p  e" V6 p% L- N
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);/ h; f  R& k4 |2 o# U
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  X" o7 W. `3 n4 b* b! \" l1 ]
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");( H/ ^  Q2 F6 }# i' |! t
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 K% g) J" i% O  x  J# D
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " a$ l% I: G% Q/ l
  698.       if(!Dn.Connected())
    2 u) E0 F  v9 z" q+ R% f
  699.       {+ a! O  A. C4 D$ L' {9 u
  700.         dwTotalFiles=1;2 I( O- h/ ~, q) m6 r; U
  701.         dwDownLoaded=0;4 P$ i1 Y* s( S# P8 g" d7 j5 O
  702.         bSilentStep=TRUE;9 }4 G: s+ E0 @+ |+ w/ c* N+ o
  703.         bCompressed=FALSE;9 r9 y2 [; x" P- H6 I5 |" p6 z5 H
  704.         strExtLocal.Empty();
    / g9 c4 n$ ]% @+ W$ e
  705.         strFullName="readme.txt";* H2 Q6 E, X% t% M4 T; P. N; _
  706.         dwProgramState=AP_CONNECT;' _5 d, i* C! z
  707.       }" J4 x2 Q1 n' C3 ~
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    / e( M  [$ ^4 b' w$ p
  709.       dwStartUpSteps=2;
    5 `" S7 r& d" V5 M$ t- T. V; |
  710.       break;
    ; G" z; ^% \$ ?! a% \# H* H
  711.     case 2:
    2 h3 I4 B2 [% W" q& d# R
  712.       {2 a1 b+ V5 J* M# [2 P
  713.         int iEOF;
    # V% k2 g" A4 H( A* K
  714.         FILE *fp;: h! I; L; f' E  C
  715.         char szString[512];: g0 Z% S$ x$ `, C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");) B7 _( C& \/ I# m7 ~2 R8 Y
  717.         if(fp)
    - I4 a5 ~" p8 G. d; B
  718.         {5 {" k4 p2 i/ ^3 u
  719.           do- A0 m) ~! G+ H* z' k
  720.           {" D. `$ N1 _; p9 A9 w6 t% }
  721.             iEOF=fscanf(fp,"%s",szString);& R7 Q- Z4 |% t; M) o/ @: @
  722.             if(strlen(szString))2 c% a; R3 T5 P$ e$ T- c* v
  723.             {) A/ m; i+ ]% M8 L# c
  724.               if(bFirstChar)
    0 _4 {2 m2 N- r7 i3 ]. `
  725.               {: e! s$ Z3 L  P
  726.                 bFirstChar=FALSE;
    7 y, N% ]! R: m0 W) }
  727.                 bConnectIsBig5=FALSE;
    0 x  O# C# T) q5 G+ _; v6 \
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    + M( q, y* N, P( M  F, ?
  729.               }
    " G2 ]3 w9 W) N" x
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));8 `, B! o5 B# Y* m7 l
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));8 j/ D, R) |. \) l' v% V  m& I
  732.               dlg->m_ListText.AddString(szString);. Q- x6 K9 g- Y& Z7 u9 [! C
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* P2 o+ x% Q+ u1 N' ^' l9 }
  734.               *szString=0;6 Q4 _% _# r+ h: ^& }! `3 w
  735.             }
      K- G  q. u0 l
  736.           } while(iEOF!=EOF);" g% j9 S% y7 O3 c: u. k+ D+ w# T& ^! Q
  737.           fclose(fp);/ y; O5 u7 U$ U$ I9 e* j: i
  738.           unlink(".\\DownLoad\\readme.txt");+ V  W6 U# Z( Z/ `. p" o# E+ e
  739.           dwStartUpSteps=3;4 ]& k, n/ j; N4 n- J6 j2 `
  740.         }( ^2 r6 {) t+ m* ^1 y! ^: D
  741.       }* J6 M& a1 Y5 B6 p6 h
  742.       break;+ B2 R' K$ m4 S6 P; L
  743.     case 3:+ ]7 t5 c  O, w7 j9 Z0 p  u& \# S
  744.       if(!Dn.Connected())
    9 H. E# y: f) q# c" G0 I
  745.       {8 }/ v& b* u% o5 ?- x
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);; B3 Z' R) O7 N+ i; ~3 R, U; s. S
  747.         dwTotalFiles=1;  f* c# g$ W' b  y- Y8 A6 ]9 y# A
  748.         dwDownLoaded=0;( o) f5 Z$ _" J! l) A+ ^0 m
  749.         bSilentStep=TRUE;
    4 m( c1 M! i; d9 J
  750.         bCompressed=FALSE;
    & Q# D) v* N! J! x, Q
  751.         strExtLocal.Empty();" d& t# J' I  g7 Q% }! Q# _" _( C  k
  752.         strFullName="checkversion.txt";3 g" e6 N8 @) l; ~% {
  753.         dwProgramState=AP_CONNECT;
    , @7 F* k/ v: b4 {' W4 [/ {
  754.       }* {0 w$ r0 L/ k4 B0 ]4 w9 |
  755.       dwStartUpSteps=4;5 w& u/ n7 g% k) Z- T, u) B( K
  756.       break;
    , g. d1 ~, N) b( ]
  757.     case 4:
    ) y# `$ o* s+ o8 G0 [" O/ a" ^
  758.       {) X6 z2 P) I$ L4 o( l) y) p
  759.         FILE *fp;. P2 B" O2 _; \; z" j, E! T
  760.         char szString1[128];. ]( ]8 |5 d% o+ O9 |
  761.         char szString2[128];
    7 Y& z. d6 r) j2 \4 [) B5 P! X5 q
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");3 Z# Q# H) P' H2 p+ f; i
  763.         if(fp)
    ( h2 @2 `+ ]: C$ R2 O1 U; p
  764.         {6 `: s9 v, C$ h$ [+ m& Z
  765.           fscanf(fp,"%s",szString1);
    1 n+ u3 z. q! U- x$ f7 E4 D6 [+ U
  766.           fclose(fp);
    * b1 {# S0 H" u) K" y6 b* O2 m: l
  767.           fCheckVersion=atof(szString1);
    " o6 i- x7 P( q/ o# F1 I6 G, C
  768.           fp=fopen(".\\checkversion.dat","r");
    1 G) @! y: K) X. P- s7 ~+ J+ K
  769.           if(fp)* b2 a5 W& q7 |) d% V
  770.           {
    : d0 E/ [) K) t, Q. _+ I5 h
  771.             fscanf(fp,"%s",szString2);. H$ d( E* [, N8 W; J) x& L! E. ]
  772.             fclose(fp);. i  I  X. R% t$ E
  773.             if(atof(szString1)!=atof(szString2))  r0 V' P8 {& X, j
  774.             {
    ( C# N; `& i3 k! d0 k/ I! X4 j
  775.               if(!Dn.Connected())
    4 Z/ q1 e- }5 f8 k" J1 R5 ]$ _
  776.               {
    - j, S8 D$ u  F& ~% s
  777.                 bFirstUpdate=TRUE;
    1 i# b  m* l, f$ @7 o
  778.                 dwTotalFiles=1;
    1 x7 D; p8 ~! r
  779.                 dwDownLoaded=0;$ z+ {9 h7 w, h: W' i
  780.                 bSilentStep=FALSE;' T+ D) V- w8 D$ c7 p
  781.                 bCompressed=TRUE;# D* n2 ?1 {( e- P2 r' ?
  782.                 strExtLocal=".\\DownLoad\";
    / p: S9 \+ f1 [* Z9 N3 t
  783.                 strFullName="update.txt";
    , e7 {! s+ E( R8 K
  784.                 dwProgramState=AP_CONNECT;
    ( K; J' l& \0 ~& `
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - `* Y1 Y. r0 i3 s0 z+ N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 B4 i8 n! v; v, \0 r! M( W' o- D
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");, |" B( m/ x9 c5 v
  788. ! ?- {$ F2 {7 p+ v7 E
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& e* u# a. R/ @' z
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    : {: Z2 q. T( E0 A4 q: ^
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    & q' |8 V. J; H  x, A. M3 Y' b
  792.                 {, V9 a6 ^! t" d9 t7 j5 [) n( @/ J
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    , y0 x( y/ t1 K, Y+ R
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");& I- k7 k' B! p4 p5 p* u
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 Q! j4 `$ Y2 S1 d. I2 W& b+ V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 E( z' G5 M  z6 g
  797.   ?6 c+ N9 V7 L6 E
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' Y) P* ]$ U9 [' G' E
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! Q6 z' O  W& K  l1 c! N8 |, h0 a' t
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");) k3 |6 q5 C8 G7 f3 A( `- S
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 M9 |! ?  C8 R# g
  802.                 }
    ( Q- T. K2 Y$ w9 ]' Z; k
  803.                 dwStartUpSteps=5;
    7 G4 @/ e0 F! c
  804.               }- c; X. E0 O( r$ n+ b. u
  805.             }9 M: G5 X: Q9 U
  806.             else) `6 U% l$ \9 C; F" V+ l
  807.             {% C6 D& v8 w; S# B# z, K
  808.               unlink(".\\DownLoad\\checkversion.txt");
    & |( c- d; h5 L9 }0 v
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    % R* @% u' J' g! L; I2 n
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    0 U* i' t: z! A1 j
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 R$ r! `4 z' r+ ]9 s
  812. 1 t" ]1 ?/ \, [3 S
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 E7 Q9 g# v: y" [$ b
  814.               dwStartUpSteps=99;, |, U7 b: Y+ Z7 l6 Z% ^, `
  815.               bFinishUpdated=TRUE;
    9 O* e9 j: ~, L. ?: Y6 C
  816.               bCanUpdate=TRUE;; m0 g  Q2 ?$ D
  817.             }
    % g0 u6 n8 Y" o  l
  818.           }/ u. T' e4 j- r1 r$ t  T
  819.           else  q# f0 H6 S& [+ s5 }7 O
  820.           {
    ; r7 Z2 C( e9 T5 U
  821.             if(!Dn.Connected())( `4 `& b+ U) f
  822.             {6 \  U( P2 ^  e8 o
  823.               bFirstUpdate=TRUE;
    # p( f% `) F! C6 w8 ~' G- H
  824.               dwTotalFiles=1;
    " h. a( n9 r% @" E( c
  825.               dwDownLoaded=0;. w% h* P. O( e/ P8 M  {6 F
  826.               bSilentStep=FALSE;* r2 r. R; K- a; x
  827.               bCompressed=TRUE;  H: j4 I& @) D1 S
  828.               strExtLocal=".\\DownLoad\";
    9 z1 E1 M2 l4 ^0 b
  829.               strFullName="update.txt";0 d6 L  B, F: V
  830.               dwProgramState=AP_CONNECT;* I4 R* }3 {5 ?; w6 \# b! d7 R
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , ?* f& O8 J, N) A8 _1 E, @
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 U8 Q* F2 d" H5 k
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");7 g# j6 F' W* N; j$ Y% p( K
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 M/ p/ I5 K1 ~0 F1 G7 o% c; \
  835.               unlink(".\\DownLoad\\checkversion.txt");% m& P" O, S- d9 h7 N/ h
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . @% S: i. K* \1 D% D- |
  837.               {; g" @- F4 |" R! L5 J* R! [! w  t
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");7 M% f& A9 a' ]
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    , W8 R1 S0 y/ n6 f
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");: k+ `! e5 r* w- D) Q' r- ]1 I; z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( S& m0 |. @# N# l
  842.                 3 C3 E7 z& `7 Q( |; ]
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    0 X9 f. H+ w# q4 w
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");8 S" F3 U( N1 O' j4 Y3 a& J  |
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");7 {9 g  ]. o3 N, e( Q$ @  A0 w
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; Y% \* [  Q& o4 [6 O- R
  847.               }
    ! `6 {- Q" E* E5 r; G% @$ `
  848.               dwStartUpSteps=5;
    % F$ A' o4 H. {+ s: F* D
  849.             }
    1 U: m  c) E5 B; X2 W; A
  850.           }
    ! a$ Y" X6 \- n( ~* E$ N
  851.         }2 ?- }5 Y8 c8 o( ^# n# o- u
  852.         else
    ; n. c: d, s" R% k2 L& F# a0 B
  853.         {
    # J) W- Y( u; |, u1 ?: _% a
  854.           dwStartUpSteps=3;
    4 i, `0 \; o8 _' |
  855.         }( e; m  w& W& W9 q0 M% W* {
  856.       }% h: x; j2 c$ i; r2 o" V1 e; F
  857.       break;: o; H& ~# C& K" g2 `+ @8 [: W
  858.     case 5:
    $ t0 y4 ?- Q+ F, ~) n
  859.       {
    ) v) t$ e$ P) R+ J
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)8 {7 O% n- W, H
  861.         {6 J8 V" A+ \4 \) u! \
  862.           int opt_overwrite=1;
    ' D) f- t7 D; L( @- V9 U6 F  |
  863.           int opt_do_extract_withoutpath=0;: D/ R7 A7 N8 M- m1 r
  864.           unzFile uf=NULL;
    * V2 O& Y% P8 M/ s4 ^$ B4 U& \

  865. 7 c- w' I- v' n/ t. k
  866.           uf=unzOpen("Wsa.zip");+ z( ~  _3 @* N5 j) L- A, N' I* {
  867.           if(uf)
    2 ^( h2 y- E; L5 [/ h) k2 H
  868.           {; T& K# K# r0 o1 W) d8 I5 E
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    * x) m, q2 ?8 H& b* r9 V1 P
  870.             unzClose(uf);
    0 |4 ~: K' Q4 K3 [6 E
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    3 K  F3 X8 U* x$ \
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");4 }: I3 W4 `" ]- C$ k
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");+ ?; X; D9 R# x& Y0 i
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! L( e9 |( Q2 [# L7 t; U
  875.           }! k( u' Z+ a- D- |0 W( u- v! [
  876.           DeleteFile("Wsa.zip" );& _9 S( u: e% f- x; d
  877.         }- R% O5 T$ N" r. f: H" J1 Q
  878. ) u, E7 Y+ I/ ^8 V* w
  879.         if(CheckLocalVersion())
      u5 u) ^# E# ^0 Y! E+ ^/ m
  880.         {! }0 V* J- g5 T7 J* }' E1 q
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    2 y" ]! J* f* [
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    / n  b/ D, L- C) a3 d- p
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    5 s* ]0 W4 z5 B2 F8 _$ v% W, S
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 ]9 {1 s. x0 x) d
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    6 t2 T7 M& v4 s+ V/ c7 I
  886.           dwStartUpSteps=99;
    ( f% I. u" S3 C9 }/ |6 u
  887.         }5 C7 N, \9 C0 F5 g
  888.         else
    2 j! z; ^9 G% w" g
  889.         {
    / j$ ~% Y" f0 \( u9 p, l& C1 V
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + }1 b# D0 q( c
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 `' y! @' a3 b- ~* y) w% k, j& _8 p
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    5 a; H4 z1 ]  g3 K: E% H

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

, j/ Q' K3 S& S4 f, N# X6 n! e7 n6 R0 \: Z2 a

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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