CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
, X& u, C2 k& q/ I& F- c, t
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ' y  ]& Z: h( n' c  J% f4 A7 Y( o; {
  2. //
    : k6 o5 q8 I0 ?. J$ |* c+ s  {
  3. ' T* Y( n! B4 y" O, b
  4. #include "stdafx.h"! m8 z# J% R! j7 u$ F

  5. - u, P: `# i# w+ a; a# ~
  6. //#define UNICODE
    ) r' P. y  d$ h, o4 @6 F
  7. //#include <gdiplus.h>6 q: q* m6 R0 n% f8 W
  8. //using namespace Gdiplus;
    $ V6 i7 s4 [7 B" a' D

  9. 8 R2 y9 H6 l7 ?/ F, f
  10. #include "RevApp.h"
    / n* e: O  ?( Z: `
  11. #include "RevAppDlg.h"
    , T+ ~4 }) \  U* h
  12. 0 W& B4 w) S' @- Q& P6 {) u1 [
  13. #pragma warning(disable:4786)
    . t  W6 I; O/ ~- ?1 g
  14. #include <map>
    ) m; k" p4 y9 ?. W
  15. #include <list>
    + R" N" d% P2 i5 Z# F( E  Y
  16. #include <direct.h>
    1 y- S" ?( @/ E( B6 ~* E+ G
  17. " A" x+ H8 n% U" v0 J/ x) s0 b
  18. #ifdef _DEBUG
    7 @) Q9 [- \# O) s9 S) u
  19. #define new DEBUG_NEW1 L. z1 X4 o2 W+ U! T# H6 S
  20. #undef THIS_FILE
    5 O% @, \4 S' ?  k& c! O6 s
  21. static char THIS_FILE[] = __FILE__;) g$ q- ^$ ?4 Y7 n8 b
  22. #endif
      A5 I$ J# O( v  f9 \" u7 h
  23. #include "SkinResDef.h"7 D0 _1 U# e5 ^+ \: S- Z
  24. #include "ChangeBG.h"
    & u, B$ M9 U6 J* {" [
  25. #include "AFXINET.H"
    . Y$ k( Y# w( f' S2 u

  26.   \/ h3 S2 f6 g: B
  27. #define TRADITIONAL_CHINESE 0
    8 l. C3 F+ e( W' w+ _3 Q
  28. #define SIMPLIFY_CHINESE 1! M: r. {5 Q/ z$ N8 {# y
  29. #define ENGLISH 22 H9 n; A% f. O6 v7 y3 O
  30. int m_iLanguage = ENGLISH;
    1 o3 g  N- g$ l- ?
  31. /////////////////////////////////////////////////////////////////////////////
    % H/ h  ]) Z" A, D4 _1 q1 g9 ?
  32. // CRevAppApp, \" v9 t/ k' g" x# x+ c
  33.   N2 x: g" D4 c% }
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    : E5 e( V9 ]" D" ^
  35.         //{{AFX_MSG_MAP(CRevAppApp)# j$ v+ L2 n  R  p: d
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    , l5 e* D: L  b* X: x- E
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!( O# P0 Z7 _7 R1 U# E) g0 K0 f# O  r
  38.         //}}AFX_MSG# X$ e% K) _" M1 f
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)0 p/ H9 C, L# g
  40. END_MESSAGE_MAP()0 o& E9 L% `) u  L' G( J$ I. A9 f+ n

  41. ; w1 ?- A0 X7 x) A) b4 C
  42. /////////////////////////////////////////////////////////////////////////////
    8 U; m4 ?0 ~' S) }+ @; q0 U
  43. // CRevAppApp construction- }$ M) ~# z+ U9 O

  44. % O, s3 E8 k& y
  45. CRevAppApp::CRevAppApp()+ c9 L; E4 r8 G7 h7 A
  46. {
    + X6 m2 N3 U  S* f8 g3 H
  47.         // TODO: add construction code here,' l+ q4 Q, ~$ a# x4 `
  48.         // Place all significant initialization in InitInstance
      t  n+ M9 x& d+ {2 v4 ^6 m
  49.   bDisplayIsBig5=FALSE;7 |" V5 U* t  g$ G+ \2 [! b, D# t
  50.   bRestartUpdater=FALSE;
    " i7 E4 B% k: I: x+ I$ q
  51.   bFinishUpdated=FALSE;- Q- k" Q, W$ G# \4 D, J% ^3 o
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ' X+ r5 o/ P+ p1 Y, k
  53.   InitChangeDataBig52GBKS();
    . C. ^- k" Z8 M' v6 I4 u; g" ~  B
  54.   InitChangeDataGBKS2Big5();
    # q/ y) Y  j) F! J0 Y/ ?! D6 ]! Y
  55.         //
    ) p7 C% ^5 H! w8 \) I
  56.         bClickRunExe = FALSE;
    1 |4 [8 T, @! M% _* [9 R
  57.         //- g& H5 U# q- e, a; P
  58. }7 L" d& U* u! V1 j+ I- b% V" Y

  59. ! g, m6 [: x' S! v- r3 A
  60. CRevAppApp::~CRevAppApp()9 j) \6 o: L# t0 l; K# _
  61. {& G$ f6 ]9 m" G* N
  62.         // TODO: add construction code here,
      D8 H+ W! Q9 N: w4 L3 [2 e5 P
  63.         // Place all significant initialization in InitInstance( l0 i* ?) s- E' D! d# w- \
  64.   EndChangeData();3 B. L4 n  T* i* x8 }8 N- K
  65. }
    ) _: {- N6 N7 |: p% g" R% N

  66. . X# Z( Z$ F4 ?+ G6 d
  67. /////////////////////////////////////////////////////////////////////////////2 ~4 g* {" V5 _) _
  68. // The one and only CRevAppApp object8 D# W( G$ p1 P" p1 I) J

  69. ; M( W9 }  f- w* w. N# q: V
  70. CRevAppApp theApp;9 ?7 _. `7 ^4 H
  71. . Y+ l" I4 r( c8 Z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : ?. s6 G6 Q0 w. {! V; e5 T0 s! X
  73. {
    ' q/ [' g6 j9 D* p  Q8 m, B) Z+ V
  74.   int iEOF=0;' G7 [7 y2 J4 l% W
  75.   char szTempName[MAX_PATH];
    7 A3 M" N$ K+ |. D, j
  76.   *szFileName=0;
    6 B5 I3 v9 V6 F
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 U5 p& u3 B2 z
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')! o4 Y3 y, }; K$ V3 X  o( s: k
  79.   {) F+ r! r8 X& j3 z3 t
  80.     strcpy(szFileName,&szTempName[1]);
    ; w$ O* T0 P7 q$ m; T
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    6 L- L: \; F" ^8 y7 t# P
  82.     {
    9 I1 |8 ~: [7 x: y3 j- Q2 ^
  83.       iEOF=fscanf(fp,"%s",szTempName);' u; u- Y; t  d
  84.       strcat(szFileName," ");
    : l, w3 `1 O; j8 S9 U
  85.       strcat(szFileName,szTempName);9 h# b! M1 o6 [  s3 P; ?
  86.     }, ~3 _* e: N( s% K" ^/ @
  87.     if(strlen(szFileName)>=1)
    - T* M' j: o, _* j) f0 i
  88.     {/ H% Q' M- }1 W) T4 _/ z, R
  89.       szFileName[strlen(szFileName)-1]=0;
    6 K( N  E9 ~7 b3 _9 y
  90.     }
    / q! K# }, ]4 {
  91.   }
    * T- m6 A( T. F+ ]2 f) X0 V! `6 E
  92.   return szFileName;4 y$ p/ H$ ?+ l8 a* }
  93. }* Y- |- m7 H6 i. v

  94. - b. Y1 E7 h2 C, r! U% v0 g
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)  T: [0 `& E/ N! `
  96. {
    ! [0 E& l% s# X3 t; }% X
  97.   FILE *fp;
    - u4 l7 c9 X' `9 e9 V/ o
  98.   char *key=NULL;" X# s. P5 u# i# M7 n" e# F& c
  99.   char version[MAX_PATH];
    4 n1 }( a$ C- k' V. \% b
  100.   LPUPDATEFILE file,olds;
    / f8 X* Y$ i( j
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) G4 ?  @1 ?, ~8 g7 e
  102. 6 ~5 W1 c: Y3 w9 r
  103.   UpdateList.clear();
    : _  ]1 S' o/ B8 M7 W" P
  104.   UpdateFile.clear();. \$ I+ \9 L% @! E+ U7 a0 t5 q. m
  105.   if(GetFileAttributes(filename)==-1) return false;
    9 n6 U  x1 P! ^& ~3 O5 ~
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ! L; W( i$ Z2 I; j" N) N; F0 F
  107.   fscanf(fp,"%s",version);$ p9 W9 R* X9 F! G
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- r; |1 Z8 [+ V% |( ^$ i5 p. c5 O
  109.   while(fscanf(fp,"%s",version)!=EOF)
    + J, g  }+ ~4 W' M# t/ C
  110.   {
    5 }5 @+ }9 _; r$ Z/ q" ~
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 t) Z' `% f  D: A
  112.     fscanf(fp,"%s",file->path);* M6 |$ X; }$ j
  113.     ReadFileNames(fp,file->file);
    2 A4 g7 U' v! E, T/ ]
  114.     strcpy(file->full,".");
    6 N0 E. o  @% c0 }3 x0 X" S
  115.     strcat(file->full,file->path);: Q+ B5 X* Z0 Y  L8 R5 u/ `% K
  116.     strcat(file->full,file->file);8 p) z4 s8 p; V# v
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    . G& \' c5 _  `  v0 a5 W2 g
  118.     {+ g: c1 K5 |7 L  N- _* h4 D7 ?
  119.       file->vers=(float)atof(version);2 _  B) Q, s$ j% a( J( v
  120.       UpdateList.push_back(file->full);
    4 k  d/ T# p4 A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; ]0 w2 B0 F. t/ l$ s( @
  122.     }
    + a: T7 p& I' i8 C& s" A% ?) y
  123.     else
    * M8 s3 r& [9 K' O# u
  124.     {
    : A( h, a4 Y5 r7 X& a4 R( ?: x
  125.       olds=(*p).second;
    8 r" V( ?, S- \9 k
  126.       if(olds->vers<(float)atof(version))
    ! {1 _5 y4 F' X2 x
  127.       {
    " M" Y* S, M. Z, d# A2 l; N
  128.         olds->vers=(float)atof(version);
    , R! f* g$ @. N
  129.       }) ^, N8 G! f1 _
  130.       free(file);
    : M; `4 F: b+ t1 N# @7 P
  131.     }  @* C- `, A( q  X* O- {
  132.   }1 y; Q, ^1 O3 a6 O# I
  133.   fclose(fp);
    1 o# |# s2 k2 J# U& I/ i: u
  134.   return true;
    ' h* ?  d6 K$ |6 l4 Y
  135. }
    . ~1 \0 Y6 w! F. o: q( d
  136. / v- V. T# }3 @% ^3 Y5 i
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)0 y9 k: b0 U% `, K  A) {- |. _+ O
  138. {
    8 t" Z' ~4 i7 m( u
  139.   TCHAR  szFull[MAX_PATH];& t. [% b: [+ J
  140.   TCHAR *token,*inter;/ E& A$ c+ K8 ~& F" w
  141.   *szPath=0;
    9 ]1 |& V" u" f2 B* T8 V1 Y, g
  142.   strcpy(szFull,szFullPath);- c7 a5 o% b! E3 T. J9 S
  143.   token=strtok(szFull,"\\/");
    % `- w1 D8 l- U) z
  144.   inter=token;
    8 Q# i" z, N4 ]
  145.   while(token=strtok(NULL,"\\/"))
    ; d0 v5 {% o6 D1 [
  146.   {
    , Y1 X. e/ f5 U4 t
  147.     strcat(szPath,inter);
    % D9 y3 Z. \- c) `1 E# c: r! ]$ q
  148.     strcat(szPath,"\");' J, \, d0 `* K- D- {  U( m
  149.     inter=token;% R6 W: d) B7 N; n! B7 R
  150.   }
    : i' K" @: z8 f; L/ G2 r
  151.   return strlen(szPath);3 C/ v/ p, D0 i8 J6 ^0 \* m3 Z
  152. }
    0 b  {6 F! e3 [7 r8 ]8 m9 E
  153. 1 W; _6 T9 i( n0 }# I
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) ?3 j. p; Q# m3 L6 |2 y
  155. {$ M+ C1 j0 C# U
  156.   DWORD attrib=GetFileAttributes(Target);
    : @) l- J! \1 X9 _
  157.   if(attrib!=-1)
    ; f# g9 C; H& r4 V
  158.   {( F) H+ Z0 T6 S/ X9 O
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    7 h% {6 z! ~5 f  j4 W6 E  l; O  ~
  160.     {
    - u' p1 l$ n* C5 @; N
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);+ s' [1 u  H: t& O2 f
  162.       SetFileAttributes(Target,attrib);
    & \* ]# X, W1 ]
  163.     }+ ~/ a0 Y- x" x! }, `% `
  164.   }& Z' I' Z4 p% S
  165.   CopyFile(Source,Target,Erase);
    # t! Z/ }5 A0 q/ _6 |, f
  166. }1 C: i$ T/ l  ?8 a; }

  167. " ?+ D0 f; R0 l; O2 ^& {
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . L; z; D# P& v+ w
  169. {1 h, ^* [) w1 Q3 j4 s& a. b
  170.      FILE *fp;
    " [# E/ M4 A! E; _2 u/ Y
  171.      char  szBuffer[8192];. f+ X/ a5 |. r: U8 K3 {) ^
  172.   va_list  argptr;
    4 @; h! W- N1 h8 i$ o: J. |
  173. 5 s, U2 _5 Q9 K/ Q
  174.         va_start(argptr,message);
    9 G& p' ~+ y. X" f/ a
  175.         vsprintf(szBuffer,message,argptr);
    , y3 ?9 w9 k. `4 a+ ]
  176.         va_end(argptr);* A$ l  j' k$ p' Y( Z2 M/ b! m: D
  177.   fp=fopen(FileName,"a");
    0 [5 H  i! b% N9 P/ Z& Z: p4 h
  178.   if(fp)
    6 r. S" w( T# U5 q+ T- o
  179.   {- L. x' I6 e6 q  L
  180.     fprintf(fp,szBuffer);. |) t& \" o* f. S* s  l2 _0 v
  181.     fclose(fp);/ O5 W. I- g8 _
  182.           _flushall();
    " u9 j9 r- b& ?7 j' S1 O( \7 L! T3 s
  183.   }& Y5 I0 P* v( f
  184. }
    % Z. M# G' Z: p5 r2 G; `

  185. ! u6 q: o6 P) Z3 c# w
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    # L5 P! e# O% f# a, D
  187. {6 p  O) ~* f7 w: b  S1 L$ j
  188.      FILE *fp;7 y8 W6 d0 u5 ]3 [+ y
  189.     DWORD  attrib;
    . Z! O* F$ f: C2 a/ a! `" F
  190.   attrib=GetFileAttributes(FileName);
      U# k! z  k. H$ `  c
  191.   if(attrib!=-1)
    1 l1 Q0 B5 p, r- v" q6 ^0 X
  192.   {; i* R* W  Q' v
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ! B3 r* C* ~) t: h* I6 T4 S
  194.     if(!SetFileAttributes(FileName,attrib))* g+ a) F6 V: a  W3 d! y6 F
  195.     {! Z2 P2 f' L& Q- X) u4 Y) D" O# a
  196.       return FALSE;
    + Y; H3 v+ ~8 l$ g( E' ~7 u4 L
  197.     }, W0 \! E+ [. z: j. e3 d  G
  198.   }
    4 R) c! J" m1 E3 e. [# P+ l1 r4 t
  199.   fp=fopen(FileName,"wb");
    9 H8 O; J9 n6 }" X3 T
  200.   if(fp)- X* {8 d+ Q0 j- |( }& N8 p; D
  201.   {+ c' C- C8 W$ m( O) a+ B
  202.     fclose(fp);
    # S6 o. E: @: g: a* B9 z# M: ~7 V
  203.   }
    " s0 p  }$ s9 @8 k& a3 Q2 E$ q" V
  204.   return TRUE;
    & E) }( G  O7 Z  W( ~0 z# i
  205. }- W+ n! Y) Y9 P8 A8 N$ A+ A- u" D
  206. 7 x8 \* c5 k( A% g
  207. BOOL CRevAppApp::UpdateLocalVersion(void)1 h. E  }$ Q5 x+ j- ^
  208. {  Z+ D/ O) O$ o, O5 a
  209.   char filename[MAX_PATH];+ F  D* }3 h& R. ~/ J
  210.   LPUPDATEFILE file,olds;4 h" D0 \2 F0 o; @
  211.   std::map<int,CString>::iterator i;
    " m3 l  P! u7 `
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; r% B9 Y) K& u# V: |
  213.   std::list<CString>::iterator l;+ ~# K: B+ j5 R3 t$ {' }

  214. ! u6 t  V6 w0 n6 ]
  215.   if(bFirstUpdate)/ b. z! m/ u+ ]6 \; a" b
  216.   {4 h8 T" e/ n6 K' w8 F! a$ y
  217.     dwCurrFile=0;6 L& `  F( d* B( F4 f: ]# W
  218.     bFirstUpdate=FALSE;4 {2 P+ o+ ~/ y- }
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())' p4 b& r& t: K8 @* d, L1 i
  220.     {
      A& U4 i. o2 @* \# c  w" H
  221.       dwTotalFiles=UpdateLocal.size();& [8 b% ?8 `- V: M% w6 ^
  222.       dwDownLoaded=0;
    / t6 D& w5 D* N
  223.       bSilentStep=FALSE;6 D" ?  ~, ~9 c( j
  224.       bCompressed=TRUE;
    , X- U* L5 ]! d: r
  225.       strExtLocal.Empty();
    1 [1 R. h- {! C; U: v
  226.       strFullName=(*i).second;
    ( a0 ?% Y' Y* O% u& W2 S
  227.       dwProgramState=AP_CONNECT;
    2 Z6 A1 A. \9 O! H. z
  228.       return TRUE;( R) V& H" T  K6 Y& \
  229.     }
    ; R# U  `( b' y; Q6 V  f" y
  230.   }
    2 c* {0 `! ^" j
  231.   else if(bRestartUpdater==FALSE)% [, {/ r% I  W0 f% r
  232.   {
    6 i$ Y" @9 n8 L4 y& |
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    8 X7 R4 E8 @7 [
  234.     {, ^2 P! g) [  q& I" w  L9 u
  235.       file=(*p).second;* y- Y7 E- }3 @; Z; M5 @
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    * N9 H9 u) `, L* c2 o$ S" v
  237.       {
    ! E. Q- a5 L; d' o8 [9 w
  238.         olds=(*p).second;) H% v- a! M- L) B, [" I' P
  239.         olds->vers=file->vers;# d. k# @& V6 b: X1 H8 C2 k% ?% S9 n
  240.       }2 b7 s9 N2 b* d5 k; R
  241.       else
    5 Q/ C. x' V+ N8 G
  242.       {
    ) ~+ V5 a9 q, n- F7 i
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 ^  M# }; p) x/ Z6 J5 N' s
  244.         memcpy(olds,file,sizeof(UPDATEFILE));2 [- e. e$ r* B8 K. _. |
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));3 b" T6 h! u# k& ]( K
  246.       }
    : ?) c: {; q) B: G
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    2 d6 D3 W# F# W! M+ J! z% [
  248.       sprintf(filename,"(%s)",file->file);
    & ]3 K6 d; P8 S; ^: S1 Y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 q5 p, q+ o% M% ~
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    4 Z3 ?" G7 J  q& E! h: [
  251.     }
    % k0 g$ c' I8 t, I; }2 ]
  252.     dwCurrFile++;, l5 M- p+ d( [. R& H  Y. E
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ! m8 b* |- \# Y% I
  254.     {' L2 F, }! T; k
  255.       bSilentStep=FALSE;
    6 X( l1 V# ^5 w9 C
  256.       bCompressed=TRUE;
    * d" U, p% g/ O# `' b9 O) X
  257.       strExtLocal.Empty();# G/ B, `4 U) R% X, [* V
  258.       strFullName=(*i).second;
    : {* g6 ]0 K4 s" t
  259.       dwProgramState=AP_CONNECT;. W4 Z# R2 |' m  p& T  @
  260.       return TRUE;
    ; ^1 O% h. d. t7 ^+ {$ ]
  261.     }
    ; {" b! x" U# Y0 L. W+ P
  262.     if(!bRestartUpdater)
    4 o2 R' A+ h1 l8 r' X; h: F' l
  263.     {$ H2 f! H7 o2 m, E0 ?
  264.       int iCurrSize,iFileSize;, d8 E' x  a0 i& _
  265.       iCurrSize=0;8 |/ I. Q, U8 N3 K
  266.       iFileSize=UpdateList2.size();
    9 M2 t! j0 C' g6 g
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");; z! G. @: B8 T: N: l9 o
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");, {# b7 |3 I  ^
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");# _. [' e9 D4 Z$ O: _3 E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) @2 F, T% W1 `0 n) s6 b% D- [
  271.       Fclearf(".\\update.dat");$ t1 d9 C: F3 \% q* D4 N# ~
  272.       Fprintf(".\\update.dat","Bloodyf\n");% _& U4 `7 h4 ], g7 g
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)' A- y" l! t* C1 X
  274.       {
    2 n- y: Z$ T3 ]; u
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())6 W8 W1 Z( A9 I$ u  k
  276.         {" {  d/ J1 {, U& m0 M, F2 u
  277.           file=(*p).second;
    . p+ _0 w% P7 H! s2 H
  278.           sprintf(filename,"(%s)",file->file);2 O  }* S# h1 d6 u) l: h0 S
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- X* ], f) ^6 F9 n
  280.           iCurrSize++;
    ) {  w2 O8 z& |
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    # b6 V. G0 a3 z1 w! U. T# S
  282.         }0 A3 C# ?: V- M) L
  283.       }
    : e$ S* r, u- I
  284.       unlink(".\\update.txt");/ i2 x! A; a9 K% t
  285.       unlink(".\\update.tmp");
    . I, Y4 e) u# Z9 t1 H# Y# l
  286.       Fclearf(".\\checkversion.dat");" V* K- y+ A9 O. k
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);5 n0 [6 p$ l6 k# u
  288.       if(UpdateLocal.size())+ Y8 ^4 E- `% i
  289.       {/ p9 L% j* ^  k% U1 K
  290.         UpdateLocal.clear();
    0 F* c0 n, B6 k( v( C% K# U
  291.       }8 d1 Z) b; x. Q( Q
  292.       if(UpdateFile3.size())( L# f# e% R5 G4 j7 D/ [
  293.       {; k2 r6 r( j& Q/ ?6 K
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 F( N- O9 O( x1 i3 o
  295.         {
    : s- o1 F, C5 b/ {1 w, T& k% @
  296.           file=(*p).second;; z  `) K# I+ N( k
  297.           free(file);, T" f5 }" {- E/ h8 n
  298.         }
    $ ~5 L5 D9 \7 T
  299.         UpdateFile3.clear();
    , n2 k% b) h8 s$ |. j
  300.         UpdateList3.clear();# z, v( ?$ @5 |! a5 d- |
  301.       }
    . R: c3 u2 E) m+ ~& G) F$ N" d
  302.       if(UpdateFile2.size()), L- w( h0 }  O
  303.       {3 y+ R8 \8 e; _& B5 d. s5 M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : x' m) |# G, n( D- X7 Q8 S$ \" M
  305.         {2 t* |) C7 `6 a7 }" X2 Q
  306.           file=(*p).second;) j8 g: A- f1 a0 P; e" d
  307.           free(file);1 w, n6 f4 N  C
  308.         }( B- Z; O# N; T/ u5 q, K4 H! C5 [7 O$ Y4 s
  309.         UpdateFile2.clear();
    9 ?! X, v5 W, p3 p5 F8 Q
  310.         UpdateList2.clear();4 I) X9 t" m2 P2 K* y" t, f5 r5 f) S
  311.       }
    % N6 `) H: j# |3 |
  312.       if(UpdateFile1.size())
    ) A! N  j, o0 k
  313.       {0 X  K( y; w; q4 w
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ m. U1 C+ d5 R
  315.         {. |7 K2 n( Z# X1 m
  316.           file=(*p).second;4 I3 Q" x$ h5 z$ |4 G/ S
  317.           free(file);: P- K* i% g* R; Z1 C1 W! H2 g& g
  318.         }
    ) W4 }$ f, M/ [+ z. ^
  319.         UpdateFile1.clear();+ D! y  q) D% a7 e
  320.         UpdateList1.clear();
    8 V$ u: J/ g: }# M% ~+ a, y( ^; ]
  321.       }& L8 F6 ?: {6 ?! ^$ x3 A! I
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    # X% m, @3 d, i, n8 H+ |
  323.     }- T" z  f! f9 N) P: E; Z
  324.   }* @9 s( x. Z7 [& L, t4 I% i, p( n0 b1 p
  325.   return FALSE;: H' W% B$ A5 g& V
  326. }# A9 Q! y+ I2 r9 L' G5 e
  327. % |& Y& x! E' {* D% s
  328. void CRevAppApp::ClearAll(void)$ d! n. ?2 f7 v3 A, b2 u
  329. {' |3 E, q6 u  w5 c7 B) j
  330.   LPUPDATEFILE file;# o) ^4 c* w, G# M1 f
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 b; A; G$ j) h/ b. G0 A- R0 F

  332. 3 x8 L* {8 V* Y; b: @
  333.   if(UpdateLocal.size())9 \3 s% k# [% t$ R% V; ^3 b
  334.   {
    3 R" {/ N9 @8 L4 N9 ?( v0 R/ n
  335.     UpdateLocal.clear();2 p2 C! I# V) \! L& f! `3 E/ O* Y
  336.   }+ ~% u* W! X0 f9 {; A
  337.   if(UpdateFile3.size())
    " T5 S7 H5 Y3 Z/ l, c
  338.   {
    * B, K/ z1 I% H7 T2 ^4 L
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # X  }7 d2 d7 [- b0 q( Y0 d
  340.     {
    : _$ ^$ n( a! A: T8 X0 u
  341.       file=(*p).second;
    & W5 h9 e5 B- U- t' w. R
  342.       free(file);) f0 B" T; J) V
  343.     }8 a8 S0 E6 N4 q6 L8 G) w
  344.     UpdateFile3.clear();
    0 v' M. }1 d) @/ o# _$ ~* I! M
  345.     UpdateList3.clear();9 l/ j7 `/ q7 P9 r$ N- o! p# }4 d3 D
  346.   }
    0 J: Q3 d- j: X0 ^3 N) {( }. b. }8 y
  347.   if(UpdateFile2.size())$ h8 m0 V2 G% h# o& v8 Z
  348.   {
    9 h1 M6 L4 r& O6 S, l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  f* M  R7 C+ v" d
  350.     {
    2 K- E8 I+ D7 J1 t) ~) A( o. N" V
  351.       file=(*p).second;/ P. L- K7 c9 I" x& p7 n" n
  352.       free(file);
    ) |1 d3 R  r+ q4 B6 a# o9 q
  353.     }- a* v8 z9 K; N# j% V
  354.     UpdateFile2.clear();
    2 V6 a" ]$ O, Y- x) f7 l# Q9 p7 B
  355.     UpdateList2.clear();* F! q9 X* X" H0 t  W
  356.   }8 P) ?3 u3 ]8 i5 o+ {" y
  357.   if(UpdateFile1.size())7 s3 e6 R2 F6 e, [8 P9 M2 k$ c
  358.   {
    * k3 T4 W9 W9 S; u" w
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 h$ P! Y( ^2 z/ I  _- l
  360.     {
    2 Z7 p7 o0 D& F
  361.       file=(*p).second;
    7 T/ h* x& q' d* f
  362.       free(file);! D& _- |0 k* s- x' G" x$ B6 i# [
  363.     }1 g( T. L9 j8 N( ^
  364.     UpdateFile1.clear();
    & V& ~6 G+ R! ^( r2 F
  365.     UpdateList1.clear();) {, j3 O$ O6 k  t( |) \
  366.   }  A8 V: I& W% ^/ c0 Z
  367. }  
      G# _1 T. ~$ n9 S( r
  368.   " E6 K. U6 F' Y. {
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    " }' t8 \2 ^& q4 j9 _
  370. {
    & N8 F8 i' c+ ]& \
  371.   int c;' R, b7 j" c& x
  372.   LPUPDATEFILE file1,file2;: a7 `6 K9 g& P4 Y. H/ _) x
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ( F. `3 T4 k4 X9 l4 q. G, ~
  374.   std::list<CString>::iterator l;1 i3 |; D7 l, W; s* m
  375. 6 B! P0 [8 h! ]1 i
  376.   UpdateLocal.clear();
    / T! q# A/ L4 [
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);7 ?' l! m  h, g: Z: q/ s6 }( V
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    1 Y; G( V, x, k9 U
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ' |/ h% c, d4 [% I' z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);" c& m% s( E* V7 n( r7 y
  381.   if(UpdateFile3.size())
    2 J7 o% W4 L' A1 i
  382.   {* _0 @4 y! z& p, H" f! q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    " b( s( t3 ^/ E8 A3 i& T
  384.     {& ~) G0 r# r% j9 D; s$ w2 c
  385.       file2=(LPUPDATEFILE)(*i).second;
    & D  h& V0 ?7 m1 F
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 s2 q4 v6 k$ O9 ~  _4 V
  387.       {
    0 J7 [# q' J) N5 T
  388.         file1=(LPUPDATEFILE)(*p).second;
    . `9 E8 q/ l/ `
  389.         file1->vers=file2->vers;; |& T4 y; V! U0 s  z' S
  390.       }
    , L( V  E  a3 \3 z
  391.       else3 n" p# p. p4 c: Q. c) X) H# i
  392.       {3 |. f- V; w6 _# y% W: z  X& B
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 N! q6 _; {( d
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    2 {) ?4 \* r# a  X, t1 l9 m+ W4 _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));6 x2 A% W  ?$ q, a# N, G0 C
  396.       }
    2 \3 s6 o$ A' [* P
  397.     }# e+ p; K* {8 i& H
  398.   }
    ' ?% K2 Z) L/ z# g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 H! ~  \% B1 k. v
  400.   {
    0 Z& S- @6 @" K1 u
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    7 Z# e# t$ b$ p+ ]( i; k! o
  402.     {
    % g# @4 d; b* \6 A4 k
  403.       file2=(LPUPDATEFILE)(*i).second;
    $ z/ Q1 p9 N% i
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( I: k% P' V( B" `
  405.       {
    * }9 s' l: X% e" W2 E# U- {" b+ Z
  406.         file1=(LPUPDATEFILE)(*p).second;! K" p  X5 ^; W& z! T! B& c5 I
  407.         if(file1->vers!=file2->vers)2 I0 t7 O' o1 \3 @
  408.         {
    : Y3 u$ s1 I/ e- e5 P
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# ]4 z) |) }$ y: l3 `
  410.           c++;
    4 y# _6 [6 J& T* C8 h# }1 l
  411.         }
    ) w% y! N; W- v. a8 H# I0 k8 E
  412.       }" r4 m- N5 Z0 @) b, `8 B
  413.       else& J7 r8 Z4 V' j6 `' P
  414.       {  @" D: F" D: W; D
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - J: r) I" M: N% T5 c
  416.         c++;
    9 ?# L5 |  @6 b3 w; `% t( k
  417.       }; ?: q+ n( r- w) q$ s
  418.     }
    3 k& Z, ?( W9 s4 A  b- C' ^
  419.   }
    9 _3 p: J5 X" O1 ^
  420.   unlink(".\\DownLoad\\update.txt");' d7 U$ U7 s5 U) J3 N) P7 X
  421.   if(UpdateLocal.size()) return TRUE;% r# d5 L) Z: ~/ E' h
  422.   else                   return FALSE;
    7 U+ L: B9 A  {4 |, {+ R; Q
  423. }0 V9 o* x6 U: p( U& t
  424. 6 N: X' [  w; @4 L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"$ S* R6 ?* i) ~) T' U. Q; a
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' c5 R+ W" F$ V; X$ @
  427. . H/ }" J, E0 d7 H5 ~6 N; g  [# I( [5 r

  428. 2 l! M$ C8 E( g% y) h
  429. : ?% h, e& Q# T
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)* o; t+ [+ N, {5 {3 {6 ~
  431. {
    / X$ _( g( h# L( R0 L
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    + _2 |9 e* W4 P, y# V2 }% K
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , D  R- M# l0 d: \
  434.   {
    # I3 q( p. y! ?# h: p
  435.     char szLanguage[50];* W6 J0 B8 b2 b# q  o8 j% j
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( @2 _9 M) k" Z" ?- B+ L# k' q5 p
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! V; r; c. _$ W# ]  O# _
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 n6 f4 M8 n. D1 ]5 I
  439.     else                                   m_iLanguage=ENGLISH;
    2 o$ q- l- S) V  ~& M# |  k& ]! u
  440.     char szRegister[100];/ _" Q" y* S3 I0 _
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");2 _' P4 z  D* C
  442.     strRegsName=szRegister;% v+ h: W6 l* x  m0 l/ c9 v
  443.     char szPatchURL[100];! U  }* Z$ {. F
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");  m4 h$ t& y3 g3 e$ {8 p$ x# C
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ U5 b5 {5 d* S6 Y6 A; i2 V
  446.   }
    5 C: P# G" x  J0 L4 H
  447.   else
    ) Z/ O9 z/ ~6 o( C( M7 F+ }& G
  448.   {5 \: _- O7 c' h& `" ?2 B
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' t  m. n# L; m% C) r# p
  450.     strRegsName=DEFAULT_REG_URL;5 y  \0 N# v# j
  451.   }4 l, }& ]( K1 d) ]$ y  D  A8 a
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ( _5 n9 l' r/ ?8 c' n
  453.   {! w; ^4 k4 |2 `4 X
  454.     char szIP[50];. u1 L- M. F: L" N4 y2 w
  455.     char szDIR[300];7 t1 |5 n2 c) B
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))3 B) W0 L( v8 P; @8 y6 L8 {
  457.     {. b: ?% J3 K9 b( w. m9 U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");$ ]8 f, g8 A" b4 h
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    5 Y7 K  h! }: w2 \* G& p
  460.       strHostName=szIP;" V5 u+ g* e, o4 t. o& `
  461.       strHostPath.Format("/%s",szDIR);5 \2 D& I1 [8 f
  462.     }% }* G; \9 y9 W% G
  463.     else
    " \6 d$ T$ U1 K9 q! u
  464.     {
    % x* s0 {1 a) [. Y! ^) Z8 _; e6 d0 H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), f- A3 z/ \+ ?4 |+ s+ ]
  466.       {4 ^+ F( A$ z) n1 z* @7 j, _
  467.         char szLanguage[50];
    9 l1 P9 g, q4 ~6 Q1 s
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    # W, ]; S! O' e
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" m# M4 S) I% R+ V# w# y# ]
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) n9 i3 L4 d  C( r( ^
  471.         else                                   m_iLanguage=ENGLISH;. J" b# j* K% y3 V7 _# K" C
  472.         char szRegister[100];
      n+ K( M3 z7 t" K. g
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + X! _; b6 [( p, ~" W
  474.         strRegsName=szRegister;
    - l0 i7 N: f3 t1 \8 X
  475.         char szPatchURL[100];  X0 J/ {) R* n2 g6 {, d
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , [+ E3 L/ D1 t1 L3 r
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* K6 d* a6 Z1 {. `# z! T
  478.       }
    3 Z2 d; ]" Q5 P: r; n" }
  479.       else
    8 R. N4 [$ d, p/ u
  480.       {3 V) d1 W; N, I0 @7 R" M' Y
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( D5 e6 q& {' C4 k
  482.         strRegsName=DEFAULT_REG_URL;3 [9 x4 Z$ N: ]
  483.       }
    6 g  @; X* O; N# j
  484.     }# U" L1 y8 _+ ~
  485.   }' _5 A' {. n6 \+ u" D2 A$ w  P
  486.   return true;+ K- O6 {  d6 C7 Q
  487. }+ k2 m3 K/ v1 f

  488. $ k+ \( m0 f! L: s6 f, G  r
  489. #include ".\ZLib\unzip.h"
    : M+ o5 Y1 R+ t" a
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 x  y" }: `1 g3 g
  491. /////////////////////////////////////////////////////////////////////////////* I8 {* a1 y" e6 C
  492. // CRevAppApp initialization
    ) {# T; ?/ F3 K! o1 o3 q

  493. # t) b% n0 x3 L0 c" O
  494. BOOL CRevAppApp::InitInstance()
    7 r' s) p; v2 e2 g- o5 q
  495. {8 A$ R% ]9 `; M; W  K' \
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    . S: W5 M( }3 K7 y
  497. 1 ?: L/ Q6 _/ s6 ^& F; z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    & h2 n: J5 a0 z0 |/ B/ n  @' r" T
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    9 f+ S. R# T  ?7 \7 t
  500.   {2 A+ K# \$ m$ @- U) D2 C
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ) W/ W0 S1 d' b1 n1 X5 \
  502.     GetPathFromFullPath(szPathTarget,szPathSource);0 Y! e2 K4 h9 |2 o) l
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))& {% K! Y6 ~: k( ?3 l
  504.     {
    / H7 K1 h# z' m! e4 z+ D7 I: _
  505.       strcpy(szPath,szPathTarget);$ l+ g* d! b4 ~
  506.       SetCurrentDirectory(szPath);$ o) s2 X: N5 m# N& z! R
  507.     }6 Z/ J. o) v9 G0 h. f3 C
  508.   }/ c/ X  m4 V6 Z& m8 B4 g+ `2 R
  509. #ifdef _DEBUG5 m# J% f0 e& z/ E! `3 Q; Z9 G
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . m* s- z& f+ F1 k2 t& Q4 b2 s+ b
  511. #else7 b1 K4 a8 l) Q: _+ G
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 |9 l4 |1 x6 a/ U7 m! }
  513. #endif1 `; C! P3 e- O' o! n3 x- H  \
  514.   {2 X3 ?3 D. ?5 Q# b
  515.     char tempFileName[MAX_PATH];
    / U: l" M9 [& L" Q
  516.     strcpy(tempFileName,szPathSource);; u0 u& _9 u, x' [
  517.     tempFileName[strlen(szPathSource)-12]=0;+ @" _6 {- Y& ~& ]! W; k: L) V
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    # H, i3 b: D/ `
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);, z% P; K2 j# O8 c
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
      L3 d9 f3 E* b8 K5 U
  521.     return TRUE;
    8 J. N. W/ j, T) a* M( z  I; q
  522.   }
    * M8 I1 v8 h* ~
  523.   // Nuke 0118: Delete run.exe
    ( x3 B% h( L7 e# [( S1 U) a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    * ~5 |- g/ @4 x5 m0 ^
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    3 B5 l, A5 D8 n* G! j7 Q
  526.   if(!ReadCfgFile("Config.ini"))
    1 Y- P  ^$ Y% g: Z. j9 v, h0 u
  527.   {
    + D2 i5 R' y4 P# o. e0 ]
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);- M6 P0 ~' m5 l0 ?$ F
  529.     return TRUE;
    ( E! C8 h- R- X: u5 C# I+ h: `
  530.   }
    ' {( Q7 S& B" M2 o4 ?' M) a3 c
  531.   HANDLE mutex;
    ! R, |$ t. z; y' L, ]
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    % ?: ?+ Q6 I$ s& X% N$ D$ {5 K$ R
  533.   {
    + w5 _- U2 \3 N: _4 \
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ( `* Q& l, v5 a& S+ c
  535.     {
    $ G- z) z8 d2 k8 L6 z, E
  536.       CloseHandle(mutex);
    " j$ ?) u* W) E' h/ M9 B2 \
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! x+ H- p1 p" J8 A) Y# ]; C3 s
  538.       return TRUE;1 ~1 Z2 |/ v2 s$ r" j
  539.     }
    * ?6 {0 I5 X& K5 G. _4 k
  540.   }  + w% w/ a, w, i6 O( c
  541.   CloseHandle(mutex);7 ^8 p  v1 l& U4 v  O. g: N+ t. e; s* [

  542. : c  W5 t$ r" W: n; A. X
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);0 ?# W$ i, U: B; z: a5 B) O$ i8 A

  544. - B2 F* k0 o3 v; @! h
  545.         AfxEnableControlContainer();
    9 M, `2 c) o- A5 I: {

  546. : n# Q9 l, i  R' ~7 v8 y3 n
  547.   bCanUpdate=FALSE;9 H. \, c& K4 ^; ~' O8 f
  548.   dwStartUpSteps=1;
    ' C- J$ j+ k, X2 J9 @- p
  549.   dwProgramState=AP_NOTHING;: S' p& x% _, k. V0 L! O
  550. 3 G/ p, ~0 x" l8 ]0 G
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);- v$ C5 X7 c) g* a4 P
  552. ' g6 p! A0 b. f/ a
  553.         // Standard initialization
    9 k1 ^/ h5 ]" J2 @6 q
  554.         // If you are not using these features and wish to reduce the size- n! y# z, T9 Y6 z# [- l) L  j, a
  555.         //  of your final executable, you should remove from the following1 O7 V2 I) B2 `- \- ^# n
  556.         //  the specific initialization routines you do not need.
    4 \6 v# v8 r$ s' P8 X; B
  557. + \2 [1 K# m  R8 y1 G' h% H
  558. #ifdef _AFXDLL9 J% T  P0 f$ z- M3 i" }
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL  D6 t& }# T0 m# y+ f
  560. #else% P' G% s+ F/ _
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically3 q! ~+ W# Q+ t" n8 f7 R& q
  562. #endif+ L1 R  D; p  S) I# Z3 V

  563. 0 h, R  X* w( ]! Q/ D2 O
  564.   dlg=new CRevAppDlg;5 c, d5 ^' B5 X$ M8 h
  565.   dlg->Create(IDD_REVAPP_DIALOG);2 a" \! O! H0 D. f0 r
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) B/ V; {( o9 u
  567.   m_pMainWnd=dlg;
    0 b% W7 X; Y% i- [# Q
  568. 4 v( H) J& ?; G$ O1 h
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * x+ J  r' t* M
  570. 0 R2 Y0 l7 `. \3 h8 Y' _* y
  571. //  GdiplusStartupInput gdiplusStartupInput;; m- Q6 u0 j* H2 V6 Y
  572. //  ULONG_PTR gdiplusToken;
    2 i7 F$ v6 L$ \, v, ?
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    % |  J* h) l5 ^$ `4 n
  574. . k: p: m4 J: s8 \3 v
  575. //        CRevAppDlg dlg;
    ) b+ s5 q4 q. W- F( \  ^
  576. //        int nResponse = dlg.DoModal();
    2 y% L4 ?1 Q$ T
  577. //        if (nResponse == IDOK)
    & @! U  C2 _. q+ _
  578. //        {, U3 n$ d, l+ l  F( C5 E% X0 l
  579. //                // TODO: Place code here to handle when the dialog is1 K2 U1 O( i7 S' I3 o$ K
  580. //                //  dismissed with OK' ?5 v- m! c. V% H$ e$ L: x* _
  581. //        }
    4 {# g! `/ x- M% I7 i9 B8 ?
  582. //        else if (nResponse == IDCANCEL): U, G) _+ }7 L. \
  583. //        {
    + _, C+ k2 i% y" u& W5 C& w
  584. //                // TODO: Place code here to handle when the dialog is2 Y% o- \& ~( O& D9 l
  585. //                //  dismissed with Cancel
    / m* n1 s. U7 M# a0 h3 ?
  586. //        }
    - f9 S8 i" v2 n
  587. & J; e0 x$ d. v
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    : R9 m( S! e( ]& w
  589.         //  application, rather than start the application's message pump.
    , R5 H9 P9 Z5 u
  590.         return TRUE;
    0 M' [  L# T! G  l% ~$ S- `
  591. }
    / k# |6 A% f; w  |+ d. u5 ]4 g/ w) ^

  592. - x& h; Y' A- J: B2 n3 f3 V3 s
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 [1 p8 W: |% }; z* ~0 O
  594. {
    : q5 h5 q! _/ d& _
  595.   int i;1 |! U/ H6 Q: Q0 Q
  596.   char *szRet;# W; T( M) M& U0 a) G4 k
  597. ( n7 N9 N6 m- C/ c
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 S4 c, J- C3 `6 ?4 v  N( F
  599.   if(sztoken)0 L# j& F5 C$ E; b  ]5 Q
  600.   {
    % g4 {* g$ e3 ?" A
  601.     szRet=&sztoken[itoken];
    . ?3 x9 t, ^1 P0 l
  602.     while(sztoken[itoken])+ o9 \1 k; M, r4 J
  603.     {
    / P8 P; e) J- N# e  Z
  604.       for(i=0;i<(int)strlen(token);i++)8 X* k# \4 }' f% F  V6 J2 `- i) |. c
  605.       {- g- T7 {% j  x2 h( f& }  F
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    8 t2 ?" c1 S$ Q$ r* c
  607.         {
    " Q. ~8 y  L6 S# r- W! [
  608.           sztoken[itoken++]=0;
    . I5 g$ g0 x" p* ]
  609.           sztoken[itoken++]=0;- c$ g0 J. o7 }! V8 y5 u7 [* C
  610.           return szRet;5 U+ _, R5 Z) Y% G6 L
  611.         }& g7 y3 `; ~' ~2 w( `! V( a* @
  612.       }' |5 I. Q" v. q; d
  613.       itoken++;
    + m2 G4 J4 {7 L/ V! I7 S2 d4 V
  614.     }
    0 ^9 [( S) E# ^! \& t/ X( A
  615.   }  G% f; z, ^$ q( X2 n7 P
  616.   return NULL;
    5 O+ u2 @7 A' Y/ t: K/ b
  617. }
    / {. r9 ^" v$ l- m5 c7 {
  618. 8 A+ l- E. p, @& n
  619. void ProcessProc(long Total,long Current)
    - h. ^. Y3 U# p: h, J" a; x
  620. {: `6 ~1 l" ^% G1 G
  621.         MSG msg;
    5 a  R* g6 m9 w1 [7 |6 b  x
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    0 V; _; {# M6 \6 q0 u: b' ?
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));$ ?2 g2 r& Q' D9 U: y5 m
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + s: Z& R! s; x; Z. ~
  625.         {
    ; b# `' s2 a+ P/ f
  626.                 if(!GetMessage(&msg,NULL,0,0))
    + p- D1 ]" m1 ^) ?2 f
  627.                 {" t- ]# l; o% S8 E6 |$ r
  628.                         return;
    0 N: \. O+ i, U& {
  629.                 }
      G. J1 H1 w. P
  630.                 TranslateMessage(&msg);0 E! v* v  i, K6 ]) s, A
  631.                 DispatchMessage(&msg);
    * \4 o/ B' J6 z# w. K( y2 t; B
  632.         }       
    ) f$ E8 T' S7 z2 r
  633. }
    . H* A5 {9 O" `" U

  634. 1 E: \% P3 y7 }4 Y* [! P
  635. BOOL bFirstChar=TRUE;- P$ D+ x+ g  A! }" }  N! H1 F4 {

  636. + x& T& H+ l4 z  C# k, z
  637. BOOL CRevAppApp::OnIdle(LONG lCount)* r- H( S: \, @6 L) x
  638. {: d5 [  P) B% S. \3 t; a* ^
  639.         // TODO: Add your specialized code here and/or call the base class$ k4 i5 F2 |  W& z7 c' G# C
  640.   switch(dwProgramState)8 }  x2 }+ N& k# R- u# O; C  }' e
  641.   {' R" |! z% y* Y$ `& K9 k5 @
  642.   case AP_NOTHING:
    2 Z& X" @! ?9 V9 z" L' e$ M6 |
  643.     switch(dwStartUpSteps)
    + [- z9 {6 \# l8 [
  644.     {
    + E6 m2 L' x/ M' _! U8 ^
  645.     case 1:
    * C* z- ^" O3 }# {) m2 ?
  646.       {
    : @& D) b  ]: x* B2 [) u8 c' F7 q
  647.         int i;+ K% t4 `0 @3 |
  648.         CDC *pCDC=dlg->GetDC();4 E* M6 k: P: O7 N4 n& _  v9 S
  649.         HDC hdcwnd=pCDC->m_hDC;
    1 ]0 |# C$ I6 E1 T$ S3 J
  650. //        Graphics graphics(hdcwnd);. ~( t% l( O/ ], R6 w
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
      G- B* C* C5 b, M1 r9 N% a
  652. //        INT iWidth=bitmap.GetWidth();, l4 o3 @. |* z% F" s" }0 V8 u( s
  653. //        INT iHeight=bitmap.GetHeight();! @9 r+ F; A$ _' J
  654. //        Color color,colorTemp;
    4 ]( C1 \2 G3 y+ T$ F, _. n
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ) r/ ~1 g( X8 f; B3 Q2 D
  656. //        {# ?6 T0 D+ f4 `9 u
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)$ |% A# W& h) H! Z0 A5 V. N
  658. //          {
    , w7 n: E2 y8 ^3 p
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ( k! w& p( z: O- o6 W, G: _
  660. //            colorTemp.SetValue(color.MakeARGB(
    + I+ r# P6 R# j- n# U
  661. //              (BYTE)(255*iColumn/iWidth),' S) z! t# O5 }2 H0 s( d9 ^, |
  662. //              color.GetRed(),
    $ _, h6 m5 i% ~4 L5 r$ A( K) a
  663. //              color.GetGreen(),5 i: p/ Z1 F' ]0 h
  664. //              color.GetBlue()));2 _0 @1 i' A( W) j
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    0 f) C  N# O, k5 }- I, j
  666. //          }
    / ]7 H9 q. @9 u3 [
  667. //        }
    ; B5 T9 e4 P+ s! ~# d+ O
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);1 z' ^) s' @+ p4 e1 {
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + B& ~, K. M% d" R
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");) R1 a- I+ J# `& a5 ]8 c: v, P9 `
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; p0 z8 R3 x5 Y+ ]6 W4 T
  672.         for(i=0;i<240;i+=8)1 k3 G- |2 a& r8 }7 e& ^; U
  673.         {
    ! u' w" y& o( y) ]/ {
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  ]( p; R8 G: L
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! Q# F9 m  Q. d7 H) v+ H
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 F6 p$ A* _3 v, S  e- H. w- V
  677.           Sleep(33);
    * o4 N/ h7 c1 a: P& ~! d' e
  678.         }" j2 A1 a* C& U8 S. v7 d, r$ s+ R* a
  679.         Sleep(1000);
    " W% K: _! r7 g! L- i
  680.         for(i=240;i>0;i-=8)
    9 |2 l" E. q- H" N. ^) B
  681.         {# Z+ F1 n: ~# @& Z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 o& s/ W& A, Y; {! B; H
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 r! S$ q. }0 N0 c. l2 b
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 g3 M" l! s  Y% p' w
  685.           Sleep(33);2 B. f7 l# i7 X: x
  686.         }& w- V7 I5 o% ^5 r
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);9 ?) h8 E$ Y9 C: e0 x
  688.         dlg->ReleaseDC(pCDC);
    7 S! i! b. v! A. s
  689.         DeleteDC(hdctar);* q- w4 b8 e3 G( F$ }: g
  690.         DeleteDC(hdcsrc);
    % s. e! `" w* L5 @3 s
  691.         DeleteDC(hdcorg);- M$ h# U% w& ~' N
  692.       }
    # ?3 d. {( I9 @
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) [7 g3 O' u* `! i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    + [5 }' a. n2 D! E5 A- m
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    - }- P# n) P. u8 @4 |; \
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");8 @+ ?5 @" G5 t8 n+ W2 X( R' a& N
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - d# r+ K7 I  U  @! O3 @/ a
  698.       if(!Dn.Connected())% W9 m# b+ E2 x# Z- Q; @
  699.       {' E5 m$ \) v7 v6 }5 y- w& \
  700.         dwTotalFiles=1;
    8 i* p) q4 O% a# f$ |. U
  701.         dwDownLoaded=0;
    + w9 k& R% C$ ~/ t+ D
  702.         bSilentStep=TRUE;
    1 P( c# w+ h' A* k1 F
  703.         bCompressed=FALSE;
    5 `: j0 P8 B$ n0 d0 q6 g
  704.         strExtLocal.Empty();
    1 \( U7 p, G' }
  705.         strFullName="readme.txt";
    & w! P3 h- I% O
  706.         dwProgramState=AP_CONNECT;
    , u2 i; t5 M+ q: U( a" [
  707.       }9 m8 e7 V/ D' S+ C$ `5 b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();; b2 ~; m' p" g6 }- I
  709.       dwStartUpSteps=2;
    1 `4 P  y/ z; L& ^; \  {
  710.       break;
    $ T& Z7 ?8 D& j2 V
  711.     case 2:" x6 S5 l) K3 t# U3 _& e, T
  712.       {
    . ]% S: X0 d" @: S
  713.         int iEOF;+ g" a: q. `3 F8 u
  714.         FILE *fp;
    # i3 k% H7 G- ?! T: m
  715.         char szString[512];
    ; P" S( m4 R$ X/ ~8 J
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");8 Y2 @  v" r; k( X" ?
  717.         if(fp)
    ) b0 l5 H8 B8 j! `0 I7 e% p
  718.         {8 Y5 H6 l0 E  \, C8 D( B. k
  719.           do% `( r" N, r7 w/ `3 o7 v5 ?/ z/ U
  720.           {
    ' x8 w% r) i, U& p- s
  721.             iEOF=fscanf(fp,"%s",szString);
    6 K& y4 L6 p1 J, V3 M" D
  722.             if(strlen(szString))
    ; n# D. U2 i, W" p$ `) b1 Y1 \
  723.             {  z  B  y, |3 X* v6 A3 D& l
  724.               if(bFirstChar)
    % @8 v) w; Y2 f
  725.               {5 K1 Z" f& Y4 v8 @, h* e3 x, B6 |. s
  726.                 bFirstChar=FALSE;! A/ g+ o5 a5 P0 s. P8 Y
  727.                 bConnectIsBig5=FALSE;
    ! q$ Y: o6 \" E1 t0 U
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ( S9 J; _2 `8 `# l
  729.               }! i0 D  K0 D/ M6 {$ ~. ?; M
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
      c: G' O, k0 j! c2 h: \: f+ ]. t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ; u8 }/ ^8 Z9 n6 x
  732.               dlg->m_ListText.AddString(szString);
    # y2 u# e' |, O! a
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ |' r$ L; T& \6 b  r
  734.               *szString=0;: }1 L: B+ `1 M/ w6 O
  735.             }
    # k* H4 I6 A8 G; ]
  736.           } while(iEOF!=EOF);
    3 K5 P+ O# I" w$ w
  737.           fclose(fp);
    7 W# v) `2 ^! J/ k
  738.           unlink(".\\DownLoad\\readme.txt");
    . C0 g0 t  G, q% A- ~3 m8 v6 D
  739.           dwStartUpSteps=3;
    / k2 @! j- |% c
  740.         }
    & M4 A* M0 f) V  u  W/ L
  741.       }
    * f1 j2 N* R: f! q8 t! W
  742.       break;$ k( U  [) `" o3 {) f7 E& V9 w) q
  743.     case 3:0 T* E( P5 |2 Y+ i2 p! J
  744.       if(!Dn.Connected())
    0 U! d6 E  U! `
  745.       {' C/ p5 X$ S6 t& ~: W1 |, p% _
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);- h7 v; j  @9 I8 d1 V. B& r
  747.         dwTotalFiles=1;
    % ~! Y6 k  l3 @, X9 O) a2 t# v/ z
  748.         dwDownLoaded=0;0 P, `3 A! v2 k0 `8 O9 C1 h
  749.         bSilentStep=TRUE;5 Q3 h! ], s2 [. j! n
  750.         bCompressed=FALSE;! L) G) n- H' |9 m7 B7 s
  751.         strExtLocal.Empty();( K* _$ _, @1 k8 @5 n& f
  752.         strFullName="checkversion.txt";2 l) l0 \% N  _' ]3 d2 [2 _' T
  753.         dwProgramState=AP_CONNECT;) f5 u% U& O$ J  y) w+ k
  754.       }1 F; i  S. W: z7 [6 ]
  755.       dwStartUpSteps=4;
    ' q  \" q5 s1 i
  756.       break;
    3 t# L  z1 J7 A$ e; V5 b. `
  757.     case 4:
    # _; ^6 L# H. t2 ^8 l
  758.       {6 h9 {( R/ _6 Q  T  Q& r
  759.         FILE *fp;6 @* d$ M, A/ y+ J
  760.         char szString1[128];1 s# V# r( ^2 Y8 F! _! ?
  761.         char szString2[128];
      e$ m! O+ a, `! x
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");8 k1 W  R6 C; U# U9 M
  763.         if(fp)
      R# U" e. _* W1 B* r9 D- d$ @/ `) @. _
  764.         {6 E3 l3 Y, }: h! E2 z8 J
  765.           fscanf(fp,"%s",szString1);6 C4 a/ r* I- y5 A
  766.           fclose(fp);4 x) ^: ]8 p! c/ K
  767.           fCheckVersion=atof(szString1);7 e/ c6 s. S3 F  Y
  768.           fp=fopen(".\\checkversion.dat","r");
    + x1 A9 }2 x. o( e' P/ V
  769.           if(fp)$ C0 ~. J7 u1 @
  770.           {7 Q( }' S" `, H: b0 g
  771.             fscanf(fp,"%s",szString2);
    ( f# f; x9 n* w
  772.             fclose(fp);: A; ~3 L- }, j! b" ~; t# o+ ~/ I
  773.             if(atof(szString1)!=atof(szString2))
    ) I0 S' v! u2 u7 Z* R" o
  774.             {
    & d, O; R0 A/ f4 _( M; p' z5 f- }8 V
  775.               if(!Dn.Connected())3 h7 P  r3 \7 i2 s2 d/ L8 ?- r
  776.               {+ ]; G7 A( ]4 f9 C
  777.                 bFirstUpdate=TRUE;
    $ V: A" q1 m$ {' V8 b: T3 p! d
  778.                 dwTotalFiles=1;+ r' x4 s$ y8 _! D7 M' w9 X
  779.                 dwDownLoaded=0;
    " z) c- w1 t7 Z* h
  780.                 bSilentStep=FALSE;
      P! j' }( T' J2 u1 v3 h
  781.                 bCompressed=TRUE;
    , p% f+ D7 F2 v
  782.                 strExtLocal=".\\DownLoad\";
    - R, h/ M/ `, N+ T0 W! Y
  783.                 strFullName="update.txt";. r9 c" z; i" w
  784.                 dwProgramState=AP_CONNECT;: _" w: O4 P& s, w/ u! Q5 k+ e
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & H! p, y4 W' b# P; i2 d
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, K0 t3 c3 f+ J0 |4 f: j
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");+ C% o5 G4 v, k  u- v3 r
  788. 6 Z  {$ b$ z' s4 m. ]
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , v5 y7 x( J' [
  790.                 unlink(".\\DownLoad\\checkversion.txt");2 v: j& ?/ C' A% B$ X5 t* E
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 {: O, f! M% d) L. M! f% a
  792.                 {+ X# B& f  m9 K7 j1 x# A4 |
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    6 j1 f4 i+ Z, x* s
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");& d$ a% h. k/ J3 h: s  F
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    / v# q' l8 ~3 y+ P5 T
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) A/ u& k% o9 }- a. [. w8 e
  797. : W: q) s: @  E0 O
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# O8 w8 D3 o# n% t7 Y7 J
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 u  s7 O5 F" v9 Q
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");9 C# J# F9 `9 Y0 F1 x' I; w6 h3 W
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 f: f  |3 Y8 t; D. D! {6 W
  802.                 }% T" r- X! h0 U1 C( @5 b) e
  803.                 dwStartUpSteps=5;
    . b6 S1 G+ A) Q" n# p* U
  804.               }
    7 r; N  E, n. Z8 n7 Z
  805.             }
    " I3 |0 _5 V8 O8 f+ P$ Q
  806.             else
    ' M4 H7 N' Z; o: W
  807.             {. S2 E$ }) Q$ r0 o, m
  808.               unlink(".\\DownLoad\\checkversion.txt");8 a, Z) a1 Q, Y0 o* A) j7 o! R8 J- O( ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# W) r0 U$ f: a0 @7 H
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# c: `, \  K9 Z/ u  o( d
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ ~- q/ w. A' Q! ~/ {

  812. + w3 ^8 R7 m7 h& I0 @( L3 D, Q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! w3 N# W! C0 F# l, Z2 N! Z
  814.               dwStartUpSteps=99;3 Z" q1 o8 x: G; |/ V
  815.               bFinishUpdated=TRUE;
    : u: P, ^4 M! j* H2 w
  816.               bCanUpdate=TRUE;
    2 _$ l3 O8 z, F' Z
  817.             }
    7 s& S# m, j2 `7 ]1 m' ?
  818.           }  y1 ?& p9 J! [
  819.           else! J0 V2 y4 z: h
  820.           {
    ) R$ s, y" p5 r
  821.             if(!Dn.Connected())
    " T6 l- c% o; c2 X3 w8 t; W
  822.             {
    ; D& p! O7 y$ T
  823.               bFirstUpdate=TRUE;
    " H' G& a2 h1 X# f4 x5 ^* G
  824.               dwTotalFiles=1;4 X- u+ a$ T+ M1 H- w
  825.               dwDownLoaded=0;
    8 p, v+ p6 [- v4 o/ r9 G# G* d
  826.               bSilentStep=FALSE;. `0 ?- [8 V" H3 J. i- d6 c( C
  827.               bCompressed=TRUE;
      S% G9 @3 b! L4 f& {  \- L
  828.               strExtLocal=".\\DownLoad\";
    - B+ x4 w! c# Z  z- c" o# P
  829.               strFullName="update.txt";& t* S/ E7 G6 _% H
  830.               dwProgramState=AP_CONNECT;
    % p) S" e$ k, C% `$ ~0 s
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, b9 s: Z' e: u' p* F5 X* u- |
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 ?( b, w1 k. o" x" j! f+ n2 A2 m
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");7 f9 m5 @8 e% ^' F; j) s% |4 @# `
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' r+ S) a4 {9 ~7 B7 c- E
  835.               unlink(".\\DownLoad\\checkversion.txt");# F: U; x6 K) \8 s% `' O
  836.               if(GetFileAttributes("Wsa.zip" )!=-1); \9 ?: \' y! C8 Y( x8 g! i0 X4 R
  837.               {: }( d; d7 _0 V  a8 h
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    & }! J- Y" J% K* y
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # e8 m6 o; Z  H7 z0 q, n  w
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");: t9 X& ?% X  M$ \
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 n3 H. h0 n* F1 R( n1 o3 r
  842.                 + ]. t5 \/ _# s9 J" J  h* P
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 W' `) w5 ]2 t* m; J
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  r) l3 w( S4 Y8 Y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    + A- q0 z+ N9 y$ j) G9 Y# Z0 O& K
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  H! B. h7 x  p8 `. @' Q' G
  847.               }- M* H6 r4 i, p3 I* q
  848.               dwStartUpSteps=5;
      D2 I8 _9 b/ T
  849.             }
    3 t+ n; O5 l8 c
  850.           }
    4 Q4 E+ T2 Q. g2 }7 y7 A. P! i: F' t
  851.         }
    ( ^# g, H# O) v7 W6 e
  852.         else; J7 g# H: K  t3 t7 d  F: g8 [; G
  853.         {7 @6 R" c: X. U
  854.           dwStartUpSteps=3;
    & z! C5 f4 W# z  u3 K0 W
  855.         }5 s# j% V% ^# n  J* N
  856.       }
    % e4 {$ a) `, y
  857.       break;
    & `4 y( y/ b/ d  y
  858.     case 5:
    & _* f8 O; {* |: d4 [- M  w! c( {
  859.       {
    * u0 U' [! N4 f' N
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)7 @" U& g7 V( D" q
  861.         {
    & A) n) n& a2 K7 b: }/ p
  862.           int opt_overwrite=1;& E) j2 g" d8 z* }
  863.           int opt_do_extract_withoutpath=0;
    & M: x( Z; N6 v8 r
  864.           unzFile uf=NULL;
    0 M1 r; @% R- `

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

評分

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