CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
! t3 ]0 h7 e0 c
  1. / RevApp.cpp : Defines the class behaviors for the application.) j5 g+ o* B. t/ ?
  2. //7 \; t% ?! x" K4 I2 [5 M0 ~
  3. - H' q) B! b. P( }+ i2 z* c
  4. #include "stdafx.h"  z: ]- j8 e! O6 i3 i' |( }, y

  5. % J; h/ D! G( o2 s; i: v
  6. //#define UNICODE
    : K" H; r+ t+ `3 |
  7. //#include <gdiplus.h>
    ( s  S, j9 |" h" m
  8. //using namespace Gdiplus;
    5 C/ e( _# q4 j+ Y/ I3 ?

  9. 9 T. M/ p: G* z
  10. #include "RevApp.h"4 y' n" B2 U8 _* \, J+ ]( L% |
  11. #include "RevAppDlg.h", ~) j7 z$ o( v, A- ^" W
  12. # h: y! w3 D4 }' Q
  13. #pragma warning(disable:4786)
    2 k9 y$ p, s% c5 d5 G: k" l7 D# H3 D6 p
  14. #include <map>
    . W/ W- {+ m7 y+ Q6 T6 V$ i3 n
  15. #include <list>0 }  S0 f3 k2 P) k& C' Y
  16. #include <direct.h>; E  _  K0 d8 ^

  17. / f4 S. @$ i' }6 \
  18. #ifdef _DEBUG2 N1 ?7 X9 h! ^" Z. O; P
  19. #define new DEBUG_NEW) X6 V0 ~9 z9 N8 }1 k
  20. #undef THIS_FILE
    * \. L2 @  Q, p5 T
  21. static char THIS_FILE[] = __FILE__;
    ( \" o9 O$ z' J. v0 O
  22. #endif" n' G$ \7 p2 Z5 ]$ B. r! l
  23. #include "SkinResDef.h"$ @& S5 c/ Q& [) q# I
  24. #include "ChangeBG.h") I0 U6 T8 ^, {$ m3 e- D
  25. #include "AFXINET.H"
    4 ~6 _: h( Y+ L- r3 Q- b

  26. # q% t% y" o4 S+ H8 s
  27. #define TRADITIONAL_CHINESE 0
    : E, N. s# M9 L2 @
  28. #define SIMPLIFY_CHINESE 11 X. \: m3 d! i5 s
  29. #define ENGLISH 21 s3 x. e) _# {9 g
  30. int m_iLanguage = ENGLISH;
    + [. K% x" m2 j' |
  31. /////////////////////////////////////////////////////////////////////////////6 X. {) P" }. Y0 U* Y
  32. // CRevAppApp( _; ]$ S( ^3 }* y0 W  [" }

  33. $ g* s1 R3 Z& f" E8 R
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" ^' K- L9 X! o9 E/ R  h4 F
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    - g+ s, J5 l0 ^
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.9 g. N/ m' A5 T
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& ]: Z; }% ?% H4 p( ~( p
  38.         //}}AFX_MSG/ l2 g7 m) r2 o2 }3 F
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    6 w' ~- o" P0 P, f( z! n4 ^
  40. END_MESSAGE_MAP()2 `+ ^2 y% R- R5 ^7 v

  41. 8 D& ?( ]1 O- P. `
  42. /////////////////////////////////////////////////////////////////////////////
    6 @. ]2 E: a; `1 q1 V& F+ H5 }
  43. // CRevAppApp construction
    $ t0 i, [9 Y3 s0 d

  44. + C" Q) {2 ~- S: f9 A
  45. CRevAppApp::CRevAppApp()" Y  g$ P' T( e, A# B9 X
  46. {$ E' a; F: {+ @- {* h! U0 @2 T' R3 e
  47.         // TODO: add construction code here,
    % _' K$ O6 C, s; W7 c
  48.         // Place all significant initialization in InitInstance
    7 s' a7 \3 `2 b7 a
  49.   bDisplayIsBig5=FALSE;0 {7 D$ G& Z/ F! @
  50.   bRestartUpdater=FALSE;) N" @5 s6 P: ?  Y+ a$ o. F7 ^# _$ l
  51.   bFinishUpdated=FALSE;, ^4 F+ H( ~. q- w& b8 R
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    0 E7 D2 R; S+ K' k
  53.   InitChangeDataBig52GBKS();% _8 ^3 n, E" H/ a. p. m2 x
  54.   InitChangeDataGBKS2Big5();; J, ?# G& ^9 S# h4 W$ T5 F. B
  55.         //) X5 O3 H. R1 w! l* a* W. O
  56.         bClickRunExe = FALSE;
    / _0 M1 b# X+ T4 K( n4 x7 w- s' [
  57.         //
    : |- [! H: Z0 q! B
  58. }
    & f1 g- c' U# D5 Z" A- `# n
  59. # }6 v# F0 r! i1 K3 ?
  60. CRevAppApp::~CRevAppApp(), ]  c3 N+ `' |1 }7 A+ _
  61. {. q: A9 t2 ]" C
  62.         // TODO: add construction code here,
    ( I  |' k5 t! }
  63.         // Place all significant initialization in InitInstance
    ' ]. x: e; {: l/ G/ U! j0 t
  64.   EndChangeData();
    8 k& F8 E6 o% ^# }  L5 A: y
  65. }4 W3 i. z3 o) e6 V

  66. 1 Z. V& y, n) [4 Q4 \
  67. /////////////////////////////////////////////////////////////////////////////  i7 q0 b! f3 [6 j6 T
  68. // The one and only CRevAppApp object/ _( T7 e8 C% O. D& v
  69. $ ^+ l% ]  n8 P% _; ~
  70. CRevAppApp theApp;
    ( V+ f8 b! a; Y# \! H
  71. 8 f1 O7 J- J2 P! u+ ~4 f$ C+ V
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)- I6 M8 Q/ O7 M) \
  73. {
    5 c3 G0 X# i* }+ q
  74.   int iEOF=0;
    : h- J+ f, q9 y# q7 V9 Q; `
  75.   char szTempName[MAX_PATH];; P# l4 B: p# j# h& w3 l! F; R7 d
  76.   *szFileName=0;
    ) r) ]7 f# w" u0 y
  77.   iEOF=fscanf(fp,"%s",szTempName);' _+ F9 N% W. \7 Y& A
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')5 y: _; q  C( H! Q
  79.   {
    * Q' {2 C- `% `# L' q
  80.     strcpy(szFileName,&szTempName[1]);! J8 e9 v% a- [( }% y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    % b5 Z) ]+ u" {3 \. m) K
  82.     {
    ! w4 s! W5 }- N. I0 P- Q
  83.       iEOF=fscanf(fp,"%s",szTempName);  A! Y6 K& ?7 f
  84.       strcat(szFileName," ");( i6 n9 z; d! I! V' l* p7 }- T
  85.       strcat(szFileName,szTempName);
    5 J1 A- f) V6 B1 H: ^3 ]3 ^
  86.     }! r* V, x9 Z5 @" ~; ?
  87.     if(strlen(szFileName)>=1)
    2 ^! |3 N9 |5 I5 W: e6 s: v7 W
  88.     {
    6 S: [" [) P( j4 |
  89.       szFileName[strlen(szFileName)-1]=0;
    8 t# q. s& j+ V/ Q& o
  90.     }! y2 v: `& F! B
  91.   }5 {3 y% z( V8 W" Z7 G5 I
  92.   return szFileName;
    " y+ P) p/ p) _8 U, Q
  93. }4 p8 j, }  Z4 Z+ v4 D. f+ O

  94. , j5 B& ^) ], A  c) I
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( Q/ I0 y- l+ }- K* Y- J- M) u# N/ `
  96. {. G* \4 ~1 W# u
  97.   FILE *fp;
    4 R, g7 y) x: U! k' P
  98.   char *key=NULL;# t$ c7 O: a  l: q% m% ]$ p
  99.   char version[MAX_PATH];1 \1 j& @8 h4 h" N* y& d
  100.   LPUPDATEFILE file,olds;
    9 E/ u. G# F; [5 |* h
  101.   std::map<CString,LPUPDATEFILE>::iterator p;0 {4 O/ V) f* h

  102. 8 B( }0 X' h2 {
  103.   UpdateList.clear();
    ' J4 j5 n% \3 [, p# `4 r" |
  104.   UpdateFile.clear();: B: k  T. R* T4 `
  105.   if(GetFileAttributes(filename)==-1) return false;* `3 l; Q4 Z/ e5 z- f4 c' `' h
  106.   if(!(fp=fopen(filename,"r"))) return false;
    - u/ b# B/ i9 ~, H
  107.   fscanf(fp,"%s",version);8 K, y( F7 l- ~5 J( L
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    & w) J2 \; ]+ H3 C0 _3 y1 T
  109.   while(fscanf(fp,"%s",version)!=EOF)' M8 s0 e  i. J
  110.   {
    , h& l+ L' d7 @) ?* ~9 n& ^3 {
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . W5 @) K/ L/ k) H% |+ P
  112.     fscanf(fp,"%s",file->path);* F+ r- A1 k" O# \* R" _
  113.     ReadFileNames(fp,file->file);
    / Q0 {% W3 i0 I1 v8 @" r
  114.     strcpy(file->full,".");
    4 g$ R% u& R9 Y+ o- \1 I1 s1 p7 ]
  115.     strcat(file->full,file->path);
    6 S. f) Y7 e$ i: F; M1 j) Z
  116.     strcat(file->full,file->file);
      D4 V. Y7 ]5 E* K/ z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())* K. i! m4 [( n* b4 _$ ~  N' @
  118.     {
    ! r. U& h0 Q0 Q, G( ~" ~% m
  119.       file->vers=(float)atof(version);
    ' |2 _/ T3 W- x/ o: {) m
  120.       UpdateList.push_back(file->full);/ c- t4 H( H1 ?6 h: `* c! W: f
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
      C# {- E0 u- D
  122.     }! U4 c" M3 T3 }
  123.     else
    ! m3 c  O! ]5 n% b+ F( n* W
  124.     {" Y! C8 ^! ]' t
  125.       olds=(*p).second;( c2 C4 G% z5 j9 f, n' O
  126.       if(olds->vers<(float)atof(version))6 J- [0 R- T. c3 @  i8 L
  127.       {- P8 x7 }- s. p; Q8 Z) t- \7 |
  128.         olds->vers=(float)atof(version);
    9 X6 R6 Z; V' W! D/ @
  129.       }
    $ P1 ^- H7 ]8 L- w( Y
  130.       free(file);' m9 S3 h, u. P
  131.     }
    8 q: t3 B# b8 V" |
  132.   }
    / @' Q2 z  [& b* ]/ m
  133.   fclose(fp);- c: v$ V+ [3 b* f; B
  134.   return true;
    9 j6 a- l' a2 m) l  c' n, G
  135. }: |1 E% e* E  K& Z

  136. ' _5 U% v' Q# K1 }' x
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    " z( X: b1 y6 a1 T: L- ?
  138. {
    2 H7 Y3 }+ M) d9 g
  139.   TCHAR  szFull[MAX_PATH];: ?9 q4 t! a/ I5 b" P( u
  140.   TCHAR *token,*inter;
    2 I- V% c* R/ n! K
  141.   *szPath=0;3 n+ H4 f, l1 Q0 z% {
  142.   strcpy(szFull,szFullPath);
    % d( E; E) z( B- s, k3 X8 k. t
  143.   token=strtok(szFull,"\\/");
    9 z0 M! w2 l" e7 s( b' p
  144.   inter=token;
    & i; |+ I& T% ~+ Y2 e( ?; X
  145.   while(token=strtok(NULL,"\\/")); u9 o1 e$ z; T- \/ s# O7 E
  146.   {: K2 o2 ^. _( S  }
  147.     strcat(szPath,inter);
    * l  ^8 e7 J# l
  148.     strcat(szPath,"\");$ j! \) i$ ]/ b' r5 @7 S! y
  149.     inter=token;
    * R/ i3 F5 E5 q: C/ y. I
  150.   }
    0 [& a  N+ R2 d8 ^6 v5 u9 s
  151.   return strlen(szPath);7 r0 J* v' j# L! M' I; Z
  152. }1 f) X2 c0 ^& A6 b+ O

  153.   E2 _5 F$ X- M2 K
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ f( b- _; \+ }/ u% S
  155. {
    2 t1 a6 \- q! _
  156.   DWORD attrib=GetFileAttributes(Target);
    1 m: Q; V$ v3 `7 j  r- g3 I+ }# }
  157.   if(attrib!=-1)3 W" e" F5 |8 d; q& C5 T/ d
  158.   {
    / y5 G/ ~2 I( p. J+ a2 L$ R
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    6 |8 n8 d  P  V5 a1 n' U, j, m
  160.     {
    ' A0 v% E, j8 c8 W$ ]) d$ i
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    2 \: h9 p, y( n# |
  162.       SetFileAttributes(Target,attrib);) h$ ^0 J+ N# A( O6 q- E
  163.     }
    - s9 S6 x( h# B- b( A5 C5 Z/ @
  164.   }
    5 W) u& T6 I1 [% _8 E3 Z5 q
  165.   CopyFile(Source,Target,Erase);
      }- Y6 ?' z/ h1 M" k1 }; F
  166. }4 p# C! u& p8 k- P# V& i3 y& F
  167. ! ~' J1 b: h% x& r
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)5 h( Y0 T- \8 J
  169. {: U0 r+ o5 E/ N3 i- f6 g
  170.      FILE *fp;- n9 s0 \* u, t
  171.      char  szBuffer[8192];
      t- ~; a% [" ?
  172.   va_list  argptr;
    . a) ?+ F5 Z1 L

  173. ! s/ P3 V' j( ~5 H) m5 O. [: `
  174.         va_start(argptr,message);
    4 Z  i9 I& a" w
  175.         vsprintf(szBuffer,message,argptr);0 d! O+ V% p( M+ w2 w# o. a- x2 A
  176.         va_end(argptr);
    " L9 p9 G' P; ?% s
  177.   fp=fopen(FileName,"a");
    8 V6 d7 S7 O+ C5 k  l
  178.   if(fp)
    8 m) s, v7 O4 |# s: B! r9 Q1 v# j9 D
  179.   {
    7 H2 ^  B1 U$ {& q. O. y4 P( H4 |8 N
  180.     fprintf(fp,szBuffer);
    5 I3 B  z4 s7 F( B, s& y
  181.     fclose(fp);  o) G$ _4 ~, t
  182.           _flushall();
    ( I: R, }0 M- ~% b- @% m
  183.   }: c' e8 ~  N3 n
  184. }
    3 E) f- E$ |6 g- @6 v

  185. : C( _- C1 l0 }8 ~$ ?  J4 R5 K7 b
  186. BOOL CRevAppApp::Fclearf(char *FileName)% z) t+ h- s+ w& {
  187. {6 }, d0 q8 I( J! [; V
  188.      FILE *fp;/ F( C/ l: i$ F) L6 W
  189.     DWORD  attrib;; W" O* I( C7 t! l
  190.   attrib=GetFileAttributes(FileName);0 e, K7 V  d$ g! n+ a; N* X( d# A
  191.   if(attrib!=-1): u' a$ Z' D( I6 s# v
  192.   {
    * V! i6 W" J# ?6 a6 {& V$ z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);' q5 Z- }% Z/ }' i
  194.     if(!SetFileAttributes(FileName,attrib))
    5 p! k9 p* ]+ E( G% l7 H9 R
  195.     {
    + X  ?: x# A4 ^4 L
  196.       return FALSE;
    1 G5 w1 e0 }3 F$ R' D5 i
  197.     }
    % X: |) k3 ]$ Y
  198.   }
    2 ]6 a/ `9 f. g- O& S
  199.   fp=fopen(FileName,"wb");
    5 e3 Q& w& v' Y8 Z+ g
  200.   if(fp)6 X2 @9 o( l# v" Y
  201.   {
    ! Y' s6 l8 e6 o! v  X) z4 P, t5 x) R# [
  202.     fclose(fp);
    6 U& Q- ^- P! Y$ K
  203.   }, K' q/ T! F; Z
  204.   return TRUE;
    0 F" Z- o; V; ~% S. ~6 X
  205. }
    9 d0 X! ^! W5 x3 N

  206. 8 r' g7 c9 I5 ^
  207. BOOL CRevAppApp::UpdateLocalVersion(void). w7 I8 ~0 ?/ ~/ x
  208. {! E* v/ W* J4 v( i) v. E4 g
  209.   char filename[MAX_PATH];
    . h8 n; e' E+ x6 C" ~6 G  d  F* s8 {
  210.   LPUPDATEFILE file,olds;
    6 ~! `9 [3 i4 S
  211.   std::map<int,CString>::iterator i;4 E1 a( g+ B' C* F6 f6 `
  212.   std::map<CString,LPUPDATEFILE>::iterator p;  O2 f) K. I% ?3 z8 }
  213.   std::list<CString>::iterator l;5 @$ _, t9 z4 O% z9 O# O, I6 ]. }

  214. - b- F0 g9 {* x8 C& g: @" F9 ?
  215.   if(bFirstUpdate)
    / o4 d0 Z1 M0 |, t- _
  216.   {
    7 J( X( E) L8 `( G5 Q/ i$ A
  217.     dwCurrFile=0;
    - ?6 a/ S5 B7 n' K% S% P; W1 m
  218.     bFirstUpdate=FALSE;
    ! g: x( r7 e% V7 ~  e
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    1 s$ e3 E7 P" L& A# k
  220.     {
    , r5 D5 |4 L! `# V$ u
  221.       dwTotalFiles=UpdateLocal.size();* i- g' S$ y8 Q! Y4 u
  222.       dwDownLoaded=0;
    4 g* s7 F8 `& d" {
  223.       bSilentStep=FALSE;" q7 c2 j* z3 Q/ _' V- t8 U" z$ l
  224.       bCompressed=TRUE;
    2 O5 }5 I& K- y* c0 Q; J
  225.       strExtLocal.Empty();
    / S. s9 ?) M1 O' g7 b* ?& }4 f
  226.       strFullName=(*i).second;; v3 e: B; M' R% e' N  |
  227.       dwProgramState=AP_CONNECT;
    . \/ D$ K$ x* a6 W
  228.       return TRUE;
    / v8 j$ a2 \  E) @% J* p( S, |3 n
  229.     }
    5 F0 u2 c+ Y0 B1 {% ~
  230.   }
    , s4 D& I% B# u2 c; W4 n! U9 t5 c7 x5 e, {
  231.   else if(bRestartUpdater==FALSE)
    9 k7 m% Y7 s' v6 |
  232.   {
    ( I# W$ W5 m% D( m/ M* o6 Q; B7 B
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      n5 V9 J2 |# G) w% S$ R# F. A' A
  234.     {
    ( n( j% b$ P5 p1 i- ?5 s0 W! V
  235.       file=(*p).second;" ?, n$ }/ G% a, P  d$ ]% y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())" m# Q3 L. w2 K; f! J
  237.       {
    # ^+ B% T0 x6 O# P: ~
  238.         olds=(*p).second;
    1 r& [% i" }2 V) u# r/ m& R' w
  239.         olds->vers=file->vers;
    : E7 S. d, l( Z0 I* o: m  q1 ], j- k
  240.       }
    & J+ ^- v& k, L. Q: t
  241.       else
    # g/ d$ S* j) g- E
  242.       {$ W6 l0 j" c7 \' J. E3 o/ @
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * I* N7 y0 r0 C: V/ a* C. A
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ' J" f" v3 N" Q1 f
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));, Q: R2 e8 O- a
  246.       }; \8 S. Z  ~: g
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ' ]- f  q, M, ], p
  248.       sprintf(filename,"(%s)",file->file);6 C: r# J% e  a6 N7 v5 C
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! v! _) Z+ H' e( @  `
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }4 G5 X, y5 y/ W6 ]" a
  251.     }
    . k; N% M( p8 D( o
  252.     dwCurrFile++;# _- j3 V0 d3 c2 [- m
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 ]) S+ r8 R- l
  254.     {& f, |" M" A; ^/ E3 f
  255.       bSilentStep=FALSE;
    6 L% g* g$ {2 d- ]) O
  256.       bCompressed=TRUE;
    5 Y. \) U; m% v" Y& E" i
  257.       strExtLocal.Empty();! E! s0 t; k2 Z8 A
  258.       strFullName=(*i).second;$ P( y( B/ q* s8 _& I( y
  259.       dwProgramState=AP_CONNECT;. K5 i) d" q" A! P0 k
  260.       return TRUE;
    . h& D4 T+ ^: F) A" {; [
  261.     }. H' W0 f; g0 G2 ]* O1 i4 M
  262.     if(!bRestartUpdater)
    6 C) j" [! @3 t8 `
  263.     {
    * T) D' M+ p+ z6 ~4 d7 K% a
  264.       int iCurrSize,iFileSize;# Q& |$ T+ W1 s
  265.       iCurrSize=0;
    3 \/ a9 j2 I8 w6 g. n5 [
  266.       iFileSize=UpdateList2.size();
    ! f2 z- d: F: ^9 W
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");+ \2 m1 X9 e- }/ Q5 }
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    2 N' f- n1 g. v9 l! h6 g5 v, ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( p& Y/ Z  x9 V  D, K8 c9 K. a
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / r2 y  `( `" l( J; G, \9 D
  271.       Fclearf(".\\update.dat");4 [! E+ z- C, ~* y  G+ L$ k; v* d3 Y
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    3 w& A9 r7 a8 l; g' S8 A# K
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)" W1 {* p( N, X* s, Z# L' r$ z0 U0 ^& i
  274.       {' b0 T- f3 z9 s0 z( c
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    - K9 p% M' a' j0 D( @
  276.         {
    ; C" s; v9 @  G3 a+ }5 b3 n
  277.           file=(*p).second;
    ; l% s0 E/ s* K( y/ h
  278.           sprintf(filename,"(%s)",file->file);
    1 `* S! f) ^- n! t0 Y1 X
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 N6 b  i1 v. ~, g: U8 ?( m
  280.           iCurrSize++;0 s9 {! E) G* k2 r" o, P; O
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));* u4 _" R# ]1 M/ f) i/ O
  282.         }: E& o- t; V0 [7 T. a+ G
  283.       }
    ; O/ Z! `; |3 C/ T, `) e
  284.       unlink(".\\update.txt");
    $ `6 P4 n3 `9 p/ }+ W0 d+ x" l
  285.       unlink(".\\update.tmp");) h" `8 O# [0 E
  286.       Fclearf(".\\checkversion.dat");
    / n3 i4 k$ t! a% q! _# `) j3 e
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    % Q* l9 Q2 }) ^' g
  288.       if(UpdateLocal.size()), j1 d" J( b4 S6 N1 |3 [
  289.       {7 x6 u% ^- G4 K. I3 a
  290.         UpdateLocal.clear();
      e! _6 E* I" U& \# P' y
  291.       }
    ) M" O7 K$ s# r
  292.       if(UpdateFile3.size())
    9 Q8 ^8 J6 |9 x- W
  293.       {  i' y, D% ?, m. A; \
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( z0 w, {1 c/ `* F! v: ^
  295.         {
    & |: U0 E  F$ u: {
  296.           file=(*p).second;9 W; L7 ]; w: t- x4 l3 Q
  297.           free(file);- e. S' p+ h$ f7 E* T5 _" r& E
  298.         }
    # g( d9 @* ?3 e) t% i& y5 ~
  299.         UpdateFile3.clear();
    4 j# U' @% |# L9 k) F
  300.         UpdateList3.clear();
    5 q) E" o" [: Z3 P3 M( o
  301.       }
    0 y4 D2 l! Q0 O3 S0 {2 ~0 }
  302.       if(UpdateFile2.size()); ?1 J  A( Y9 r# }/ C: }
  303.       {% B& U2 E1 f0 X$ ~
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - l  Z1 m& w, W8 ?1 q  v- K
  305.         {
    ' ]4 }, w* E3 E, w
  306.           file=(*p).second;3 K' w) P1 ^4 x& |
  307.           free(file);
    9 f7 s3 X, b% G  d; \1 v0 I; C
  308.         }8 m0 _: K+ C2 `$ G3 Q6 d0 H
  309.         UpdateFile2.clear();6 u; O2 G0 \9 a6 @
  310.         UpdateList2.clear();
    ) t9 G: K0 M$ d. _) U$ i
  311.       }! u3 ~- s6 Q# d3 V8 }
  312.       if(UpdateFile1.size())
      k% M9 c: h9 A7 ~) o
  313.       {
    $ M) T8 E3 O; b- [
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 N" m7 C2 x3 W: U1 q; O' C0 h- z4 V
  315.         {
    & m+ \9 Q% `. Q" n2 q: |
  316.           file=(*p).second;
    ; {% M  F* \: E0 F* b5 `+ U8 ?
  317.           free(file);. N$ \5 |/ z4 R& }
  318.         }
    2 S* w* x5 t7 {* X1 o/ p  N+ F) L
  319.         UpdateFile1.clear();2 i  H8 ^1 q7 B8 v( h. t- U
  320.         UpdateList1.clear();$ e. u1 H* ?3 r$ f- ^+ V0 s
  321.       }0 N' {" }7 N  K, |4 z
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    1 `" t* Y' V0 |: P
  323.     }! R& n4 P& J9 C/ x( l$ S. D
  324.   }
    " z6 O6 M0 G8 K0 r: u6 r+ H- N6 U
  325.   return FALSE;0 f" a/ v8 l$ ?. V  V0 G6 N' e$ k
  326. }
    9 P' c) l* h* z' u( _. ^  @1 M8 r8 ]
  327. - f9 D! M! e% f  l: c/ V' P
  328. void CRevAppApp::ClearAll(void)
    3 \3 m( K6 b. S' G2 H
  329. {$ {- y4 z* e" C. y5 [1 ~* X; R* b7 ^
  330.   LPUPDATEFILE file;
    6 T: X2 \' _/ J
  331.   std::map<CString,LPUPDATEFILE>::iterator p;* B- R7 _. O2 i2 ?% s" }2 K
  332.   C( b9 h$ h8 |, H1 W% \& G1 Z; i& o) ]
  333.   if(UpdateLocal.size())
    + Z8 d3 l( r- i/ k$ [
  334.   {- _9 R: P6 y3 a$ y
  335.     UpdateLocal.clear();
    4 M& a' Z- [2 a7 L( p3 @  f: A8 y
  336.   }
    6 W) r* s* f' a5 h/ X  @
  337.   if(UpdateFile3.size())
    3 C0 s  D. A' w9 x
  338.   {4 x! |4 [* z3 o9 D
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % \9 p5 D: t3 b' B7 Z
  340.     {
    * G: I1 y9 X- A4 {/ \8 @2 |6 h, w. X4 Y
  341.       file=(*p).second;8 X0 N1 e( v* f/ i3 E. v3 R
  342.       free(file);/ y2 C" e) i; r6 v% o. E' N
  343.     }0 S- L& Z* [& t1 ]* D
  344.     UpdateFile3.clear();
    7 W7 W8 G$ W4 k7 t% x. r
  345.     UpdateList3.clear();5 u% `' N4 g7 N* s9 D, Y
  346.   }9 {% Q2 f/ M4 X, V
  347.   if(UpdateFile2.size())
    - R9 b  w6 S5 l# n! g
  348.   {
    6 s$ s% Z+ h7 V, n+ m
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* z9 P7 Y. M" H% b
  350.     {
    ' a7 E) G; ?4 u- z1 b
  351.       file=(*p).second;
    2 n: `7 J2 o  X, j/ s' A
  352.       free(file);
    % t4 t: O8 ?5 I! N6 K$ X
  353.     }: V- Y, M  }1 }/ ^. h
  354.     UpdateFile2.clear();
    1 [9 i. `% j. Z8 k+ P
  355.     UpdateList2.clear();& s5 ~) l6 g/ C  q9 S
  356.   }
    8 m, X, v$ n! F- K
  357.   if(UpdateFile1.size())" L% p0 s8 q; h& @. K9 R
  358.   {
    - D4 Q) R- i: j5 W6 k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / Z: T1 I1 W8 S1 v! x  H
  360.     {
    ' \; y2 s. Y( d1 C4 N
  361.       file=(*p).second;
    2 q5 J. m) a: `2 d
  362.       free(file);+ d$ l9 @- U- S" ~8 p" V7 P4 l
  363.     }4 g* |" r( y# ~- b7 w2 B
  364.     UpdateFile1.clear();3 i  @0 G4 A, q5 S2 j
  365.     UpdateList1.clear();
    # K" U3 f+ u% C6 {$ f: Z
  366.   }; B6 ^) @" H1 g: r# }
  367. }  ' `1 ]( O, V' j, |. X  ^1 R
  368.   8 E' \& \3 l1 n# N) Z; v- z
  369. BOOL CRevAppApp::CheckLocalVersion(void)5 c! p( T% y, E( h: m& M* p' j3 h
  370. {
    + U( `. x0 C3 m  Q
  371.   int c;$ V5 o( ?3 i" d  o
  372.   LPUPDATEFILE file1,file2;
      Z3 W+ F8 r: r' S
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    / n; D" ?* ^, m2 v4 Z+ }
  374.   std::list<CString>::iterator l;
    1 y/ |4 n6 ?  K1 B4 g. B3 T8 @0 l
  375. & p# D4 ^' b" k7 Q
  376.   UpdateLocal.clear();
      q: Y& X! o' M5 @
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);8 _3 U& z5 G/ E: [' u0 T& X# d! f# I
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);" ^( x& g0 V7 a& l# h! x( l
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    . {5 R3 V$ X0 `* |1 h
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    + Z2 _0 B7 ?9 M7 L. S. [
  381.   if(UpdateFile3.size())+ h; s+ F$ U6 o- \
  382.   {2 X/ i8 O3 l8 W. ^$ H! `
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    $ ?: x! E9 D: {# t( v7 \
  384.     {2 c% L9 ?, J$ `* A
  385.       file2=(LPUPDATEFILE)(*i).second;
    . [4 e0 i7 Z: W/ Z
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). p/ N' K1 ^0 h" o: m9 Y
  387.       {6 K* \. P5 r- ?$ M! Y7 S$ @' z
  388.         file1=(LPUPDATEFILE)(*p).second;3 n% w+ X9 q- F4 o
  389.         file1->vers=file2->vers;9 }" _; b/ n  c, W) R
  390.       }. ]! E* j! S+ \* x
  391.       else% S* ^+ Z( j* G
  392.       {$ W0 k4 ?3 e2 A  _' O& }
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , w! r' b& M, W% e, n2 I
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 c  S- n$ U& P: j# t
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));- i/ x# x9 y1 ^
  396.       }& w4 n" o9 E1 H
  397.     }  ~2 S* V4 k3 i% U
  398.   }" r7 M% C7 F" D
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 N$ ?* b9 M9 ?6 T; D2 ~5 z( ~
  400.   {0 @! M. D4 z  d2 g
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    $ p* e: Z7 f! \  m, _2 O# T1 R
  402.     {$ M" ^* }6 |' R9 q0 m0 @7 D) H
  403.       file2=(LPUPDATEFILE)(*i).second;" W) o8 x* }* Z: P2 d/ O2 r
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / J7 O0 F3 b. p" m# ]) F
  405.       {
    ) h% n0 }6 W) j" ~) [9 B% f; D0 S
  406.         file1=(LPUPDATEFILE)(*p).second;
    / F9 G. X5 ~; ?" P* D8 b$ }% Z
  407.         if(file1->vers!=file2->vers)
    ; X' v9 y" ]4 N
  408.         {7 _* U' S' ^) ~* Q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 x) t; w, k2 j0 A0 E  Z4 v  f
  410.           c++;
    % Z/ Q4 X* O: r4 {$ z8 @: p
  411.         }
    3 M' K5 _8 G$ B; a5 [
  412.       }$ a+ S6 l7 o/ Q2 G6 j$ V
  413.       else) h) J5 k9 i1 P7 N
  414.       {1 ?# z4 {4 [& @
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ B$ m. P: D2 G8 f
  416.         c++;
    : s  J/ i7 F. B
  417.       }
    " T5 X2 Q6 D" T( g
  418.     }3 K" g- b7 [- D7 Y  F' l9 J
  419.   }2 T$ P- Q% O, n
  420.   unlink(".\\DownLoad\\update.txt");
    3 k1 [: e2 i, c8 J1 x9 S
  421.   if(UpdateLocal.size()) return TRUE;
    0 Z8 V% O/ O1 y
  422.   else                   return FALSE;1 C% y& f8 c) X& O% x2 _! g
  423. }& o' L6 H: {6 S1 k/ G

  424. * H! r% z1 y% l8 e
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    + v; G/ d( ^. s6 r
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  F: i% X8 v% t5 {+ ~6 @- C

  427. , `. `+ }. z2 ~& H8 h

  428. ) T  L. W# Y1 M! f
  429. 0 ?3 I+ E" `$ k! I/ }" V7 ?6 e
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    5 W  J% n# m1 y# y  @7 T
  431. {
    # ]2 Y1 I1 k! O- D7 n( s; t
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ; w# R, `8 F, r7 c. j
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! d' @) X( P3 w
  434.   {
    9 o% |* Z' c5 O2 {3 G
  435.     char szLanguage[50];+ _# `6 i9 l" e
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) F$ K3 r. ?. q8 f
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" d  d( L( q4 ?( ?3 Y1 A9 z5 F! B
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* Z/ N% T, @5 U" C6 @, ^$ \
  439.     else                                   m_iLanguage=ENGLISH;
      J1 r& H4 L6 R3 N5 `
  440.     char szRegister[100];
    1 f) ~0 [/ [1 t1 G6 _
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- S3 Y$ @3 h. U0 n9 p! y8 O6 V, H
  442.     strRegsName=szRegister;% y) ~( d) N- C- C: Q/ ^
  443.     char szPatchURL[100];% X. A" T* _' @/ O; f
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* V: P! B/ Z2 v
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # U6 n" r% n* ~5 c
  446.   }
    2 ^) q; K' n# b/ ], k
  447.   else
    & {# R3 M( H7 q8 e
  448.   {5 C. |7 Q" ~  k$ o7 O
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 l8 u$ D- W' {2 E- Y4 f
  450.     strRegsName=DEFAULT_REG_URL;
    ) x! |" b$ m7 Y) l8 ~
  451.   }
    ) T# z2 n0 O( K3 t6 y: e) V
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    + t8 G$ ]5 s1 i9 S! C: T; W4 s
  453.   {* E. N* Q( t0 k
  454.     char szIP[50];
      i. H/ T/ ~' N) C+ U8 M
  455.     char szDIR[300];5 e3 y4 Q7 T" a1 _, I& |. V; p
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))  r) g. E1 [0 `( F+ R
  457.     {
    . X) {0 x* [- s$ q2 w  g8 ^* u
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");5 Q9 P. c7 ~) R/ Z' d" Y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");$ F( X; K4 H: O# o- j' X- f
  460.       strHostName=szIP;! n7 W8 V* W3 x5 Y" E0 b
  461.       strHostPath.Format("/%s",szDIR);
    9 ^- t. s8 @* Q/ r3 X, Q
  462.     }% R) A3 B. e& W# ]( k
  463.     else4 n) }4 h3 ?7 [! i, d2 r' w. `) r
  464.     {
    % ^) L: B, i9 Y4 s4 V9 w7 U$ X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  [: m7 y& ~0 _) {
  466.       {8 @7 l# E8 B% Y- A
  467.         char szLanguage[50];
    . |( F" D  j8 D' a6 ^
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : U* s2 |/ j8 J
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- l6 Q* \" ?5 E$ C2 e
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' J0 ~  }& N- n# j# M
  471.         else                                   m_iLanguage=ENGLISH;! \# L* a6 U: u* p) J
  472.         char szRegister[100];1 |! G9 l3 H2 H* }, D, ~
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 M9 u1 |$ \# h" P3 Z" A
  474.         strRegsName=szRegister;
    / G5 X8 y( A. l) S2 p( P. D' c
  475.         char szPatchURL[100];
    . k: U' I, v' I& w  j0 L& }
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ `+ |+ S, w8 ~" K/ A- d! \
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & W( O, Y& Y, Z# J
  478.       }
    " Y% H' r3 T6 q
  479.       else
    ' K/ c$ J+ r1 g" b' Q' [: l- g
  480.       {
    " e* p4 Z9 q7 p. q9 `
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - P* N0 R4 C+ ~
  482.         strRegsName=DEFAULT_REG_URL;
    # f. x( Q+ k- d2 E, Z' U! s
  483.       }
    , a0 b/ Z" S' b* F8 K% F
  484.     }% a5 F# w, H' x% W2 |  H
  485.   }
    7 ^; o$ f- e  D- Q4 Y# `
  486.   return true;. V; ]' Y* J; D1 U. R$ g
  487. }( ^$ B; D5 J; o- x" T
  488. ' w$ r; u; _, O: L+ {
  489. #include ".\ZLib\unzip.h"
    * N8 H% |+ N1 }- E, G! R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 a/ t& Z: _5 i8 G+ R
  491. /////////////////////////////////////////////////////////////////////////////
    ; F2 |3 u7 H0 e' N" t  j9 a( h
  492. // CRevAppApp initialization% I0 J; W$ I# m/ I( k3 h6 Q1 k

  493. , ^* l2 X: g2 \! S  ^
  494. BOOL CRevAppApp::InitInstance()
    6 E) f* q& q9 i& X1 W3 ]
  495. {2 _8 u$ x' F) ~, N1 a
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    : m5 X6 K4 Q6 r2 v- J/ P0 C' f

  497. ! t) }+ f2 n( `+ K7 i: r  e/ x
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    1 |' Z6 L+ d* D4 K
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    7 z$ x) ?8 a1 i) c3 J4 L7 k
  500.   {, n+ }. y6 r9 Z- V; {! q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    4 F: ^1 [+ b/ a- G9 p6 r# A' u5 v
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    * g' W/ _) M* o" ?, K( `( K6 _
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))4 U0 Q0 A$ W5 x2 W' z
  504.     {0 B0 w- ~$ Y, X) E
  505.       strcpy(szPath,szPathTarget);
    3 B. |' k! Q7 s* z2 L& d1 J* M
  506.       SetCurrentDirectory(szPath);( [5 h, \7 v: p
  507.     }
    9 w' i$ U4 y, ?. R4 I$ {/ Y
  508.   }( t3 Q# m- W) c9 T4 e! o
  509. #ifdef _DEBUG/ ?# _3 S( c( }( U. d6 f6 l% U
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 H3 S0 G' P1 c9 l+ x( _- i
  511. #else
    3 O8 }8 p% g# G* v) N! R; W  s7 P% ]
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 t' ^0 Z0 [$ \
  513. #endif
    - ~* I' g) Q* i8 F2 e* `
  514.   {9 U% G3 I  ]0 {+ C- f& N
  515.     char tempFileName[MAX_PATH];
    0 |' V: u. v# g8 B; B+ |
  516.     strcpy(tempFileName,szPathSource);" \; Q* l6 I* k# M5 T6 \- p
  517.     tempFileName[strlen(szPathSource)-12]=0;6 ~" _4 l+ V& ]. N6 k
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    - H5 c3 v& W4 D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);- Y) K0 C+ _; h6 I/ k$ p
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    1 f, h8 R& k/ `* K# q
  521.     return TRUE;; M! `* s, ^- t
  522.   }' h: `; v( h. w8 F
  523.   // Nuke 0118: Delete run.exe0 q( M4 T. o+ ~) B) U
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );8 j9 i; V2 H+ ]$ Q$ e
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");7 a$ |& }( o$ _- Q2 y/ P
  526.   if(!ReadCfgFile("Config.ini"))
    % B5 y9 j0 N; w' A
  527.   {; o2 D; A. |' `$ |. r- c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);, @" i0 `# W! _, K+ h
  529.     return TRUE;
    / e/ r7 ]9 g% b8 F
  530.   }. S# w# _! F: n: @
  531.   HANDLE mutex;3 g7 {7 ]& v/ h0 F
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 _& [- \9 v' l  h
  533.   {3 M4 \( `6 t7 Z/ `
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)# n: v, n5 n+ z$ E# v* p
  535.     {* T% {+ R" E9 o, t
  536.       CloseHandle(mutex);
    0 B  ^! T, h2 B6 V
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. @/ q# _: ]3 x& B4 u
  538.       return TRUE;1 I( P) N6 S) {: i3 W
  539.     }
    / `+ K, g" F1 z/ Q# j
  540.   }  
    * N( H; H/ n/ L% g/ E
  541.   CloseHandle(mutex);3 J7 S! W$ i5 d8 P
  542. ! w! u) L2 [# n; Z& I1 g
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);# e9 }/ L9 Q' H; ^" b/ D7 H

  544. 3 `( ?' U: {. F+ |. [' z
  545.         AfxEnableControlContainer();
    7 R. H3 D( i$ f

  546. . h# B- B9 k- C: I# ~+ ~) V
  547.   bCanUpdate=FALSE;$ L! X/ @; r! S
  548.   dwStartUpSteps=1;
    - @. G4 b0 ?, d5 [/ Q3 j& L
  549.   dwProgramState=AP_NOTHING;
    , z1 w  m7 R  [" [# x% B! s" L
  550. ( b" }' t1 l7 Y) g- _% {9 X
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & Z! w! h6 P5 K" [( t8 k
  552. ) x0 f. P8 b2 C1 M
  553.         // Standard initialization; t! g1 {* c/ z3 @
  554.         // If you are not using these features and wish to reduce the size
    " U0 X9 l& U% k! j
  555.         //  of your final executable, you should remove from the following8 F( R, A' `. x- D" c% |
  556.         //  the specific initialization routines you do not need.
    3 s4 {4 p6 R  _/ e" Y+ r

  557. : b8 _' S& g. X: n* {& e! O
  558. #ifdef _AFXDLL
    - h2 m2 b1 \9 w& \) D4 ?) [
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    $ l" u* X7 g3 {; R1 @2 Y) ^( I
  560. #else
    / `7 y3 K& f* e1 \; a6 W( V
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically% L- t2 j: X# u$ Z( P
  562. #endif
    4 g  m" i; p( x2 u
  563. 3 X" z6 N5 |! q- U- @" h
  564.   dlg=new CRevAppDlg;
    & e$ I6 E% U5 z, u
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    1 c0 m. J  H+ V& b% c
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    " u/ Z3 Z) a7 a  l" `! V8 [1 z! |. N
  567.   m_pMainWnd=dlg;
    2 e8 m- G+ Z8 ]: P2 W
  568. 2 `3 g! O  }" a! f2 j
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);- I  q0 s! Q; A/ W

  570. ; [$ |0 m& B0 X; c( k
  571. //  GdiplusStartupInput gdiplusStartupInput;0 \! u: f. h1 V
  572. //  ULONG_PTR gdiplusToken;* o. w; f9 }" p& I. B- p7 N" K
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    1 u; j) k& e1 K1 {: n0 c
  574. ) w6 l# [) Q) b! l$ ?+ w. N
  575. //        CRevAppDlg dlg;
    , B( _, N, {7 c" I- R
  576. //        int nResponse = dlg.DoModal();3 [& N5 o2 j9 c' t
  577. //        if (nResponse == IDOK)) k3 S# M/ H9 B, M
  578. //        {
    ( ^5 ?9 m, f* f  {
  579. //                // TODO: Place code here to handle when the dialog is! ~, L9 e7 w- f# O+ t( }9 W
  580. //                //  dismissed with OK* z0 c$ @3 s; d/ m) i) q: w2 A
  581. //        }
    & v* X! W7 \, b3 X
  582. //        else if (nResponse == IDCANCEL)# B; H4 U$ {8 L6 V! n( M! G7 z( I
  583. //        {
    2 Y7 t% ^) ?; Y8 v8 y- u& H
  584. //                // TODO: Place code here to handle when the dialog is
    ; D1 G' G: l! e
  585. //                //  dismissed with Cancel' j" o  h/ p$ t, n3 }: V/ R
  586. //        }5 t6 C3 Y3 B# N

  587. , m8 [3 A5 f& Y( o: W, J) Z: W; @
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    , ^9 b) G. C- z8 E: ^9 C6 d% Y
  589.         //  application, rather than start the application's message pump.# D; B. v0 h* L$ a5 f( W" I
  590.         return TRUE;& ]1 z: Q' L3 \1 Q- g
  591. }
    ( L+ Z0 ?! Q' D, D( x4 G

  592. 0 K" D1 U  I% A) B3 m( t
  593. char *CRevAppApp::strtok3(char *pSource,char *token)5 c: {5 G5 U$ K' f* n$ n% B3 Q5 Z+ C
  594. {
    6 ^. D) ], p' x( R+ I
  595.   int i;
    8 `( W7 A$ u! K# k
  596.   char *szRet;6 H0 T, P2 I5 T1 V

  597. : V9 m& V7 A1 d0 Z5 y
  598.   if(pSource) { itoken=0; sztoken=pSource; }9 v: |' }5 }5 b
  599.   if(sztoken)& H7 h" E6 v" o- a
  600.   {
    % ?6 M1 l: n+ ]. I& a, M
  601.     szRet=&sztoken[itoken];* I' C8 D% q1 u) M! s
  602.     while(sztoken[itoken])
    2 I1 n& k' G% }  j( ]7 r/ ]# ?6 B' ?
  603.     {
    6 Z: P  {0 a! k9 M
  604.       for(i=0;i<(int)strlen(token);i++). _+ ~; u8 C' B
  605.       {- y3 a6 f7 D0 n) M3 g) l0 b3 t
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])1 [! S1 [2 W( K' G& {
  607.         {3 n6 \$ ?7 Y% s- F  n$ Z5 t. d9 Y
  608.           sztoken[itoken++]=0;
    8 m' Q) }: L% U6 @/ A4 H( ]6 n
  609.           sztoken[itoken++]=0;" P4 J0 ?" j" r+ E4 N- n
  610.           return szRet;7 g: E5 ~8 z; ?; c7 T+ |
  611.         }
    6 M6 D5 Y. T# ?, _& ]; M* H
  612.       }+ W, q1 V$ l) ^. b0 Y+ ]
  613.       itoken++;
    + M9 s6 M( _6 _+ x" A9 x  l
  614.     }8 a( _. P. ?  ]/ J5 n3 ~1 U
  615.   }
    3 H" q: c9 x& p$ w% ]' U$ d& q
  616.   return NULL;
    - b4 O. b2 v9 K: b2 p/ v# }
  617. }
    9 `/ }# t* o- \0 {5 {3 Q0 w

  618. % @" S& {( B2 l( Q( A
  619. void ProcessProc(long Total,long Current)
    2 I% H' d1 a' `; H
  620. {
    - E( ]$ w6 l9 @( S( ~9 }
  621.         MSG msg;
    2 Z9 v' h- w, s
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ F  E' x) H$ B
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' C6 R1 ~. X& R$ U7 _1 I
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))0 N' y1 m( ?0 g- f5 W5 {! S
  625.         {
    5 H# }+ I4 G* l# y6 h2 h! Q
  626.                 if(!GetMessage(&msg,NULL,0,0))
    5 {* v$ F. B/ x, N$ n4 w( ?! e
  627.                 {! A. B2 F0 }! ]  @+ v9 T; o
  628.                         return;
    $ N# e5 n) m% k7 ~, |
  629.                 }
    8 v$ M$ s% E( c/ h+ [
  630.                 TranslateMessage(&msg);+ c: ~7 |, a  u  d2 t1 p
  631.                 DispatchMessage(&msg);
    3 F3 W2 E. L7 z
  632.         }       
    * Q! n8 H5 o( M+ w7 P
  633. }# `% ?0 @6 I# T6 i6 x! N- O1 x% P

  634.   x! t; j: K$ }( R( c
  635. BOOL bFirstChar=TRUE;' @& W  G2 A% F' w1 P) y1 L9 U

  636. . B9 C5 G& |4 @8 Q& X4 O
  637. BOOL CRevAppApp::OnIdle(LONG lCount)8 E. r( b0 c+ a# c4 q7 `1 f3 a
  638. {' [1 N9 Z, E  s% M
  639.         // TODO: Add your specialized code here and/or call the base class
    0 V; @+ z. ~3 j7 F2 D) _
  640.   switch(dwProgramState)
    9 \* |+ c$ c" ^( [6 T' ?' e- t
  641.   {
    " w1 L' j$ A+ C6 _
  642.   case AP_NOTHING:+ P2 a8 Y5 v) W# Z; P
  643.     switch(dwStartUpSteps)5 o. k' V4 K" m! R
  644.     {
    % n6 d& X; L6 \8 Z0 s9 ?. T
  645.     case 1:
    0 `$ G1 ]$ B/ i; |: x; C: d; ]
  646.       {
    7 d0 p- J  E6 _% G+ H- v
  647.         int i;7 ]' H  k5 e. r. t
  648.         CDC *pCDC=dlg->GetDC();
    ( }  R: J* [6 Z  \0 c; n8 K
  649.         HDC hdcwnd=pCDC->m_hDC;
      v2 ]! c) g3 d
  650. //        Graphics graphics(hdcwnd);) Y! H! M8 }8 w' [1 v& F  R7 {
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ) X3 U' X8 ?5 Y9 V  U
  652. //        INT iWidth=bitmap.GetWidth();  |! D. S. \9 R7 P$ m# B
  653. //        INT iHeight=bitmap.GetHeight();7 G9 p: F# Q+ o7 K$ J
  654. //        Color color,colorTemp;
    % r) F, n( z$ r1 T2 U/ u
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)# z1 j7 }( l" [4 e
  656. //        {% O0 r& W; U% d6 M, Z  @
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)0 w8 o" ~% {" ]9 j/ s
  658. //          {' q  l! D- x' ?
  659. //            bitmap.GetPixel(iColumn,iRow,&color);) d5 [( t) k8 g+ R. n5 |  |% h
  660. //            colorTemp.SetValue(color.MakeARGB(
    & h0 A7 a+ [+ G0 ?) K) i$ ?' T  w
  661. //              (BYTE)(255*iColumn/iWidth),
    ( ^7 J/ M% _0 p6 J4 l
  662. //              color.GetRed(),
    " `7 F$ G0 W, d; K% d* X  k
  663. //              color.GetGreen(),- {7 A( D/ F& j3 U/ G
  664. //              color.GetBlue()));
    + I- {$ Z# S  i8 K- x6 w7 d; n
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ( R$ A/ m# e9 H( \0 h
  666. //          }
    6 ~- o8 {  C" @- x4 R3 H  |6 t  s
  667. //        }
    % A2 l! Z" c6 h* G" g( e
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    6 N* M/ N# ]+ O2 t
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . e! {; S+ u2 _2 M8 u9 S7 ]
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");9 U  d" K% G5 X# t1 t
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , ?: m" I7 U) c- Z
  672.         for(i=0;i<240;i+=8)5 C) s" P2 K; n  v( A
  673.         {
    5 V5 [& E$ j+ q7 `4 u3 U3 Y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 ^' C0 k" R9 J
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 O) w4 B! S5 R( _% o
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 i7 W( F4 D, X1 I. \
  677.           Sleep(33);( k- s# p7 P" v' }% m
  678.         }
    $ e* R3 Q7 C2 u) |
  679.         Sleep(1000);
    " k: T" w! Z2 L- S/ L' I
  680.         for(i=240;i>0;i-=8)
    7 M/ m& e# m4 y! N/ E8 a
  681.         {
      n3 P3 F9 G+ u' j* X3 \0 s
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);8 Z2 K/ D# D+ T/ r4 S& r2 b' G
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 e! w8 p- l" Y- H0 j1 y, s' Y  R
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " n/ G2 s, A4 l# R% p" p
  685.           Sleep(33);6 x' U2 s" d0 @& b4 E& t
  686.         }8 k3 ^: E) |; a3 g
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);0 H+ X8 c6 A1 X* o' g" ]
  688.         dlg->ReleaseDC(pCDC);
    ) `$ i. V. E* F
  689.         DeleteDC(hdctar);6 {$ ]- }1 v4 F; Y5 ^
  690.         DeleteDC(hdcsrc);
    / a: d. @  i9 m1 ~
  691.         DeleteDC(hdcorg);
    + E4 y( [" C! y* u, h
  692.       }
    * I8 _" t- k! `0 q' N, f
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    , O% P$ K, [1 c' K+ |. g
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  x& \6 T$ c5 X! V( z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");: G( q8 c1 i' @0 Z3 H) }
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");& i' Q! a4 p. U7 @: _; {8 R0 _
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : R% X* F/ I6 u) n' T5 ^
  698.       if(!Dn.Connected())8 r3 t7 a$ B# u0 J
  699.       {
    $ A/ O; y/ W0 M  `2 C4 S6 D; u8 k
  700.         dwTotalFiles=1;
    & q5 {. \) @7 X) R  A
  701.         dwDownLoaded=0;6 o6 a$ ~, r0 l7 J5 A5 \/ c
  702.         bSilentStep=TRUE;
    ( {7 `) P5 o) {2 o7 l& n# b+ m) ~5 J
  703.         bCompressed=FALSE;
    1 ^6 P- Q0 |7 p. P* m! R- x
  704.         strExtLocal.Empty();
    / c/ _- ^7 r1 ~0 P% Y- n
  705.         strFullName="readme.txt";2 J9 z/ a+ [) Z0 @
  706.         dwProgramState=AP_CONNECT;
      z% W: _& u$ {( N1 y7 B
  707.       }
    6 I9 T1 d9 u& @' W
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 ]" ^' u3 }( P2 g) h
  709.       dwStartUpSteps=2;
    ; d: Z1 q$ a$ q/ P: w  B( K
  710.       break;- G3 |  S2 a# o
  711.     case 2:
    ' G+ a9 [8 l  i( z3 _) J1 s
  712.       {2 g0 a9 W' {( c( ~5 l5 N6 |
  713.         int iEOF;
    " G" i; n* S) O% [2 x6 O* w# y
  714.         FILE *fp;
    ( n: w- i3 x: m
  715.         char szString[512];
    # A; @4 q7 A8 H( W9 a6 I
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");) u5 H# T5 {  T9 l2 K
  717.         if(fp)
    . F5 N' V4 o& N6 X2 P
  718.         {
    % h/ k0 s7 I1 M
  719.           do
    , V0 o% Y0 x) V- a
  720.           {
    ; p3 ^) r1 u5 O3 G7 b3 W+ l
  721.             iEOF=fscanf(fp,"%s",szString);
    6 t+ E$ C' I) q
  722.             if(strlen(szString))6 M( y: d0 l: f5 h: D$ `6 J
  723.             {
    0 o, {& U8 f3 h7 s
  724.               if(bFirstChar)
    + a6 C& {& s( @8 Q& ^, ?
  725.               {) n, ]7 a/ f& w, l0 i$ y% {, Y! A0 f
  726.                 bFirstChar=FALSE;
    ( |8 }1 P6 [) _: w2 U# m2 A# ?- u
  727.                 bConnectIsBig5=FALSE;
    / z& t9 V# P' b/ h
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    & Z8 Y0 y" k( `* q& @# Y, d
  729.               }( R4 ?. B# `, z, h  r
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    + t5 ~2 n) @- _4 v; L% g
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    6 Q% H+ _: D8 V; l# r
  732.               dlg->m_ListText.AddString(szString);
    # `1 E9 f% k; B7 a$ F  J5 D" K
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 Q1 z0 p* @1 n9 {* \& n: z' }2 x
  734.               *szString=0;; D8 J! S( w2 x3 ~; C  L
  735.             }% P1 \8 B* D/ z
  736.           } while(iEOF!=EOF);
    . y' a$ c# [) C  x
  737.           fclose(fp);; x2 x: a0 Q, W! @) f. |9 \
  738.           unlink(".\\DownLoad\\readme.txt");
    7 x! g4 \7 K7 @9 `
  739.           dwStartUpSteps=3;" L/ L% z# Z4 |
  740.         }
    * w, R+ v6 I) n& [) w! Y* _3 U5 Y
  741.       }
    / |# }/ @0 j& Q9 K
  742.       break;  z0 S. M9 [' |
  743.     case 3:
    8 J' j1 @+ S* f* {
  744.       if(!Dn.Connected())8 I$ C1 s+ O4 i  J1 K# D
  745.       {
    - \* k+ m3 z2 \6 H" q3 b$ R
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);) T8 N/ v- d  t5 F
  747.         dwTotalFiles=1;
    2 b& s  C9 y9 S
  748.         dwDownLoaded=0;
    3 M  e' V0 v0 y7 x, t8 @8 E
  749.         bSilentStep=TRUE;: i& }* K1 e4 y; u" e; Z0 x4 R
  750.         bCompressed=FALSE;
    * Z2 z' z5 a5 ~5 o, A7 t, l0 O
  751.         strExtLocal.Empty();
    ! ^1 c' X% a3 D6 g$ F# Z# Y
  752.         strFullName="checkversion.txt";
    " [6 c3 h4 C) Y
  753.         dwProgramState=AP_CONNECT;& j  M$ ^( t9 `4 J! R$ p
  754.       }* M' G9 i& G, {
  755.       dwStartUpSteps=4;) w0 U2 w0 h: @+ z( r% S0 m& U
  756.       break;
    ' h8 U) F: j5 f5 W4 L# u
  757.     case 4:
    7 q! Z) o3 d3 e& j6 J+ m( F6 J" L
  758.       {
    : `3 L" P* K# Y- u% [/ ?
  759.         FILE *fp;
    * e/ ^( E7 }( i( D+ R* K
  760.         char szString1[128];/ Q* A, L9 U  J3 I4 }- }. N4 X
  761.         char szString2[128];
    1 E! v0 u6 l0 Z# X% n5 E
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ( [9 |/ J; t3 L, P5 {9 A2 D# C
  763.         if(fp)
    ! O: \: t/ n( l* l" C
  764.         {
    ; B7 U* Y8 u& A4 g
  765.           fscanf(fp,"%s",szString1);0 _- D' p( D& ^) n
  766.           fclose(fp);) {# T# u5 c7 ?& i3 N
  767.           fCheckVersion=atof(szString1);
    2 w5 p7 A2 ~7 N/ o* t" ^1 @; \
  768.           fp=fopen(".\\checkversion.dat","r");
    1 F  K+ r7 b+ ]
  769.           if(fp)
    8 S9 ~4 ?0 o# y. t( R  `. W
  770.           {8 u* x1 Q* Z8 u$ z
  771.             fscanf(fp,"%s",szString2);
    " }" v. p& {( g  E" x" M
  772.             fclose(fp);
    ( e: H( s# h7 A' J
  773.             if(atof(szString1)!=atof(szString2))
    2 ~" b' R6 S9 S' M+ w& |1 h
  774.             {$ ~9 B' B3 d/ K5 }
  775.               if(!Dn.Connected())9 b: J& m- f8 i$ W4 ~
  776.               {; Q: N/ C% \# u. f0 S0 `# f
  777.                 bFirstUpdate=TRUE;
    ! O3 S* {7 d' W" v
  778.                 dwTotalFiles=1;
    ; Z3 q9 ?5 R5 l
  779.                 dwDownLoaded=0;0 f4 f% t# t6 b, T! k
  780.                 bSilentStep=FALSE;
    - b. ?( Q- O$ @4 k! ~
  781.                 bCompressed=TRUE;
    : Y; ^! ]6 J( p" ^. S+ A: r
  782.                 strExtLocal=".\\DownLoad\";
    3 m% C+ J3 k! }1 o+ t+ ^( J5 c
  783.                 strFullName="update.txt";
    . j6 P( Q! b3 f" n" `7 t/ [% t
  784.                 dwProgramState=AP_CONNECT;
    , j. U$ W/ [* D# ^8 c' X
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ m& t3 c  q( @% F# q7 ?
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " ]4 v3 a  g: U0 Y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");" T6 o1 l' r; x0 B! |  ^

  788. & \: M; W) E, O% y* j$ F
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* {/ @# v/ j6 {0 y( L4 ]
  790.                 unlink(".\\DownLoad\\checkversion.txt");  w4 u6 m' r6 i
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)% V2 R8 @% K/ P" t/ v. @- X0 _% T
  792.                 {; y) }5 g. u! h* K) Z, }- k2 f
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 n" [6 ?$ l: v* W) s8 Q) m
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    # b  ]& g, v# `
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");& ^2 ~. y0 v4 [9 Z' E
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ ~+ Q) \- D3 G& `' a4 u
  797. 7 m8 l- W% j9 g, ]4 D
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 e2 i$ \. S* ]. l+ C: I/ s
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , D; y& K) b2 a& L5 r# P5 P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");, t" b) R2 y1 F6 f6 W7 M' F. N; \
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + v& L4 q8 \3 u/ \
  802.                 }6 X: Y. I' t$ S9 x2 i$ ^2 z
  803.                 dwStartUpSteps=5;
    7 x! b- N8 \3 r: c7 h$ m- r
  804.               }
    & H9 }! H$ Z1 h8 I3 B  Q$ A  ~* H
  805.             }7 U" T+ Q# w/ |
  806.             else
    . m3 }/ O2 N, g- I1 A5 u  ]
  807.             {
    2 f# D4 q1 z- D* B2 N. V" F( Y
  808.               unlink(".\\DownLoad\\checkversion.txt");
    + F1 T; y. I) G% t1 V0 d
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , {( ]* ~% s5 A8 q9 E4 R" E
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / R2 }5 P+ D2 ~
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 B  ~4 k) }, q* J2 q8 R% @

  812. " R# v: ^8 s/ b! e7 ^! c
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 ?: E$ J$ G" J: `: p+ c
  814.               dwStartUpSteps=99;9 o8 n; u3 g8 D- W0 t4 r# {
  815.               bFinishUpdated=TRUE;
    0 i- C& q% r& @, r* b8 Q, Y
  816.               bCanUpdate=TRUE;' g- x7 d% W& {+ a% Z/ x; @& T, C
  817.             }/ _- Y7 O. Y' p1 ?( s
  818.           }
    ; h4 p+ O2 K! i% G! c& r, ]* X
  819.           else
    ) w: \: E" I0 [  a
  820.           {
    " s8 l9 D9 D8 i+ f7 N2 {
  821.             if(!Dn.Connected()). r' q% _$ p/ \5 r1 V
  822.             {
    4 n! z. L: o8 x- D6 D+ _8 Z8 U" E: j
  823.               bFirstUpdate=TRUE;2 ]5 s" T1 L1 Y
  824.               dwTotalFiles=1;
    ( p4 ^$ Y' j! \* M( h2 r$ A
  825.               dwDownLoaded=0;- _1 v* d. r7 t4 q" h
  826.               bSilentStep=FALSE;
    * H6 K6 V% G' C% C( z/ ^3 s
  827.               bCompressed=TRUE;# ~. [% |% c+ z- k
  828.               strExtLocal=".\\DownLoad\";" B' u8 N* `/ A
  829.               strFullName="update.txt";
    1 y- [& L! K5 l# G7 S$ ?% P. j# \
  830.               dwProgramState=AP_CONNECT;
    ' ~6 M8 i( K; m8 R: Q  Q2 D
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; `7 A& ^" T: b* y0 d! j
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 \, H9 B2 ^9 o0 z- |
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & G- Q( x" C8 A" q- \" g, v
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : u+ N2 d% J" e8 y9 v7 a
  835.               unlink(".\\DownLoad\\checkversion.txt");4 Z* \1 i+ y+ d4 v) d9 ^( N' s
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ( k; Y; ]1 f& E
  837.               {% [- L+ R: x8 ~+ a! Q5 ?4 [
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    8 a- o  H$ C/ q' i
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # u2 ~! R5 H# j3 Z9 s9 L
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");0 p0 p) L8 R0 S6 S: q+ ~5 T, M8 ^1 {
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " I2 B* s+ y. ]0 f! r0 t6 W
  842.                 / M% R) V) e2 Q. {/ G$ K
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 H6 t% d! H+ Q4 F: x
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 X$ A7 l# S3 t  N$ T! ^
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 Z, o. u  K0 \* N0 a9 a
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 _/ i) Z' i& `, x  E
  847.               }
    0 I% g7 `# R- U+ T0 U" M1 N
  848.               dwStartUpSteps=5;
    / }- o3 d5 w' a9 b% W
  849.             }- q  H5 D: A" `
  850.           }* ?8 O) U) A- d& `' i
  851.         }/ o0 Q# Z. Z2 k
  852.         else
    , h# b# L" B9 t
  853.         {
    % h  x- g' ^9 ?  t" R/ ~
  854.           dwStartUpSteps=3;
    / J( R8 Z7 K  K7 W5 ^2 r4 Q) P, P
  855.         }" G3 _8 P% v4 T% R1 Q6 p" s
  856.       }8 n1 N5 K# w' I, v; {
  857.       break;
    : w/ H+ t! g% \5 C8 n7 q1 S" O/ ]
  858.     case 5:+ X( X9 B! J; `8 u3 @+ l0 F
  859.       {# V8 `1 C& [* ]: K4 @
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)$ F7 i+ Q( ]7 I; [( A7 d2 |9 M6 V
  861.         {3 [. y  R/ Y1 ]* P
  862.           int opt_overwrite=1;
    8 J( H1 f! e$ Q8 o3 [& c6 P
  863.           int opt_do_extract_withoutpath=0;* N/ |. K- F- ~0 M
  864.           unzFile uf=NULL;) I0 \! O5 R2 ]8 F; m) m  Y! @" X
  865. ( |; \! Y9 _, \% W5 @) u6 z
  866.           uf=unzOpen("Wsa.zip");" E7 u7 R# o. p/ \
  867.           if(uf)
    1 C- I" S$ T. D3 N- `9 k) m
  868.           {. m6 U2 F# J+ ?  T
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    % g: s/ I* F; `
  870.             unzClose(uf);
    9 h- T8 P. a& a0 I
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");) W, q0 p' p0 ^9 n2 E8 \3 T
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");# t9 U. m! q2 c( A- u; @
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    8 B5 b+ d2 S9 ]! s9 y( t
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( y5 Z8 O0 F6 _1 Z0 X2 O# H0 k: Z
  875.           }
    3 j! `$ G4 s8 H' S0 z/ X
  876.           DeleteFile("Wsa.zip" );
    1 f( k4 r& `6 `. r, w' g1 [' V* V
  877.         }3 C8 b" e" V) F* ?
  878. : g8 d/ R9 v6 V) o- E2 Y
  879.         if(CheckLocalVersion()); y6 m# y1 D# A- x
  880.         {
    * V) D- r" E/ U- E  B# \' H% n
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    8 O/ U6 E- J1 M0 T- O$ A& A
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");4 ^2 a4 v7 h( _! W0 p
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");0 j2 R+ J0 e2 R9 q
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ A* z- F$ S& S2 f8 k& Z
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    1 ^+ v* c: {3 H6 V) y, p
  886.           dwStartUpSteps=99;% M% H* E+ R5 |" G* h' h
  887.         }
    6 x4 L3 {; O% U( F+ l0 H
  888.         else. m& R1 C3 ~) U7 ?# K
  889.         {9 E, M4 u" h1 r( {, R
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + x  x' r8 i& u) D) C3 G
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    5 G( s8 O' R9 P5 u7 [
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    - z- B9 `4 d: ?- w! ?

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

- _7 H# e$ y+ n; Y5 a$ L$ Z/ W
; p- d  e& d! B

評分

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