CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
) J/ {( P0 p4 I+ M# O' x6 h: d; t2 ~
  1. / RevApp.cpp : Defines the class behaviors for the application.! z9 q/ W4 U  p. R9 ^
  2. //
    5 @3 E7 L7 W: _
  3. ) O7 \( C7 B$ ?! o. W3 }
  4. #include "stdafx.h"% k8 t# J6 S( `: o

  5. 0 E# t, i# b0 j7 k
  6. //#define UNICODE
    + K: H6 P' [+ m* x
  7. //#include <gdiplus.h>
    ) Q0 d# R4 q* e# W. N: x( h$ |
  8. //using namespace Gdiplus;
    * l* w9 z) ?  w5 @& [& q

  9.   K! [# ]0 [8 c- e$ e. q
  10. #include "RevApp.h". f1 f, A9 o" N+ c2 q
  11. #include "RevAppDlg.h"
    1 |% L( q; g% t  i1 q
  12. " M8 E* x0 C. d1 M: `( P6 M
  13. #pragma warning(disable:4786)
    ' r* W2 G$ K8 I7 w$ B6 F
  14. #include <map>2 S% O* g* r. x) @. x5 r
  15. #include <list>
    0 V$ p9 Y! f: X8 ~: i6 n# E+ }
  16. #include <direct.h>' Q& `; N( Z3 W/ E8 W1 t

  17. 3 }! j; c" E- r% r0 E$ n
  18. #ifdef _DEBUG$ U, \* h5 _2 ^# ~0 N: U2 x, g3 P: m
  19. #define new DEBUG_NEW
    1 T6 j- f- s# M4 \' d: R# o
  20. #undef THIS_FILE
    ! |( S0 ^/ m3 T$ C1 _% ~9 A
  21. static char THIS_FILE[] = __FILE__;
    + j0 k3 f9 ^1 O9 Z7 ~
  22. #endif
    * {6 L7 W! M. ?9 g& _1 K; u% @
  23. #include "SkinResDef.h"& k0 @! j/ s/ t( ~
  24. #include "ChangeBG.h"
    1 B. I* c% U- K7 j" p$ g2 z0 q
  25. #include "AFXINET.H"
    % e$ |  d2 B# }1 ~
  26. ) S9 v" R9 C# X0 b6 o  v* f
  27. #define TRADITIONAL_CHINESE 0' N! d1 [: z. b
  28. #define SIMPLIFY_CHINESE 1$ t  T# |/ O" S6 j  v* c/ A
  29. #define ENGLISH 2
    ! b9 Z0 o4 G" }( ^# u+ Z
  30. int m_iLanguage = ENGLISH;
    * z; H' X7 ^, l+ E! D! Z( S
  31. /////////////////////////////////////////////////////////////////////////////
    1 N! n7 Q. j0 Z  O8 o
  32. // CRevAppApp
    9 o4 M0 m5 @) {  P! ~

  33. " T0 t1 c' e7 |+ y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp): W4 z" x2 n9 I. i
  35.         //{{AFX_MSG_MAP(CRevAppApp)% s: E$ S! X9 n" e$ q; p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    2 Q6 i1 f- }8 f
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!, T: i5 w  c, v
  38.         //}}AFX_MSG3 Z8 J8 J  ~- k* f- i
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    * }# k& q3 S* k0 h% R1 N6 A
  40. END_MESSAGE_MAP()
    , q! R/ q% ~) j, k& t3 \
  41. 4 Q% R3 @3 K/ Z! V& A
  42. /////////////////////////////////////////////////////////////////////////////
    - M9 P/ u* n) z: L0 c
  43. // CRevAppApp construction
    * ]' u7 l9 W1 n
  44. # t# m) H* R5 z. ]% j" |! w! l
  45. CRevAppApp::CRevAppApp(). i1 X# a* M# E3 s+ ^4 v( R
  46. {: O! ^; c; F" N2 r' R+ Z* V4 u
  47.         // TODO: add construction code here,
    0 v. v4 K8 X, f
  48.         // Place all significant initialization in InitInstance+ f6 |9 N/ U+ X4 N$ }" T
  49.   bDisplayIsBig5=FALSE;) W. I. R3 G" Y5 u
  50.   bRestartUpdater=FALSE;
    1 d9 D$ B- q/ m* l8 s; v8 z
  51.   bFinishUpdated=FALSE;; Y8 W2 A! M9 ?! J" T2 M; I
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;* M4 B8 F7 e7 X& ]
  53.   InitChangeDataBig52GBKS();
    3 T9 J- p2 U) l6 J) X* b6 o' o5 @: V5 H
  54.   InitChangeDataGBKS2Big5();
    & i6 f* f& h# h" @' ?; F# n* O
  55.         //6 T' w$ p! R" R7 z9 q' ~% y$ C0 e
  56.         bClickRunExe = FALSE;& Z, |' f: G6 v1 X2 k6 s
  57.         //
    5 D4 r4 s" y( ~% n8 O
  58. }
    $ k5 }9 o8 c3 y1 ?# @

  59.   X! z  q) h5 ?# a, E
  60. CRevAppApp::~CRevAppApp()
      _+ X. p0 d; ~3 d
  61. {9 [* n9 I6 {5 U2 O9 d# R/ `
  62.         // TODO: add construction code here,5 |$ A0 }" R" I: ?/ ^: _
  63.         // Place all significant initialization in InitInstance: P, W8 w+ b9 k$ c0 O. |' o
  64.   EndChangeData();
    8 v# C0 }& A+ d4 M0 `& H1 J
  65. }- m' n8 V2 r- F% c  d0 {9 U

  66. , P( s& F5 m8 Q% \
  67. /////////////////////////////////////////////////////////////////////////////) {1 b& q+ O/ P3 {) D
  68. // The one and only CRevAppApp object
    $ `$ m. T' D: j) N: L$ r6 s

  69. : Z2 u! j2 [6 {# \4 p( I
  70. CRevAppApp theApp;
    8 q! }* m% E0 G' D' O& R6 W
  71. ! C. }' e# O) Q8 H' s$ p8 l
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    3 ?# r4 K- X% U% S* Z; o
  73. {
    7 R4 w  a: E/ x/ F- _4 {- n
  74.   int iEOF=0;+ p0 Y. x7 K3 D# @4 y
  75.   char szTempName[MAX_PATH];
    3 e+ ?+ C! t( K
  76.   *szFileName=0;' X0 W( n) @8 C
  77.   iEOF=fscanf(fp,"%s",szTempName);
    % n% ^% G/ o8 g# Q, |. z' H
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    * i9 K$ t) _1 H( k# d/ k$ D
  79.   {
    1 Z# {' p3 r; U; i  Q
  80.     strcpy(szFileName,&szTempName[1]);( n. F7 q1 A2 T3 J$ _
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ; `- m2 A+ ^. [3 @3 Y; n& O9 i
  82.     {0 [3 t" ~: W; f+ |. `# u
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & ]. a3 W$ P) W! I2 ?
  84.       strcat(szFileName," ");
    % n+ q  d2 h/ U! a2 F. c
  85.       strcat(szFileName,szTempName);% y0 m0 [- V) _" R& x% l
  86.     }' _# \" w' o# b& X9 i
  87.     if(strlen(szFileName)>=1)& U# o9 i) E3 e& c$ Z9 J& ~+ j
  88.     {) ]. O) ~/ c8 _4 _9 U! N
  89.       szFileName[strlen(szFileName)-1]=0;
    ) o  ^/ n# c: K1 r3 W' V
  90.     }
    ( C# d( ?+ c$ v0 `+ ?: @/ K  |
  91.   }$ ]" o. Y0 n- `8 M! |) G
  92.   return szFileName;
    + |% m1 S% ?5 t+ o1 h' E2 l9 c
  93. }$ C: G6 Q0 x' h
  94. 2 X* R1 l! E1 L* Q, ^+ `$ f
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    4 }) s7 @$ e% ~) `7 E7 v0 a3 r
  96. {
    ' d) J6 c3 {% h$ ^
  97.   FILE *fp;0 z  ?/ B/ U7 M1 f
  98.   char *key=NULL;
    4 l0 L4 e/ L$ K
  99.   char version[MAX_PATH];$ k' T. H, f1 R7 ]: ~8 _7 C$ e) H
  100.   LPUPDATEFILE file,olds;8 g8 [/ ]  Y# z, C
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & R) m, P* `( V
  102. 9 H. d' ?- o! `6 {  D. T, J7 J
  103.   UpdateList.clear();6 E: y7 l$ n# I6 Y* A$ g# B2 j
  104.   UpdateFile.clear();! X# H3 C/ S" o" x8 `) M
  105.   if(GetFileAttributes(filename)==-1) return false;
    4 I1 n8 {; Y/ y! w* h4 z
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ! X& t2 `/ D6 G# v2 {  i0 a
  107.   fscanf(fp,"%s",version);2 B- W! X! Y2 `; o& E* S' A
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 ^+ R9 u- x" \
  109.   while(fscanf(fp,"%s",version)!=EOF). @% v5 H, W, `* A% p
  110.   {
    1 U" t7 {# |1 Y1 n: a1 W
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) a  l/ d' {" z4 Z
  112.     fscanf(fp,"%s",file->path);3 z# i/ {0 d6 E6 M
  113.     ReadFileNames(fp,file->file);
    $ P, g9 f( Z+ ~0 v5 D) p* G) ?$ g
  114.     strcpy(file->full,".");
    8 ?, P1 ^& Y/ P* U6 K; y
  115.     strcat(file->full,file->path);$ k( U# I0 ~7 _+ s& g# p$ w
  116.     strcat(file->full,file->file);
    - t: Q: J: k8 x$ Y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()); j. E: G+ L% |3 Q0 Z5 [/ Z* p
  118.     {3 e2 ~) B+ I* v& s3 W- y$ q
  119.       file->vers=(float)atof(version);
    ' f: ]/ M( [" c) [: o0 t
  120.       UpdateList.push_back(file->full);
    % ?0 j* q. r: P% W6 T4 r8 E
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    5 F  U) s- ^. w8 _' e
  122.     }
    ) t" D0 ~4 l+ N) q7 @
  123.     else! h6 u5 S$ g  |! Y( e. L0 s3 j
  124.     {
    * I: b' p3 v5 K% P8 S. l4 n; d
  125.       olds=(*p).second;
    " V" b- s3 h. m$ a
  126.       if(olds->vers<(float)atof(version))
    % V6 j' f  k; u: W2 ^8 i+ P
  127.       {
    . A! K' F; |* U- ~# b) ]
  128.         olds->vers=(float)atof(version);2 |  R# N% |  [( ~: |
  129.       }8 ~2 e3 Q/ ?' b2 s, F: ]: w  Q1 o
  130.       free(file);
    , O- z0 H9 u6 o7 T3 \, _
  131.     }
    5 ^. a4 @. D6 t. r
  132.   }
    9 P$ L& F5 B* O- [/ ]! ]' m8 o
  133.   fclose(fp);- B) o9 m3 ^6 w; G$ D8 }0 R
  134.   return true;
    5 I$ T8 g$ \# x3 n( T
  135. }
    4 L6 [: j2 D7 l  X$ B- W/ d& k
  136. 0 A8 b; n- d" ~) u; H1 f
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    + }) H2 N0 n9 g2 ?
  138. {: F# `' \& B, h0 R$ r( m. F# g+ l
  139.   TCHAR  szFull[MAX_PATH];
    1 _# o1 `* B2 L$ {8 K
  140.   TCHAR *token,*inter;6 ]8 |5 s5 u9 x. V2 ~
  141.   *szPath=0;' G7 S* W1 E$ Y- u3 _
  142.   strcpy(szFull,szFullPath);
    8 n3 Y9 V) ]/ S# }6 g
  143.   token=strtok(szFull,"\\/");
    ( H% h4 x6 r  `3 J, W
  144.   inter=token;5 P; d" Y6 m: O4 s- e. `
  145.   while(token=strtok(NULL,"\\/"))
    + f, I- m" v6 `6 h9 I% o
  146.   {* n- H# c/ P/ y" w3 s. q1 s( n
  147.     strcat(szPath,inter);$ U! U7 f7 V& r) @2 {$ B" M' j
  148.     strcat(szPath,"\");
    ' ~0 W" r6 a- e/ W
  149.     inter=token;
    3 m, ~) P: H" F( t6 ]# c
  150.   }
    + F' W9 [& y, W0 d% f
  151.   return strlen(szPath);
    ! x+ T- J" p7 W5 X! ]$ z
  152. }: q* x+ l; s0 Q8 d% M

  153. , p4 l. b* m; n% |
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) e2 e4 F9 a' s0 v2 |
  155. {
    + L) w( Y" c9 C" r
  156.   DWORD attrib=GetFileAttributes(Target);/ m3 I, r$ [6 H
  157.   if(attrib!=-1)# O! d' M4 b3 d2 `  q
  158.   {0 _$ K  t9 S6 c0 Z- j5 g. |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ( _% s$ v' C7 ?  i2 i- `3 x
  160.     {+ g! q' V9 s5 Q5 e$ R' v! S; }
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    5 ~# \# t! O/ U+ ]
  162.       SetFileAttributes(Target,attrib);
    * _8 Q1 t, N1 k5 t
  163.     }
    / p. W* P! D1 Q. m
  164.   }8 r3 p3 P* c* Z: t7 h; U
  165.   CopyFile(Source,Target,Erase);* y+ u% ^3 d% ^" T% p' r2 l
  166. }
    " y9 X' b5 b* ]
  167. 1 K7 q8 x; s' X& k2 P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)2 P; v* V# [5 N2 I. X/ }
  169. {1 Q* i! ?1 s1 I! K3 S# [( V0 S
  170.      FILE *fp;0 N# Z! H0 g! O6 s5 K% p. X$ F
  171.      char  szBuffer[8192];& ~5 j( h/ U7 P2 r) o! S
  172.   va_list  argptr;
    & |  E3 E; X' T4 P: Z9 k) ^
  173. ( ?: G, K# M4 w  ^! y0 X1 S
  174.         va_start(argptr,message);
      k8 S$ Z- M( p) S* N. p
  175.         vsprintf(szBuffer,message,argptr);- r5 z& u0 G$ R' q" `0 L  y* K
  176.         va_end(argptr);2 B4 U2 S* ]0 P: i8 j. J& X( j
  177.   fp=fopen(FileName,"a");
    7 I1 ^7 p5 H; m/ i6 O/ J+ v
  178.   if(fp)
    7 X) _$ w) j2 S' e0 ~
  179.   {. b2 J' @3 w8 S# K, `
  180.     fprintf(fp,szBuffer);
    9 @3 S2 b& p5 T; S+ E$ z" E5 C
  181.     fclose(fp);
    : L* g& j% c, C
  182.           _flushall();% f1 D& p. y% `" W" ^& H/ d
  183.   }! H& e  R( z6 B% `6 ]2 `% B0 |) O
  184. }
    5 }/ e) w1 p; W: m. X

  185. ( \* C; R! O8 L  y: ]( n
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 R, X1 |$ h' e( Z
  187. {5 \4 L  m: G0 B, E
  188.      FILE *fp;, f# {) \& p* H- V$ ]+ x
  189.     DWORD  attrib;
    % D8 h$ e& e3 H& p) _0 I) _6 ^
  190.   attrib=GetFileAttributes(FileName);
    3 ~+ q, ^6 r6 T6 M
  191.   if(attrib!=-1)
    - p1 F) H4 F# Q. l
  192.   {2 p  c8 i/ a2 O
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    : c0 M1 R4 z: u) v+ F( S' w: O' R) N
  194.     if(!SetFileAttributes(FileName,attrib))5 s6 k' f2 ~: ^- M) S: z
  195.     {& {0 e$ k: \. i5 ~: D
  196.       return FALSE;+ f- p# `- \: H' n# p
  197.     }
    ! Q/ V: b" d$ O& |5 Z6 J5 L# ~
  198.   }8 z/ o2 R0 C' ~2 y
  199.   fp=fopen(FileName,"wb");
    : K8 |- v# W; p# g. H
  200.   if(fp)
    , O6 ?  j/ f+ _, @
  201.   {: g; m: s0 T9 E  R; P0 V, k
  202.     fclose(fp);7 [' M. G* ]5 X# s1 I) P
  203.   }
    % \, O' `: m  W" ]7 ^) [9 l
  204.   return TRUE;
    - O5 R% {7 T# q1 u6 D; v2 `- F
  205. }
    & e4 D5 L5 P2 o6 E- Q
  206. ' `" a) Q7 O% @" @" {
  207. BOOL CRevAppApp::UpdateLocalVersion(void)9 L/ K7 Z  C- K2 c) [7 g+ X
  208. {
    / Z; y0 X5 S# Y- H! N& n* {
  209.   char filename[MAX_PATH];
    ) _- H5 w4 g9 H5 D% d, A8 w
  210.   LPUPDATEFILE file,olds;
    + H0 e$ z7 @$ J# \1 X1 S$ |' D
  211.   std::map<int,CString>::iterator i;" }% J: r+ n2 T$ ?3 q
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 `; k3 [/ X8 ?6 C
  213.   std::list<CString>::iterator l;
    # a3 x, X7 g% o4 d& C" |0 @
  214. 7 h! Z6 ~1 Y- }- P. R& T( z
  215.   if(bFirstUpdate)9 {5 I5 ]. y5 }: v0 R$ q- K6 r
  216.   {
    ) i* ?* F2 _5 ]" u7 J2 U( D0 Z& \& f
  217.     dwCurrFile=0;
    # k1 Q  d. O3 L4 K# D' j' Y
  218.     bFirstUpdate=FALSE;9 I6 T% j6 N4 K! w
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 I+ p6 a# @- K! X' l) h) L$ e
  220.     {1 Z9 o" d4 {. p9 `- P8 l
  221.       dwTotalFiles=UpdateLocal.size();9 z8 b/ \8 F% I8 B% T  [* i5 A
  222.       dwDownLoaded=0;# G! Z2 s8 }2 |, d) D% m2 @" N
  223.       bSilentStep=FALSE;. Q4 p- X7 @" ^4 c
  224.       bCompressed=TRUE;
    8 a7 X- P) k3 M
  225.       strExtLocal.Empty();$ W3 t- m5 u, _
  226.       strFullName=(*i).second;
    ! x# Q6 a  B7 O9 n
  227.       dwProgramState=AP_CONNECT;
    ! n7 `2 W2 _$ E* v- ]/ ?9 s
  228.       return TRUE;/ k* E. ?& O, W6 C7 p. G7 }
  229.     }
    ; x, i1 k& k( _" v# w- u
  230.   }$ x% {) b" ]! r, K# `
  231.   else if(bRestartUpdater==FALSE)
    8 k. T) }  g5 `) L; k/ q, ?
  232.   {& x/ [/ i  n+ d9 U
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())3 a9 O* Y7 Z1 i# V) T
  234.     {
    : X2 L4 B: [, j2 R2 H9 s( ?' \
  235.       file=(*p).second;% P: Q) l: p& f2 p6 K2 }
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    1 @6 K/ J: U' z  ^1 Q+ Q( i
  237.       {
    ' d; ~( @4 F2 `: d
  238.         olds=(*p).second;
    # a6 u" V, \  f( C0 Q5 p) x' p: D
  239.         olds->vers=file->vers;- x5 j8 I! @) O3 d
  240.       }; w( v# Y+ Y. `: z- X6 i
  241.       else* f: Z; m( v+ Z8 z3 _/ h
  242.       {6 `! H$ |& K6 }+ z7 |* c, ?& y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & @' h! L7 @5 O! \6 }
  244.         memcpy(olds,file,sizeof(UPDATEFILE));, l0 f) D" L; q! a5 z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ( U$ i! L2 u* O8 q6 k
  246.       }
    3 i$ T3 J- J: j6 O1 k- }
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");% _% V1 H  M6 c  o' k
  248.       sprintf(filename,"(%s)",file->file);6 I; @0 |1 O1 J
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! \- x2 o6 Y' B- m. A7 a$ W. E
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    2 }5 |' f9 |7 B1 d
  251.     }
    . g. }% p. O. P) u: A- R
  252.     dwCurrFile++;
    ! T1 r  P) T" U6 I5 \
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 a# e+ }/ T- _5 r0 x
  254.     {" O' v9 }' E5 S
  255.       bSilentStep=FALSE;
    $ Y: Y" R" A# I! |% W4 v5 ?, B
  256.       bCompressed=TRUE;
      G) I( |/ q6 D; u
  257.       strExtLocal.Empty();2 x5 R3 q& @( P# x
  258.       strFullName=(*i).second;- W% P& E$ h, Z8 @
  259.       dwProgramState=AP_CONNECT;, F; v/ O# f2 J' R7 J4 y) {5 P8 e& v
  260.       return TRUE;
    ; [: T7 k1 I* L6 c  g
  261.     }, C1 m+ c. f( {- `+ ?- F
  262.     if(!bRestartUpdater)" r6 S9 e7 I! v6 M3 z) @: W
  263.     {
    2 u0 l! t& x6 K& i  A( V8 v
  264.       int iCurrSize,iFileSize;2 b! ]: D8 |; |
  265.       iCurrSize=0;
    , n, b7 S, i0 B
  266.       iFileSize=UpdateList2.size();6 m, V" u9 L9 o: @  Z! ?2 p4 H% R
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    1 l* i+ Q  W* y2 C# ~% T# ?
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");! k- L( W% L* B# E; Q$ `3 f3 i
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ) C, ?8 _, N( ^) M! L# f6 v4 P  X
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 x! b) }" O8 m
  271.       Fclearf(".\\update.dat");
    . k; x8 ~  Z/ Q
  272.       Fprintf(".\\update.dat","Bloodyf\n");) d) {! h4 M3 z! R' h
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)5 L/ [- f1 g7 U9 Z
  274.       {6 O9 n0 h& L6 {  H
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 s) v& W' A& D9 |, [: T8 U& G
  276.         {1 I: n. L; q: r, Q, X
  277.           file=(*p).second;4 K0 o) R  \  \& `3 @; \1 x: W
  278.           sprintf(filename,"(%s)",file->file);8 l+ T+ c2 c  P
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & h  V, l; H" l4 h! \
  280.           iCurrSize++;
    0 f8 \# Y% c9 o0 x
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    2 F! k' n( U7 ^. R6 W" H  O$ r
  282.         }
    & I' K* F9 K  t- ~7 z; i$ [9 y
  283.       }3 H5 U1 n$ d; e9 p- _- P% P2 d
  284.       unlink(".\\update.txt");% t3 K& Z- P. @( D5 H4 L7 Y% b
  285.       unlink(".\\update.tmp");4 y; Q2 Y8 E0 [; ~  p
  286.       Fclearf(".\\checkversion.dat");
    4 E' e2 g7 m: _- [! _* S
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);3 M7 {/ s# J' y/ y( ~5 W8 E
  288.       if(UpdateLocal.size())
    ' l+ c! u# u" x: |$ `' l% a5 B- _- \
  289.       {; w2 |; U; Q( g6 k' z
  290.         UpdateLocal.clear();
    - d: Y- |8 Z& _8 |6 C
  291.       }0 v7 \7 N- v& \! s
  292.       if(UpdateFile3.size())
    6 R$ s/ Y8 Z  r' j; x- y% l
  293.       {* z" u0 i5 n# T% \
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 d/ f$ r% ?# @- H; q+ F
  295.         {
    9 @2 K, Q8 Z/ Y" a$ I( N
  296.           file=(*p).second;
    , O5 R, n; c; S5 F! c+ ~3 F2 c1 |
  297.           free(file);$ k, i$ O6 o+ C, {/ y
  298.         }
      ^1 p- R1 l; g9 Y
  299.         UpdateFile3.clear();
    , v8 A) j! \% w4 ]5 Z
  300.         UpdateList3.clear();4 T/ D2 H) D, K, {' R9 z% ~* f9 \
  301.       }
    , \9 ?' M$ b8 J0 i  c% l
  302.       if(UpdateFile2.size())
    ) c9 p; Y- u* o3 K) R- }
  303.       {
    + c# W2 d8 f7 Y, }* ^
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); B4 R  C8 o2 p4 H; s$ {
  305.         {
    ! s( U' o7 U9 T; U! `8 \7 ]3 N
  306.           file=(*p).second;
    0 u5 p6 n! y* Z6 ?$ I' @
  307.           free(file);
    * [( j; m( r# W4 M# V7 a
  308.         }
    0 N% G1 ?; N1 }* r- Y5 Z- @
  309.         UpdateFile2.clear();
      s: H3 s. m. m% s3 S- \
  310.         UpdateList2.clear();. Q7 K& O, a! y& G+ G6 B* O
  311.       }  i# A* E$ t5 Z* Z
  312.       if(UpdateFile1.size())) G3 h5 S4 M' r4 l
  313.       {
    - N# n: t, h: d" a- ?, u1 _" \
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + Z4 b8 C1 @' M8 K& V
  315.         {: q/ ?9 \; `6 a, d7 B* Y( S
  316.           file=(*p).second;$ u0 b* }, K9 Z% v! Y5 M! K
  317.           free(file);$ E1 t  z9 u. z: i# v0 H- b
  318.         }
    $ S% `5 y  e) e
  319.         UpdateFile1.clear();7 e' O" W' t4 o, k- |  X! u
  320.         UpdateList1.clear();' D, |- C3 ~8 C  T+ S% v/ j/ p8 g0 d
  321.       }
    $ C  M5 k) K+ {& e  Y" l
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    / \/ I0 P5 m& p+ G' A
  323.     }% ?8 A. g+ g0 e$ G, Q; @
  324.   }* j5 K. r( j6 L- y
  325.   return FALSE;# i9 e% N) N6 V' P$ ?! K" |7 H
  326. }
    2 s0 Y$ h- j& ?1 k

  327. ( A1 j- s( `; H
  328. void CRevAppApp::ClearAll(void)
    , R/ l# o! ]$ ~" {. r8 K6 x, b5 @
  329. {
    4 ]2 I1 Q1 Q  K) I
  330.   LPUPDATEFILE file;+ x8 D- _8 ]- U$ l
  331.   std::map<CString,LPUPDATEFILE>::iterator p;' r. o- X6 V( L# o; J. ~6 |$ n

  332. . }* o4 ~9 Z& ~& l+ I
  333.   if(UpdateLocal.size())' G* b. t* N  `6 i- d+ @0 B& `7 v" R7 @
  334.   {+ c( q$ f' {; w7 m3 K
  335.     UpdateLocal.clear();
    2 b, T+ S" @2 r* k7 Z/ m' i
  336.   }5 ]- u8 b1 e" }: @: ]; I
  337.   if(UpdateFile3.size())* f, q$ Y0 \, L+ p0 O* P
  338.   {
      o6 G/ S; z$ w5 [4 g# n3 W* X
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ E3 ~  _- ~! J- K  i4 p
  340.     {9 ]; {# l# Y* K3 l( _: T
  341.       file=(*p).second;
    0 x: `/ p$ e$ F
  342.       free(file);
    8 c  V" ]& T+ S# a
  343.     }
    2 g5 I: O2 S  D5 @4 \, O& T/ J
  344.     UpdateFile3.clear();
    ( P: h9 ^0 r) [
  345.     UpdateList3.clear();
    / v2 ~4 S( Q! ?0 q/ g% t4 \
  346.   }
    1 E% W, f9 U6 q- Y3 r; U' i
  347.   if(UpdateFile2.size())
    & `  u6 a4 Y, N$ Q( B
  348.   {
    9 f7 o- K* Q; L2 i( V$ V+ m4 B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) i5 [( l6 A  c
  350.     {
    : O3 g3 ]9 O5 f% e9 A  Q; e! i
  351.       file=(*p).second;# O! _5 i# v. O
  352.       free(file);
    / B1 m/ G1 x* G- `' F! b6 _* t
  353.     }, r- `6 }- W# v6 S$ U
  354.     UpdateFile2.clear();
    5 c5 C+ `0 k" ?$ V, }7 U  ~
  355.     UpdateList2.clear();
    5 R. i' e3 u  d9 [9 ]! |8 Z
  356.   }
    $ E: w0 U3 I" w  v$ L# Q% L1 T, I
  357.   if(UpdateFile1.size())/ N6 j  F) @. H- ]9 u
  358.   {
    4 L7 }- q! Z. A. t' _  u# ?
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& {% ~  q7 k2 Y  g$ f+ A4 c
  360.     {3 H- r# o1 h5 {8 o2 Y+ \
  361.       file=(*p).second;; g# {/ y( U2 ]# \$ u. F3 W) ^7 |# X
  362.       free(file);! _0 u/ N& D4 q  R/ v" B  b8 o
  363.     }2 X8 }' b. |! K2 t. I  M* V
  364.     UpdateFile1.clear();
    ) x7 j" `. q, N) m5 ^$ z+ Z$ ]) `
  365.     UpdateList1.clear();
    # t' x' `- ^9 U4 [% z4 x
  366.   }
    $ [( j" J: o5 Y" J
  367. }  
    1 R$ y, h6 v, K# M" ?
  368.   
    8 q/ R/ K) H6 M6 J
  369. BOOL CRevAppApp::CheckLocalVersion(void)6 b- u) E" O6 Q7 h
  370. {
    - k- A! o  W6 [' a( J
  371.   int c;
    5 X" G: j" @- [+ S. j0 ?2 Z
  372.   LPUPDATEFILE file1,file2;
    " i! M4 d7 ?% P; F8 _: U
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;; e. D) @9 _5 w5 ~2 T* s# k! G
  374.   std::list<CString>::iterator l;/ t4 G2 a6 ~8 z3 {
  375. 3 _# U" _  K3 H! c  L& z
  376.   UpdateLocal.clear();
    # v" H4 Y+ ^2 ^  J( H
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ E$ z9 \5 q6 I+ k, C2 Q
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    2 o% m1 r2 m8 Z' S9 z* ^
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + r4 h8 a1 U( D( q. L- r% U
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);8 I- C$ J, Z# }6 l
  381.   if(UpdateFile3.size()): q0 b% `3 ~5 n$ D* x( B
  382.   {
    ; c6 a' S; M. U2 R
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ( F0 o$ a1 h/ ~% O( |8 F
  384.     {
    " v* W% {0 r# j$ }: z
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! w, J  p& B: q! q# H% f
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" Q* Q1 ?" V& L& _
  387.       {
    6 l! `+ t: x$ I1 \7 Z9 N
  388.         file1=(LPUPDATEFILE)(*p).second;3 {5 }6 l; J" D6 @  b
  389.         file1->vers=file2->vers;
    2 N2 Y" t" d) }7 S" E: t" b0 B4 [
  390.       }
    : r& }, U' R+ |4 U+ }1 P
  391.       else: w1 @- F, K' n1 E7 c
  392.       {0 |6 }7 u% `$ K2 x/ \9 S
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      ~; m9 N0 k+ f
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    + E8 Y6 S9 c3 q  J% Y. x
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    / {6 P: z; ?8 D& l
  396.       }
    2 M, E1 ?' G7 K4 {
  397.     }
      }  m% D. o" Q7 [$ _- E; D
  398.   }- C  i$ g1 Z) Q1 p
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! _1 A1 t) z8 O
  400.   {$ }. J* U8 Z  O
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- S/ j' w7 c  P! [) o  R9 ~
  402.     {" D$ E% R9 d2 Z5 {6 w2 J# k
  403.       file2=(LPUPDATEFILE)(*i).second;
    ; X: ?+ k% N/ D( _" r
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; }% ~1 m$ c  Q
  405.       {$ N1 i* J5 P" L/ M7 p1 t
  406.         file1=(LPUPDATEFILE)(*p).second;
    ) {7 t: @* W" `3 k7 D, m; s
  407.         if(file1->vers!=file2->vers)
    ; c  ?2 Z* d* @" X+ x
  408.         {
    5 x6 G# H) a/ O  ]
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( B3 [7 p" C! l4 D& H1 L* C$ D/ F1 D3 N
  410.           c++;
    + t9 x0 Z  O# n# R2 L
  411.         }
    5 F2 b8 I$ w2 c8 J) ?0 y7 y
  412.       }- V1 ?3 j; O' ^
  413.       else
    6 k4 z' h3 b% ?& [$ C$ O
  414.       {/ d9 t/ w9 n1 Q/ y# I
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * Z2 C" {' V5 x- R! w' Z4 X+ J
  416.         c++;* v6 G' h1 |% ~( k
  417.       }
    ' `: A; I, x# q# D4 Z
  418.     }$ H. a6 m! C9 q, a; ^
  419.   }
    4 g# G8 `% X; y5 B6 B4 e+ y
  420.   unlink(".\\DownLoad\\update.txt");7 V- k6 d8 @& N) ~
  421.   if(UpdateLocal.size()) return TRUE;
    8 m+ p! a3 H$ R3 f. A
  422.   else                   return FALSE;
    0 z& X) f4 L* L' }1 d# z$ Q9 @
  423. }
    $ B5 H7 y- `  V+ ?, `- a
  424. 2 y0 Y/ a3 {# z( u9 |5 f* \/ ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      s+ l4 Y- T2 F8 n/ F9 u
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    & A, n. k! o2 ]" W7 j! u
  427. # n, k, c% M- P7 E4 ^+ k* ~
  428. - f9 Y* R( y2 t0 I/ K
  429. . I" P* x8 J. K3 q# i6 g
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)& ]. N1 j7 z# }! D6 i
  431. {
    " p' a: a  e  ?
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;* Z: M0 x8 h( J7 a7 ~7 E" A! U5 C- Z8 U
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( {  x0 \" @/ X0 I
  434.   {' z3 y: ~; m' r% E1 J( r' c
  435.     char szLanguage[50];
    : z# Y# R6 ~7 _4 |* }( v
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( Q# C: r+ m- r% r; s
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 p1 r" J: H  b" \
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# ?$ I+ I  u; ?! s& f
  439.     else                                   m_iLanguage=ENGLISH;
    5 s& n# ]% l( Z# y/ H$ S1 I0 d
  440.     char szRegister[100];. ]/ Z% R/ M8 Q) k( I3 r
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    * c$ }. \6 _: e* Z" b+ o
  442.     strRegsName=szRegister;1 F9 X9 X) S& i* c% i" Z
  443.     char szPatchURL[100];, o" r* a$ D. x+ s/ d6 ^3 }" o
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 V; K& j, X: p( f# o" [9 O
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! d: {1 d5 _# ^4 D: a5 X
  446.   }, K& b- z9 U( S  W0 f% s
  447.   else
    $ P: r% X/ b  @* D2 ^% \7 c7 m$ H$ h
  448.   {9 [4 p8 C8 v& {6 N& J
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' F. Y4 U1 N3 ~7 H5 Y  y( L5 b
  450.     strRegsName=DEFAULT_REG_URL;
    % M0 z9 K; w% p' j* I% p2 {" B
  451.   }
    , `  {9 l& y  J$ f7 h+ t
  452.   if(GetFileAttributes("hosts.ini")!=-1)3 G; }" A- `; k  R) H
  453.   {3 M3 y. }8 Q( {' n& Y$ J9 ]
  454.     char szIP[50];) z: a  h1 Z  U
  455.     char szDIR[300];
    4 q& r( c1 t6 K' X, m3 u* l( z5 p8 |
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))7 L) n, _( w: u6 T1 G! p
  457.     {
    7 Q1 U/ y6 Q4 U) ]$ y4 U, F
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");! h  S6 Y' C( D; m( [' [
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ! K5 Q' V/ g$ `1 K; F
  460.       strHostName=szIP;
    7 t4 B& K4 X6 y) v9 b2 W
  461.       strHostPath.Format("/%s",szDIR);
    2 i8 ?6 v" S% j$ M4 K. e  s# a' a* T
  462.     }% n0 ]; W$ m9 S; c8 m1 C
  463.     else
    . [# ?% g$ v9 p2 {  t
  464.     {
    6 B& J4 R5 ?7 `7 z) |6 X$ x
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , S& J! U; b" }7 f& V. U- T7 v: X$ n
  466.       {  m: u; M3 M$ F+ f2 S
  467.         char szLanguage[50];8 V" @6 N. I4 N2 W7 z# S3 Z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 H, I" J* G+ w% w
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! U  O4 f1 W5 c0 s# Z, s
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! Z- v. I4 S2 Y4 a
  471.         else                                   m_iLanguage=ENGLISH;0 b3 i, z3 m8 L. D- u) J
  472.         char szRegister[100];
    / V, p' b/ w8 b5 F* y- x
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # H+ C7 A9 J0 I& {+ G' F
  474.         strRegsName=szRegister;
    1 L* d+ e% g& C, k6 n
  475.         char szPatchURL[100];
    & U' @$ D+ y4 ^# C8 |5 x
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : `4 A( q, ^; B
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% t5 }/ @# f! c4 M. L' y
  478.       }
    6 j. m/ L& {# C/ C/ k% ^
  479.       else
    . V4 w$ P, m: d( V1 q
  480.       {, }3 S, b8 }/ r# t1 C- q
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 @2 T. ]0 x, Z' Y; A9 o
  482.         strRegsName=DEFAULT_REG_URL;# Q2 [3 A# L' Z0 `3 q' i; c
  483.       }
    0 Y0 L. x5 V, j! i
  484.     }" [/ |) ]! y& l& [
  485.   }$ t+ }: q- \& F
  486.   return true;  }5 T3 K5 e* M- J$ M
  487. }
    ( ^  Y4 K& x. _+ b+ q; {4 E
  488. 9 I' F4 C- x1 a7 \3 o- {
  489. #include ".\ZLib\unzip.h"9 I- \" r% |# b% ~$ X* t
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 t8 K3 I* v4 Z- @8 t: I
  491. /////////////////////////////////////////////////////////////////////////////# [' E, Z9 W5 W! s$ o) ^+ y- O3 [8 R
  492. // CRevAppApp initialization
    & N, x6 j- h+ m* Q
  493. 7 P! k" Y. Q( @  F: T/ D2 c
  494. BOOL CRevAppApp::InitInstance()
    $ t' E% a" p& ?# |( G; R
  495. {
    6 ^. A% [( \% _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    5 N$ I; b/ P6 R% n* ?
  497. " j1 i6 D% O) ~
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
      i& w% E3 y! ]9 H
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))* @& [0 \! o( z  o' g  [9 N& C4 }1 C! Y
  500.   {
    % p* t) S) G) g) ^, L0 V8 ]7 @& J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");* p) a6 G& x# [% ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    5 ]- i9 J2 l/ T" D; W
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))5 M- A$ l* I- r$ |' C( ~
  504.     {2 p% d- |' a* ^3 Y& r
  505.       strcpy(szPath,szPathTarget);! L, g$ H1 D7 m- J* y
  506.       SetCurrentDirectory(szPath);
    : c9 D1 V. A2 \; `9 p: x2 d4 ?- H
  507.     }4 [1 U6 @! V, t% K
  508.   }
    2 B0 Q! V3 R- w& R, s: `
  509. #ifdef _DEBUG
    / F6 J& ]2 R, t$ [5 I+ g5 k
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( k- r0 v8 x9 e- P! |" `1 Q
  511. #else
    % y/ d1 t, l) k, \  H9 Y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 y- T- |/ z5 X
  513. #endif
    1 o& f$ ^, H5 f+ K0 u
  514.   {
    % U$ Z* d! ?1 _
  515.     char tempFileName[MAX_PATH];0 ^8 M, d% l! X, Y
  516.     strcpy(tempFileName,szPathSource);
    0 |  N" {! O" g; A, R0 L0 l7 \1 G
  517.     tempFileName[strlen(szPathSource)-12]=0;, g+ _$ h0 R6 G5 _' V
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    3 H; N, A3 I" j( U6 t
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);7 H$ F6 q7 y. p) f7 s. e  R: C
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    7 @) M8 S) P7 W) o1 D4 S
  521.     return TRUE;! N9 g4 {; q+ C! {) @4 e0 S
  522.   }$ t0 S5 p: U; Q# i; A6 W5 V2 a
  523.   // Nuke 0118: Delete run.exe
    : Z$ u2 Z" A) l
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    2 O4 U5 L' B( o/ n
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");1 ]3 a) ?. X- v$ ^1 K9 Z0 Y
  526.   if(!ReadCfgFile("Config.ini"))
    5 o4 L0 i$ A3 s2 j  D
  527.   {4 B7 v% J( h# k$ V6 d% Q- W
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);* G2 w9 x$ }5 r
  529.     return TRUE;
    9 p, R. O! y" a  `# e, G
  530.   }3 g% Y2 [' v6 g
  531.   HANDLE mutex;1 |9 B9 f' ]4 k7 B1 q. G
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ( q0 L+ B; Y/ S
  533.   {
    $ D- y$ p& P' r- S- h
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS): c' a( Z  C2 x9 Q9 b6 \/ z! @
  535.     {
    6 W9 q6 L+ X3 w+ k" Q) h
  536.       CloseHandle(mutex);9 J" `* E& Y: I7 c8 H. H
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);, z- h3 @3 Q/ o5 j5 f; t4 E
  538.       return TRUE;% Z! ]% b- i4 r/ c' f& n
  539.     }& p  J% Q3 p4 X( `) z
  540.   }  ' A: j- |7 L) Z* ]1 v
  541.   CloseHandle(mutex);
    $ O4 z& w3 O0 H, g! X
  542. . Z! v/ ^$ |9 J! D7 ~2 C
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% O% l! J  U: B( @

  544. ' S* M1 V2 ?9 `1 p) ]. o8 Q
  545.         AfxEnableControlContainer();- Z8 ]4 g9 c& _/ J; l0 c
  546. ; t) d, c3 `$ j  Q
  547.   bCanUpdate=FALSE;
    + a2 l" v! v5 g5 p8 q) a' \/ s
  548.   dwStartUpSteps=1;
    % V2 P6 t8 y8 F8 h7 k+ O# T
  549.   dwProgramState=AP_NOTHING;( o) w5 z2 S" \( K
  550. & Y1 ?+ p, v" k, h. a) J5 m
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 c  S6 u5 v: |0 ~5 a' x
  552. 4 n2 ^) F4 s. Q. p4 m
  553.         // Standard initialization/ [3 @! J5 j9 D0 X
  554.         // If you are not using these features and wish to reduce the size1 w, N$ T& Y0 x4 ]
  555.         //  of your final executable, you should remove from the following
      i$ B7 n  ^2 O' g5 R
  556.         //  the specific initialization routines you do not need.
    . O9 T0 A! n4 E

  557. % n2 b7 H. B3 f- J. y
  558. #ifdef _AFXDLL( Z- D& Q1 P5 q0 e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL% Q: b; m6 p4 O$ |
  560. #else
    " [& Z1 O/ X1 `) ~" W, Y$ Q+ D" @* W* K
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    5 W* q$ d3 E% H3 w# P
  562. #endif
    " a+ L9 s' ]4 Z4 m% ?4 C/ c# }
  563. , t4 G9 E9 V; w  R
  564.   dlg=new CRevAppDlg;/ T: a8 n+ Y7 p/ z7 z
  565.   dlg->Create(IDD_REVAPP_DIALOG);/ O; A! X+ P) `0 V/ ]5 V
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ' m6 t- e( W1 Z; R6 |( M1 M
  567.   m_pMainWnd=dlg;9 c% M0 x& k. }( l  X
  568. . b0 |/ _* v/ v- @
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 O+ F3 n) d; X) W% ~: Z
  570.   [  @- F/ E6 m. w: s- i% L3 u' _
  571. //  GdiplusStartupInput gdiplusStartupInput;
      |! A. p8 w0 d, T
  572. //  ULONG_PTR gdiplusToken;
    ' c) W3 a  y% G' R, q" Q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);( M' Q; z8 ~6 [0 X  [1 L6 U
  574. , C' D- {3 _( U! z
  575. //        CRevAppDlg dlg;) W2 N+ v3 H- o/ w  P8 C8 c- Y
  576. //        int nResponse = dlg.DoModal();
    * u8 b, \7 P6 ~# U( V. Q
  577. //        if (nResponse == IDOK)
    4 G- O6 k" w( F* x$ B" |+ L
  578. //        {5 z3 x. @2 x( c9 ]0 ?( z* n. [* I
  579. //                // TODO: Place code here to handle when the dialog is
    9 b, V! I; E5 h" d
  580. //                //  dismissed with OK
    6 `. ~# A% M6 r' t0 W- l% C& a
  581. //        }9 l+ p- t8 |3 o
  582. //        else if (nResponse == IDCANCEL), h0 ^* w  p. p0 e
  583. //        {+ W7 O. J: H  S- m, {; a: y
  584. //                // TODO: Place code here to handle when the dialog is' \2 N$ @* u0 k7 W1 u, s1 K: _+ h
  585. //                //  dismissed with Cancel
    ' g/ x4 O8 V* }( W( S
  586. //        }9 j, Q/ J* x$ `3 c$ ~1 O

  587. 9 V$ _  Y5 u% Y5 y
  588.         // Since the dialog has been closed, return FALSE so that we exit the5 q: S& J% I% E4 H/ }
  589.         //  application, rather than start the application's message pump.
    9 [8 k5 b, m/ R- r& q$ ~
  590.         return TRUE;
    2 J5 ~; U6 }0 ~% o9 {9 }
  591. }
    & O8 z3 l1 F- e  O8 b/ q5 `! l0 D
  592. * ]# [: I, |' ^. w
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 g/ H( J8 V7 S+ I. C
  594. {
    / J3 J% {, v3 ?1 s
  595.   int i;0 T0 e7 A, {; k1 M
  596.   char *szRet;4 ]7 }+ o. E8 ~4 U, b
  597. . z) E; a/ D( F2 w
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # W0 L8 ^0 m, W; B
  599.   if(sztoken)
    : \* @4 H" h1 N- V6 z) S% e, x
  600.   {
    * U! E! l- [# S9 _" _# K
  601.     szRet=&sztoken[itoken];
    . K! F3 K6 t: ~, U' R& a* e6 w1 c2 W5 Z' ~
  602.     while(sztoken[itoken])
    / z2 H* W6 Z' A; X+ A# c' e
  603.     {! f. |# h0 w8 A) H6 }" q+ F+ m9 ^
  604.       for(i=0;i<(int)strlen(token);i++)
    1 w9 _2 L) ^, o3 h
  605.       {
    . E1 p3 n" ]: x+ c, h0 [
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]). {2 P2 n3 P: g' J
  607.         {0 ?+ b5 |' ]( p2 a
  608.           sztoken[itoken++]=0;
    ( J. i( K- l* L4 t+ d: l7 n8 k4 s: b
  609.           sztoken[itoken++]=0;  T9 e3 W, p9 ^3 H2 z
  610.           return szRet;
    5 X, t! B# L3 _7 m
  611.         }
    9 q" R8 u; ^; Q
  612.       }
    9 y9 Y( \. ?% m$ I4 E6 m: h
  613.       itoken++;' F+ K: P2 }3 |5 |& e
  614.     }
    / b5 l& V) q& J+ m4 b  c
  615.   }2 v# F% W3 N( K
  616.   return NULL;1 o% y4 y, A3 o9 ^+ R1 L
  617. }- G5 J8 N' Q1 f- |# }: Y+ B* @

  618. # d/ d0 L: b8 l& E) f# S" ~" [" L9 [' T
  619. void ProcessProc(long Total,long Current)
    : R& h! Y. R+ v
  620. {/ N) l1 G2 Z- O# w
  621.         MSG msg;
      n! K7 \. ^& P4 H, B/ i& I
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    . a2 i8 c" [8 _/ T0 m: ~
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));7 k9 n4 E% r$ J/ ]2 i( m; D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      y0 d- ^  ~1 u- H
  625.         {
    ( }2 G8 w" W6 r0 B; `& j
  626.                 if(!GetMessage(&msg,NULL,0,0))3 g% O" b/ H7 K% G' a
  627.                 {
    ; J3 y& V6 K  t; `+ G2 [
  628.                         return;# I5 W% _) ]9 b
  629.                 }
    1 d: d& Z8 ^7 {  y! n3 ^! K; {
  630.                 TranslateMessage(&msg);, `5 l4 |# p, h2 S5 A
  631.                 DispatchMessage(&msg);. \0 n5 K9 A* ~
  632.         }       
    - [3 |' n# t' Z% F- }% h4 o- \& g
  633. }
    ! L0 G# |: K! h( ?3 ^# w0 r
  634. 3 K/ |- I$ `, j0 H- L
  635. BOOL bFirstChar=TRUE;+ I7 g$ \& z" X4 d8 A, x% h

  636. / X  a9 g# j- k
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 x  R  A6 f0 m1 C
  638. {
    - q. O3 o' b0 o/ ?+ ]
  639.         // TODO: Add your specialized code here and/or call the base class
    3 g8 _2 Z; v! [; u  n0 j$ R
  640.   switch(dwProgramState)5 m/ y6 @' n9 j6 Q! f( h7 T
  641.   {
    4 C: Z) P# d- j/ b" [/ K* ]+ s9 H) A
  642.   case AP_NOTHING:
    " \3 x2 A2 Z& B
  643.     switch(dwStartUpSteps)
    5 s* Q1 G7 e% T1 y( x! I2 N: Q
  644.     {
    " i( a: `+ T4 i3 G1 f& o, v: m
  645.     case 1:: w) p9 G9 d+ c& a% ]: M
  646.       {
    * i0 d: a, F- F
  647.         int i;" ]7 z$ a3 e4 w0 g
  648.         CDC *pCDC=dlg->GetDC();
    " w2 b. |' x/ s5 D3 `7 o1 y* ~
  649.         HDC hdcwnd=pCDC->m_hDC;* A3 m, J- E7 V7 n' n& ^, f3 B
  650. //        Graphics graphics(hdcwnd);! }3 ~8 f3 Q+ X
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");' d( r7 {6 Z; O( \  `6 T7 k
  652. //        INT iWidth=bitmap.GetWidth();
    6 Q4 O, L8 a! v
  653. //        INT iHeight=bitmap.GetHeight();
    5 P; J$ c4 k8 B$ h, N9 S$ J) q8 A
  654. //        Color color,colorTemp;( @7 w& H% w' q2 f( f* `% J. ~$ ]5 _
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    4 G/ M' z, L9 k& m  V$ X$ j
  656. //        {
    , e$ W/ |! c( W" m7 ^( L
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)" \- P* u2 `8 M- E
  658. //          {: o% Z' N" N" u; Z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    9 z" R0 X8 M: @6 @. z8 H' Y/ U) D9 T
  660. //            colorTemp.SetValue(color.MakeARGB() `! c4 v9 ]3 @& f: b  m0 [
  661. //              (BYTE)(255*iColumn/iWidth),% @& B8 `1 P6 r# ?  O( }$ A  @& }( \
  662. //              color.GetRed(),
    ; l- I! `- D4 D, A; L5 F. u/ u
  663. //              color.GetGreen(),
    : x" S9 Y8 D4 b& }, ^* v
  664. //              color.GetBlue()));
    " ]0 o+ W& u+ I) u" Q0 f7 ?
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);/ w6 V8 E; n1 \1 N9 I
  666. //          }
    8 X5 p/ {; l3 G- b, `5 k1 L
  667. //        }/ x- q2 [5 g4 Q$ `
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    : N" s. t: L( D5 V3 j, n# j
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % o4 z! L( y) x/ u8 R) d) v, A% q* v
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");+ [/ P. [  q) K" D, z" l
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 o" V7 \! Y' @, c  S& v
  672.         for(i=0;i<240;i+=8)0 R5 j; ~9 I# _+ M' z3 I9 S9 D: o2 b
  673.         {4 i% {* Z7 O% Z: b" o! q- Q- R
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : O$ F4 ^6 W8 f: \( `0 C
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      V+ N3 F2 x, G& X1 n
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ }; `& X; m; S& \9 l) K( L/ J
  677.           Sleep(33);
    / o- ^9 c- w, l0 z+ F
  678.         }" H& H% ~6 e4 k$ Q* i. z
  679.         Sleep(1000);
    ' b8 h3 A6 Y& Q. B
  680.         for(i=240;i>0;i-=8)+ R) p" B6 [1 V; v
  681.         {, U7 y/ f2 ~* m2 O8 v" E
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , L& q, X; r0 Z8 M( \( a! Q7 M* N, E
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ }8 K) r6 v9 T6 z4 \
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , b+ \, Q& ~, E6 B- Y4 X# K
  685.           Sleep(33);
    0 M# z) e* g) ]3 X! l9 H; ], U* p
  686.         }
    1 K  I4 W3 \# j4 v6 C2 X6 Y! }) s
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);6 y( {, `3 E& @9 b+ m
  688.         dlg->ReleaseDC(pCDC);
    ( _' f. \, [/ |$ o
  689.         DeleteDC(hdctar);
    & X$ J9 Z% M) |+ S
  690.         DeleteDC(hdcsrc);% }: ]2 n5 z. x  e. n2 R7 [
  691.         DeleteDC(hdcorg);$ n3 G2 f3 b& I$ U  e
  692.       }0 M' {3 a; M2 B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);7 R8 M% F! U) K$ c1 ]
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");% r2 i* m6 h3 |. J
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");# v: p. L& f$ Z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");0 |. h' x" p$ o. v+ ^; Q% b
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 @$ {3 y5 J7 @) U
  698.       if(!Dn.Connected())
    + K- s$ {  o; ^( F6 F+ f2 Z
  699.       {: l0 C/ |% ^5 I8 K4 J- n
  700.         dwTotalFiles=1;- S. Q/ t1 T$ @3 X/ R
  701.         dwDownLoaded=0;
    5 a) Y. ?) L  a) C( b4 I( P
  702.         bSilentStep=TRUE;: u* g$ s# T6 f* |+ J( a
  703.         bCompressed=FALSE;
    & V, H4 K  c6 N+ b  E; F
  704.         strExtLocal.Empty();
    ; K; p  }4 Q9 T5 H0 L  A
  705.         strFullName="readme.txt";
    - }3 Z" `  p" ]( F# M1 y' I. h
  706.         dwProgramState=AP_CONNECT;
    , @; q' H& Y+ Y" k& c
  707.       }
    ) M5 B, l9 S) m' \8 F2 F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    # N% P& p$ f( O0 ~; Z
  709.       dwStartUpSteps=2;; l$ ?6 ^( c+ m) W8 I1 l- }- h
  710.       break;- b! @3 I* ?( b
  711.     case 2:$ t7 ~( y+ d. d; K4 |% j* m2 K" U
  712.       {! D+ V% M+ ]: y- B/ Y5 C
  713.         int iEOF;
    : L* Y# D2 M3 {; p4 c+ \
  714.         FILE *fp;
    ' ]( h4 ~8 s; Q6 l9 j, U. A) d, n  p
  715.         char szString[512];* X9 V, j: U& O7 f9 k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");( C( _0 m) I- ?
  717.         if(fp)3 U/ r- c, g4 J' L% ?
  718.         {2 s! Y' O, C; k4 v
  719.           do
    8 ^3 o; L% i& l. i3 _4 m. C& W
  720.           {
    . S2 [4 t% q" `- }8 o
  721.             iEOF=fscanf(fp,"%s",szString);
    / I% L0 }& I5 \/ |
  722.             if(strlen(szString))
    6 u* Y& R9 s* ?( D0 C% s. W, D
  723.             {
    3 j8 _2 _( ~! C' v# B
  724.               if(bFirstChar)- x3 ]: j' ~' ^7 C
  725.               {
    7 v" p/ h! @7 k) W* s: q) J0 `
  726.                 bFirstChar=FALSE;
    , K9 v) {$ W: ]4 Y4 [( Z6 R
  727.                 bConnectIsBig5=FALSE;
    ' u! v$ N, L4 Q1 ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ' y! E  ]) x7 y- Q
  729.               }
    8 K* T* l: j: E+ a' w
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    3 c9 v9 Q. R6 Y4 L. I7 P
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ' t$ t9 u6 S. v- C$ E* M4 |8 \7 x
  732.               dlg->m_ListText.AddString(szString);
    6 `. z7 ~+ m+ k  s
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 c' N+ w0 r  E) c. {/ ^6 l9 }/ ~
  734.               *szString=0;+ q! L( ^, h1 v7 m
  735.             }
    5 m0 @. P0 Y( {7 w- Q
  736.           } while(iEOF!=EOF);- K( R7 i0 _, D/ E5 Q- O: Z* ?
  737.           fclose(fp);
    ! x$ N; v; `" b
  738.           unlink(".\\DownLoad\\readme.txt");
    9 [' s! S, |' G: E9 t) \; J
  739.           dwStartUpSteps=3;7 i) O! x3 v6 g
  740.         }
    1 ^' v1 j8 r2 M  i) G
  741.       }& e) e: z% K: C+ r2 n/ k+ c6 a/ C
  742.       break;
    / j/ V% K( A8 [; v3 l5 [
  743.     case 3:
    ! X3 @8 s: t- Y" q" s1 @1 s4 u$ X
  744.       if(!Dn.Connected())) t( j: C+ l3 b- g# }7 N
  745.       {! c: T$ A7 p) {) i) R, a  X& p) k
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);) X! h. u. N% G& x4 z$ G
  747.         dwTotalFiles=1;
      w+ R# a# ]& }# e( n6 P2 e9 G
  748.         dwDownLoaded=0;
    5 B# v0 f+ ]7 [9 ~+ Z6 S& t4 L
  749.         bSilentStep=TRUE;7 h- B4 U  j7 A+ V; k& y. d
  750.         bCompressed=FALSE;
    ( {% ^* S+ I% \9 Z7 W
  751.         strExtLocal.Empty();
    ' }0 p( F# z+ v$ z
  752.         strFullName="checkversion.txt";2 H) _2 u' E8 g( \& U
  753.         dwProgramState=AP_CONNECT;
    + C3 _+ C1 ?0 A1 B) j2 J
  754.       }
    % Z- ^4 L/ C2 S; E# g& L% K
  755.       dwStartUpSteps=4;
    8 m! p* x) J) c9 I+ ?
  756.       break;) |8 j& x/ O; `
  757.     case 4:
    * M% n+ t, A: G7 v
  758.       {  D  m. Y! u: Y6 W- V
  759.         FILE *fp;2 ?) _& N! @0 [
  760.         char szString1[128];
    , v2 D- t% {, N$ g
  761.         char szString2[128];/ u8 X' D8 T6 I4 E* e9 x
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    5 m$ L/ ?0 m' N2 k! f2 Z! G
  763.         if(fp)) r+ _) T9 d/ c) ^6 o/ R: N% k1 C
  764.         {* r, K' G9 T$ W5 g: A1 q
  765.           fscanf(fp,"%s",szString1);
    / r0 e1 z7 h; W/ ^
  766.           fclose(fp);
    0 ]5 S; J) n% y' U: a
  767.           fCheckVersion=atof(szString1);' O, P' x% c4 K5 L0 @) X  n
  768.           fp=fopen(".\\checkversion.dat","r");& D1 `" y' [- m7 T6 J# }
  769.           if(fp)' L6 ?, Q; X; i5 ]5 s% D- n
  770.           {
    ' {" i3 g# \- j) o" Z/ J' Z
  771.             fscanf(fp,"%s",szString2);
    # ^6 V) l2 i! V  [0 A
  772.             fclose(fp);
    % Q+ D' E" z+ c- V3 N, k
  773.             if(atof(szString1)!=atof(szString2))
    - d# w8 b0 q  [- P7 m$ a# K2 ~6 ^$ F
  774.             {
    ; T' t' o- I0 \1 C( ^
  775.               if(!Dn.Connected())' P4 C1 S' |% |% o2 S9 r( C" U
  776.               {
    # {3 `+ p9 |; V# _9 M, b
  777.                 bFirstUpdate=TRUE;
    ! ]% }! g4 S3 i5 R) Y
  778.                 dwTotalFiles=1;
    ! s- ]1 g5 i3 d( l3 k7 d
  779.                 dwDownLoaded=0;
    0 C7 y' R% U& W! b1 w# z
  780.                 bSilentStep=FALSE;" A8 C3 z: Y" y3 Z  f* q9 c
  781.                 bCompressed=TRUE;
    ! o; R! @+ |) R: f5 I$ T' h( n( {
  782.                 strExtLocal=".\\DownLoad\";7 k' ?# D' F9 n3 @
  783.                 strFullName="update.txt";$ @; y. a+ y$ b, @# F
  784.                 dwProgramState=AP_CONNECT;
    * W7 A0 u0 ^/ Q, \9 m% D  n0 ~
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " D, V( x# X" O. Z/ [
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      p) B* m+ k- z3 S/ s5 A3 E
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ( ]0 a- ^' _, P0 W

  788. + u5 O" ^; G6 _0 G* G
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ r' e0 w8 G; E% K
  790.                 unlink(".\\DownLoad\\checkversion.txt");& e' _9 R6 w- _" ]; N5 Q  X
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    , R6 j; u* X3 a% s& x0 [3 h; L
  792.                 {. r& m3 f# _) U# A$ F$ y  g. x8 v
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ) I$ j9 y( B- H% w7 ~
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    # `  B$ |; M# r) f* O
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    : k& o% R4 R4 M  L
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ T1 s! Z* N5 z4 Y! m$ H. E

  797. 2 W; Z/ [) S. `4 L: r
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    5 t$ f9 I; ^+ h. i1 T" B  k. F3 t
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; c4 t5 U7 o6 |9 G5 M( j
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! n9 M2 K" t7 i: S: R1 t0 z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 v( v3 Z) m8 J1 A( B# @8 F9 Y/ G1 t
  802.                 }
    , E( H4 O+ f# S: l# R
  803.                 dwStartUpSteps=5;4 W" a8 B- t; T1 j4 g/ I
  804.               }
    ! M4 {. W4 `- o+ {
  805.             }
    - S  @: ?( U. N$ w* Z
  806.             else& \8 \2 H! L- p0 e9 n9 V
  807.             {
    $ b. n7 x: }8 l, M
  808.               unlink(".\\DownLoad\\checkversion.txt");* Y( y. v3 M8 K! \7 ?6 o9 c* r( ~( J
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' G1 z. o3 R% H: e
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / q' \$ i' O' l( g
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    - {* _& q; Y3 e& a, g, ?! T: D

  812. % n( Y7 t, F  I9 I
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! [& S/ F# k* W" Y8 G/ j$ L# `# N9 g
  814.               dwStartUpSteps=99;: z' M, I. [' s3 j+ z; q
  815.               bFinishUpdated=TRUE;
    : g. a" \) V6 ]/ q9 L8 d% W/ |
  816.               bCanUpdate=TRUE;
    6 q1 |! W5 P8 X1 q( x+ m8 U
  817.             }
    / V, a/ e! K! f& y9 Q5 R5 W" \
  818.           }2 ~$ K' w/ g& P, F
  819.           else6 G) N# m" N; |+ h# G2 o
  820.           {
    - j% x5 s9 N% S9 a" J" w8 V% T6 M
  821.             if(!Dn.Connected())* G3 g1 G) W7 N+ S& k8 ]
  822.             {' g5 s7 d$ }/ e* I# z$ M& j
  823.               bFirstUpdate=TRUE;9 {6 Y% U8 b- R  D, h" W( t7 _
  824.               dwTotalFiles=1;0 @* ]+ n0 C# G+ C* B" u
  825.               dwDownLoaded=0;
    9 D" Q+ t& K. _. w8 o
  826.               bSilentStep=FALSE;: |9 F# ~$ X) c, L4 O9 n
  827.               bCompressed=TRUE;
    - U& Q% u2 `& x% V" ^: ]9 e
  828.               strExtLocal=".\\DownLoad\";
    + `7 I5 J8 m* X7 o7 ^
  829.               strFullName="update.txt";: w- e% P- o: J$ p+ g  v
  830.               dwProgramState=AP_CONNECT;
    : ?; U. `' C: E  f; P
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! e: f8 ]5 F4 u  N3 a
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: l. r3 q) L6 ?2 R( z+ S+ o
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");. o  b8 E/ g1 I* Y% u
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , @9 @1 S' N" w
  835.               unlink(".\\DownLoad\\checkversion.txt");
    # Z4 ~0 P% O) b1 P6 q* z3 H$ j
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)5 E8 `& ^" Y' u
  837.               {
    9 P( {3 V+ _1 ?8 u* P
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");& c) b3 M( x/ D$ y9 C
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");; \) o, z; o$ F+ Y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    1 F- U; v. }+ K6 O8 n) Y
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- Z6 W# Z, q" R/ B( ]: A+ q( r
  842.                
    + Z7 b. I" }. }1 N% k/ K  Z
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 j3 D: j5 j+ c# B
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 N% H+ N4 q! w  B9 S
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");; y5 {" K  v8 {6 w* v2 D- V
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! X, a; n. i2 B$ q3 d( E
  847.               }
    , l& m4 {- f$ R4 D6 P( n- k
  848.               dwStartUpSteps=5;
    : n/ M4 @: z. o. W
  849.             }
    0 C6 {1 R% _# h' t6 S) x
  850.           }
    $ n& H: O- z: J6 W
  851.         }
    4 _* T- l3 l& H% S2 W# \6 V1 Y2 U
  852.         else
      b! R: Y. U3 F6 p* ~  L
  853.         {5 s& y9 I2 u; ?  P) M- D0 O
  854.           dwStartUpSteps=3;$ y# q) N3 S, `2 |# m1 L; h* f  G; n
  855.         }2 L1 U4 Y% Z* f6 b! |8 D
  856.       }/ f: r5 I  g9 o+ j& _( V) i8 L1 @1 k
  857.       break;  Q2 p. s3 U( j
  858.     case 5:
    ) d8 L9 u1 f- _' ?
  859.       {3 k) a( Z* T' W
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); t$ }2 \# {' F8 G9 O8 m! W
  861.         {2 Y$ n. t! c* a0 i6 M& Y
  862.           int opt_overwrite=1;
    9 d- j6 {' D, h+ S
  863.           int opt_do_extract_withoutpath=0;  l4 Z! Q- v3 C% k
  864.           unzFile uf=NULL;. W+ C( ?, ?# G* A

  865. ; E/ g  A+ s1 {3 j+ x0 {! H
  866.           uf=unzOpen("Wsa.zip");
    9 ^7 M% V- M; N6 |! P; Z9 `
  867.           if(uf)( n0 r- P- {) d2 p; H4 s  {0 S
  868.           {8 {& }8 b' a" R# d: R4 q
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    9 `: h2 A: g) `! l
  870.             unzClose(uf);
    - V# a6 r. x3 w& u7 V
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");3 P. f' q! V2 m
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    + i6 [2 H0 O- ]; o* r
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    - Y3 J/ W. C* h% e) ^/ j
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 b  k* I" m* Q: D+ F
  875.           }! Q: U- T5 Q- J& v0 n; U" r
  876.           DeleteFile("Wsa.zip" );
    . b3 q, c( J3 T) E" J
  877.         }. N! ~3 R9 c* I/ O3 O
  878. ; F; e: N4 x  p% l( B( I- H
  879.         if(CheckLocalVersion())  U, R. J$ n! u+ U7 @8 x5 Z/ u5 p
  880.         {' f5 P" {$ T( z- B2 ]7 b+ i
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");8 F4 X: _! A  A5 a- v1 q6 `9 M1 {
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");; Q) G1 V' F; F4 l
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    . M2 I" m0 X9 W( n! Y
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 a6 w2 y' Q1 Y  z4 i. O, A
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    2 b- X) |& m. o8 _0 D/ Y' ^5 D" d
  886.           dwStartUpSteps=99;
    # N% c* l: G. _! R; w9 y8 @( U1 f( U
  887.         }# d, j3 o4 l1 b* D2 w
  888.         else: P- _# ]2 P) k6 O* b/ E
  889.         {, K# q+ a4 A* A0 n7 B
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ) M- \6 V( P4 q4 L% z0 G  A
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");1 n0 m5 q3 [/ y" h* ]; T; M
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");3 B5 p2 O( f& U; c, {. z

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

評分

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