CSUpdate.exe源代码

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

# P9 J- ~8 l' k2 ~* k
  1. / RevApp.cpp : Defines the class behaviors for the application.( I/ d5 Z0 x6 B+ ~& w3 y
  2. //
    - w( r' O7 X! v
  3. 7 R; e# D: l' `' k+ K  a4 O8 _9 t8 O
  4. #include "stdafx.h". Q' l6 I& j6 ~8 Q9 Z

  5. : G7 u* p$ L$ y1 ~  Y
  6. //#define UNICODE
    & l9 E' U0 ]9 V& O6 K2 ?0 q% A
  7. //#include <gdiplus.h>
      u- p. P. ^4 {8 V
  8. //using namespace Gdiplus;2 \4 f. `6 ~+ H# O/ Q* K; T4 `; |% X/ P' z

  9. $ ?: \0 F& i/ ]+ ]5 N
  10. #include "RevApp.h"
    ; _$ w; C3 Y; b, {- E
  11. #include "RevAppDlg.h"+ e5 j$ c  M1 Y& D/ r* {# T9 g
  12. * w! k/ Q: O6 O
  13. #pragma warning(disable:4786)
    - M) f# O# f. A2 e. G; i+ X
  14. #include <map>8 U0 Z6 T. X4 E# p, h/ M- O' Z( U
  15. #include <list>
    / u; c' Q/ u# N
  16. #include <direct.h>
    ' C) b0 q$ t) g/ S
  17. 4 v, R1 D; O7 W  j: U# B
  18. #ifdef _DEBUG
    - \* T! k( O3 q
  19. #define new DEBUG_NEW
    + t: Z- b, n; c7 r% C
  20. #undef THIS_FILE" ~6 S! E* J7 a; w- R$ l- f' s. i' [, A
  21. static char THIS_FILE[] = __FILE__;
    7 k0 C: F6 P5 I
  22. #endif) ?1 R% o' J% A/ @# Q6 Z' _
  23. #include "SkinResDef.h"; \4 B" g' n" b% G; K
  24. #include "ChangeBG.h"
    : [" F+ q, Q+ f8 P
  25. #include "AFXINET.H"+ ~/ z+ l4 r$ l8 I) a

  26. 8 i5 t5 r' w1 e# ~; n* I
  27. #define TRADITIONAL_CHINESE 0% ~# Y0 ~  \  t( X
  28. #define SIMPLIFY_CHINESE 1
    3 H8 f8 D% Q. ^7 u/ F# N
  29. #define ENGLISH 2; ]9 l7 N# B! g
  30. int m_iLanguage = ENGLISH;
    3 F8 z: l6 X5 W
  31. /////////////////////////////////////////////////////////////////////////////
    # H- H4 i1 ]7 M- y+ G7 S
  32. // CRevAppApp
    + Q( `, c& t( Q" x# B1 M8 Y
  33. $ a5 @4 i0 i8 v" L! u
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)  k5 J2 a$ y/ q' M, q; e
  35.         //{{AFX_MSG_MAP(CRevAppApp)6 _# h! b& T# |& m# t) h. _3 y
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here." j5 e6 F) ^  c
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ! H! L- w) C  y3 D/ O+ ^
  38.         //}}AFX_MSG# C/ \/ \5 S' X3 K5 b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp). \# ]# s8 u( Y8 P; i. A
  40. END_MESSAGE_MAP()7 r" L  B, ?3 r
  41.   D1 Y8 _7 h% M' J
  42. /////////////////////////////////////////////////////////////////////////////
    0 _& k; z4 |& j0 K( w
  43. // CRevAppApp construction! K6 e9 ~% p8 k
  44. 0 J- y% n3 j7 f3 ~& P
  45. CRevAppApp::CRevAppApp()$ G  z  ^3 _( s
  46. {
    ! x) P3 s3 }% X. O+ E
  47.         // TODO: add construction code here,
    - ]- Y  |% o' `0 m2 S& \
  48.         // Place all significant initialization in InitInstance: U! B6 K6 S5 X" i1 ?, \, B
  49.   bDisplayIsBig5=FALSE;% k7 B% Z  d& ^* I
  50.   bRestartUpdater=FALSE;
    8 e8 g5 e4 Z7 ~1 c0 b8 U
  51.   bFinishUpdated=FALSE;" n$ ^5 W, A& i
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    0 W' M, \9 e$ w( G
  53.   InitChangeDataBig52GBKS();& U. k: f  X2 [  i; A  Y( i
  54.   InitChangeDataGBKS2Big5();! W8 J+ e) U( F% o$ p
  55.         //
    ( a5 N" p! t0 n. O" a1 f& I$ |6 F
  56.         bClickRunExe = FALSE;
    ) A: `9 o; Y. B, U' l0 g$ @; v
  57.         //9 s7 H4 Z- s/ L: H  @
  58. }4 a3 x! [7 u; C2 O2 S' u

  59. ( u1 t4 v' c" p2 y: u
  60. CRevAppApp::~CRevAppApp()
    ; A! m+ ]% }$ D' ]- J" E9 ^/ V( R# y
  61. {+ r* o# w$ h$ g" t/ n8 A
  62.         // TODO: add construction code here,
    6 g  \& Y. q5 N6 p9 g
  63.         // Place all significant initialization in InitInstance
    5 F+ n9 P/ ^+ C. c9 G' @8 p
  64.   EndChangeData();
    . N, G- I8 D" p7 O- @0 H' x
  65. }
    & h3 t/ B- l+ h# A3 u3 O

  66. 3 z* |7 d% ^" |/ w* U1 P" w
  67. /////////////////////////////////////////////////////////////////////////////
    3 Y( K& v6 r6 J+ W/ d& Z* `
  68. // The one and only CRevAppApp object: A: B3 Q) z  H; ~# a/ J
  69. 6 j! }3 l7 z! J- L4 b/ G- ^
  70. CRevAppApp theApp;7 G7 g/ F; u' z

  71. ( i% c# w0 v- J7 w% A4 D
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)" i7 t6 v7 b: {1 L2 o2 p' i, y
  73. {7 |. [- i& I  b- @9 _
  74.   int iEOF=0;
    % o% n6 A! O# A4 b& h
  75.   char szTempName[MAX_PATH];
    9 I0 P4 I: ~) S) P9 p
  76.   *szFileName=0;3 i5 l8 _6 S& g  K* O
  77.   iEOF=fscanf(fp,"%s",szTempName);3 H3 e7 R2 T' |( {+ W- P1 R* g
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')9 a( o+ O4 u0 K6 o" `5 c
  79.   {
    % l. N( ?6 [: P* v9 K; r, }$ g
  80.     strcpy(szFileName,&szTempName[1]);7 x4 d0 I9 {2 x5 `0 Y' v) E
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)  i; a8 ?, \  _/ l' J
  82.     {
    * q6 {9 I% J9 Q  g7 v% H* K
  83.       iEOF=fscanf(fp,"%s",szTempName);" X4 F& N2 V8 x; [2 D
  84.       strcat(szFileName," ");& C5 q3 I! r6 G4 _* U
  85.       strcat(szFileName,szTempName);  j5 R: I( c0 R4 k% ]2 ^4 I2 l! q
  86.     }
    3 k2 S! j" V" E( Q, f! C
  87.     if(strlen(szFileName)>=1)
    # w' f; y6 y0 i; f/ C7 B
  88.     {  Y8 n9 H+ D/ T0 i6 u
  89.       szFileName[strlen(szFileName)-1]=0;
    4 n7 M: w; A9 R- e) S
  90.     }: ?& s( v' V" ^! `
  91.   }
    % U, W  J$ S" E: K# {8 Z
  92.   return szFileName;" B  h3 c4 Z  R  u) p* w8 r( M
  93. }- R6 N4 w- @! \" ?: Z' M# K
  94. $ [" |: [' n+ C/ G8 `; ]3 Q' R
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    $ b5 n2 ^6 b- E- R9 @; m( ^
  96. {
    0 R! r+ d! v7 q6 x* d4 d' W
  97.   FILE *fp;
    , R. `5 z2 O: v$ U* z( y- T
  98.   char *key=NULL;
    ( W/ c2 f: F! h5 K' J
  99.   char version[MAX_PATH];4 j, B/ x5 r# p/ w( T" i9 R+ b2 T
  100.   LPUPDATEFILE file,olds;3 H2 T, [0 N$ s. @% B& W
  101.   std::map<CString,LPUPDATEFILE>::iterator p;) B2 m8 A: q" D* D9 b7 U2 i. ], J

  102. " B# J, L( _) Z" e( [7 r
  103.   UpdateList.clear();
    ' V! x* ~. |8 q8 r/ x6 F; K# [
  104.   UpdateFile.clear();
    & `4 p8 H& R+ f; S  n
  105.   if(GetFileAttributes(filename)==-1) return false;
    9 A/ o4 r$ k- M$ ^
  106.   if(!(fp=fopen(filename,"r"))) return false;
    . l4 {4 c; }2 H& P
  107.   fscanf(fp,"%s",version);1 Y8 F8 N/ a+ G) U' x0 r
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ; \8 x0 ]! s+ j8 \. n: O' H. h
  109.   while(fscanf(fp,"%s",version)!=EOF)3 Y- [& u; X# F0 v5 h* q: m
  110.   {
    # L# \& Y% Y+ l9 M7 _: H- A
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / s1 _( D# Q7 n" r/ `
  112.     fscanf(fp,"%s",file->path);/ E$ L% j; d0 k! Y. ?& @5 l& _% [
  113.     ReadFileNames(fp,file->file);3 G7 S9 i6 J2 ]$ p7 {
  114.     strcpy(file->full,".");
    0 }$ i/ G, l/ i
  115.     strcat(file->full,file->path);3 U" t% l: p! [- v
  116.     strcat(file->full,file->file);
    ; K/ V. b, R& t
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())0 L& T9 z+ p* f: }! p
  118.     {
    4 u& g9 W7 r6 l! z' l! r
  119.       file->vers=(float)atof(version);
    / Q- u4 q" D' r6 e& _, h
  120.       UpdateList.push_back(file->full);
    + \" d. ^2 F) k+ Z& ]4 ]  u
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));% H4 Z7 I1 e1 T# j
  122.     }
    / H+ ~9 b0 u* _
  123.     else1 A, w% H) t* B0 W! Q/ {$ l& M" H  u, Q
  124.     {& G" }% @& Z0 e
  125.       olds=(*p).second;4 G# t  g+ v1 S0 a! [) ]
  126.       if(olds->vers<(float)atof(version))2 P0 ~4 a3 _- V
  127.       {8 \* W6 w2 F: }
  128.         olds->vers=(float)atof(version);
    5 |0 e: |  N, k4 I  W2 P9 r
  129.       }) K' J5 Z2 v8 ]" _: M/ h  W( l
  130.       free(file);& U" `# D8 O9 `! u
  131.     }
    - ^. ^: n. c- R* ~8 k) k, X2 q0 i% r
  132.   }
    6 `+ d  @% c$ [4 f  u
  133.   fclose(fp);6 L% T, l2 g4 K" ^* H! o8 e
  134.   return true;  @8 m) J5 q# C. U5 V$ Y( K
  135. }* D# c( j* J5 Y9 C$ N
  136. 6 N; Q: }' s! s; z: e! R# u
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath). I3 N  p7 u% A& t+ y: C& `% D
  138. {6 d. p* _! U5 W! k5 s1 g; Z5 x7 a. d  X
  139.   TCHAR  szFull[MAX_PATH];2 |1 `+ x+ Z' U: f8 M. {" H
  140.   TCHAR *token,*inter;/ j/ j5 w5 z% |9 E0 Y
  141.   *szPath=0;+ p& Q3 [+ ?: d0 H9 c' b
  142.   strcpy(szFull,szFullPath);" O$ C6 }; [' m6 Y9 m
  143.   token=strtok(szFull,"\\/");9 P5 B$ F* J, S/ ~, m0 Y5 {( {
  144.   inter=token;. ]- {" P0 m! ]3 C
  145.   while(token=strtok(NULL,"\\/"))# W) g# y( k7 K0 v
  146.   {
    + k' o9 N. A/ i7 ?0 _7 b
  147.     strcat(szPath,inter);5 W1 K6 C! D9 e1 r
  148.     strcat(szPath,"\");5 h  C# D% i% _. u& I* L, w
  149.     inter=token;
      Q* V! \7 D# Q& S! H6 ^- \
  150.   }
    7 ]( b9 i7 [8 B) L$ b0 q, @* G
  151.   return strlen(szPath);
    # N6 K% e  k+ |% M+ \& G* m
  152. }
    0 E. a7 |4 @  O+ }) i1 O

  153. 1 O# z# h' a2 \+ @
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) F1 ]0 a/ l8 N" }, `* [  c
  155. {
    ! c- d9 Z4 g6 K, j$ U4 p
  156.   DWORD attrib=GetFileAttributes(Target);
    * a6 s( ^1 J! Q9 T+ ]
  157.   if(attrib!=-1)
    ( ^. W7 |3 E3 C& {* u% J
  158.   {6 X% s/ q% ^/ {/ p. M: ~
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))* S9 ], F5 T5 V: u0 s/ `; y
  160.     {
    ( J8 L; N* h: T3 M/ S& S
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    2 R9 H) v( f" Q6 n9 `5 a% k' o
  162.       SetFileAttributes(Target,attrib);
    * K3 I# X- ~3 O4 F$ j. R' j
  163.     }' w7 w6 d: [+ T; x$ l# G
  164.   }
    $ @6 T1 a. ]5 h
  165.   CopyFile(Source,Target,Erase);8 R" F) Y7 f# `7 O4 {8 N
  166. }
    ! P4 W5 l; d4 X  C. C$ {" y, E+ u

  167. 9 `* h6 R* a  w2 d$ p+ q  w' [
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)( P5 j' s' D. W  z, \4 n* l
  169. {6 |4 i, J$ v8 B( ?* |! Q
  170.      FILE *fp;
    % U; V( G1 z6 R
  171.      char  szBuffer[8192];
    ) M) m1 B) S; I+ g( @
  172.   va_list  argptr;
    * O) _' c; c9 O. s0 P

  173. & v7 t; I. y5 }# Q4 Q: e2 Q. ]
  174.         va_start(argptr,message);
    7 C5 G( W1 Q( V. g& V* A
  175.         vsprintf(szBuffer,message,argptr);% U2 N) z' N4 A. J) s
  176.         va_end(argptr);$ X( ]/ `+ P, m( O" t' t
  177.   fp=fopen(FileName,"a");6 {, f$ A" z1 F8 e% u+ z4 g. `
  178.   if(fp)
    * f$ N" b+ j# d" T' g1 F: C
  179.   {
    * @7 O! }. C+ G1 k" T5 q3 L
  180.     fprintf(fp,szBuffer);/ y1 R: p' a) t* W1 {: X  n
  181.     fclose(fp);
    # @+ e# o' z1 J/ f. T! S
  182.           _flushall();
    2 x' C0 x; j! ~
  183.   }
    - J- a' Q5 }2 }4 W
  184. }! U8 B3 O! W  m- N: V0 {2 @

  185. : x. K: ~, o( M3 T7 z
  186. BOOL CRevAppApp::Fclearf(char *FileName); F: f# @2 v/ y# k/ \4 c: R
  187. {
    6 Z% G; M. p* V' M, Y9 m# E
  188.      FILE *fp;
    6 {% f3 b. [8 E4 g# Y
  189.     DWORD  attrib;
      a+ f2 m' \# Z
  190.   attrib=GetFileAttributes(FileName);
    % w# {# ], G7 J; m+ F
  191.   if(attrib!=-1)
    ) \  n8 X3 e2 p  _5 v' i
  192.   {9 J$ T* x) p; N8 V* M, Y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: g# c) j1 ^' U
  194.     if(!SetFileAttributes(FileName,attrib))
    / b) z# Q, q; b5 j7 v: u- c
  195.     {
    % n+ M2 N6 r" Q' {0 W6 q
  196.       return FALSE;6 y/ ^7 D. c8 X0 p. ]  P6 E, {# R
  197.     }% m8 r+ R4 F7 ~
  198.   }
    ' ~+ E9 S1 ?" t7 M
  199.   fp=fopen(FileName,"wb");  d$ E7 I" F  {, E, K: G  e: i9 {  n
  200.   if(fp)
    . ^3 b' T- w7 ^
  201.   {
    " B5 F" k2 ^8 l
  202.     fclose(fp);
    - _9 K4 l: }* Q! T* }2 F
  203.   }
    ( T1 _3 n/ u& Q" P- T/ G9 y
  204.   return TRUE;
    1 S0 r9 z9 j- i1 _, t
  205. }
    " c* a* ?+ y3 F

  206. ! O; `, F7 t; q& F
  207. BOOL CRevAppApp::UpdateLocalVersion(void)" ~5 Y, s" m, E- W
  208. {+ E" }5 _- i: }4 h
  209.   char filename[MAX_PATH];
    $ a) \: Y1 l* x) V3 Z/ w& U; G7 Q, J
  210.   LPUPDATEFILE file,olds;
    3 W( t( Y0 B" `3 _3 E% n) q  W+ T
  211.   std::map<int,CString>::iterator i;
    3 X7 W9 E- b8 ~6 A, s4 o
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    % A' F8 |+ \1 k4 r
  213.   std::list<CString>::iterator l;, a2 X) a7 b5 X4 d# P& G$ L
  214. % k7 Y' ]! ^7 a- [+ o( Y$ m
  215.   if(bFirstUpdate)+ T% s) X2 P4 j9 ~
  216.   {- J- C2 i# @3 F0 l
  217.     dwCurrFile=0;) c6 g8 s$ e9 w6 |$ s
  218.     bFirstUpdate=FALSE;
    + D) ^; P. W5 s" U4 ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) R  I. u1 I& J9 {1 g
  220.     {
    % H' r# A3 K( I0 a2 |
  221.       dwTotalFiles=UpdateLocal.size();
      ~4 W' Y' w$ X% v$ c( X9 s+ r
  222.       dwDownLoaded=0;# ^7 l; i" f  F. U
  223.       bSilentStep=FALSE;; |! m2 k" k; |5 T! @
  224.       bCompressed=TRUE;& s; x, [3 a& |* X! \' ]- V
  225.       strExtLocal.Empty();+ C3 Z* B4 q" ]  R& ^1 |1 D
  226.       strFullName=(*i).second;$ |; @* o1 ?. |% {, v
  227.       dwProgramState=AP_CONNECT;8 ^( w) c, u2 _# ]
  228.       return TRUE;6 a8 s# Y$ T1 i1 L7 \
  229.     }
    * w- W; S/ c! s
  230.   }! I; c/ J# ~2 t
  231.   else if(bRestartUpdater==FALSE)
    # Q; [9 u' V& @6 X
  232.   {
    7 v6 G5 |/ Y9 C2 W" p! p' W( ]2 b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())8 V3 w" M2 M% t& u* j
  234.     {# O9 \5 U* X% ]( K* P
  235.       file=(*p).second;9 i( ]/ Y7 Z3 v* J  v7 r
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())2 O' e) K7 j' }% N: C) T$ D5 B
  237.       {6 I- O. H, L! }- H( e/ d, i
  238.         olds=(*p).second;
    ( N: G( M7 Z, z- x3 S: ]
  239.         olds->vers=file->vers;
    / _" T/ s  J8 W. J+ d2 Y# f
  240.       }
      t7 _8 x/ D! V# F
  241.       else
    - b0 F1 _- ~/ Y7 j+ y
  242.       {
    # c. i, r* P' p& N" ^$ t  v# `# `
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 |6 \0 Y1 H4 w" Z7 Q( F
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    & D6 S- A0 V) b  B, c( n7 W9 v3 K3 V
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));4 s; P& @) s2 h3 |
  246.       }
    # z6 v" S2 ~# J
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    & _$ d, M+ t$ N& i& w
  248.       sprintf(filename,"(%s)",file->file);
    2 d6 \0 j& M! K1 U; w& ^
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' K* w0 e6 y7 _3 L. K! S' p& M
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    8 o( [' F$ o9 [/ g, K
  251.     }
    $ j) y1 `5 _, e
  252.     dwCurrFile++;3 }# |0 v: m2 E( F
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . d% t& A# w( t. A- a" e
  254.     {
    2 B, Y$ a6 l0 _( ~! T% I0 D
  255.       bSilentStep=FALSE;/ w- N0 [2 A5 d3 s
  256.       bCompressed=TRUE;6 e- {# g; Q' Y: E
  257.       strExtLocal.Empty();
    / q1 b( a7 H1 ]" u! x& Q5 d
  258.       strFullName=(*i).second;
    4 y* x2 h$ m( r( d: _7 P2 h8 o
  259.       dwProgramState=AP_CONNECT;
    ! u9 {- R; N+ _6 O
  260.       return TRUE;$ u3 S0 Q' T- r* G6 S
  261.     }
      i6 h" X& c1 @) }" a- \' N+ k
  262.     if(!bRestartUpdater)* n( M3 t; `9 T
  263.     {
    / b6 N: L7 h9 x( I
  264.       int iCurrSize,iFileSize;, @: t- z) W8 f2 b/ O; b* c
  265.       iCurrSize=0;( T  d# g. \1 \# I" j7 L( i
  266.       iFileSize=UpdateList2.size();
    ! ^$ s$ _9 B# h. R( C1 }4 b
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");: ~1 m; Z/ S1 }* a" _
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");7 T, P7 n: c( e$ i% V
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    % g/ N7 T6 ^( \: a
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% o9 X( ~, c( k$ b( D
  271.       Fclearf(".\\update.dat");
    , l$ |7 ]$ b. p0 Q, C
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    : Q. D& \/ J) U/ a8 t
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , w* W( d% ~- E0 U
  274.       {7 P: G% g; a  H2 X
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())$ i# z/ I1 K! u- ~: h- f7 {$ ]
  276.         {
    & a! k) ^! K8 Z8 e8 K( F6 L
  277.           file=(*p).second;5 ^$ w. g6 u9 ]/ N
  278.           sprintf(filename,"(%s)",file->file);
    2 W3 }% N/ I, v; u- F3 h9 H/ K
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, N/ v; A  j; ]. V% ~
  280.           iCurrSize++;* @, o- E- ~; R8 c8 D. I
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: v" Y5 a0 U( b5 o/ X% v, [* w& _
  282.         }
    ; A% y" T. D& O- L, D3 D. {4 B' b
  283.       }
    3 J. ^  Y# B6 ?- n) c- X& v
  284.       unlink(".\\update.txt");* N! q7 h9 _0 {. [
  285.       unlink(".\\update.tmp");$ h: \0 N) {6 m/ z
  286.       Fclearf(".\\checkversion.dat");
    ( t3 ]. h+ x& A9 X# [  h6 `' f
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);! X9 i" A. a8 V! q. S* o5 ?- a
  288.       if(UpdateLocal.size())% ]$ q9 g- w5 n  ]9 E# W
  289.       {, A" P- H! a  w; V6 V: P6 _
  290.         UpdateLocal.clear();
    2 I4 k$ Q( ]0 j) F
  291.       }- L  v, a. V4 N& z
  292.       if(UpdateFile3.size()), Q/ S( s9 C5 j+ G" [
  293.       {
    2 v, s% T  B" S: z* K
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 L4 `7 ?  n3 f8 E1 e3 G' e. `1 c
  295.         {* Z% N# Y& W+ k
  296.           file=(*p).second;9 _! W' m) B+ G" k8 a
  297.           free(file);
    ' c' `+ v5 P/ l: h. D' p
  298.         }6 C2 K; y3 m2 ]% E: w# h) W% S
  299.         UpdateFile3.clear();
    0 i) ^8 H7 _6 q. V- |+ {$ |
  300.         UpdateList3.clear();/ Y4 w! `9 g) V$ ]7 r
  301.       }/ L! \0 Y3 F+ }
  302.       if(UpdateFile2.size())4 g0 v4 J7 R" l/ L% }( P
  303.       {
    $ k, g2 j0 G- q0 M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : U7 O2 K  e3 _  `7 `
  305.         {$ R$ X5 C1 Y4 Q6 b
  306.           file=(*p).second;0 p' e3 x2 }, b. V" _' W( h' |8 p, T
  307.           free(file);! Y6 Y$ ~, U* y: L
  308.         }( I" p: G+ A8 C& m$ V3 T/ i
  309.         UpdateFile2.clear();/ g5 t- y4 c7 T0 n& F# p
  310.         UpdateList2.clear();! o6 [# n+ K' l( r
  311.       }8 G- {6 A  D; Q# g
  312.       if(UpdateFile1.size())- H  m0 L4 r- L1 M
  313.       {  {# a1 n0 o  G) c4 |
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)8 V' x+ H; i5 g( F* `1 {" O
  315.         {' L" d* ^' W1 l) S
  316.           file=(*p).second;
    ! K! R3 J4 s8 B. B
  317.           free(file);
    , J' D+ C. m5 L4 ]' A
  318.         }
    1 t5 K5 S! a. n0 U; _) V, a! ]
  319.         UpdateFile1.clear();
    + Y1 f5 S; R$ b2 J* \% ^1 W" a
  320.         UpdateList1.clear();! Q. }7 i. q: @6 J; j
  321.       }
    : [' A( U: ]( Y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % ^' e/ P/ V+ N  {0 o
  323.     }
    - \6 O+ v! C  }* j
  324.   }
    1 I& M# R+ C5 m! G+ [
  325.   return FALSE;, d- S$ L/ G+ l3 p# F5 p9 i
  326. }+ o2 O/ S4 _( L1 Y: x

  327. 0 B. u" C$ l$ q. e( E' H( ~
  328. void CRevAppApp::ClearAll(void)* y3 K, J1 p4 \! o% \
  329. {
      |6 D6 j  {1 B' m6 h, i
  330.   LPUPDATEFILE file;7 p2 e* r3 d+ B2 N. h" Y5 b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;& W5 k1 e# I4 m6 y
  332. 6 }" p: n: g9 e# p3 X+ u' y
  333.   if(UpdateLocal.size())( W9 P, I( P8 A) i) J, W
  334.   {
    7 m* e; x, E7 l( g+ b1 p- Y
  335.     UpdateLocal.clear();7 o0 b+ n2 U9 d5 E$ o7 a
  336.   }
    2 H  I  T4 N5 T
  337.   if(UpdateFile3.size())& v% d$ o, e4 C1 |5 r- r
  338.   {
    5 x3 _' ]4 h' c! V4 g+ w" z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 Z% ~, Q0 B  U5 o; N* ]7 b
  340.     {, m3 Q* w0 S( B# y
  341.       file=(*p).second;
    ( A1 t/ J8 N2 Z( e$ f8 E
  342.       free(file);8 o$ h4 Z* u! g; T( d2 A
  343.     }% M9 A9 f. b# `$ W* b& h
  344.     UpdateFile3.clear();
    ' w: @1 Q* g. p7 B
  345.     UpdateList3.clear();
    0 @' [3 C- l9 K5 h2 x
  346.   }) X5 Y5 |6 @8 @6 W
  347.   if(UpdateFile2.size())1 Y7 v% |) B, o1 N
  348.   {
    ) K4 ?6 I6 s, g" k2 d( H
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - W! w) k1 \& Y3 Y0 X0 T0 w/ a6 |
  350.     {
    , }# V$ y2 B4 b/ h& U8 i0 k9 {
  351.       file=(*p).second;6 v  c; M/ h, q- S5 X+ @" A  B( O9 h
  352.       free(file);4 P, l. X/ d- H* U3 Y
  353.     }, v2 o. W: @' U# U7 z/ g/ B
  354.     UpdateFile2.clear();
    6 n7 w  u! s) `# ^+ m
  355.     UpdateList2.clear();
    " k, [' [+ i6 h& A
  356.   }4 g9 _( @5 c: k
  357.   if(UpdateFile1.size())
    ; R( ~, B# \; a7 W
  358.   {
    $ c% S! G% s. m; r+ n! d
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 D9 x& [, M8 P1 A7 n2 I' x
  360.     {
    9 l& z- m2 k/ {, l; @
  361.       file=(*p).second;* J2 n6 z: o/ G+ e, }9 I9 t) S* `
  362.       free(file);
    0 O+ t9 a4 i  @$ o
  363.     }- K$ ~& L' E! f+ P! x; a4 Y0 H$ ]1 y6 j
  364.     UpdateFile1.clear();
    9 r7 R; p) z; N6 H& v
  365.     UpdateList1.clear();
    2 t$ x8 v/ X* u. ^1 i, ~
  366.   }8 t3 _1 p# U( s. |: `7 s' D! q) H
  367. }  
    7 Q/ b8 |1 D, \0 t. U
  368.   & @# e! {8 s, l% p8 Q" w: @
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 w8 c1 {+ G0 n0 u
  370. {: j3 P& `( t2 Z2 M
  371.   int c;
    # }% C- n/ i+ Y9 p0 p
  372.   LPUPDATEFILE file1,file2;
    8 G% o& s* V# J6 k$ k
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    1 @$ F: C/ l! ]* u& g" U
  374.   std::list<CString>::iterator l;5 |! Q' k4 }4 b$ p5 ~2 b

  375. 1 v8 ~; B6 v9 K# |2 }/ y3 c6 E
  376.   UpdateLocal.clear();0 R% @* R% v1 ~; b& a
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    / P! B* ~4 [9 A# D* t7 J
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);8 E8 x$ K+ ~. C5 S, D8 ^) L* R: m
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    # q; M3 V2 B; T! Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);4 n+ P7 v8 W* O* L- O9 @" s
  381.   if(UpdateFile3.size()); Y% c1 V1 ^+ q0 }1 }6 E! H
  382.   {
    ; z6 g7 o4 p; O4 B+ t
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    " }& \1 V) l- A( c8 O" H6 `! t
  384.     {1 {5 N6 E  G- z
  385.       file2=(LPUPDATEFILE)(*i).second;. _9 Y2 s( s; H' T4 f9 M
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) `  z4 ]* n2 b3 K; F1 C) X
  387.       {
    . Z: ^( ^  x9 `- T: M
  388.         file1=(LPUPDATEFILE)(*p).second;2 s1 e) f- A0 d5 z6 m
  389.         file1->vers=file2->vers;
    & z: }6 t, B) H' D7 I' [
  390.       }
    . y& f, `9 X7 O. F7 c9 y
  391.       else' i2 |" b& T( V$ c" \
  392.       {# N/ Y5 C# g9 M( B- O4 G3 y
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 G" ^/ b$ w1 c6 i
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));# [. k: q% i' a- c
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    1 i1 ?6 |) S, \
  396.       }
    7 [: c0 }4 y% @+ a# i0 P. u
  397.     }3 `( S) _; b# w$ V3 @
  398.   }* b6 ?! C; i! }
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! l8 Y0 L% `/ {% o7 p. R' I
  400.   {- ]) c' T) K) C( ]
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()), R: v4 f3 `9 k8 Y
  402.     {
    7 ?* ?1 J  V+ P- ~
  403.       file2=(LPUPDATEFILE)(*i).second;& G! p* Z' g( L# b
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " U( {$ L6 H+ ^, _8 K' o. w4 c# z
  405.       {
    # C3 ^5 h) i5 {; W+ ]
  406.         file1=(LPUPDATEFILE)(*p).second;  {* Q3 D/ h' ?& l' v
  407.         if(file1->vers!=file2->vers)
    & j7 r- D% T. F7 c* N! \+ ~
  408.         {7 |! w  k$ [6 x6 H! c
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 K2 ^( I- i: L3 Q# M  _
  410.           c++;
    0 T% q$ {' u) p8 T
  411.         }
    , T1 Q1 `9 n) I' m
  412.       }% A  Y$ \6 W6 E) t" _
  413.       else5 }# Q- \+ L. h% d# `+ {9 f- y2 z
  414.       {8 O! w8 \8 M) L
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 e9 C5 O, F/ i- K& ]3 D
  416.         c++;  t7 o  d$ b! F, B3 ^; l0 J+ V
  417.       }/ H# V8 L! ~: t! |  [$ P
  418.     }# y$ `# E$ M7 a' m5 }0 n! a
  419.   }
    # C7 H: P! }" b* y$ g$ \- i5 M
  420.   unlink(".\\DownLoad\\update.txt");
    - R" n* V3 q" w8 g( X# u/ t
  421.   if(UpdateLocal.size()) return TRUE;1 L; d( F: ]7 m; X  ?, n3 S
  422.   else                   return FALSE;
    9 _; ^8 E5 O: e% R
  423. }8 f( r* Y) |. q* P) W* ?* p

  424. " ?, M: N3 S" N; \' `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      R) S' E  \( A* X
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"% G2 u" E, A0 x6 e

  427.   b# [. ?% q5 V

  428. . z$ [9 a' U' P( g% L

  429. ) F/ d) G, ~; D. i( D' I
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" w9 f' h7 Y" S% B( F8 s
  431. {
    ) Y# U4 d% N" {6 Q7 \- U
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;' c2 V5 `/ f" s3 Q
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 Y1 F" ^6 L: U, ]4 L
  434.   {- {) x7 u* Z+ Y- {5 F6 L2 N2 Y
  435.     char szLanguage[50];; q1 J" l: a% [2 D
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' Z) k3 ^( w1 [  Y' q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ( V9 a* s6 r1 ]$ z  I0 U5 i
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ w+ G0 ^% V- k9 l% ?
  439.     else                                   m_iLanguage=ENGLISH;
    + z1 t5 i; z. P! k# U/ |
  440.     char szRegister[100];
    4 n+ f# u: b; B; u0 E5 A
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , q* `; |. _& J- m
  442.     strRegsName=szRegister;5 J0 S- W1 s9 W& Q" D
  443.     char szPatchURL[100];
    9 c( ]% N5 G) b
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");  D! W! T/ m! J
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' ~1 f; v0 ^  `) ~- x5 t* Z/ b
  446.   }4 g) ]8 m- T0 i
  447.   else
    , t) f+ o$ h, {
  448.   {& R. s; O5 k+ P# L, B" Y% N
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + u, K. L, x' X  [" s/ {
  450.     strRegsName=DEFAULT_REG_URL;
    $ @6 b8 \+ A9 c/ W: s0 y
  451.   }- K! D% P9 y: |" q% f  W
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ; M: G  N  i* O& V7 s) \1 B' @
  453.   {2 @  K9 k5 s5 j+ @# L
  454.     char szIP[50];
    - f% B) J+ O6 H# g2 z0 S+ g
  455.     char szDIR[300];  p( Y! s: L8 i8 {- o5 C/ D
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 {1 U% d$ m- G/ a
  457.     {
    ( ~6 T* r/ x0 X% A
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. L% w! n5 i8 g6 l+ m
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    , _/ {. D9 Q6 m" w
  460.       strHostName=szIP;
    - }( r0 ?) m1 C. N) T
  461.       strHostPath.Format("/%s",szDIR);
    . ~& _- ?: s% I
  462.     }6 x% l/ w! K5 N
  463.     else
    : }  f7 k3 h: u+ D9 d2 f
  464.     {
    & K. j& x/ B5 ^3 I+ H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 B0 p) b- q& C  ~% J! _
  466.       {8 D: q0 B4 O1 P! }) b4 z
  467.         char szLanguage[50];6 u/ e1 a8 f/ Z) N
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' I+ n! b% `" o7 s, H, }) N
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' L( C, ]; f* g6 z0 P& U
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;7 v  v3 W4 u3 [7 |
  471.         else                                   m_iLanguage=ENGLISH;
    # p3 R6 [* |0 C4 j* v$ V
  472.         char szRegister[100];& g/ J, a- e% d( E" E% n* }
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    0 I. v- R5 ?$ b* V. p
  474.         strRegsName=szRegister;3 f% |; a" _* l7 m$ L' u- w! ?6 K, D
  475.         char szPatchURL[100];  [, m1 T, [/ S2 a
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* q+ D. n& u7 |2 N
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' X7 k1 h* w" w
  478.       }
    7 @4 v% {/ x" M
  479.       else5 Z+ y, ?' R8 ]) Y
  480.       {
    7 U, Q  r/ m7 t- C
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % Q4 z, x% u# `' H
  482.         strRegsName=DEFAULT_REG_URL;& W: {" ^9 d; M: ]
  483.       }! W2 f; B/ _/ u" ~2 q
  484.     }
    0 G: d3 t% I+ u/ @8 q3 P  b2 G
  485.   }
    7 u6 D5 S1 Z0 H# b1 s6 l1 E
  486.   return true;
    1 K' w( u3 I, s& n
  487. }( e; p+ u1 ?1 B+ n, @

  488. 4 p9 t0 `+ u7 n# M( P( F
  489. #include ".\ZLib\unzip.h"
    / {+ U0 J6 |, b  s/ K) m. f  j% A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);$ B) @+ F5 U1 @
  491. /////////////////////////////////////////////////////////////////////////////: U7 A1 @7 i& |# A
  492. // CRevAppApp initialization
    4 L9 m' _2 a$ _; t8 p
  493. ( @! o. s7 j4 y+ E6 E
  494. BOOL CRevAppApp::InitInstance()
    5 f2 d4 A2 L8 J8 m  m
  495. {8 M3 A9 V$ {$ L# g3 [6 E! v% v
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    $ Z: W! k$ [* r+ ]: b  d+ x

  497. , a' Y. p* i5 y& F, Y- c
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; m: D8 e9 m8 `9 J' `
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    # l, C9 y5 r9 F6 s& F' W9 S) A
  500.   {& _" x: \$ o6 q8 ]/ }  V
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");+ t3 X$ {2 V( K( `8 Z) {
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ; e# [: C# s4 }3 h' p; s
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    4 G8 U% b# A* B; N9 X- ~
  504.     {
    2 ^% _+ s& d& V
  505.       strcpy(szPath,szPathTarget);
    * B7 H; z+ j- o( ?) e* `& I& ~
  506.       SetCurrentDirectory(szPath);
    ; b& r  b) ?( ?- y3 _8 X! R
  507.     }) D) c2 X5 Q9 F$ h
  508.   }5 a. g3 _5 ]5 O2 H9 {/ {
  509. #ifdef _DEBUG
    ' e( i2 H( W& F1 M& e
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ l; E3 d9 y: u# n' e) I; b$ w
  511. #else9 Y6 ^& U: z2 ~5 w2 `
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( S( b. I( C( J2 k' [/ W3 |
  513. #endif1 P; j: s8 M7 O  `* D& O# i6 v
  514.   {5 X; _/ ]7 c0 _. y* G- ^
  515.     char tempFileName[MAX_PATH];
    . b' O* Y: L7 H$ _% n
  516.     strcpy(tempFileName,szPathSource);
    3 ^9 C( X; A9 ?; H: r- Q
  517.     tempFileName[strlen(szPathSource)-12]=0;
    5 v- V5 B" [5 n+ f5 [
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    4 Y2 v3 A4 s! V
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    3 T: l2 b% Y) j! l, i6 s, X8 u" |! P
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);# y0 k* j" H7 E  ~1 {
  521.     return TRUE;0 @, O6 [5 t) D% r
  522.   }5 ]' W' Q. t& s8 @8 y$ P
  523.   // Nuke 0118: Delete run.exe
    # G4 @7 f' P. h
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    # ]0 f0 ^  b: _6 d# [
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ! f/ p1 @4 f- s6 b
  526.   if(!ReadCfgFile("Config.ini"))
    : b( C7 f2 l/ e8 i
  527.   {2 v2 H" }* {, y) r( f5 x4 \
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    8 X& G! Z( W( c
  529.     return TRUE;5 v" ^5 X, W6 A! ]9 l, P
  530.   }4 t* P$ F+ ~- I( i) O; k; O
  531.   HANDLE mutex;- o2 Q5 q% |7 c" J* r: u
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 G: q& `! A; h% F
  533.   {; Q: [5 T4 Z* W* c2 R
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)8 u1 e( W/ r# [
  535.     {$ k+ r: C: S5 F% Q) b5 H; X9 J2 V
  536.       CloseHandle(mutex);6 s( k6 \$ T0 E( H
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    % o: j5 d( {. @8 N  g4 K
  538.       return TRUE;
    $ u2 d- R) A: U, o) p
  539.     }/ _+ l3 Z& v4 `# F1 X
  540.   }  1 P4 ^8 N- E! _
  541.   CloseHandle(mutex);# E, \  [% K# j& G/ c- Z6 D
  542. * a& f% o/ i; ?% u/ _" m& N& w- D
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    0 b7 q( C2 J( d9 U3 c7 C
  544. 8 [; x  I. f: f: e/ E, j% R- N
  545.         AfxEnableControlContainer();
    , r+ X) r) A, v; p% _

  546. 0 A* V/ W3 K4 f. m; ?( V
  547.   bCanUpdate=FALSE;4 s( B2 A! q% S; X' v
  548.   dwStartUpSteps=1;
    1 F$ r  r1 n% q$ a4 u) C, T
  549.   dwProgramState=AP_NOTHING;: N  ~+ D7 S1 \' R: P' ^- R& }8 S" V
  550. / j+ y* r8 X' O+ ~: _
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) y' G# ?9 z, m% h( D7 C

  552. 0 q) C3 E( l5 D. C1 Z) M& K5 `
  553.         // Standard initialization
    $ Q7 D! ]: k; V0 B3 d
  554.         // If you are not using these features and wish to reduce the size
    $ W5 m/ C7 p" X1 V: j9 f" o$ |9 M
  555.         //  of your final executable, you should remove from the following; P# s6 V$ U2 ]. H
  556.         //  the specific initialization routines you do not need.# D; s/ C4 x1 a- X. l) F7 {
  557. 1 a/ H' A4 e- f
  558. #ifdef _AFXDLL. E! \  B5 @- `$ |( G* T
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL0 `( F/ {; j, l, p* l( M8 j: ~
  560. #else
    6 h3 h. |  ]+ R& f6 Y; |8 c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically4 `; G. X; I# w. I# [7 s
  562. #endif
    $ ^" O8 J; O, t! t
  563. ' h* W! I/ q3 g3 O
  564.   dlg=new CRevAppDlg;2 m3 I2 K# R3 n  c3 |  }
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 V5 T- Q4 M" D2 a/ K: v7 K0 g/ K
  566.   dlg->ShowWindow(SW_SHOWNORMAL);4 j3 Z! r% p: Y# |) a3 @
  567.   m_pMainWnd=dlg;' _) Q" ~6 O6 J* W' A2 T/ k
  568. * ?3 k' U  f' Z( m0 r
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);. f1 U& ]" |6 _% v8 t% I7 `% D7 r( W, K

  570. % ^# o/ i7 U5 A: a
  571. //  GdiplusStartupInput gdiplusStartupInput;
    . a: z0 T( l3 e% `7 X& k
  572. //  ULONG_PTR gdiplusToken;( u% D, V/ c/ H) T) t: }
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ; K; ?. u7 v1 o  H( d5 J

  574. 1 \4 ]# y' d# v) z' f
  575. //        CRevAppDlg dlg;0 q2 o( x3 b% R5 G! c3 R! L
  576. //        int nResponse = dlg.DoModal();
    ' D! i) I. `( @$ Q  F, k4 \$ g$ t6 p4 V
  577. //        if (nResponse == IDOK)
    9 D' i4 V! K" A# ], N2 Q/ E
  578. //        {
    - ]& l+ \: q/ d; U4 v5 B
  579. //                // TODO: Place code here to handle when the dialog is
    . E, y* Y" W3 R) C3 C
  580. //                //  dismissed with OK# q, {1 `1 T4 [% o/ u
  581. //        }7 d1 F+ r4 i6 {7 \) e3 P
  582. //        else if (nResponse == IDCANCEL)
    " C( X5 @6 g7 T' ~! c- Q
  583. //        {
    0 p9 u: t; @1 F% S# S$ v
  584. //                // TODO: Place code here to handle when the dialog is. }% @- a: i0 W4 o* b- Y
  585. //                //  dismissed with Cancel+ q/ m( o  m' i; J: {1 F& ^! u
  586. //        }, a+ r. _' j' m! G! q* {

  587.   ]8 ~1 v% s+ V4 G; `
  588.         // Since the dialog has been closed, return FALSE so that we exit the# E5 c2 v* g6 e1 x1 ]% t% [
  589.         //  application, rather than start the application's message pump.
    2 p0 j3 J+ ]2 \' O3 ~- h# g0 p% V
  590.         return TRUE;3 a( a) G. _9 Z+ }' ~. r' @
  591. }
    1 @1 \! |# o$ k% G

  592. 5 L: L. Q$ S# o. z% ~) ]  r
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
      G8 `* }$ _, F! v( A
  594. {4 \" x. w2 c: Q! _5 l: k
  595.   int i;
    2 r$ i; r# N; K
  596.   char *szRet;  a5 e2 i/ a1 {! [% A7 {: O9 o

  597. 7 g. T) {8 r% W0 q6 P; k6 {
  598.   if(pSource) { itoken=0; sztoken=pSource; }. t: s: M  }$ n" k% z  _. a
  599.   if(sztoken)! {0 w5 ]9 m! \7 ?0 E- @4 ~' L. s
  600.   {! @  n/ o( W* S+ o
  601.     szRet=&sztoken[itoken];
    & {2 c  N) H# F2 b; [
  602.     while(sztoken[itoken])
    6 G- C# J! }) ~5 G. |
  603.     {
    - ^( I! l. z. E! j) U# R
  604.       for(i=0;i<(int)strlen(token);i++)
    # `+ [5 I" n8 v% k/ _" ^
  605.       {- q& c+ W! P" D7 b0 b) u; d2 r9 M  g
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    7 n- m, }* V" q1 [8 Z8 F, A$ E
  607.         {
    1 `( t" {. d! t, S' T, D
  608.           sztoken[itoken++]=0;* ?( m1 Z1 `0 k3 Z! }, V! O$ E* B# w5 X
  609.           sztoken[itoken++]=0;
    , ]8 A" M& I1 `2 `
  610.           return szRet;! b5 W- \0 i! {6 a
  611.         }4 u+ a/ w( w6 O( o' e5 G
  612.       }
    ' j% {( b- a/ }5 Z: O6 \
  613.       itoken++;- R" h. {4 \1 W& W( U, r' Y* r) _6 g
  614.     }8 d  j; A5 I0 B: V
  615.   }1 N& V" j+ U; R! ?# x
  616.   return NULL;
    : ?$ D6 |# M5 u) N1 v" Y3 [
  617. }
    5 C4 E1 v$ V' [8 T$ G

  618. 6 `* R% [+ |( e6 b; b
  619. void ProcessProc(long Total,long Current)  M: r( P) z  u! L2 Q
  620. {
    . o. q+ K  \+ d* ?" l0 ^
  621.         MSG msg;6 d. z' P+ K  e$ ]# S  l1 g* {
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    6 ^# z: u* Z( t; q4 y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));/ _: h+ B+ n  P( y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ! w) _- S, D' c* d# p4 o- B  H: K
  625.         {
    , o4 [, C+ Y: M' W7 w3 L
  626.                 if(!GetMessage(&msg,NULL,0,0))
    $ A; V# B! S$ ^+ u9 o( D
  627.                 {
    9 x4 U; Z$ h* i& t  z
  628.                         return;
    4 s3 ]) j, K% K, H
  629.                 }
    " \1 X& z5 |  K3 `1 q' b
  630.                 TranslateMessage(&msg);( L. c3 P5 J0 L) C4 K( y2 m8 Z
  631.                 DispatchMessage(&msg);7 ]+ x. f+ n8 k+ l+ u5 b9 p
  632.         }       
    0 [, r8 H3 ]4 f$ r3 f
  633. }& r8 k7 i: {1 o* a4 h
  634. 3 L5 j9 S& n6 u( @
  635. BOOL bFirstChar=TRUE;% X( _8 O; ?( g' N7 V) c0 q; X

  636. # C7 ^1 G2 F# \" D3 g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ O# e% P( u) X+ O* e
  638. {
    9 s; ?; \/ [/ `' E
  639.         // TODO: Add your specialized code here and/or call the base class" v" o# j& `( [! U
  640.   switch(dwProgramState)" r0 w4 ~. W  r' C. d0 _
  641.   {
    # L9 B) ^3 ?7 ]/ d) y- Q8 B$ h1 l
  642.   case AP_NOTHING:
    $ Q9 Z2 ]6 A$ L; B8 N9 u
  643.     switch(dwStartUpSteps)
    0 ]; W) f* Q& A5 j' @
  644.     {3 A! x1 v; H& n; N& \/ j& e" k
  645.     case 1:
    3 x4 @& W0 A% ~5 q* t
  646.       {
    & f3 t; {) B$ d# V2 ]! B
  647.         int i;
    9 E4 ]; l+ L* r, C3 ]% [  n
  648.         CDC *pCDC=dlg->GetDC();: S) g7 Q! J3 L# T! d
  649.         HDC hdcwnd=pCDC->m_hDC;
    ' w& g  }! I5 E- `8 G
  650. //        Graphics graphics(hdcwnd);) T; S% t, M6 e/ V% S& W# f
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");" h7 _$ k% P+ [& I* S; j" W
  652. //        INT iWidth=bitmap.GetWidth();
    : @" x' D; [; G
  653. //        INT iHeight=bitmap.GetHeight();/ I1 l* J# ]* {) [
  654. //        Color color,colorTemp;6 I9 q, e+ n( X8 r$ r# a
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    % I% R6 V4 L7 y; `( i1 L9 e5 m
  656. //        {
    4 p6 a; u/ P/ w' J% r  W/ Z
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    5 c# e3 r6 O' U% ?5 E
  658. //          {% \8 N- h; B- u  L
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      J4 j9 T; a: @* d1 i' B$ a
  660. //            colorTemp.SetValue(color.MakeARGB() f4 ^$ h3 }3 A, V( l- t7 q+ E# B; x
  661. //              (BYTE)(255*iColumn/iWidth),; [: z8 U$ r$ w: W0 D- V
  662. //              color.GetRed(),9 i' I# X( U4 Y, _
  663. //              color.GetGreen(),. M( y! @6 r& S$ j% x) V
  664. //              color.GetBlue()));
    # k  L7 F2 ]: Q8 n2 w4 S% M
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);! k# P* B5 t. [5 A: w; ^, U. I
  666. //          }) B8 l* D- c; Z
  667. //        }4 ^9 u, Z" J* p: N) @
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    : @9 @2 J$ M$ D( h
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");  Q) t  k3 |/ _9 K  N
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ! S4 F1 K0 m  z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# l4 H6 U# n$ z: \+ c
  672.         for(i=0;i<240;i+=8)& J9 Q. v- Y8 x* ?& e3 H4 l
  673.         {
    9 B, G( e6 x# J) k
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % e! Y8 z  n( \  M% t, e- w
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 A# t2 a0 g& g. q2 [0 r
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 [# t. |+ k% v5 d: T
  677.           Sleep(33);
    " ^  n4 D8 m$ M+ i
  678.         }
    % C1 E& Z; \( L) K" m
  679.         Sleep(1000);- ]0 v! y. W( _5 N( c- W
  680.         for(i=240;i>0;i-=8)
    * e" z" `2 B3 D0 U
  681.         {  [. J, w+ z# o" @. b- d
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 n  [/ e4 H# m. N8 d; h9 }; B
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 R9 E* E* ^$ x9 ]- C3 x
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ e7 _6 D5 o! B) z+ B. A
  685.           Sleep(33);
    ; W1 m' g3 x& o7 i6 p/ m# j
  686.         }, i& B7 }* @* u% a3 {2 R
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);; o$ T' t" ?: b
  688.         dlg->ReleaseDC(pCDC);. D: Q: X$ u7 x! k( X: }
  689.         DeleteDC(hdctar);# F" t+ y* i# X* ?  [) o1 ], e: c7 L
  690.         DeleteDC(hdcsrc);
    / k% ^3 b5 A* G
  691.         DeleteDC(hdcorg);
    # [' b1 p' ?1 [' O* h) E5 }9 ?
  692.       }
    * V4 Q; `5 T; B0 X
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);/ L- d: U7 \! X3 l, d6 O
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ; D" a/ g3 ?; Y3 K7 o- I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    " u0 P' X' t7 Q, S7 y; @
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    % \' K, c  z& L" l
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! w7 ^/ {- M: v
  698.       if(!Dn.Connected())/ K" _! R* k. `3 [" n
  699.       {
    7 X1 q  D3 L' }$ o( {4 n) z  s: q# g
  700.         dwTotalFiles=1;
    . D! i# l" E) ~: i
  701.         dwDownLoaded=0;
    3 O" e1 a8 n: W# V5 Q. K0 X, c; Y
  702.         bSilentStep=TRUE;
    ' [; c" @/ I& c/ W! y8 `
  703.         bCompressed=FALSE;# s* O! x2 h, \7 k7 u6 K
  704.         strExtLocal.Empty();
    $ ^' X+ {2 \" {7 Z2 h/ }
  705.         strFullName="readme.txt";
      O: {: G- z0 C; D. V( Q
  706.         dwProgramState=AP_CONNECT;" z% K+ t5 {" O9 z; B
  707.       }
    % R3 e* e  n8 @
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    - V) f& `+ q/ ^, s' a
  709.       dwStartUpSteps=2;
    9 L  d/ }6 G# h# k/ T# t- V, r7 G$ L
  710.       break;
    ! n0 `7 \5 I9 O* C- M( @; I
  711.     case 2:
    # y4 {% T7 T0 Y, G
  712.       {
    * G3 u- O7 w& C' u+ I
  713.         int iEOF;: e; Z- b" T. G
  714.         FILE *fp;
    ; ]0 V  o7 N# N9 q5 M% M4 E; E2 N" n
  715.         char szString[512];
    8 D' g/ R, F% B' j3 j4 _! b
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");& j4 U5 [5 a! s* T, U( ~  k' z
  717.         if(fp). K, W- @7 A& w2 {1 T9 O9 K$ M) @
  718.         {
    / c& j) ?2 j+ i! z  z" b. {- e( a
  719.           do
    $ t9 U8 O) S1 K
  720.           {
    9 C4 h+ |: p' k; [! J
  721.             iEOF=fscanf(fp,"%s",szString);" x. y" w) j/ Q( @0 j' r
  722.             if(strlen(szString))% v/ g  }' H. C
  723.             {! @. N# D* }, R8 u- T) q2 d) O
  724.               if(bFirstChar)
    ; r9 n  @- e# j: N6 [0 e6 ~( G
  725.               {
    % s8 W6 w! y% g. c0 P
  726.                 bFirstChar=FALSE;
    8 q" W  b7 A9 a  E: V
  727.                 bConnectIsBig5=FALSE;
    6 L% @2 ?' G2 g
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;* G) v3 W7 j' x/ g
  729.               }
    + n! \! ^3 A* o8 P1 k0 f- D$ a- Y, Q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    , y6 k$ C/ P# u9 D& K/ N
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    6 K- {$ P! k( K; N" n! K; v
  732.               dlg->m_ListText.AddString(szString);' F' O! j/ m5 O" L) |
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' e, o4 S7 w9 J, H* [$ c& ]
  734.               *szString=0;# C* E8 E( {' d/ k$ s' e- Q
  735.             }5 h# t7 Y1 R! |
  736.           } while(iEOF!=EOF);
    5 d6 \( \) J0 ~5 s6 F8 k* Z
  737.           fclose(fp);+ C/ f. c6 I; h7 v% [0 z, Y
  738.           unlink(".\\DownLoad\\readme.txt");
    0 Z/ C: T% l" u5 E3 }1 j! I# g
  739.           dwStartUpSteps=3;
    ) N  {6 S7 v$ p9 l$ K  }! _
  740.         }$ ^! g7 V2 x8 x; J) {
  741.       }
      h9 h! T6 ?. w# b4 i8 A
  742.       break;9 ?* j  O8 t" `0 g) i. \) n
  743.     case 3:0 h% M! E5 S( Q2 X' Y
  744.       if(!Dn.Connected())
    % Q) G) B; C3 P+ B$ d, M, _9 ^4 z
  745.       {# Q2 T  x6 Q5 v# z- c# m. b. U
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);$ j8 F0 n5 r5 [# G% N" p2 b
  747.         dwTotalFiles=1;
    % o  _4 h: U: R/ D
  748.         dwDownLoaded=0;' x0 z/ P$ Y7 V  T2 O, g. L1 X$ t1 f
  749.         bSilentStep=TRUE;
    % X1 o( K- w+ e' ^5 ?$ {/ b
  750.         bCompressed=FALSE;
    0 w' i: }' y8 _' y6 w2 B
  751.         strExtLocal.Empty();* V0 ]3 n  t7 ~8 V
  752.         strFullName="checkversion.txt";
    & e! M2 d4 q$ `. }4 u; u7 T0 h
  753.         dwProgramState=AP_CONNECT;
    6 z% a$ A, C' g7 u- b7 b+ N* [$ @
  754.       }
    , d4 Y% P0 N* U9 h0 S2 U+ |9 f
  755.       dwStartUpSteps=4;
    ) p; w. [4 ^) q- f$ v* E
  756.       break;
    ; `' Z# L( _' _, k  X- R
  757.     case 4:
    * Y7 U: i1 k. v4 ~# {- L
  758.       {# F$ g9 \+ _  S9 Q( J; W
  759.         FILE *fp;
    ' A: q' [- e  M  ~4 Z" n- l" l
  760.         char szString1[128];
    ) b3 b  K% _5 j
  761.         char szString2[128];
    2 o1 I: Z& p5 S1 B$ E# ]$ t/ {9 W
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");6 U" n2 V- q* j; ~0 ~+ \. r8 u
  763.         if(fp)
    3 H: N6 V5 R2 k- |/ H' G# f
  764.         {9 v5 q1 f' N" Z( c
  765.           fscanf(fp,"%s",szString1);3 J+ i4 D6 ?0 j+ I; I; F; e+ ~
  766.           fclose(fp);) \8 l+ {9 u/ o. y# [
  767.           fCheckVersion=atof(szString1);
    ! |: d  T/ x6 r7 x$ w
  768.           fp=fopen(".\\checkversion.dat","r");
    6 u- L0 j' T( Y8 y( ~
  769.           if(fp). P2 d1 R: h1 @2 T. G
  770.           {
    5 ?: I& R: y6 Z6 o7 \$ H. T( X
  771.             fscanf(fp,"%s",szString2);% p2 q8 N. t5 T. Z
  772.             fclose(fp);
    + V" e- r1 z+ n7 Y" R
  773.             if(atof(szString1)!=atof(szString2))1 j0 D# O/ o& `4 ]% C* Q) _
  774.             {
    / }. }9 M& c4 z: r/ e+ a8 t* F
  775.               if(!Dn.Connected())9 x3 Z4 n. k4 Y$ e. F
  776.               {( G( F9 H9 l( |8 R  V& Z
  777.                 bFirstUpdate=TRUE;
    $ Y+ J5 z9 X' l/ `
  778.                 dwTotalFiles=1;
    0 r  {- N3 l1 K* O5 ?. j, s
  779.                 dwDownLoaded=0;
    $ L5 f5 l0 c6 C( u( K9 `* d
  780.                 bSilentStep=FALSE;
    ' Z2 p' g4 g# ]' |. X: J$ x" Q
  781.                 bCompressed=TRUE;
    9 u% a# d1 r) k( \4 p
  782.                 strExtLocal=".\\DownLoad\";- }9 u5 j4 n5 M
  783.                 strFullName="update.txt";
    - m& V7 U6 w! K+ w' ~% W- Q6 k8 L
  784.                 dwProgramState=AP_CONNECT;4 w# M2 g5 k/ p9 E# \
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' a, ]. t) @! `$ O2 @
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    $ U: [0 Y& ?$ O$ r
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % H4 Z/ I& @/ j6 ]+ N
  788. 9 H; b: F8 g" a" r
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- I) ~# [7 `3 u) A
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    $ `6 I) W) r9 y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    " @. E+ _  |  B6 v* _% K
  792.                 {  x1 _; Z# @& d4 d& Y4 B
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");5 U% T% L3 h) _1 `3 N
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( N' ^0 c( @, e0 W4 A. p. N
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    3 }$ F6 q! P3 U& h5 Z3 ^
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 U' K. M3 ^( L2 Q- J2 H

  797. & x* q3 c4 H- z  _: S; J: C5 C2 U
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 ]& o- p0 d) m! X' {
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 @1 e( Z) _- x, H
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 W8 E6 J1 X2 x! g. ^  w
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 i0 u" f6 q& `
  802.                 }! q9 [5 z  h, o( B6 A* s& n
  803.                 dwStartUpSteps=5;3 \/ W! q9 u6 I
  804.               }
    * i& F. ~1 M1 w$ g( s# `
  805.             }
    + f0 R; P1 ^; h0 X! e9 V
  806.             else
    . n7 F& ~! u9 ?( G2 W  O
  807.             {6 F$ [! X) ~5 D; Q$ M* T
  808.               unlink(".\\DownLoad\\checkversion.txt");3 z5 X* v8 ~5 l! d' y- j2 x4 x
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* p" w0 k& J5 _" J4 P; v7 _
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + d5 M. r) z7 F7 l( M2 _
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
      D8 p' T1 O2 s. ~: Y" i+ ?
  812. 1 T& S* [/ |0 t$ ]- G# d
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: u( B2 h: B& |, ^  @/ ?, B/ a
  814.               dwStartUpSteps=99;7 C; l5 |6 J: I5 N- U
  815.               bFinishUpdated=TRUE;- k& t: r2 I  {
  816.               bCanUpdate=TRUE;
    $ F4 ~* w# l% t6 q) ]- w
  817.             }
    % p  ~; X2 B# V+ S- w* u" i" o$ H. f4 X
  818.           }
    ' h5 ]/ [& l& A% @! _1 b$ i& f
  819.           else+ N4 ?0 S0 M0 j# [4 W% j* Q' z6 V
  820.           {
    , X/ P! ^7 A! @
  821.             if(!Dn.Connected())
    ! C9 S2 _4 H7 R
  822.             {
    5 l1 o! u9 Y" v' P9 T) ]
  823.               bFirstUpdate=TRUE;* U; c0 ~. b1 y6 V7 O9 s
  824.               dwTotalFiles=1;, r# @; D+ h9 |$ N4 O6 W
  825.               dwDownLoaded=0;9 i' S% Z  u* U' u/ Y: y" p) a
  826.               bSilentStep=FALSE;: ]  ^  O# @4 S& [, h( s9 V# h
  827.               bCompressed=TRUE;
    - [4 }4 f: U( o7 h- ~- w
  828.               strExtLocal=".\\DownLoad\";  s" i& a" j: L
  829.               strFullName="update.txt";+ L# M: e. |( I# v) p. T
  830.               dwProgramState=AP_CONNECT;
    4 b- o9 J0 \5 N! P: z( D+ s
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % I( d/ q# z( |- e4 u
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' v) S. W9 ]$ t0 J- o1 m
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 h1 ^" g) t6 U) V5 A5 Y7 J$ i
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( k. w8 p2 f6 R% I) v
  835.               unlink(".\\DownLoad\\checkversion.txt");
    . T8 [# I! T% e4 F3 O
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    2 y% B. ]3 E  z; A5 e( b; a( b% o
  837.               {
    7 g* P7 w& b( x/ Z* p6 R
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    7 L5 ^$ P& ?, q' {! F. R, ~- z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    4 {4 U- K: [' u' _
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ( y  P  C0 b" R# c- V# h- e
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% D- g$ D1 N( z( o( d7 B: K+ K& f  d
  842.                 # \- {4 g1 l; p2 y1 L+ f6 f
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 Y& ?$ V# Q+ v+ D$ v! v
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % ]- l  {7 A# c+ D1 b0 P8 e- B
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 A# w! D" B. \' c
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) i8 ?7 ^: Z% c1 b& z/ Q
  847.               }
    + t& J' q; @  n4 ~% u
  848.               dwStartUpSteps=5;
    ) b. k; H( q# L3 H# k
  849.             }# {: A, [& [$ k9 ~1 g
  850.           }3 @6 I" L- }8 ?- L7 K- P  u
  851.         }
      h0 b: V8 Q9 X7 n" r: p
  852.         else' a# w1 n3 O. j4 F/ e
  853.         {
    4 M0 r/ L: |* N0 N" G+ g
  854.           dwStartUpSteps=3;
    , ]: k0 U5 K6 k& |3 o( S
  855.         }& K7 S) J1 R2 v6 v$ d6 o
  856.       }
    3 }& D& v* {8 m( S1 D% [
  857.       break;% ?' u% }3 D4 p  }
  858.     case 5:) Q9 k9 S' p2 F% w* j: l/ n
  859.       {
    , P2 t7 a7 i1 a% r/ k" Z. |; F
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ! S- B% u1 \2 {* `7 V( K, e
  861.         {
    : z9 H* W- P% I' j- z* l6 ~! s
  862.           int opt_overwrite=1;
    % y9 j! P6 E/ d2 c! L
  863.           int opt_do_extract_withoutpath=0;
    9 F' z0 S9 y! z+ f$ f
  864.           unzFile uf=NULL;
    + f; w5 v. k" F

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

, j" x6 v7 i/ P( h+ Y3 ]! i

評分

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