CSUpdate.exe源代码

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

6 y  }# _4 l0 t3 p* X4 H1 B
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ; c4 K5 A" g* ~9 D4 i0 V; }
  2. //
    / i% |$ L; A+ x* J% ]" m6 v
  3. . a" t, Q& A. y) ?
  4. #include "stdafx.h"
    - h/ P& C$ P( b" R. u

  5. 1 g3 f8 p" R8 e0 u( w; E
  6. //#define UNICODE2 I# W" G/ \# m- f2 J' x0 N* i
  7. //#include <gdiplus.h>
    8 u# j2 b4 O  s
  8. //using namespace Gdiplus;
    % b; X0 F5 L" B7 |; k

  9. 4 ]8 P$ p" s# d$ I( f4 R
  10. #include "RevApp.h"
    6 i, X3 g3 ?* B) |2 b
  11. #include "RevAppDlg.h"
    . v# _% x) j  n" L4 R1 s: {

  12. ) ?8 ?) S9 S  b
  13. #pragma warning(disable:4786)/ Z- Z2 [9 l! p# m- \7 b
  14. #include <map>2 J4 ~9 l/ c# X! _* x
  15. #include <list>/ t' M# Q* A, _! U; ^: t6 s
  16. #include <direct.h>5 q" N$ V- X, O& N, {& v

  17.   C7 z; _' H7 J. Z/ K  @: e9 Y
  18. #ifdef _DEBUG3 q) v9 K3 ~% D" b6 f8 ~% [
  19. #define new DEBUG_NEW* `0 ~, g( F, P, R
  20. #undef THIS_FILE
    9 v9 J- L  k( {4 r
  21. static char THIS_FILE[] = __FILE__;" S9 }9 v- b3 K5 v
  22. #endif3 v4 P6 T  ~9 d" |; p# b7 ]9 D4 t
  23. #include "SkinResDef.h"
    # Z7 b. B/ N* t. N
  24. #include "ChangeBG.h"
    9 S  c; ]* }7 i; {9 K, e5 |1 P0 E
  25. #include "AFXINET.H"
    ( h! J8 s/ d- j; n0 Y7 Z

  26. ) C7 n! ~7 Z, o1 e* x! {2 I- z
  27. #define TRADITIONAL_CHINESE 03 S  R# h) z8 d& ^7 z
  28. #define SIMPLIFY_CHINESE 1
    1 m3 \* Q. [; X# t5 n3 h# f
  29. #define ENGLISH 2/ [. X4 ~3 n* \! j0 y) j; [) {
  30. int m_iLanguage = ENGLISH;
    ) E7 E$ z+ z" |& ~5 ~5 @) l6 c
  31. /////////////////////////////////////////////////////////////////////////////
    # x0 H9 K" |: ^$ a
  32. // CRevAppApp0 U( o. M* Z, y7 {$ _; N$ w

  33. # T- f# h0 Z% {- ^
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    7 q! p& d' k5 H  y
  35.         //{{AFX_MSG_MAP(CRevAppApp)  p, h8 {0 S% V: G, Q5 @  F
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    1 H- x& `" C3 O% C! ~0 w/ Y3 K  D" c4 p. L
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ; g: J* K- F- j3 a- }% H2 R
  38.         //}}AFX_MSG# w" ~) K9 @0 g- F/ A; B9 ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 C& q% e+ h3 s# n
  40. END_MESSAGE_MAP(), t& X( E/ j' c; }+ w

  41. , z# ?+ p/ [, r
  42. /////////////////////////////////////////////////////////////////////////////
    + W# r) z/ L/ E2 X3 a
  43. // CRevAppApp construction
    % `. i5 i& w2 H! U+ W. y/ N

  44. 1 i; l' |$ j9 F$ ~: ?) W3 X) E
  45. CRevAppApp::CRevAppApp()
    0 P" D7 B2 [9 D0 U6 z5 l
  46. {6 `+ J  J5 F* c8 d2 Y- g3 d! J
  47.         // TODO: add construction code here,7 i1 ~# K/ p& b  i+ n* K6 t3 T& u
  48.         // Place all significant initialization in InitInstance: X# I- d, m+ _% ?! I' J5 }
  49.   bDisplayIsBig5=FALSE;# f: [0 s' J5 H9 q0 i4 i# u
  50.   bRestartUpdater=FALSE;
    . D, C0 q9 C9 f# ]2 |. c9 W
  51.   bFinishUpdated=FALSE;
    # ^- w+ O5 C9 |2 `1 E. l8 L5 s! Q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    1 w7 U# c3 k. f! o$ V: y- R9 X
  53.   InitChangeDataBig52GBKS();
    . G7 C$ i* w7 {5 q% E% i9 o
  54.   InitChangeDataGBKS2Big5();
    8 f: {. e7 O& N  `6 V0 s) g7 Z" k
  55.         /// n8 o' }  L* i" U
  56.         bClickRunExe = FALSE;
    - i+ ~% `2 o6 L# c% c1 I- i: u" M+ g
  57.         //& O2 ~% l; O' Y: Y0 I! ?3 e. Y
  58. }
    ) R: ~9 ^  S& D

  59. . M* q+ B4 K! y- |  p
  60. CRevAppApp::~CRevAppApp()
    6 K$ ]0 w9 B6 g8 P, x( Q
  61. {
    ( X- _0 v0 D% Y3 `( U+ z
  62.         // TODO: add construction code here,. t6 _; q. x. l$ o. I3 @% q
  63.         // Place all significant initialization in InitInstance
    6 H; |. D  T  P& c( U
  64.   EndChangeData();' l. p# D% k6 [4 W! {4 s! c
  65. }5 q1 ?, o+ O( ]! ]6 x+ o' P
  66. 4 _+ K" h/ t5 J% t" m
  67. /////////////////////////////////////////////////////////////////////////////- M5 z7 t' |2 z# g- V, D
  68. // The one and only CRevAppApp object/ ^. i; [% A, z
  69. : ~/ {/ D! U- O$ W9 O* E3 I
  70. CRevAppApp theApp;2 ^, m2 s1 Z8 L' u

  71. : ~) V4 C; B, d" F# l6 T/ J0 U* s4 {3 T
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)1 i$ b' [7 v7 t, R$ M# y" f
  73. {
    & }+ ~' `& \* E
  74.   int iEOF=0;
    * U$ e! k& k- P) @8 `$ ]4 _
  75.   char szTempName[MAX_PATH];
    ! Z# T7 ]% F, p' B6 b. I/ e
  76.   *szFileName=0;
    : a. n. p5 ?. Z! L: k4 N
  77.   iEOF=fscanf(fp,"%s",szTempName);
    4 w2 O( p( {1 K& L/ a( }
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('). k! K" a  l! S: v; M) y
  79.   {
    ( D1 R% T6 g( G* |% p" z" r1 v
  80.     strcpy(szFileName,&szTempName[1]);
    7 |7 O' K" x5 F4 s/ c5 u" }. S
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)6 \, N0 m& D; N% j2 M
  82.     {
    1 F) G/ F( ]9 p  R
  83.       iEOF=fscanf(fp,"%s",szTempName);5 r& V# f% A$ m( v$ A( G: V* e
  84.       strcat(szFileName," ");8 {+ `0 P- g) V8 q
  85.       strcat(szFileName,szTempName);5 R7 w4 Q* K8 C' U
  86.     }
    7 w0 [1 |4 W3 C4 ]8 t8 G( g
  87.     if(strlen(szFileName)>=1)
    5 g5 b% x# x1 P* R# _( d  E3 I/ r
  88.     {
    0 c% r9 e6 {8 I, G/ D
  89.       szFileName[strlen(szFileName)-1]=0;
    ; G  p$ Y& X, w- Y; B* m. J5 w( P
  90.     }$ H7 i7 B% r: B9 \" Q* ]
  91.   }% d2 y5 D9 n/ C4 Q, V
  92.   return szFileName;3 E  c- @! C% a& I) v+ p, V  u
  93. }
    & v0 |0 s* ~3 A% e" j5 ~
  94. 7 |: R: f5 v' P. P) \# G
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    - L9 c* F+ H8 h/ r; y* K
  96. {
    0 Y6 X% J9 S3 f0 q% D1 |
  97.   FILE *fp;
    - Z& \6 W; D- u8 L
  98.   char *key=NULL;  e0 H9 }7 ?- G: _# r
  99.   char version[MAX_PATH];
    $ v5 v% q; n  p# K7 |* S
  100.   LPUPDATEFILE file,olds;
    4 e' b) B) A' }3 T. X9 {9 Z8 m
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    + T/ h! i  R8 V2 ^8 a" ]

  102. % C  _  H/ k4 j' Z% [
  103.   UpdateList.clear();; w9 N+ @1 V! L! _- X
  104.   UpdateFile.clear();
    , d5 O" K) e& s
  105.   if(GetFileAttributes(filename)==-1) return false;4 p# p. a8 X! N# V
  106.   if(!(fp=fopen(filename,"r"))) return false;9 R; C% \7 o. m% ]
  107.   fscanf(fp,"%s",version);: ~3 M% i' a4 @9 y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    & w) e; A/ P5 f4 Y& Y
  109.   while(fscanf(fp,"%s",version)!=EOF)
    1 Q  \7 [3 M% ~$ v# E
  110.   {
    1 C; B* K5 a3 ]. P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& b. X9 h# H9 p) @
  112.     fscanf(fp,"%s",file->path);
    4 e3 I. c3 [. W, i7 w% O
  113.     ReadFileNames(fp,file->file);0 J" {% {# P2 e$ ]7 @7 F3 c' M
  114.     strcpy(file->full,".");. i: S5 A( q4 P! f9 v
  115.     strcat(file->full,file->path);2 s$ g% b; T8 |$ ~
  116.     strcat(file->full,file->file);! C0 n* {  j/ b; z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()): h, y: l; U* K/ ~( I
  118.     {. e7 U2 o( V8 f+ [  W! L
  119.       file->vers=(float)atof(version);
    - i$ ^. q* A6 g/ ^6 `
  120.       UpdateList.push_back(file->full);2 z" f% z3 U: M5 J. r% z6 x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    6 q: |' t3 W5 H7 g
  122.     }; b4 i" ^- a: h& I9 T
  123.     else+ R- y/ E$ D  U* [8 r+ J/ d' c
  124.     {( L( c  `3 h  b1 V; N) W9 U8 ^
  125.       olds=(*p).second;
    ! {" j9 a" _( u1 r  C. `
  126.       if(olds->vers<(float)atof(version))+ g+ p- p; U- M! x3 t( ^/ L4 T+ {
  127.       {- y  @7 A; J4 I" n  M/ N9 |9 p$ m# C
  128.         olds->vers=(float)atof(version);" v' ?* }) R1 K1 t
  129.       }: t5 e* ]* y" b: O/ `0 e" z3 O+ a
  130.       free(file);, J# V, L9 ^9 v! C" g, n& ?5 J6 ^* h
  131.     }$ c  Y; b* g# d6 Y  t
  132.   }1 s% R! f! N, L+ t
  133.   fclose(fp);
    % E4 P2 f) |" k. u1 ~# b* Q
  134.   return true;
    & c; [" D: z5 q9 G5 J$ a0 N- E
  135. }; n$ G! ?; X  m$ Q5 X! z, I) v8 C, x
  136. 5 K" l: u( ]" U4 [8 U! H* d
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    " `4 X- _! B. R" B3 ]" f( w' ~* x6 X
  138. {
    2 D, h/ z: G' i
  139.   TCHAR  szFull[MAX_PATH];
    # T  J9 h/ ^- ]* z( H6 P* \
  140.   TCHAR *token,*inter;
    0 _2 Y% q% U; j, X3 j4 \* f
  141.   *szPath=0;3 H, R# b, ]3 T6 L
  142.   strcpy(szFull,szFullPath);4 u# g8 N" e1 z
  143.   token=strtok(szFull,"\\/");
    - h- ]' ~$ V* q$ w3 ?9 K
  144.   inter=token;
    3 v$ p" j, U6 R6 X* g1 W% h! X
  145.   while(token=strtok(NULL,"\\/"))' |: }; O$ o8 [( o* R6 C
  146.   {2 U& j8 m" Y5 w" p7 j3 i  ?: K& S
  147.     strcat(szPath,inter);
    # S( }2 c, D( C* ^
  148.     strcat(szPath,"\");
    ' D, _: S) v/ C: E5 o9 M" ]6 q
  149.     inter=token;
    " V; k- K" s; p, K9 l
  150.   }, `, ]- ^7 C( p
  151.   return strlen(szPath);0 D2 P7 V/ _& S! K; S( t; p
  152. }/ q' e( c5 X5 h0 q; _- |

  153. - `1 q: W( w6 C- u9 W" U$ p: k
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) U, V' F" r' U. p+ f/ Z
  155. {
      @: g4 l' u/ t# P( N0 q" R
  156.   DWORD attrib=GetFileAttributes(Target);
    ! j6 L9 P2 d& l, O) x
  157.   if(attrib!=-1)
    ! I" `8 o- @# g; ^9 z
  158.   {
    - C& r" y* S" E( n9 `" B$ q1 d
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))8 O3 j+ t( `' \7 N# ]
  160.     {
    6 O3 d8 P+ T3 k/ h# d: d9 X, e
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ( J4 r2 r! w  ]
  162.       SetFileAttributes(Target,attrib);& y4 s2 I4 K, {; h# L* a
  163.     }/ T" d, D2 D1 S3 V$ }* F
  164.   }
    ' m) R5 H# Q# i$ V
  165.   CopyFile(Source,Target,Erase);
    1 H' Z0 |6 Z3 A, V+ ^. U- [
  166. }
    : O& ]  \- n0 H. a8 t- O
  167. 9 r7 o) l$ U; C
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    * C0 Y, `- s9 }8 f; \
  169. {$ V; d4 K& n5 f# M
  170.      FILE *fp;4 \& {- n* u/ E$ ^
  171.      char  szBuffer[8192];
    2 v1 s7 n' I4 C4 [* _4 K; R; x" V
  172.   va_list  argptr;
    8 w; M2 Y8 X6 f) C; q1 ~& Z
  173. 8 o" g+ \& Q/ h% c0 ^
  174.         va_start(argptr,message);
    , z! p( T3 O4 [
  175.         vsprintf(szBuffer,message,argptr);. `/ m. I; w4 Y; z
  176.         va_end(argptr);
    - B' h  j, ~. b* ^' F$ J( J: F
  177.   fp=fopen(FileName,"a");* j2 s4 w- j+ i
  178.   if(fp)
    7 t  a$ @0 v6 A( O2 B  \; `
  179.   {
    ' h# Y- b  y0 R" F3 A/ r5 J/ ]2 z1 C
  180.     fprintf(fp,szBuffer);
    ' Y0 a" w7 B. Z; P) ?* A0 J6 K
  181.     fclose(fp);
    . N1 U3 X1 J* T; s/ B3 H0 g" F
  182.           _flushall();; }+ Y, |/ @: a/ c
  183.   }" V0 F: N6 U! M; q8 q8 X
  184. }
    / c4 r5 \; i, M
  185. 1 k( f8 b9 ?) q' {/ O. ?9 ~: ?
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    + C) w6 V: L) @6 T  u/ V
  187. {
    : b" }2 _; ~# W) |, U2 N. b6 `. ]
  188.      FILE *fp;/ [, R! P7 {: Y
  189.     DWORD  attrib;8 Y3 T+ |7 ?( w* D
  190.   attrib=GetFileAttributes(FileName);3 B4 I7 [0 B/ q; F6 w8 {. z' x  B' K
  191.   if(attrib!=-1)
    5 J1 d' t# ^% C; P9 h( W9 c5 z! p
  192.   {
    9 `8 i! [+ r7 o- |  q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    & K! a* Y9 R" H) S1 i) P
  194.     if(!SetFileAttributes(FileName,attrib))
    9 \# N" ]4 b4 q9 L- S
  195.     {. s( Q/ B$ N! ]. I
  196.       return FALSE;" L5 j$ E8 I6 x( M  g/ x
  197.     }
    + p9 u8 f- K" F+ u9 R
  198.   }, i9 A4 {+ O8 ^! @- X# g3 T
  199.   fp=fopen(FileName,"wb");8 G$ A6 J# m- I- a5 Z1 d$ h! m
  200.   if(fp)
    5 J3 `6 i1 ]8 N+ V2 g2 {  a( m
  201.   {: w, k& O4 f. y9 |3 a
  202.     fclose(fp);
    3 M- T) @) Y2 z4 l$ M' @  x8 h. H
  203.   }2 B& k4 \) ]# E, i5 q6 W
  204.   return TRUE;
    / `) R2 Y& V6 ^4 Z# l/ C, G. U
  205. }
    2 s+ |: O& A3 {  f! e

  206. , t) ~" i3 W- w& k
  207. BOOL CRevAppApp::UpdateLocalVersion(void)" B, n) m, K+ g+ \
  208. {
    % N; ?6 b0 p( `8 v) b: c% f
  209.   char filename[MAX_PATH];
    4 H( f$ q+ W3 s' |: f1 V- i
  210.   LPUPDATEFILE file,olds;
    & @& M7 q5 c! G
  211.   std::map<int,CString>::iterator i;
    ) `) c# ~8 ~+ o, c  F  P! W
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 r$ _. s) e1 _6 i  {
  213.   std::list<CString>::iterator l;) I1 Q' l5 o9 Y; |9 t0 G: ?2 e2 y/ h
  214.   m& _$ R# _& V1 S
  215.   if(bFirstUpdate)
    2 q0 n4 e& W) r9 t$ T% x
  216.   {
    8 A) A; n' Z5 M$ j& Q
  217.     dwCurrFile=0;- K; n4 V# j$ f# D) f3 w
  218.     bFirstUpdate=FALSE;
    ) l4 {' x0 w# H. b% a, g# v
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # w6 j9 Z. m7 |4 _& O& Q+ S1 z
  220.     {
    : [% S5 j$ R1 p5 z: }
  221.       dwTotalFiles=UpdateLocal.size();/ f, @9 `3 i/ I3 |/ F, I, M8 q
  222.       dwDownLoaded=0;, h! N, A* _9 i$ E8 L
  223.       bSilentStep=FALSE;* {) h+ x! }, B1 ?4 x0 L: X
  224.       bCompressed=TRUE;. |$ m' @: l! a/ r' R
  225.       strExtLocal.Empty();
    / A4 U5 N$ ^9 i: i. U5 Z
  226.       strFullName=(*i).second;
    + l) |3 X# P4 \( U( K
  227.       dwProgramState=AP_CONNECT;
    # v" i3 ?- p! ]) \* `+ ?. |! l
  228.       return TRUE;2 C- N. Q/ Y. a3 K5 U+ E
  229.     }
    + B6 |, a0 O# f1 J2 K4 o
  230.   }
    0 d- J( \8 h; a/ N9 j, ^
  231.   else if(bRestartUpdater==FALSE)
    " E0 P: A% U$ q* n' ^/ D  O
  232.   {- l1 A% O/ t0 Q/ c' n0 M8 B$ e
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    & L( O' c1 d  s% l
  234.     {
    # ~( d- ?3 n, t5 z) z! q  [$ ^
  235.       file=(*p).second;! o, z# P( `' b' G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())- ~( c2 A" E& z5 D6 t- w
  237.       {. [- l* G9 }. _( X4 [7 \
  238.         olds=(*p).second;
    5 \2 ]5 a1 q4 Z4 A0 U- ]. [* A
  239.         olds->vers=file->vers;9 G/ D: m+ A4 g( e  \# B0 C. [
  240.       }& S" d( l. k. t7 G9 \
  241.       else' A7 u$ n( }5 _6 M( y* \, o
  242.       {
    7 I- T6 N& S5 K% h
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' V2 ?1 [3 M8 Z7 z$ a
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ m; w* r8 _3 P: X- a
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));+ Q0 Q- {3 w' J5 R: ?1 G7 Q. B4 _$ }
  246.       }  P* O8 @3 Z  O5 [( w4 Q8 z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");* M  f6 P/ s- Y5 l& C% \2 j
  248.       sprintf(filename,"(%s)",file->file);
    ( S+ k- Y; m8 ?# Z. M
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' W! E* n6 M3 T1 u
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }4 t" ?$ _' x0 c7 m3 Y. h
  251.     }: Y* ^5 {/ V& n4 L2 D1 j
  252.     dwCurrFile++;# m/ _: v* C! o4 S6 o
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ a6 r( b% b, M8 l! L  g$ l
  254.     {, ?, b) R0 e. X# w) x+ n# j! c2 `% i0 ]
  255.       bSilentStep=FALSE;7 r# ^: A% c! a7 x2 d% ^
  256.       bCompressed=TRUE;7 M! v1 F/ P* d: g
  257.       strExtLocal.Empty();
    9 o+ ?6 L* d( B6 B/ _
  258.       strFullName=(*i).second;
    5 j4 ]4 S% W  l
  259.       dwProgramState=AP_CONNECT;) F4 q, L" h3 A1 t' j- H
  260.       return TRUE;& F# n' h! ~5 R
  261.     }
    1 I# ]2 d' t/ Q: \2 g( z
  262.     if(!bRestartUpdater)
    3 q5 X+ ^: c  @, o+ Q$ P: B! r
  263.     {( [) I& E4 L! s
  264.       int iCurrSize,iFileSize;! }& k1 n- A8 \& N8 I) R/ P
  265.       iCurrSize=0;
    : m: ?* l+ A' ?$ f; O' F
  266.       iFileSize=UpdateList2.size();3 [. w' i: }% a' `% x& L
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % |" q: H+ X! W# j6 C$ F/ z
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");! W# o) Q# e5 y- f! W: e# G
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ! y' F$ n0 q  i! [+ }- H& ]& c( v
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ |  f  D% H' o0 Q2 H; U  j( k
  271.       Fclearf(".\\update.dat");
    & c2 z4 \' I$ ~! \  k! q/ z6 ]: A) B
  272.       Fprintf(".\\update.dat","Bloodyf\n");: r) ^; o3 {; E6 ~  I
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; Y# C4 v' p: ^$ }
  274.       {1 l2 X, n; n) X2 P' ?
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())+ y2 f5 H2 `! w) f4 r* R
  276.         {
    . r" P, E( S5 d9 B3 Y, a
  277.           file=(*p).second;
    : e" f! e( }% R' c* ~  Y1 s4 p0 N
  278.           sprintf(filename,"(%s)",file->file);6 G3 X% k6 }) K
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 l" ~& ]* P( i2 V% f# }
  280.           iCurrSize++;: x5 m# F" }: d$ J
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));# t" t7 [4 _1 T) K& b+ O" p
  282.         }
    ; O% Z# l1 Q; V' a4 [
  283.       }2 H& y9 \; q0 O" j4 m
  284.       unlink(".\\update.txt");
    / a% v; }$ v0 V
  285.       unlink(".\\update.tmp");8 G4 J! w& i) \( i
  286.       Fclearf(".\\checkversion.dat");
    % Q5 F, L8 p3 }% d# @5 N' L
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' u- t" z' V4 I% B
  288.       if(UpdateLocal.size())4 X- K8 N5 a" S! D' F2 @
  289.       {
    1 H2 K2 @, F" g
  290.         UpdateLocal.clear();# D& ^+ b* c- ]& `0 e
  291.       }
    1 q( r7 a$ z( p/ P
  292.       if(UpdateFile3.size())# B  a0 z6 s* n* w6 j% s
  293.       {$ i! f3 R8 a! u* d* b, N7 |; a( Q) G
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " o! N1 F6 r$ Q* v4 ^" F, ~
  295.         {
    ; c, f  v" d% E5 U# y
  296.           file=(*p).second;
    + r, f# K" S- ?& R  l
  297.           free(file);# m4 `" Z# A) X( ~+ O
  298.         }" t$ F3 o" Z: f! A4 v) h
  299.         UpdateFile3.clear();9 t; O" G. l, m) P1 g9 G' y1 _
  300.         UpdateList3.clear();
    / ^) V. v0 U9 y+ q: e1 \, @* g$ H
  301.       }
    ; Y3 S- D0 m: }, [" Y
  302.       if(UpdateFile2.size())
    : T- J; ]  q/ z2 K+ r" o' M; o
  303.       {
    - j& }% d# A+ A& s. F+ x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); ?& W$ Q+ b1 _# t8 A7 m; }
  305.         {
    ' X7 @( p/ O4 L
  306.           file=(*p).second;$ e) W7 ~9 [& Y2 i% B( ?
  307.           free(file);, V1 a0 O9 W9 f7 F" _2 L. ~0 \8 X
  308.         }7 J+ G) q# u$ `
  309.         UpdateFile2.clear();; t1 C/ _: R3 D/ j! a
  310.         UpdateList2.clear();
    ( G' ?& D7 s) A, n% n
  311.       }
    8 @3 K  G  Z6 v( B- U
  312.       if(UpdateFile1.size())+ I( g% d6 g- X- ^8 a" m1 z" j8 l
  313.       {, S7 `0 y( [0 c+ F& C* `( W  I
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 t. ^, {& t5 b+ H
  315.         {
    . Y, k( n8 c* d
  316.           file=(*p).second;% X2 G' F7 ?  F8 c6 B7 j$ N- o
  317.           free(file);9 W6 {) q) S+ x& [
  318.         }
    ( ^- J& T" g3 h7 ~9 B
  319.         UpdateFile1.clear();
      x* Z; u9 b  `$ R
  320.         UpdateList1.clear();: }4 v( v8 L7 c3 F  g
  321.       }
    # d0 ?- h6 }4 A0 Y) s) r9 ^
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));. ?) m$ c; c: K( p3 }' P
  323.     }
    ' ^% u2 v% l; `! f% M* B6 H
  324.   }
    9 v" _& P7 q8 I
  325.   return FALSE;8 C& ?/ p: O# J! ~0 V, ~' G! @' }: {
  326. }
    ! W" z' t( E( b! t5 B
  327. 5 E0 m& c2 M7 x  Z4 u
  328. void CRevAppApp::ClearAll(void)
    ! [! @6 I0 h$ d( E" H
  329. {
    , a3 L0 G" c6 ?( g* N& O( A
  330.   LPUPDATEFILE file;
    # P( g0 t' a" S& n5 f
  331.   std::map<CString,LPUPDATEFILE>::iterator p;+ `4 B2 H) ~9 E/ Z! f! m

  332. - a9 N, q6 r5 ^8 Z- j* c
  333.   if(UpdateLocal.size())
    : s2 H# a3 w0 \# h
  334.   {
    1 e: W1 M: Q" \2 T0 C4 v
  335.     UpdateLocal.clear();
    % [: ?2 j5 i: r$ C
  336.   }
    , {, Q0 t" D' f$ w* o, L
  337.   if(UpdateFile3.size())' z7 H. u$ A3 J7 ?
  338.   {
    - a7 H  h7 W* @* W: J
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , ]9 }; `. l2 \' U( |( r! R: R  [
  340.     {
      s% O' b0 W8 M6 S  ~1 _1 k# y8 l6 ^
  341.       file=(*p).second;
    4 s$ e4 A. j1 `4 E! A
  342.       free(file);( |% R( ~% G4 y
  343.     }1 p; D  I% s4 ~" N! u
  344.     UpdateFile3.clear();% \! S- D2 d8 z  D! `- H
  345.     UpdateList3.clear();
    8 G. a6 _5 u3 C( u
  346.   }  X# r( v7 H' t$ G
  347.   if(UpdateFile2.size())
    " S0 q7 W2 j8 l" }0 y, v6 [
  348.   {
    4 G# Q1 T5 u, D5 y* v6 y% t
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - R0 L& K* V& T& F
  350.     {
    & Q% ]; R/ @- q$ ]: R; g: ^
  351.       file=(*p).second;
    6 `7 M! \; R  c1 T$ a2 t
  352.       free(file);- D! _4 X  Q' l. d3 C0 u* a
  353.     }
    " i7 E8 f7 V9 O
  354.     UpdateFile2.clear();8 |& ~# g( C& s6 x% A
  355.     UpdateList2.clear();
    7 t- K3 U4 u- S: _
  356.   }: s" d; y8 h/ H# A" I" [
  357.   if(UpdateFile1.size())
    $ B: q. A9 Q' P$ M& W1 \
  358.   {
    $ H, c: |4 u  M' l8 w3 I
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . }" E/ z4 @7 u
  360.     {
    : X7 V5 V2 `1 L3 C4 l0 B/ n
  361.       file=(*p).second;( u. c' M( D9 b4 O( s
  362.       free(file);# O! P& l( G8 v" ~  h3 a4 c6 {
  363.     }
    4 F# L9 c% [7 ]8 Q$ H: S
  364.     UpdateFile1.clear();, z; H: h% o* f6 Q# m/ J( J$ I
  365.     UpdateList1.clear();! B% D( o3 }' h2 |; z
  366.   }
    1 B- p- }8 N& d$ u! g% M% D
  367. }  
    0 {) w6 O& i2 i) t& M; B2 R- N5 ~
  368.   0 Z* I( K' |8 {0 h! H
  369. BOOL CRevAppApp::CheckLocalVersion(void)/ }& M% T& R; R3 e0 Q# Y
  370. {
    $ K5 @9 J7 `  q" [
  371.   int c;& q5 ~* o) J# P# @
  372.   LPUPDATEFILE file1,file2;, ?+ E$ ^( l% n+ ?. F( D
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;# V* g* i9 q5 S5 ?: u4 F
  374.   std::list<CString>::iterator l;
    ' v* @' l+ E, |6 ]/ [; J
  375. ; T& A4 j( O- f/ x) E
  376.   UpdateLocal.clear();
    7 }2 H5 g% _. e+ L/ Q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);) }' B+ y" s. K  A: h2 J  F& v
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);- Z! g5 X7 t7 v. q# G3 Q) N4 t3 e/ Q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    0 r$ B4 o& W0 f# O" F
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);) H. Y6 T! b- M9 Y
  381.   if(UpdateFile3.size())
    1 S3 u3 |; Q$ a
  382.   {
    ( I, O1 p+ V7 Y, [. k
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    , j3 L+ @# m3 I7 }& y
  384.     {0 ]. s$ `7 G" J  ?
  385.       file2=(LPUPDATEFILE)(*i).second;
    & Z1 v" Z% t' H7 p% z
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 h  q5 k; I- W1 o) _
  387.       {
    1 n* U+ f4 k9 M/ P0 R# o: k
  388.         file1=(LPUPDATEFILE)(*p).second;
    # g  s% M5 Z' _0 `) w
  389.         file1->vers=file2->vers;
    7 b) o% ]* v- W# Q+ S
  390.       }  @6 H0 @" [7 K) E! O: g
  391.       else
    - f9 K9 I: s) h! l
  392.       {9 G5 P# Y; p$ l: `
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & C7 {5 o0 o- M2 j
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    , e5 N5 R' j4 N7 ]
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - `) n: F- m1 U/ k0 w9 t- r, D/ h2 E
  396.       }! j# t6 K, U, i; n
  397.     }4 I+ [8 F- u2 g1 K
  398.   }6 {1 B& v$ j+ L
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 P6 d$ K5 q" P
  400.   {9 d+ S  B  h" i: Y
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()); l# L+ A* {: n: [
  402.     {( s" z, M( k' N( d) A* y2 n5 F
  403.       file2=(LPUPDATEFILE)(*i).second;+ D7 t2 j  \+ J0 j
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# t* {( n" D2 M% U  f1 b
  405.       {) R; |+ H6 x4 v! ~* ^5 X
  406.         file1=(LPUPDATEFILE)(*p).second;
    $ L3 \# c9 x& X6 w
  407.         if(file1->vers!=file2->vers)
    ) D  F7 C( Q& M& T# Y
  408.         {
    . [7 T( w  n7 D  L+ y+ G2 @8 s
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ Z" Y+ d2 T( A2 O$ {1 [- Q& e
  410.           c++;; m$ T( i. t' j$ B" W' b
  411.         }! c+ h  h; C8 K' O1 O, C/ P# B( m) C
  412.       }
    , ]5 u/ }+ [6 i( y3 V. s7 y) s
  413.       else" F% K& D' A8 {
  414.       {* [' K' L& A7 X: K
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 Y! d" W$ Z3 d
  416.         c++;
    & U9 z" I# p( R* r4 E9 E4 J
  417.       }
    6 ?) ^/ H3 D! a8 E
  418.     }, ?0 k: j5 y5 Z
  419.   }( N. O9 l+ @4 ?( H- P2 M( k$ ?! |- T
  420.   unlink(".\\DownLoad\\update.txt");. E1 U& C6 Z5 r
  421.   if(UpdateLocal.size()) return TRUE;
    # o9 R2 @6 ~$ ~9 b2 K5 @! o5 {
  422.   else                   return FALSE;
    $ k4 C( {3 {: D0 q6 T
  423. }* ^( b/ F7 l& f/ g! s5 W% N6 {4 b

  424. 8 i# o9 G, ?0 t" r( J& V. X  ~$ b
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/") |& Q; @! @# O9 [, w( {+ @- ~
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * {: j" K5 O; Y

  427. 9 X4 M9 y2 E! w5 `

  428. ) _& s/ M' K- l3 r
  429. ) D1 ]+ w: k; L/ V6 e" D
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    8 u0 C; \$ u9 s) ?# c' N- r
  431. {
    ! T7 I; p$ b( v6 y! E. n9 Y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;  H( x1 k5 e. d: W& f# ?
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    6 o% F- u$ c' ~! c, G% |8 }4 h+ J
  434.   {" [6 D( ]9 C+ q% k7 J
  435.     char szLanguage[50];- x/ y1 h! \/ {6 v  }
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 D" S( K/ e" }7 V2 G" Y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) A9 ~3 b2 J: d5 u
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 _. ^8 o! O. G2 R
  439.     else                                   m_iLanguage=ENGLISH;
    & J& e% q. i* z3 Z  c
  440.     char szRegister[100];
    3 }$ t! `. d+ J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) R- Q0 p6 }0 j! k8 T
  442.     strRegsName=szRegister;
    5 o' ~, Z5 N! `+ ^& Z
  443.     char szPatchURL[100];" Y- X* d# Y. w1 }
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) T+ }% H4 W5 P' p, n
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( R5 A! S7 W( J/ o) `
  446.   }4 `9 I" L6 {2 B7 c1 D" t4 Y5 Y7 y4 s  ]
  447.   else
    / u# b6 u6 R) I. s$ J
  448.   {
    1 u9 Q3 V# P$ Y$ M, A# z  A4 o
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& v7 w1 g, _; a/ P0 S
  450.     strRegsName=DEFAULT_REG_URL;. z4 {& i) S, e+ ~
  451.   }
    : T+ {- N' Z8 B: b2 V
  452.   if(GetFileAttributes("hosts.ini")!=-1)( q: S& F: H% L
  453.   {
    " k: q# K4 q" I' ]- J' f' Y
  454.     char szIP[50];
    9 c& r0 I* ]8 C' f' C  ~
  455.     char szDIR[300];; {0 O& S& p+ X7 ~& m4 Y
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))6 v. L2 _# w* {. i+ x3 Z$ z
  457.     {( l9 q5 N' w7 |4 K' T
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    7 k3 w) C$ U) P- I- T$ M
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");3 G, P, G' I5 Z" W4 q% M
  460.       strHostName=szIP;+ Q- a8 a  p5 X5 {- \
  461.       strHostPath.Format("/%s",szDIR);. r6 E( x% r# S* P6 Z0 W& a
  462.     }
    3 k5 V! X+ ]3 F/ k+ w# e, t
  463.     else
    " D( u+ C$ A$ x  j
  464.     {
    . i" Q6 N( {4 m) \6 J; i
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * d7 [& d& d# V6 H$ n7 n( ]  |! G" C$ ^
  466.       {
    # S* w$ G4 X. t- b! X8 x, K
  467.         char szLanguage[50];
    0 w% u, G4 N$ J+ B' ^; B  P- @" k
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; v6 e' S! u: f- X% L$ h
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * M3 H9 ]7 ~) Q0 A( \
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& D" Q! ^5 d1 K: t- p+ \* ?6 G
  471.         else                                   m_iLanguage=ENGLISH;
    5 b# W( y% `7 o7 D$ `+ Q
  472.         char szRegister[100];: w" ?: ~# b0 O4 G0 v' A4 I1 ~7 g* E
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 O* j0 M  C" V' P4 P% ~
  474.         strRegsName=szRegister;3 b9 y  K, F! h" k
  475.         char szPatchURL[100];) W/ s5 l& d: K* W2 k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " I5 \9 U- i- R$ K7 |; H2 \
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / N& v: W. i3 \" g
  478.       }
    # t) a- J" b% @
  479.       else) ^4 i5 }9 y4 X/ `+ |
  480.       {
    / V2 d$ q/ e( H9 }
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 d* F# z  k( d
  482.         strRegsName=DEFAULT_REG_URL;' Q( J# U- n& H5 y  L4 L" @; t
  483.       }" N$ K/ }+ M9 M3 d
  484.     }6 \" \" y4 Z& O$ y$ x2 q# c; E
  485.   }
    " g1 p# j% o  ^2 Q- h* R9 H( l: U
  486.   return true;
    + K% L) h  s" B% Q  t9 q0 r7 ]8 m
  487. }; T. ~$ d+ }6 f/ c: b8 b2 _/ P
  488. " X$ q. P! k1 L" y$ [1 N
  489. #include ".\ZLib\unzip.h"
    5 a& r% |+ l% W1 o  @
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" v! x$ g! w; Y  M; Z" \7 g
  491. /////////////////////////////////////////////////////////////////////////////' \& m- O, t$ U+ R5 U+ X
  492. // CRevAppApp initialization1 U7 x: q& z" r: H8 X: K
  493. - x( W$ u" y$ O5 E6 f( D
  494. BOOL CRevAppApp::InitInstance()
    ) G8 M. m2 V9 X1 x4 x
  495. {
    ' Z: u$ a; j' J: Z0 D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ) M; K1 ~6 H4 U, k+ K

  497. $ k! y2 [4 Q3 Y3 U& j1 l& x& m% C
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);- b( j, r  L" `( @- P7 J
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . o( H% J, @# ?( z7 ?$ J4 p
  500.   {
    0 g8 A) B* t  b3 }$ ^5 {
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    . X/ O8 I% r1 J
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    2 D7 U& Q1 d! o/ }& r' J
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    & |6 p/ C+ f1 E  H# V
  504.     {
    8 q7 b3 A0 K" u: ]
  505.       strcpy(szPath,szPathTarget);
    6 w' V' G' X+ X2 ]( y1 _' F
  506.       SetCurrentDirectory(szPath);; u! L& w  c/ L
  507.     }
    & ~  k7 _1 C0 [
  508.   }
    ! {9 a4 I" O# ~: W5 o
  509. #ifdef _DEBUG9 ~0 @' U  X& w( T0 i
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  Y% G4 [6 y. l& G
  511. #else
    ) t) j7 g2 u. E
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ E( ^6 e) l; S8 F% G' p. S
  513. #endif: s3 w$ `- l% \- @2 v3 ^( C
  514.   {5 j* O9 F0 W+ H/ j; f
  515.     char tempFileName[MAX_PATH];" a7 f/ B& X( D; ^. X7 ~
  516.     strcpy(tempFileName,szPathSource);$ a; H3 F( D( D7 l! }0 C
  517.     tempFileName[strlen(szPathSource)-12]=0;8 B" H. j! J" ?) E0 H
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    , B4 Z/ K3 V  `) t8 R/ H2 R  l
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);. B' S& |4 c9 ~8 S) l% l0 N
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);0 ~) a- E- w+ e$ @7 Q
  521.     return TRUE;+ `: f& x/ V, W2 j8 u
  522.   }8 M* z, S& P2 I' i$ P; ?, V
  523.   // Nuke 0118: Delete run.exe4 T3 s; M7 h( n! G$ ]+ |
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );# P8 e" }- ?) _' d: T$ g5 X! ?
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    % E: w" Z. I, x: Z  f8 a! i, |
  526.   if(!ReadCfgFile("Config.ini"))! R% Z5 I1 n& p- V) O
  527.   {
    : R7 d% \8 D+ j% B1 d( E2 ]4 L9 n1 o
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 G+ f2 z+ I5 L: ~0 r4 l& N  ]! ^
  529.     return TRUE;
    & F( X) w& F' r) u! {* |1 \; _
  530.   }# L; }$ W  R5 I0 i; P8 h# u2 Y
  531.   HANDLE mutex;
    ! J8 a7 v: `' z! b# [, |  Y9 ?
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    0 ]0 z6 E. o: c# Q( j: B3 p7 i' Q
  533.   {; m1 Z$ n, a$ x! `1 l& O; z9 A  p
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)7 T4 B% k7 d4 O4 \8 a+ w: p
  535.     {
    ! a$ v( X1 }( k- e% H) M$ o! o
  536.       CloseHandle(mutex);5 @5 ^1 B/ z0 \
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    # X5 |, L* `4 C. |
  538.       return TRUE;0 j* o* H. ]5 H3 {, p+ G1 \
  539.     }8 m  R" @5 Z* q7 E; L7 M4 w
  540.   }  9 ~( s  N2 C+ w, G- _# D
  541.   CloseHandle(mutex);
    - e/ {9 F6 [2 [7 n  J
  542. ! p% t- ^! H6 Q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);5 N6 `( i5 B9 e. J# ]

  544. " [5 n* k# e. H
  545.         AfxEnableControlContainer();3 D9 B& [& f" n9 S" r8 E4 z) B$ n
  546. 2 a% f5 u  ^! C# o
  547.   bCanUpdate=FALSE;
    5 a6 {" `: u- q- a
  548.   dwStartUpSteps=1;
    ! w* y$ R  G* l0 B7 M& n8 O# I
  549.   dwProgramState=AP_NOTHING;) N. g2 \: P- ^

  550. 6 a- W& [, c# s' M
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);# V6 {  B0 @9 s% N) _4 N

  552. 5 P8 C4 b  ?0 c
  553.         // Standard initialization
    , {/ W1 z$ b; D+ b8 Q% J
  554.         // If you are not using these features and wish to reduce the size& I' G" o% e5 Q( h. d" F
  555.         //  of your final executable, you should remove from the following# J3 b+ w6 X, L; _$ u) f
  556.         //  the specific initialization routines you do not need.
    1 I! \0 W* E0 G3 z' ?5 g4 x! @
  557. * S8 ^  \) n% S  S3 a9 ^' B
  558. #ifdef _AFXDLL  y% Y$ d3 a% e& T& G2 I" }
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + U  l5 _% j% ?1 y; Z  b
  560. #else
    5 b7 y7 B5 E7 n% k! {5 @/ b
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    4 z( t( F" r" s) ~1 g& M: H1 J1 i
  562. #endif
    % @+ h# w" A' j4 o

  563. 9 M/ q8 B; ]. }6 E0 A
  564.   dlg=new CRevAppDlg;
    + w. z4 l. U% c& b* \+ E: \5 ~# b  h
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ! d* \5 B" V/ r* C0 W, v6 r
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ; z& }! ?' S+ c
  567.   m_pMainWnd=dlg;
    & K/ U( @9 K( q8 [: l8 A

  568. 1 w+ O2 @+ C0 ?: L5 d
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    8 C1 U5 D: N; W8 k

  570. 7 k: }- t, C( C! o: M9 s
  571. //  GdiplusStartupInput gdiplusStartupInput;. d# ]" F0 |- h/ g0 j! ]- F1 w$ l" f
  572. //  ULONG_PTR gdiplusToken;( H) W! G" m. c" ?3 X
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);# `' \  I: U9 a/ `5 x% N
  574. - E; s; G0 U/ ?) V4 L% {; U
  575. //        CRevAppDlg dlg;
    6 l# A6 K: r2 E5 O
  576. //        int nResponse = dlg.DoModal();
    8 t; F5 K& P( @9 d% E& z6 k
  577. //        if (nResponse == IDOK)
    + z! d+ ?" P, F& {& x1 Y/ |
  578. //        {
    2 M( G( R, ^6 ~/ l- }
  579. //                // TODO: Place code here to handle when the dialog is2 w; y7 Q  M' K5 n" U! k' u/ U6 h
  580. //                //  dismissed with OK) m  c% K- f0 M
  581. //        }
    6 q' L: B8 z: k3 q  p' F
  582. //        else if (nResponse == IDCANCEL)
    0 C3 r% h7 h5 R% z+ I6 v
  583. //        {
    + Q. x% x: @4 @+ E
  584. //                // TODO: Place code here to handle when the dialog is
      @- {7 i0 A5 p/ X; g
  585. //                //  dismissed with Cancel
    1 T1 {5 }- x* y8 T
  586. //        }5 W/ K% B: d1 f1 x4 S5 w1 K, t% t0 P
  587. 9 k# t7 P- @* D- z3 m/ ~: W
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    8 c4 y5 H, F% A/ v+ q$ d
  589.         //  application, rather than start the application's message pump.
    2 v) U3 h* D0 w7 n7 U, P7 F
  590.         return TRUE;
    % i3 @6 \( l8 Z/ V: [$ o2 Y
  591. }
    9 ^1 D) E$ b: D  P! P' Y

  592. $ S8 J' S5 j2 W& y! @
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    4 f4 `. q2 }' }  c- R, S
  594. {, g  W0 h, c$ ^" r# P0 k
  595.   int i;8 g9 s- ]7 R; C9 }3 e! ~( f4 C- \
  596.   char *szRet;6 D, O; y1 Z" B) S! Q! b
  597. & }0 l" V0 E# s' O- X- B
  598.   if(pSource) { itoken=0; sztoken=pSource; }. j; w& s) @4 Z" P% {
  599.   if(sztoken)" k4 p( T9 W) o
  600.   {& @+ y' U  o" f# y( ^: B  T
  601.     szRet=&sztoken[itoken];
    " _4 z1 i. T0 E/ X4 e, r
  602.     while(sztoken[itoken])
    % i* C! a9 H% l' M$ }( a! q
  603.     {: @" Q+ j* w. s  q
  604.       for(i=0;i<(int)strlen(token);i++)0 W$ q4 c0 a# l; c% X
  605.       {
    9 s/ X1 ^0 x, N  a" M& D+ H; k+ R
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]): \3 ?6 D, U* u  i' h
  607.         {& Z% T4 F' T" `8 S6 O" _3 D
  608.           sztoken[itoken++]=0;
    ) S( p. k: X# K2 z
  609.           sztoken[itoken++]=0;  B* e. D6 Q/ l* ?9 P8 I, e2 N
  610.           return szRet;2 `# O% k! ?; e* c, B$ G
  611.         }
    % G& i: S$ z8 [. }' n" L' L: f
  612.       }
    : c8 w. a, Q" V1 p% W
  613.       itoken++;6 G' q, K- ?& G( O
  614.     }* E9 K7 ?3 F( d+ Y' O9 ]
  615.   }) \5 A1 q5 |* D% a$ \+ S
  616.   return NULL;7 ^* [3 V; W) i
  617. }
    " @3 W6 c& p  @3 l) {

  618. 4 e: Z, M# f3 A- Y5 i* M- O7 x" Z
  619. void ProcessProc(long Total,long Current)
    5 }8 R1 s# O/ V% Q
  620. {
    4 N$ Y& q# r/ J
  621.         MSG msg;
    / Z7 r# g3 `; u3 I( m
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    , p4 F7 B6 m3 e+ M0 X) H" J
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));9 T) E0 h! s+ c
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))" d1 _% J2 [- ~$ K1 v4 E
  625.         {
    % c9 ~1 y+ [' U' s. A, E
  626.                 if(!GetMessage(&msg,NULL,0,0))" _8 u  {: M7 W, a; O0 j$ T- ^
  627.                 {
    0 b4 |: q) w2 d  Z+ K5 J
  628.                         return;
    9 m( a: V5 Q- L8 w5 J% i+ j
  629.                 }, V/ ~! p3 E$ l. s* Z
  630.                 TranslateMessage(&msg);
    ' @+ ]* e0 r0 d9 {% K
  631.                 DispatchMessage(&msg);$ Y2 ?( o2 [$ ?* D8 b' {1 y
  632.         }       
    5 v# ]6 [5 t# A/ b' `! _% j6 H. P& e
  633. }+ h! m& M% u2 _/ l# d( e
  634. ( K6 K% u% v2 M1 B, q# e; G
  635. BOOL bFirstChar=TRUE;
    " N, a4 }' S0 Z7 l

  636. & F& X" ]5 s1 V1 i4 m
  637. BOOL CRevAppApp::OnIdle(LONG lCount)' M% E& e* P% Z# g% ^
  638. {- S7 @$ T3 x4 s6 B% e. N
  639.         // TODO: Add your specialized code here and/or call the base class! D4 @- X0 H. ^6 L
  640.   switch(dwProgramState)
    # O6 U1 B$ t. N5 g8 p% E
  641.   {8 q) d& r& W: ?- b! X
  642.   case AP_NOTHING:
    + H0 Q* T" T+ Z, G8 m) _4 c( b) u
  643.     switch(dwStartUpSteps)
    / S8 @6 x2 Q& R9 P- H
  644.     {1 D6 {2 Q# c$ a. T0 i
  645.     case 1:
    8 s/ I  v2 U7 U' G& u
  646.       {% T/ @- C. u" V) \
  647.         int i;) n& s% U" ?- s1 x. }8 k
  648.         CDC *pCDC=dlg->GetDC();6 t6 S6 v0 {1 ]/ ]3 ]' H
  649.         HDC hdcwnd=pCDC->m_hDC;
    7 c/ i! u  o' ]
  650. //        Graphics graphics(hdcwnd);" B- L8 i% v/ @1 k% ]- G' r
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    + N8 w  i' b$ R3 K( u5 E
  652. //        INT iWidth=bitmap.GetWidth();
    0 w/ R+ F6 e4 V7 y
  653. //        INT iHeight=bitmap.GetHeight();: q) d: g$ B- O9 V: r
  654. //        Color color,colorTemp;$ d( z7 U" |* b6 i$ E/ f' T
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 h& u$ m+ m# m* q5 _4 k2 m1 ^' A) C" c
  656. //        {- U* i# b! J, i  ]" ~  b3 x
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)% C2 l/ L1 b1 o& \6 ^9 ?
  658. //          {
    ; g5 u' d# J' {! {
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 B, t  `2 R  I2 H' f9 {' W/ i' E
  660. //            colorTemp.SetValue(color.MakeARGB(! L. G" p$ z( y: w
  661. //              (BYTE)(255*iColumn/iWidth),, o. v3 a+ i2 Q
  662. //              color.GetRed(),
    ! @6 v, B0 S4 {/ w
  663. //              color.GetGreen(),2 d+ W4 V" b: T# F
  664. //              color.GetBlue()));
      D/ F& k! U# ]+ ?
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);! d- y1 S$ T5 I9 o
  666. //          }1 T+ `( p1 x* }" {) c, w
  667. //        }& \7 B6 v  `4 U/ ]4 l
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);' }7 a$ m' X' Q8 I! H% l. o0 a- O
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - e- \7 w( B! l& x" o8 ~/ K, y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( q% v/ N* Z* F0 @3 h) ~) l
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 O, J& i9 G% d- H5 |3 J# D- Z
  672.         for(i=0;i<240;i+=8), V3 A# a3 n# H7 U
  673.         {; b2 a% j( W' z) w
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 V  a5 r7 x* ]) Y: i) i
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! c7 ~$ |! N( U# R1 z  Y1 O0 d7 C" F
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; S* d1 N$ W2 h4 v% e4 e# Z: d, q
  677.           Sleep(33);# a: H5 M3 j  z2 I
  678.         }
    # [5 ~/ a' ~+ H7 y
  679.         Sleep(1000);
    + U- j- X5 e3 ^1 T6 s' Z; F  h
  680.         for(i=240;i>0;i-=8)
    ' }  W- C- u' m7 F! {7 Q+ D0 ~4 E
  681.         {
    # u/ w& R( m) S1 ?8 O" M
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 o0 L/ Y$ O- E! }0 P- X5 Y" g4 k
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! [! I2 `' W# X7 t* H: X
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ |% z  Z1 l6 Q3 h
  685.           Sleep(33);+ n0 {$ T. \. T" `3 m) Z  q5 O8 i
  686.         }
    5 V2 f2 v4 n) k2 \+ _
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);0 L. V. g( O8 e
  688.         dlg->ReleaseDC(pCDC);) _# i3 W, `* x+ f/ `
  689.         DeleteDC(hdctar);  z8 ~* y8 p: ]! l% {/ @  S) q
  690.         DeleteDC(hdcsrc);
    3 l2 C" x8 c$ |0 {* x& M* S7 u
  691.         DeleteDC(hdcorg);
    ) \/ B4 A. q1 `4 I$ l* j
  692.       }
    % V, j- n. ]9 g6 h1 Z* u
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    & @" o0 N; O9 ?) j# }
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    . R* V; \& j' \. I" _& `8 ~9 Z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");" g: X: I: F# J6 v" R* }$ P  W
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");2 O# S  k  ?3 H9 p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' X3 j0 |# w3 T' j: ?9 z
  698.       if(!Dn.Connected())
    / A/ E1 `+ [& j5 a5 r/ K: Z
  699.       {" F7 C- U5 X6 `# H$ U4 V
  700.         dwTotalFiles=1;- F6 \/ ^. K( [. c
  701.         dwDownLoaded=0;8 {0 Y+ G4 t2 t( R" V
  702.         bSilentStep=TRUE;
    4 _8 m9 k7 C* J, y
  703.         bCompressed=FALSE;
    6 l: R9 L; X, M( e
  704.         strExtLocal.Empty();
    2 O! T- y8 G# d- u  |3 c
  705.         strFullName="readme.txt";
    $ O+ G* X$ ?8 \5 E: i
  706.         dwProgramState=AP_CONNECT;
    2 G' L% k" I, j) F! H& _
  707.       }8 a8 \6 h( W; }
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    0 a$ q! G' G. p9 g
  709.       dwStartUpSteps=2;7 m  J' f. o# R& L1 C- F4 R
  710.       break;7 b$ A3 P  B0 W, d9 ?3 |. l1 P) R  x
  711.     case 2:
    6 M: L1 r; [9 T! q, U" M! U# M- H& B
  712.       {
    + c7 R2 a) j7 a; y
  713.         int iEOF;
    9 C- Q0 _. Q9 z# c8 b( w  {
  714.         FILE *fp;
    - V8 ~1 ]: r# r# I$ D
  715.         char szString[512];8 I2 l( |1 G! S/ V- U% ]; k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");- U- J& d5 i! z* V
  717.         if(fp)3 B+ ~- _5 B4 Y+ k8 O$ A% ^
  718.         {
    . z9 Q2 h1 v" A( h1 S/ j$ {
  719.           do
    1 \/ d$ {* e+ y' [7 ~
  720.           {
    $ s' D' o  R' J; Y: q* Q
  721.             iEOF=fscanf(fp,"%s",szString);
    % p, a1 Y3 d; _( j
  722.             if(strlen(szString))5 q8 D+ C6 X% P% X! N/ [/ i9 C
  723.             {0 R% X1 w7 B! O9 H% ~
  724.               if(bFirstChar)
      |+ _0 r3 b3 B/ T6 w* T0 w9 c
  725.               {. W3 |3 v- f5 h3 x( T
  726.                 bFirstChar=FALSE;: b+ [# T6 X( F) ^+ e3 Q' E
  727.                 bConnectIsBig5=FALSE;
    8 e7 K6 }7 a' i  A' k6 [% K
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 r# S6 R& m7 X6 n" b
  729.               }
    ; m% A( }" ~6 w; ?* F- m, {  }
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    8 @) ~' K$ E! V  M; g& u
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ; B! V. y% O+ w% z; @
  732.               dlg->m_ListText.AddString(szString);
    & |' G* h3 T$ H2 F5 O9 E
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 u/ d- K4 m  i  r
  734.               *szString=0;
    & Z( Y# o2 T9 R2 {& G' w
  735.             }1 m  l7 p9 e9 [, ?8 O9 v
  736.           } while(iEOF!=EOF);
    / [7 M2 b9 D3 K& Y
  737.           fclose(fp);
    0 z8 P2 U2 I+ V; L
  738.           unlink(".\\DownLoad\\readme.txt");
    6 ^) K, j9 I! T) |0 E7 d$ y3 ]8 m
  739.           dwStartUpSteps=3;
    4 F5 k9 K( Z$ R! K
  740.         }5 x9 p* P, ^' e! g4 U
  741.       }
    ) B' o& M  _2 v& f' L) f
  742.       break;( R8 q3 p* ~- {% e. b9 f8 p* t
  743.     case 3:& h+ F! L1 N; R1 e6 {: m
  744.       if(!Dn.Connected())
    ; ]9 O2 Q  V/ h* y; R3 h( J
  745.       {8 X' J+ B; E% x: T7 e& s
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);' T" y2 ^6 p: _9 M/ ]
  747.         dwTotalFiles=1;- L* I2 e7 [" r- j
  748.         dwDownLoaded=0;* M. R" b! t7 s7 I- A1 o1 ]  e
  749.         bSilentStep=TRUE;
    ' S4 i, f/ M- f5 p
  750.         bCompressed=FALSE;
    : |) E8 T6 I; }( z9 b* H, I
  751.         strExtLocal.Empty();& T! ]* J0 r3 v7 h  M
  752.         strFullName="checkversion.txt";
    ! g# J, n4 }$ \  a. D3 v
  753.         dwProgramState=AP_CONNECT;+ W+ Y# f5 K( b( u) L" B1 c- Y, d! m
  754.       }7 C3 r$ p0 J- f2 {. {7 v, i
  755.       dwStartUpSteps=4;
    1 Y  _! D" q) |3 T" _" }) E& C5 V
  756.       break;6 X3 _5 |0 m! j8 d, }
  757.     case 4:
    6 ^% S  n8 }- g- g# x6 @
  758.       {
    3 m1 r# W2 U" I2 J' [
  759.         FILE *fp;
    ' ]! b; K& P" G& b+ J6 D8 r
  760.         char szString1[128];
    3 D4 S8 u1 n& @3 f; M% v# z" u4 u
  761.         char szString2[128];( _. ^! Z- c9 p& z: h" E3 T
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");/ n( N, `- Q! s0 u9 p: O
  763.         if(fp)
    # |/ A1 e3 ]- @2 Z8 }; w
  764.         {
    8 a" K& F( v4 z! C0 a+ b  P
  765.           fscanf(fp,"%s",szString1);- r( P( o; }6 ]. Z
  766.           fclose(fp);+ S: c" C1 G( N  b7 p3 }5 S
  767.           fCheckVersion=atof(szString1);! ]: k/ g- ~4 q
  768.           fp=fopen(".\\checkversion.dat","r");
    5 }( q! h/ Y, [. ]
  769.           if(fp)
    % m1 t6 I4 \7 l# x! ]- g
  770.           {
    ' h4 ?# H% ?4 z7 |+ ^$ _
  771.             fscanf(fp,"%s",szString2);
    3 u5 |+ i* B& q/ l* W
  772.             fclose(fp);1 o* `$ F5 j) t8 |8 W( |! K7 p3 t
  773.             if(atof(szString1)!=atof(szString2))5 r- z8 P( z& x4 U/ m' J5 p! C
  774.             {
    , B4 X5 K( r" e% d; f% R/ ^
  775.               if(!Dn.Connected())/ |8 y% A' u( F3 x8 ]7 m: ^/ W
  776.               {
    $ c5 d/ ]/ _2 f: W- u; k) u  M( W
  777.                 bFirstUpdate=TRUE;
    / R- K$ `6 F6 R: }5 {& Q6 g7 r
  778.                 dwTotalFiles=1;" W+ l) j! b0 O3 M+ p
  779.                 dwDownLoaded=0;
    1 R8 q2 J7 P+ y" B8 v6 m
  780.                 bSilentStep=FALSE;
    , e7 G8 z5 X  _% U; e- A1 G
  781.                 bCompressed=TRUE;
    3 c  ^6 r% J% A' a4 _1 Y
  782.                 strExtLocal=".\\DownLoad\";
    6 ~# ]3 i3 K" ?9 c( N& H
  783.                 strFullName="update.txt";& R# \: I% A4 w  o9 Y+ s
  784.                 dwProgramState=AP_CONNECT;! u8 n: b$ y4 O
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 i: E. N' ]  U( s
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 V: ^* c9 q2 z& i' j- J+ b. s' A
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 x. _$ ~# M, P; S

  788. 3 ^( G0 `: ^: s% m2 V
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 Q+ N/ T( `0 o! ]" c
  790.                 unlink(".\\DownLoad\\checkversion.txt");- A% x1 x- h( y: w$ i3 R
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ( Z' |2 O& O3 X: u2 Z& m6 S
  792.                 {6 h: C4 W- J2 O7 \! a& `
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : {1 O9 m  D+ Q8 h+ K
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    2 F9 ^" A: x* s; C# @( Q+ }
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    4 P' S/ z7 n/ ?! w. G
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + y6 [5 o, {1 F" D9 Y  F

  797. / Y, F: O: r. E& \
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: ~7 H, m, V+ M" _% z6 d
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 |% j0 G1 a  f2 i1 P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 N, }( n* _2 h& u- G7 N" b  ]% x+ ]
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( l/ g! H, {' |6 q9 t- w: H5 k1 f. k
  802.                 }. g9 C7 w% J/ z( [. ^& [" |
  803.                 dwStartUpSteps=5;
    " `0 e; C  {/ o! j5 h6 M1 z5 E/ b
  804.               }
    $ a: O9 G, _+ w$ a$ }
  805.             }8 S6 K/ P9 I6 J/ h6 Y
  806.             else
    $ w5 u; P6 Q/ A( Z
  807.             {( p  `/ x) Y: p( _
  808.               unlink(".\\DownLoad\\checkversion.txt");: h  t" H8 j' _6 k# `8 u% D
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# Q' J* I; z* x# U
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ R# M* X. v2 [- {
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    % A9 v* m8 d& V# A) R1 K( F  v

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

評分

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