找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
# ?6 M7 @7 }7 e, G3 `; B$ W* u
  1. / RevApp.cpp : Defines the class behaviors for the application.  |4 v# Q! ~, `5 i: h9 ~" q
  2. //
    ; f6 U3 D/ X0 h4 C/ A* G: v
  3. / u; n0 c: g$ @5 y# m3 K
  4. #include "stdafx.h"
    9 z0 y6 B7 p4 l

  5. 8 E% `: l" o, B& {7 \! E
  6. //#define UNICODE6 c8 e* n1 V/ T+ ]4 W
  7. //#include <gdiplus.h>4 Y+ Z3 K5 @' Y
  8. //using namespace Gdiplus;) I6 w6 \4 R, W9 P2 ]1 i
  9. & K- y, [% }1 L- y+ |
  10. #include "RevApp.h"' a/ y  f$ z# Z5 z
  11. #include "RevAppDlg.h"
    " G3 r3 k& D3 R7 F2 q6 ~, g

  12. 9 n4 [" W$ S; D2 K2 y# j  m
  13. #pragma warning(disable:4786)# l+ L* k/ r  x1 U2 r2 s! }3 V
  14. #include <map>& j+ Z2 e3 ~6 G0 f6 s+ f
  15. #include <list>
    6 o/ m) O6 }6 k  A- m! G* g
  16. #include <direct.h>
    & q( i# [; K" @) o; U

  17. 5 ~& Y* i9 Z) o4 u/ n
  18. #ifdef _DEBUG
    & q! j# y3 I" Q* W( O0 t4 [( s
  19. #define new DEBUG_NEW0 K- p" g/ G% [6 ]: y- [6 e
  20. #undef THIS_FILE- v0 @7 ^& v+ W# d. p
  21. static char THIS_FILE[] = __FILE__;
    2 ?4 E# F0 H3 ~8 E6 @
  22. #endif4 Y' }' O' n# v" ^5 x( s7 ]
  23. #include "SkinResDef.h"
    - K2 ]: H& {) @" N
  24. #include "ChangeBG.h"
    " F8 o7 i2 U9 o, |6 T% C/ x1 I
  25. #include "AFXINET.H"/ z3 U) L2 `2 V1 n

  26. & l, d$ N( K+ h
  27. #define TRADITIONAL_CHINESE 0
    / `# u( {3 e. _8 \/ ?! l  ~# r
  28. #define SIMPLIFY_CHINESE 1, `# z: ]) w* J
  29. #define ENGLISH 2$ {% t4 [; |: R! g
  30. int m_iLanguage = ENGLISH;
    1 P# l+ a# H6 T* a7 \: G4 F% T
  31. /////////////////////////////////////////////////////////////////////////////
    % s( A2 c5 u/ b2 b' [
  32. // CRevAppApp
    7 e0 T% w; r% e: x8 r
  33. ) y  f" ?; u- K$ J8 j
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ) B; e* B" S  w) a6 ^: w, y
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    2 x  h# d) x0 b8 _
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    3 h7 y0 x7 Y8 _" D- a
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ! o+ u; K2 l# k/ J; H, x5 Y
  38.         //}}AFX_MSG% P( a" S3 B1 |
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ( h1 P0 S+ _) }! L
  40. END_MESSAGE_MAP()+ {- Y" @8 o- b0 Y

  41. ; A2 F, S8 y1 [5 p5 r5 x+ I
  42. /////////////////////////////////////////////////////////////////////////////$ `. r* B9 j5 D
  43. // CRevAppApp construction! l0 B+ @) N% n) h$ y! P) P$ ~8 q
  44. 0 `0 e- I+ t% \4 ~5 G$ h
  45. CRevAppApp::CRevAppApp()4 O) a( @+ E3 r$ r+ M
  46. {
    1 |9 \3 r" j, R0 i: b( S: f' L5 g
  47.         // TODO: add construction code here,+ W$ T/ P- w% p' r3 P: L( h
  48.         // Place all significant initialization in InitInstance
    / ^; R; B/ W7 C
  49.   bDisplayIsBig5=FALSE;
    , n% k& ~- B" A" G4 M  A
  50.   bRestartUpdater=FALSE;
    * w( I9 F+ ?; Z$ e4 `
  51.   bFinishUpdated=FALSE;
    * l/ K" y* z( y* w7 Y' H4 O
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    & T' Q- @& f0 r* o$ d) T- V
  53.   InitChangeDataBig52GBKS();0 s* o. O+ r1 r
  54.   InitChangeDataGBKS2Big5();
    ! G- B7 B% o1 g# |  @+ ]0 H
  55.         //% K6 e5 D& ^5 B* w8 g
  56.         bClickRunExe = FALSE;
    6 T+ X4 ?+ h1 L, A4 g6 G, D
  57.         //
    ( J% o) U2 l7 t
  58. }
    ' b9 x* P* x. l0 u5 b

  59.   P; a0 d8 p' s% H$ t
  60. CRevAppApp::~CRevAppApp()
    ! q9 ~1 J9 l6 }" o
  61. {& O2 H& D6 C% Q, ^5 [
  62.         // TODO: add construction code here,
    4 a& ?. C1 e5 b1 j5 D* M
  63.         // Place all significant initialization in InitInstance
    - U- B5 f5 U5 L5 ^( m% _& _' V. [
  64.   EndChangeData();  x) [4 {+ _& q3 W, f% f1 M) w
  65. }
    0 q1 R: w' W4 x# J5 S
  66. . w4 D$ C- I1 |* \" y. b7 P
  67. /////////////////////////////////////////////////////////////////////////////
      j/ a, U3 F. H
  68. // The one and only CRevAppApp object( v$ j1 D! H4 D5 L2 a" _9 C0 }

  69. 7 I. J, c5 Y8 p, |
  70. CRevAppApp theApp;
    + f2 f9 k5 S, R2 P' c

  71. 7 n5 l! Q" g6 p6 y! u
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    # t, c- m: @6 k) T/ i* t
  73. {; L( q7 x) |! z
  74.   int iEOF=0;
    6 K4 E  B8 d& j
  75.   char szTempName[MAX_PATH];& R$ T0 v, ~9 W5 _$ s! c+ ?
  76.   *szFileName=0;$ F( M5 U0 |: W* Z% [5 b
  77.   iEOF=fscanf(fp,"%s",szTempName);+ X4 L9 k+ K6 z. w* G5 X
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& N5 |/ P2 p" V: }1 j
  79.   {8 @5 `- ^1 \, U. k
  80.     strcpy(szFileName,&szTempName[1]);) @' W$ U1 }/ l/ D
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ! d: D8 e- f) v! k; O
  82.     {$ f5 A/ l6 l. t; p- D  v- \( V
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , z. l8 t/ c4 Y. c7 S% i+ p
  84.       strcat(szFileName," ");
    ( ]5 r5 w2 o% @; L2 N
  85.       strcat(szFileName,szTempName);* K. N+ `* u+ g" q
  86.     }
      ?6 L, c, S; v5 G
  87.     if(strlen(szFileName)>=1)
    % _- k7 Z; A1 C
  88.     {1 h, u7 ?+ @4 w! w/ B2 [
  89.       szFileName[strlen(szFileName)-1]=0;
    5 G) R# w! t; t: p, R
  90.     }
    # @) L/ O- ^, Z3 G+ y9 ^
  91.   }
    / E* g- |0 J/ s9 P  l2 y) P* {
  92.   return szFileName;: _. I: m  ~0 K" |% ~- ~3 W
  93. }0 y3 Y- Z. |9 I+ D9 O6 p- n& @5 S

  94. 9 n1 W* q5 t7 @# Q5 \% A6 g+ L
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)8 U  N2 u6 r; e" A5 O5 r
  96. {
    ( a* G) P6 i9 H
  97.   FILE *fp;
    / P; x0 p3 Y  r/ F
  98.   char *key=NULL;
    4 l6 G' O) R  t* w; T& Q( ^& Q9 [
  99.   char version[MAX_PATH];
    - k) S& _& ~/ a2 ^+ R5 u6 G7 b
  100.   LPUPDATEFILE file,olds;6 l) ?- ?  @+ D% j: i# S
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
      t3 l( M$ d7 ]; {; }/ s. H

  102. . H& w" N7 R& Q5 X  x# T
  103.   UpdateList.clear();
    3 b9 u# ~5 I- I0 B6 v7 F
  104.   UpdateFile.clear();" n. W7 e. m' \: C$ b6 g
  105.   if(GetFileAttributes(filename)==-1) return false;, F) u8 p' d$ R  g
  106.   if(!(fp=fopen(filename,"r"))) return false;0 H9 j( b. c) l
  107.   fscanf(fp,"%s",version);
    * v- o2 W# {7 h
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }3 E" s- c. B/ [, I" Z
  109.   while(fscanf(fp,"%s",version)!=EOF)
    & O4 R3 [" X7 o% A" `
  110.   {- r/ Z8 V, X# |
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' ]9 x: R7 _5 G8 O" g, G+ F' y3 `
  112.     fscanf(fp,"%s",file->path);' S/ i; M5 t. U
  113.     ReadFileNames(fp,file->file);
    ! @1 C  }0 r6 v' W
  114.     strcpy(file->full,".");: P( u) g9 N# R& [! q
  115.     strcat(file->full,file->path);
    0 k1 x0 n5 Z# m  Y$ L' l5 R
  116.     strcat(file->full,file->file);. D9 R) W* z  M! E: l
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- Q1 U9 a! d$ f8 i7 b, n) s
  118.     {
    7 \6 }( S( V6 W# Q! N
  119.       file->vers=(float)atof(version);
    / X0 l* B; u0 J
  120.       UpdateList.push_back(file->full);
    " e3 C) k% O7 W
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));, i- Z; M# n, Q
  122.     }
    0 M+ N, n5 x, A; Z  T( h7 Q; u
  123.     else% p, N; n! f+ Z& G
  124.     {
    / E! P$ S* i5 \4 z, l9 y/ b7 f
  125.       olds=(*p).second;
    8 @+ h/ p2 t' {; `# U: T
  126.       if(olds->vers<(float)atof(version))* R' i  d) m0 n% L) m" ^
  127.       {: E3 S2 c% p+ r4 L
  128.         olds->vers=(float)atof(version);
    0 J' A, x: r7 M( Q- c' ^: T5 G
  129.       }
    1 `+ z$ Q  N5 @. E, X
  130.       free(file);& Y: V& A" M" W1 B
  131.     }, h7 h: v. `; l- t
  132.   }) ~  V# t! [6 W8 |8 l
  133.   fclose(fp);
    . o- v- J! ]( h% _8 b( A  M
  134.   return true;5 q+ ^0 U& w4 @2 X
  135. }. F. e% L) f+ f2 U# i- a
  136. ) l6 c) l( M: Z; X0 S
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)& f+ J" h3 K+ ^( k/ Q5 E  M
  138. {' X! E: o6 X) `, h7 P+ p0 O
  139.   TCHAR  szFull[MAX_PATH];
    ! G. B4 |3 x8 [! d
  140.   TCHAR *token,*inter;0 L0 x. M7 q/ F
  141.   *szPath=0;
    # a  _$ q0 s. e* g2 X( Y
  142.   strcpy(szFull,szFullPath);6 N' s, e! O3 v, i5 u  V
  143.   token=strtok(szFull,"\\/");
    % q) L9 R" e& u! m. _' _
  144.   inter=token;
    % [2 f! g5 p) `& p
  145.   while(token=strtok(NULL,"\\/"))  q: o0 f, z- \- j
  146.   {
    $ Q' P- w: Y% @3 i! K5 O
  147.     strcat(szPath,inter);
    # p3 q/ ^% ?. I$ A+ x+ _
  148.     strcat(szPath,"\");+ w" ~* {1 S2 O
  149.     inter=token;- f, _+ {. f0 R% \. J0 O1 }% Z
  150.   }; j) k) k3 g5 I. r6 t, ?
  151.   return strlen(szPath);" z+ F$ p# `' {& Y3 q
  152. }
    . L* e) S: a5 W$ R$ s' L1 |

  153. $ ^. ^' m6 d' C8 R8 c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    1 T+ g  c9 Q& l% h# B3 r0 E" Y
  155. {" U. f1 N$ q! {- Z  \
  156.   DWORD attrib=GetFileAttributes(Target);
    # t) N/ w  _$ l) U; {
  157.   if(attrib!=-1)6 Q. n0 ^6 ?: I) O1 G  `
  158.   {
    " k' T) r& p/ b& Z( M" r( r, K  o/ Z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    % A6 f# C, o7 Y  |
  160.     {
    : Y/ i1 \6 q2 P! {( [/ p, E' I
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);0 d( H6 n! H0 t; M6 L4 Z
  162.       SetFileAttributes(Target,attrib);7 A' }3 A; e' T* _0 w, n$ @9 [
  163.     }' Q. ?2 K. P; X: n# d5 E5 _- ], @
  164.   }- w- X6 D9 R1 i8 O3 F; S
  165.   CopyFile(Source,Target,Erase);
    0 V, V) U+ }: ?, V
  166. }
    ) W# m( y7 j, X1 b7 l2 I6 Q

  167. $ F$ F6 ~# ?* `. {% l& f& x4 c
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)% u' K5 Z" W2 Y8 @, J
  169. {
    9 I* z9 a7 y$ z
  170.      FILE *fp;
    5 R2 j- U7 b4 N  |* {/ x
  171.      char  szBuffer[8192];
    4 @# \2 ^0 V5 v) `
  172.   va_list  argptr;& p3 n. |6 V2 U: r, j) g

  173. ( e# ?9 v, K0 x4 l# s
  174.         va_start(argptr,message);5 ~2 J( J7 e1 m
  175.         vsprintf(szBuffer,message,argptr);1 }0 `4 U* \3 m/ I
  176.         va_end(argptr);5 _6 ]7 W0 T& z( P$ Q
  177.   fp=fopen(FileName,"a");
    * t7 U- X' C6 `) Z# b
  178.   if(fp)
    7 w8 F' r0 [- B1 K' t5 z
  179.   {
    & @2 A1 H. M( C7 m+ K" m4 l
  180.     fprintf(fp,szBuffer);
    $ _2 G- b3 h& V* h: I, E
  181.     fclose(fp);
    - z! C% `5 G, s* X0 e
  182.           _flushall();
    : i$ A. Q. g$ M# K
  183.   }
    $ D, k1 B0 I  f' \5 T& j5 |2 W) ^2 n
  184. }0 H5 Z7 u9 a" z

  185. ) D/ U- R6 P  @
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    # v; X* e5 X& o3 E$ w- Z
  187. {
    3 B( {$ b$ U6 z) }  z
  188.      FILE *fp;/ s1 K9 l. ~2 _' n
  189.     DWORD  attrib;5 y0 t4 X0 ~: |7 w' {2 R
  190.   attrib=GetFileAttributes(FileName);
    $ o+ G! c! R# e' r- I
  191.   if(attrib!=-1)
    # A1 }' X4 p: E( b, q/ L
  192.   {6 r' d6 C+ U) o1 H* s
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);" \! w) l8 K* y2 F3 v
  194.     if(!SetFileAttributes(FileName,attrib))0 |& e# v) X% w7 O% I
  195.     {$ I1 _1 L+ Y+ t! v5 o$ K
  196.       return FALSE;
    3 `  c& M  h2 J% o
  197.     }
    % L2 ~( u7 s# V" ]
  198.   }0 Q, u" t- U6 @* x6 X4 i0 q
  199.   fp=fopen(FileName,"wb");  i# \- X5 Q$ _/ Y+ h; l
  200.   if(fp)$ l* B( V6 R5 D8 M5 U" y
  201.   {
    : p" O$ \& n- Q) s* |
  202.     fclose(fp);' _6 i1 G5 R& F  Q2 W- k( B1 i* |$ ]2 F
  203.   }
    6 w3 K# q3 d; g
  204.   return TRUE;2 b$ ^" U0 M* e! M8 D" @/ n" l+ b2 v
  205. }2 l' O: f7 ~" _( k4 P

  206. ; h- ?, b0 a! Z' a
  207. BOOL CRevAppApp::UpdateLocalVersion(void)6 Y$ Z( ]; s0 a; U, C* H
  208. {
    8 F+ Y3 l3 \) @6 M. z: V
  209.   char filename[MAX_PATH];  K) U3 ~: j9 L
  210.   LPUPDATEFILE file,olds;2 g, s1 K, J7 G$ m9 V; y. K
  211.   std::map<int,CString>::iterator i;
    " ]; p) Q. F, t/ K" }9 x1 |: |# |
  212.   std::map<CString,LPUPDATEFILE>::iterator p;2 L5 \. D" t* \  z* t
  213.   std::list<CString>::iterator l;7 ~8 C# ^# Q( n" c% L* ?: M# ~
  214.   }& T2 Q" R* G$ X: r; y
  215.   if(bFirstUpdate)$ X: O! V7 H: Y
  216.   {8 A) _6 |+ S! j! Q- W
  217.     dwCurrFile=0;4 z& F/ {$ [3 o  R/ ^- d
  218.     bFirstUpdate=FALSE;4 }. f: H# D. g% ^+ j$ n5 O9 S
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# N/ t/ E$ v1 t+ E' X, j( D; E
  220.     {
    , o; N. G, [2 ]4 j# ]3 @# Q
  221.       dwTotalFiles=UpdateLocal.size();5 W+ u0 H6 B% q" V3 x
  222.       dwDownLoaded=0;
    ! ?# v* X" p# k% R
  223.       bSilentStep=FALSE;8 m. N) m2 K9 F  _7 R# z6 a  P
  224.       bCompressed=TRUE;  c6 y. g7 s' ]7 ~4 b; k( L
  225.       strExtLocal.Empty();4 [5 f* }: P$ w  e, t( x
  226.       strFullName=(*i).second;
    2 s3 s  P" Z& e7 |+ u
  227.       dwProgramState=AP_CONNECT;
      Q  o& y. L% ?: S8 r5 P3 Z2 x
  228.       return TRUE;
    ! h; i3 V. a& _
  229.     }
    9 d7 O7 b) e6 E6 x4 C
  230.   }
    5 a' A( C" e% e# d. V2 e
  231.   else if(bRestartUpdater==FALSE)1 t; ~/ S4 W3 i% h0 x$ l* W
  232.   {
    6 ?. k6 b$ _6 ~6 `1 H' c
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    , ~" k$ x5 i( P- z" i- Z  n# J
  234.     {
    & \$ \) ^5 `# U8 b6 T
  235.       file=(*p).second;% }$ d$ p5 J3 s4 T
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    . H1 w. B) J8 L
  237.       {
    0 ?; v+ U/ \4 E8 O
  238.         olds=(*p).second;" R& P% S" t: ?, W) F; q* A3 u) D
  239.         olds->vers=file->vers;& h) Q9 E5 s7 n
  240.       }( ^2 u0 w0 q. [  j. f
  241.       else
    & F  }  ?! h1 `9 Q( V, Y; t
  242.       {
    ( u( Y! T! b3 n$ ]4 S8 d5 U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ G( d/ [* k) h9 A  L( V
  244.         memcpy(olds,file,sizeof(UPDATEFILE));; R* Y, ]$ \( j- a6 A" j" G
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    , w6 h4 |9 M% H! `4 `
  246.       }
    , N' A6 C0 h& F: x
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    . M1 p9 @1 p' [& k' z- s# D
  248.       sprintf(filename,"(%s)",file->file);
    0 v0 b% o( X/ s; G/ ]
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : o, J4 p7 C- X6 z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }& X3 {/ \0 g0 ~
  251.     }
    2 }# x* N. E& @! t# i4 g; [( c
  252.     dwCurrFile++;) }- d. E2 F  M, R$ g: U) t
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : V! x- V9 d# O' b2 ^1 a- l
  254.     {9 M! C' ^8 D, I! j! H- O* ]9 a8 x+ i
  255.       bSilentStep=FALSE;
    4 T# ]4 ]; J) L. t+ A
  256.       bCompressed=TRUE;# u0 a- d+ m  D$ K% }# K
  257.       strExtLocal.Empty();
    : z+ K/ n. h- W
  258.       strFullName=(*i).second;9 ^3 u9 Z% _2 h) {; E9 z
  259.       dwProgramState=AP_CONNECT;# _. [: M( o. o4 d2 I0 q
  260.       return TRUE;+ _: Q7 ^* L( Y+ _7 L
  261.     }
    & p; u5 p3 O8 [- m; o8 O
  262.     if(!bRestartUpdater)
    $ D" z# k) b( @9 ^0 d7 _* R
  263.     {3 O# |& |3 R$ a& e+ N3 ~+ S
  264.       int iCurrSize,iFileSize;! ^9 B/ }0 p' T  M
  265.       iCurrSize=0;
    ; ^1 X  S- z6 @7 N
  266.       iFileSize=UpdateList2.size();: q* V" |" G( K% F
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");, A! X& v) n2 |* Q, \) F1 v
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    2 |& P2 U1 l% x; W! R3 M- n: C
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    1 U1 d7 h) b5 b0 j$ a
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ K6 v! G9 v0 e# w. N: x3 e
  271.       Fclearf(".\\update.dat");% D. g& u9 d* |5 r( s$ [- q4 C, b6 q
  272.       Fprintf(".\\update.dat","Bloodyf\n");9 B6 M* G" ?6 a/ c# S/ n1 o
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) d& k% P. X3 ^4 a  P7 V3 k
  274.       {5 Y$ H0 `( p( \4 E) \0 _
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& u' i) U; E/ Q+ i' q8 t) e9 r
  276.         {
    # D$ G7 U* x: @
  277.           file=(*p).second;  m0 z9 J8 q( p1 b$ Z9 ~/ P
  278.           sprintf(filename,"(%s)",file->file);
    $ F% b; W. L6 v3 r9 p
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 B7 I0 O: r- Y+ a/ }* @
  280.           iCurrSize++;2 M7 O4 H4 ?* ^7 [9 }) T% X
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / R5 R1 v4 P1 N0 P8 z2 _
  282.         }8 S% ~+ Z/ k$ y8 V
  283.       }$ p5 s8 Z$ n. ]# A3 W9 L+ `
  284.       unlink(".\\update.txt");
    9 A% z2 Y0 h$ b  g
  285.       unlink(".\\update.tmp");4 _9 ^9 ]) N" z. ?& a( n& o$ s, R5 n
  286.       Fclearf(".\\checkversion.dat");
    1 l1 a' K4 D+ V; R- V5 W8 \$ e
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);/ C; U9 q" D- E+ H8 g  `' z. `
  288.       if(UpdateLocal.size())% t+ o" g3 j3 y
  289.       {
    3 p$ p" q4 K: ?! Z
  290.         UpdateLocal.clear();" Y$ d# O( w0 n: f8 K0 M0 L" E
  291.       }& q2 f+ D% c9 w: n
  292.       if(UpdateFile3.size())
      k6 h7 u; `; L# b7 F( H; X: m
  293.       {5 K# N) ?" @/ R* p2 h  J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 `! S# U8 I' b: |2 s, i
  295.         {/ f2 B* Q- U# ^$ v4 B
  296.           file=(*p).second;# K( P' ?& H0 L7 n7 s9 n7 T- j
  297.           free(file);: P4 O5 v4 N  @& s
  298.         }
    . K  |" a. g5 q) D. ?! z4 _
  299.         UpdateFile3.clear();
    # m0 U+ b! K: H
  300.         UpdateList3.clear();
    - _$ h' r. f$ U" @7 L
  301.       }9 N( ~3 x& P; j
  302.       if(UpdateFile2.size())5 u7 x! c1 d% f" K7 J
  303.       {
      [, j4 j2 x  c- D$ ]9 }, L' P' c
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + \. c; {1 h3 ?( a) y" |5 O
  305.         {
    / Q- N+ n8 R! `* |( ?; f: F* R
  306.           file=(*p).second;
    & N! c+ c, [# B) x! A' G
  307.           free(file);0 Z* t% L$ Y. H$ |- m4 A" M
  308.         }- V" w( T2 S! M: L8 c; l
  309.         UpdateFile2.clear();
    " w: @5 p6 e5 J
  310.         UpdateList2.clear();- _0 b, W+ {! a
  311.       }$ a5 e  N8 C. t0 p
  312.       if(UpdateFile1.size())  o3 H9 j2 [7 T. F; p7 i
  313.       {
    . R1 J3 D% Q5 d$ G; ]7 N' J4 R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 D! t4 L; {8 ^$ K
  315.         {& ]$ {8 S+ V* c/ a" \
  316.           file=(*p).second;+ m* d- K$ |3 q( w) o/ o# o5 h5 p2 T4 J% U
  317.           free(file);
    6 ]1 G/ P3 a+ P9 j  b/ M2 V. H
  318.         }
    : w1 y5 H, d; e7 Y) o9 ]
  319.         UpdateFile1.clear();! R: S1 V1 t9 W2 N
  320.         UpdateList1.clear();2 W5 ?. O% T+ r6 d
  321.       }. X+ ~. `) \( }! g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));( a4 W1 F( P6 {4 I
  323.     }
    ( p3 D3 s8 O: d0 |; a% [+ V
  324.   }
    5 ]  j" i) n1 o9 l7 @6 L8 J
  325.   return FALSE;
    9 R% R3 S  L8 ~+ u7 D: \
  326. }
    6 f! [. i3 o7 s
  327. * }. @& y0 Y: Y5 s2 {# O7 c6 a
  328. void CRevAppApp::ClearAll(void)
    - O" R$ F/ y' v4 i
  329. {
    / M9 _" a- U$ Q# [, `
  330.   LPUPDATEFILE file;
    4 P) @8 t" n/ L# i
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( b: |- H& M" x/ j: j

  332. # o, O2 v6 ~/ o. K/ U  y: M( J7 E
  333.   if(UpdateLocal.size())# _! I. w3 q9 M( t" s) C
  334.   {
    $ X$ r2 X5 c, E+ a0 {
  335.     UpdateLocal.clear();, G" n' S) B" D- D5 O! S8 o& N
  336.   }* p9 B" Z: H6 x( _/ y9 T
  337.   if(UpdateFile3.size())
    3 ~8 Q1 W( v5 t
  338.   {
    ) a( w- J! _* a
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 N0 A7 @& r# |% u
  340.     {
    2 h5 e0 b! ?3 G3 F% d3 V
  341.       file=(*p).second;
    ' J7 _* e7 y* J- c) Z8 L6 ]
  342.       free(file);) h: k- A! b7 J( ~# W
  343.     }
    / e" @4 A; W- a4 T& t$ _
  344.     UpdateFile3.clear();
    + |0 z  e+ \% j2 g. z
  345.     UpdateList3.clear();
    6 W6 p6 Y' ~0 g2 L7 H
  346.   }
    * b6 N3 U( [3 `  e
  347.   if(UpdateFile2.size())
    # P' a$ L4 ]/ G/ \4 F5 B% M1 O
  348.   {
    1 u5 u  d. z' i9 x1 b5 m
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 {9 h- a7 I2 D' a+ \. k9 N
  350.     {
    1 ~) A; C$ @, b2 J
  351.       file=(*p).second;! b! p* R, u. h) n
  352.       free(file);
    : t8 C% y# F+ J
  353.     }' H- S8 n# \7 c5 j" s" h4 y7 Q
  354.     UpdateFile2.clear();
    + {. F* h# L$ q6 k
  355.     UpdateList2.clear();
    7 k8 U  l' h1 k1 K6 i* [: X
  356.   }/ E' V) f* a7 D: B8 Q! `0 m! Y9 ?
  357.   if(UpdateFile1.size())
      K9 f: z/ u- }: S2 V! E, C! I, W
  358.   {# c% E) l* m- X$ N3 T
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ O7 A" D, S" m! C+ p/ P0 P
  360.     {
    8 N4 A+ j7 k3 C) N
  361.       file=(*p).second;$ N9 _0 H, N" P  X3 y9 j
  362.       free(file);
    - P* Q, W  v4 t& ?$ t, s. |) M
  363.     }3 v- I% O* t: N/ k" E
  364.     UpdateFile1.clear();/ o3 W: N, W/ M, E. i, ^1 D. e
  365.     UpdateList1.clear();. r  W  r: [" C" S0 G
  366.   }( S  t6 M. w* y
  367. }  1 s! S8 Y- Z! i: C
  368.   
    3 ?8 }' z- Z" O3 @4 k
  369. BOOL CRevAppApp::CheckLocalVersion(void)$ D7 H7 Q$ N, I. s. X4 i
  370. {
    " r+ s# W( Y- k- u
  371.   int c;
    8 @8 ^# d1 e9 J/ @5 k( @, F
  372.   LPUPDATEFILE file1,file2;2 t$ \# q  ~( _. }8 ~
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    * W9 _, U" m4 P" r4 x
  374.   std::list<CString>::iterator l;, L$ D, `2 I6 \+ I9 u1 s' B" ^7 V

  375.   S3 q7 W$ k, P. G+ t9 F* K/ \
  376.   UpdateLocal.clear();
    * F5 t4 D4 b2 H& t8 m4 k8 [
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ! [. J' j* n. I1 c9 v
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + \2 `1 T; o( ?, k
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);( j% ~, K9 H8 n3 v! t
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ( C* F( \$ U5 A5 f
  381.   if(UpdateFile3.size())
      ]7 `. d- Z& P+ L! P: m* D
  382.   {
    ' o. F+ H6 @: h7 C5 ]; C, B
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    . J" C* z) h( o# m
  384.     {
    ; Q$ p6 k5 \3 q
  385.       file2=(LPUPDATEFILE)(*i).second;) S0 e& t' f) Q1 B& e7 h! q. ?0 S
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( t4 r- W2 h2 k: }
  387.       {; `9 e1 a+ h. Y" I, z' F
  388.         file1=(LPUPDATEFILE)(*p).second;) f5 r1 p# K$ m3 z0 I+ o
  389.         file1->vers=file2->vers;" B  _' e( D* l( P  n  E' N
  390.       }
    - O( P& p! R4 `+ r) T; X. K
  391.       else. v+ [3 p( Y7 |( c) \1 m
  392.       {
    5 f5 t) `8 z% O1 P! q! j) r
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 q, D7 C6 G5 J# r
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 _0 x5 R% J  B
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));1 k) v: f4 K# L6 r6 e, ~
  396.       }
      t3 f# l! r7 W: J( @- c1 _' d5 z
  397.     }
    8 ^9 H( L3 I' i+ [- R
  398.   }* w5 f7 n  M9 U# ?
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 |( y+ c' n& }' ]/ m- E
  400.   {
    5 I% U$ `% C% E: o! I
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()). J. [& [6 s( Q5 _( @
  402.     {
    3 y3 I8 K) H$ I" e
  403.       file2=(LPUPDATEFILE)(*i).second;
    # _8 y; l+ V5 R/ e, s( v
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 G3 P# I" Y4 m
  405.       {1 j4 J; f# v# I7 N2 z
  406.         file1=(LPUPDATEFILE)(*p).second;. D0 Q$ u: O" F
  407.         if(file1->vers!=file2->vers): k( D  o. R! R2 s. m) B$ i
  408.         {
    6 a8 {/ @, {% K0 m9 `
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 y- S% ~7 o- ~; ]3 M
  410.           c++;* }; v  S% e) U! R
  411.         }$ G0 b6 V- q* P5 \' E
  412.       }4 b4 k; q% a$ t* B  `: ^
  413.       else
    - @5 Y3 V# u. }' t( u
  414.       {
    + X! I! W& p* b5 g2 C
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) |8 ~6 u  Q# V4 K1 _. {
  416.         c++;
    $ v: z; l$ A* _$ w( m! O* z/ @
  417.       }2 c2 f1 t2 A) j6 W/ S
  418.     }
    6 U! j$ N9 R- `
  419.   }# u' a- l5 n5 \5 h9 U9 j0 F1 t
  420.   unlink(".\\DownLoad\\update.txt");7 n' b9 G3 `; n$ D) n
  421.   if(UpdateLocal.size()) return TRUE;
      d. s' d6 S. c
  422.   else                   return FALSE;
    + z6 h0 I% n! f" ?' m0 @$ ]" y# D
  423. }
    2 ?; H. }0 Y; k8 Q% x! P

  424. / U1 J5 S: \7 M2 ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    1 S/ N& O7 B: m/ H
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ; q, R" N7 J: t; O* u

  427. , \' F! w- r* _5 n

  428. 9 x# r/ a/ p! T: [9 ?
  429. - w  e" T7 B1 q& ]+ z7 C
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    & m. d5 s" F1 q# w- L) Q0 Z
  431. {; @$ Y' o2 c, o8 ^4 g0 `! P+ ?6 O" i
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;' l* k+ J, C# H- u. |8 P' P
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 \- p: G6 M& g1 ~
  434.   {5 d/ d% Y6 p1 ^9 H; n4 |: J
  435.     char szLanguage[50];6 c$ `" Q6 V6 }% @
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 H: `1 b7 M$ l+ c; M5 ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ( H' c. K7 N9 X$ [. C& P
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- b, o# T& W# ^+ g
  439.     else                                   m_iLanguage=ENGLISH;
    " O' o$ n- ?8 m  k* b8 G
  440.     char szRegister[100];; }" N7 V& W# {6 w* I0 w, j
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ Q# s% H1 y5 N6 @
  442.     strRegsName=szRegister;1 B; y0 Q0 }9 |4 K: i
  443.     char szPatchURL[100];  Y/ _: `5 [- i, V2 m! i
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ b2 s/ o+ Z. R0 L
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # E; Q' v7 O$ A% l$ y; |
  446.   }; x( B* @5 r$ Z1 N3 {* B6 g
  447.   else! t2 i# c# `, J9 j5 R7 P6 l
  448.   {$ S# s) P+ z& p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 O# y: r% Q& B2 h/ l* d
  450.     strRegsName=DEFAULT_REG_URL;
    : @1 |7 g$ F5 _( O9 Z. i" ?, N
  451.   }+ k5 |, S8 X& C8 g- d* B  m
  452.   if(GetFileAttributes("hosts.ini")!=-1)8 R# |; `  i: ?: G% l0 |
  453.   {
    " {, k5 {' J9 `0 ?2 s
  454.     char szIP[50];
    % y* D3 j1 \0 L# Z
  455.     char szDIR[300];6 N+ }8 y8 K* ~
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
      K3 V( t2 D! I8 w/ p
  457.     {% M' O! s- `* p( d7 K0 h8 K
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");1 H9 ^# p8 |4 `/ i
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    " O8 a: C  H  j7 \  c
  460.       strHostName=szIP;
    $ s6 f1 S0 }' {
  461.       strHostPath.Format("/%s",szDIR);' M9 `( A/ E4 K; q! m
  462.     }0 |4 I9 W+ J. k# i, W9 I7 ]0 ~" i
  463.     else+ T3 @' h- H8 G) P: S  V% l3 _9 D
  464.     {, O4 p0 x4 g9 [% ?9 z) k1 _. U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 n' n# ?. h7 R2 U# O
  466.       {; t2 J! J6 U7 s9 V
  467.         char szLanguage[50];* I5 N) E9 L1 Y' v! g2 o
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 Q1 C  Y: \8 ]6 @
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% C- D+ y5 D( ^2 l% X5 ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  M; m& I- i6 ^$ N; C
  471.         else                                   m_iLanguage=ENGLISH;
    $ p: ^6 |/ q# {) k/ ?1 K/ q
  472.         char szRegister[100];0 s; S( g6 j% g  U5 f7 j  P0 f
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 ?+ t; o* q& l, N
  474.         strRegsName=szRegister;
      O1 B! n, C' j, M  h: {+ [
  475.         char szPatchURL[100];+ `2 r. p' m5 I* z) G+ F, _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");  j2 s1 j( a0 h7 c
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & I0 _5 ~9 p$ O4 X: {
  478.       }
    * K' O9 w7 g7 c, {0 A$ b
  479.       else# G5 p( z  q7 m9 K( |4 s/ Q
  480.       {, t" C. w3 \. X, W
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & P2 z# `7 u5 b! o: Q
  482.         strRegsName=DEFAULT_REG_URL;- @) [4 V9 f  ^1 s( R
  483.       }! y' S* f0 E) u, Q4 g) k
  484.     }% M6 _, ~% j# h7 [1 h& O# Y' i
  485.   }% w! V% o  |3 l
  486.   return true;$ \4 y! A2 ?9 c) |) {( V8 _
  487. }
    3 h" g$ ?' w4 @: N" G* C" Z

  488. $ y/ O! U# z2 y) j0 }5 h( u, h) G
  489. #include ".\ZLib\unzip.h"( F1 E& Y0 v+ R$ o+ ?- H& \
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ; q0 l( w# }6 m
  491. /////////////////////////////////////////////////////////////////////////////2 n* L9 Y" R! D/ O
  492. // CRevAppApp initialization
    $ r4 j: h0 S! I

  493. " C( H- V; C2 Z+ n$ J5 K9 G$ x) n
  494. BOOL CRevAppApp::InitInstance()
    / q4 L2 m2 [6 p, X
  495. {4 N3 I& F# ~( S4 J
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];" ~- `6 V) k: [1 i
  497. 2 g6 D3 J; \/ w
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    2 Y$ r; r, k" q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))2 B( C2 U/ v3 F5 [- v$ X; I
  500.   {
    0 O+ d9 {6 y$ D1 o2 S9 W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");7 a1 S, h$ h' F2 e# J
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    / B" A3 C" P3 w4 K1 z9 l
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))6 U: X6 P7 O! J7 ?5 ^2 j# f4 u
  504.     {
    2 |3 H2 U$ ^9 F! B, F# ~  V
  505.       strcpy(szPath,szPathTarget);
    + O' z, d% z  a* c6 O7 v8 x, Q' w
  506.       SetCurrentDirectory(szPath);( o; W" x8 f. w, \3 t
  507.     }+ r: C0 g/ T; U! D$ M# l$ D
  508.   }
    ( F# d0 N2 `0 K3 M. D6 n
  509. #ifdef _DEBUG' N5 `2 n2 B! A) s
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ W. @; e4 _$ h. z6 X  a& n
  511. #else
    8 ]/ [4 W- D. F& U4 t* p* w9 ?
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 q1 k/ f7 n; L6 ]9 y* p
  513. #endif
    # a) o* i& c" {: Q3 t  ]% O5 @
  514.   {
    0 ~( p4 @. _' g9 c+ a
  515.     char tempFileName[MAX_PATH];7 q- g, f" D3 q% Q
  516.     strcpy(tempFileName,szPathSource);7 J- a3 }* B8 q; B6 B
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( E" g; X; Z! @& g; `  l! C6 Y- C
  518.     strcat(tempFileName,"\\$CSUpdate.exe");, j6 F/ |) Y& l+ [. e
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    6 l! T; z2 y$ \1 }& ]
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    & p  P5 G) C. P2 a  O
  521.     return TRUE;
    , s2 _- H$ q+ ?; @$ O0 b
  522.   }1 Z/ n  m4 K9 @7 }
  523.   // Nuke 0118: Delete run.exe# }* a( L& V2 e  Z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    1 z5 |& o- i8 H! T
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / C- L: j1 S$ f% O5 d1 N. Y$ R
  526.   if(!ReadCfgFile("Config.ini")): s7 Z* I4 i6 d
  527.   {; f$ C. m+ T* ^  Z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 l" p. T( t' b, G+ M1 e
  529.     return TRUE;, l6 R$ v, g2 Z: F: U/ a  F
  530.   }
    % v3 A$ `8 E' ^- ?1 P! v! }
  531.   HANDLE mutex;! p  b3 k5 s0 O& ^! _3 l
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 J- W" Z" ~2 ]& ~% n" |7 ~
  533.   {
    ( u3 k' Y4 e5 ?! |, t: u* C# u
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)/ [- D0 Q4 ~2 k, j) H1 Z5 i
  535.     {' J9 M4 x5 F. a1 A7 e
  536.       CloseHandle(mutex);
    , F3 G5 J2 f. D- {' a# k# ?. j) x
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);0 B) w! [( v; l
  538.       return TRUE;+ `0 V/ y1 F6 z1 @
  539.     }
    ; \; W' t8 j$ B( ?! R0 G
  540.   }  
    6 T6 l* X) o1 O# z3 l
  541.   CloseHandle(mutex);6 G/ N8 `# H4 b) D" b$ W

  542. / k4 w# i# p) J0 J
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);  C8 m& b" l1 E
  544. / D, }, e# _% `1 J" `
  545.         AfxEnableControlContainer();
    9 @% s( O& @* c& R+ s2 M

  546. 3 E: b! w. k/ F$ O9 x* f
  547.   bCanUpdate=FALSE;4 K" h6 u1 J, h0 w
  548.   dwStartUpSteps=1;( p6 d- M! A* X" S% D
  549.   dwProgramState=AP_NOTHING;
    % L+ _; _, o5 ^( |0 U0 P7 F
  550. / p: M. _" |: g! }  p+ s) q. t/ U
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);  O4 j: ], Y; e% E2 @, }

  552. 8 M/ z7 t# {8 j% Y6 w. O6 M& R
  553.         // Standard initialization( A4 d6 @7 s0 @
  554.         // If you are not using these features and wish to reduce the size9 H( _: m- P# d
  555.         //  of your final executable, you should remove from the following) i* a% S: W4 b
  556.         //  the specific initialization routines you do not need.
    6 }* }; Y+ F' @0 l& J2 d' R  t
  557. # o3 J9 Q0 K8 N
  558. #ifdef _AFXDLL
    : _6 k8 O2 [) F- l2 i
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL6 ~5 H) m- l( Q4 Q6 D
  560. #else4 y+ V# G4 R3 |$ M
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically; H( q) H6 M: R; Q& M4 A* Q
  562. #endif" y! l1 W( d  v5 s

  563. 8 H8 h( V/ O1 Y
  564.   dlg=new CRevAppDlg;
    1 W# A0 G' o9 ~; E
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    5 _; j3 r, J, \9 N* E
  566.   dlg->ShowWindow(SW_SHOWNORMAL);& R0 C2 o5 u! \5 o
  567.   m_pMainWnd=dlg;
    9 s9 F' E7 S: h2 R
  568. ( X6 [  X7 q2 I% l) k
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 v2 O: d2 _  d: m1 @
  570. / w$ q1 |$ Q4 w# h! J7 v6 B" `3 A
  571. //  GdiplusStartupInput gdiplusStartupInput;$ m- S3 \1 G6 l
  572. //  ULONG_PTR gdiplusToken;
    % N; Z" _# [# [
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);; f' K8 w7 P, o7 }7 D5 V! C

  574. # Q$ B+ z% G- i3 H# v
  575. //        CRevAppDlg dlg;
    1 r7 {3 V, X7 H4 ^
  576. //        int nResponse = dlg.DoModal();* M2 O! u6 C8 e/ P
  577. //        if (nResponse == IDOK)
    $ ?. ~3 U3 f. ]6 V" V
  578. //        {
    ( v) w' {9 b% \8 C" Y
  579. //                // TODO: Place code here to handle when the dialog is5 P4 u% T; }. d
  580. //                //  dismissed with OK
    ! L  i7 G3 C3 Y, x0 z
  581. //        }% n& t0 `, o& ^! q: G% s, W, ?
  582. //        else if (nResponse == IDCANCEL)
    5 ]! K; f! i8 t; b4 P
  583. //        {1 Y: i; {7 r( G
  584. //                // TODO: Place code here to handle when the dialog is
    : Q# {) H  c, R& V# N* N  ]
  585. //                //  dismissed with Cancel) X' v, G2 o, i1 i' U# K3 g' P) N4 Y
  586. //        }3 [, g4 G/ s) Y- G+ f/ U! S! ^

  587. , D- L2 q5 Y# X/ Y0 \& l
  588.         // Since the dialog has been closed, return FALSE so that we exit the
      z2 H4 y( l, f% x
  589.         //  application, rather than start the application's message pump.$ g5 ?' W# G9 N5 h3 q
  590.         return TRUE;8 V7 Z5 |$ f1 i. w8 v# F
  591. }
    & w" I, }$ h7 k9 X

  592. + [* B+ h' c. I, ~% |6 [
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    - o, `) s. W: G& k" q
  594. {
    8 N" @5 u: \0 c% f1 w) ^
  595.   int i;
    " Q; I. D5 Q5 R2 F* p
  596.   char *szRet;$ P) L/ o) r* C# f

  597. 9 L4 P& k# Q9 q5 d$ i# m! e
  598.   if(pSource) { itoken=0; sztoken=pSource; }0 J; ?* d* |0 A6 a* i% ]9 G; V
  599.   if(sztoken); v2 ~4 u7 U" ^, r1 ?. C, D
  600.   {5 P  d( T( r8 s2 d5 |# h6 j
  601.     szRet=&sztoken[itoken];2 Z& E4 X# G9 [! A/ O
  602.     while(sztoken[itoken])
    9 L/ f- G4 f* P3 ]. t" `% f2 A
  603.     {
    : }, U7 ^+ F1 s& G% g; y
  604.       for(i=0;i<(int)strlen(token);i++)2 s% y. J2 ^- l: }$ `
  605.       {# y, {# ]; [% y0 d* r% p3 {! R( V3 G
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ! J; `1 D" P: B' r+ O  v/ o3 q
  607.         {. ^% {& W2 c* h
  608.           sztoken[itoken++]=0;
    8 D$ [/ j% C) ?  d7 K
  609.           sztoken[itoken++]=0;
    ! f, b9 H' ~) x3 w4 j. U, k
  610.           return szRet;
    1 K! i4 o0 y% p6 x9 [  J
  611.         }0 ~9 c/ f' C/ T
  612.       }" H7 w- r3 P0 Q. I
  613.       itoken++;
    9 C. N; {- d5 j, }
  614.     }
    2 K6 w' i/ t8 H. x
  615.   }
    # k; e1 f; ?9 q4 m- j
  616.   return NULL;
    - Y; p% k+ ~9 g+ v+ W- f
  617. }
    5 v. g! j' ]  {/ E% X9 M# V! s

  618. ! |3 q& a2 Q1 G
  619. void ProcessProc(long Total,long Current). R5 P9 C- D. m( d! Y/ q) B
  620. {
    $ P7 L) \7 ?0 V6 L3 g- l& L2 T
  621.         MSG msg;# S+ C$ R& W5 `/ {( k
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);  p4 w! P6 P, I, p% s
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
      _% |+ f& f& E: W
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)); \! n5 o: k' x! l7 q- Q3 J  ?
  625.         {- o8 f( y. K" V4 H  q) x+ o( b/ V
  626.                 if(!GetMessage(&msg,NULL,0,0))
    4 e: u. X- L5 u( w) I" @$ P
  627.                 {
    + M$ f. J; V& Y
  628.                         return;$ x% c- i0 m/ r
  629.                 }
    # p- c$ x' O6 n6 o- ~
  630.                 TranslateMessage(&msg);" q* r2 q" w1 r1 q+ y- d" ?
  631.                 DispatchMessage(&msg);
    0 i: T2 ]9 Z; L( G
  632.         }        9 Y* k8 p2 x- M2 F; {9 Z, X; q
  633. }1 h! H) v: |8 }; u+ u) ?. H$ j$ A% f& z

  634. ' p% ]& Q7 m' _: z# G' a
  635. BOOL bFirstChar=TRUE;. \9 D" G: p" ~/ G6 @) f$ n" r0 l
  636. & V% n3 v. H3 E. O) d+ n
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    4 W% ]+ N. S) |% I& F
  638. {2 |8 T/ N+ s' M+ o( W3 ?
  639.         // TODO: Add your specialized code here and/or call the base class
    * ^, E( T( q7 H4 x; {% S' B& q8 c
  640.   switch(dwProgramState)
    % l  |* ^: z4 I: F. p: Q2 o
  641.   {7 ~# i" k; ?/ V
  642.   case AP_NOTHING:
    * F( [9 J* K, L3 O
  643.     switch(dwStartUpSteps)& d/ [( ]* c% {( ]( }9 L4 A" k9 M
  644.     {
    $ s7 S6 F, T/ h. W
  645.     case 1:
    " A+ J& y2 d4 Y
  646.       {
    # J( X' A3 P; t9 d/ O
  647.         int i;+ i' Y4 |- c: I4 z
  648.         CDC *pCDC=dlg->GetDC();4 A  W. D/ w0 y& S, U
  649.         HDC hdcwnd=pCDC->m_hDC;- m7 U0 |/ z7 y! |. h
  650. //        Graphics graphics(hdcwnd);5 y7 G7 ^( F( _) A
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");' j0 M: P2 u* b1 M) q& ?
  652. //        INT iWidth=bitmap.GetWidth();
    & G0 r) n  h( Y* D: l7 w; h
  653. //        INT iHeight=bitmap.GetHeight();! `3 e  P$ [$ [# ^& L# i% H. C
  654. //        Color color,colorTemp;, [- G7 C' m8 z( [; P( f; ^8 M! v
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)5 b) j1 v; Y. m; k' z3 j8 Y
  656. //        {
    5 m" h( z5 f& b3 W/ o( g, q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    # G( a/ T1 p& }  e) y% E0 h, k, z' t
  658. //          {4 T! M# [: e5 q6 ]: Q" ?. S
  659. //            bitmap.GetPixel(iColumn,iRow,&color);/ h7 ]8 k4 l4 l8 D: ~8 y
  660. //            colorTemp.SetValue(color.MakeARGB(* M, P) S3 J; D. L6 M+ r/ N
  661. //              (BYTE)(255*iColumn/iWidth),
    : X/ J0 x5 ~( S! w, @- M/ e0 _
  662. //              color.GetRed(),( P) m! U6 R8 R1 X
  663. //              color.GetGreen(),
    $ Y0 y$ ~( p. h" j9 }. I# V: t' ^( b
  664. //              color.GetBlue()));
    ! _' }" a$ n9 S' d% F" N
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    $ A6 q( I) E+ _7 _
  666. //          }
    5 |6 o. q% M$ A  t
  667. //        }
    : k  d) B4 u- @
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    , ~$ e; Z% i( l1 z6 W
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- G* ]: k; ]" Z0 N# D& ^+ i3 P
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    , f* \' o9 `7 {- Q; x& m- L
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 A0 B( y, b7 O9 I4 l: r  y2 J
  672.         for(i=0;i<240;i+=8)7 c0 ~3 ^. }" P# n5 n3 w
  673.         {  b; U# h2 a+ s2 p/ y  v$ I
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * j6 J2 `! `/ r0 ]  e0 W
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 p/ b# ^9 ]/ ?
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) i; v" h( a$ {% r$ m
  677.           Sleep(33);! Z$ ?2 }% O' N" ~5 l: |" q: l% [! d
  678.         }+ g+ C+ Y" v1 P5 J5 A2 O* e( {$ Y
  679.         Sleep(1000);! Z) E3 T9 ]& H- A* W
  680.         for(i=240;i>0;i-=8)* }3 U  n2 s9 V7 Q! ^2 ]) u2 q) a8 S
  681.         {
    0 N% O, K4 U. G
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % F- D5 G/ w* R
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" p- q; t! j$ \# q; I& q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 C" l9 B% w/ {
  685.           Sleep(33);, ?# Z& H4 `6 _5 G1 U
  686.         }
    7 H6 A. A5 v. m- k( ?9 \) O/ y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);$ n7 B1 i* l0 q- j" V/ a+ L
  688.         dlg->ReleaseDC(pCDC);
    3 n) A' }/ Y8 v+ R* L! Y5 u
  689.         DeleteDC(hdctar);. L. Q4 T' t. H: b1 x+ @) d  w
  690.         DeleteDC(hdcsrc);; A) f2 e: t$ l) m* v8 w
  691.         DeleteDC(hdcorg);: m  I* P) K) @2 S4 |2 j4 H5 ]
  692.       }
    * R. `( F) j. W, L0 @
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);+ Q0 \& b0 X4 \+ b4 m( F: f
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");% u) U8 s: @4 b: w4 n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    4 u, A7 X$ Q4 A0 b
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");: z- W+ i8 g" J; y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ f* O* n+ A% n# L8 `' g5 h% h
  698.       if(!Dn.Connected())
    + ^1 H. I) I3 |
  699.       {9 k: p& O" `1 M2 e' y$ M/ n
  700.         dwTotalFiles=1;  H6 T* |1 G9 ]
  701.         dwDownLoaded=0;
    8 f* |4 D) i2 f! @6 |8 `; U
  702.         bSilentStep=TRUE;+ v& A* L* q* l# I/ R
  703.         bCompressed=FALSE;
    9 [+ D1 I. b% w. x( r# B
  704.         strExtLocal.Empty();
    6 K) `0 Q" O( m: p" F; G
  705.         strFullName="readme.txt";# F1 R3 l1 A" d2 z$ {* B1 A
  706.         dwProgramState=AP_CONNECT;% l4 \# O* |: _; ^/ D
  707.       }  k9 |; k% ^& L( V
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();2 f& o+ }& a( D$ C1 r
  709.       dwStartUpSteps=2;
    ) E5 d/ Y: K& f( F& c$ r
  710.       break;$ r0 A* C% d+ t# a+ k1 P' X  W' Q
  711.     case 2:3 J3 G- s6 H8 g! z  K" f
  712.       {
    $ u% L- D0 A7 W6 O, l3 ?
  713.         int iEOF;6 ~3 t5 d: X* N
  714.         FILE *fp;
    ( @# F' ~- f1 f+ `, x
  715.         char szString[512];: a! O( s! }! J
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    , @0 v: h) F2 `3 ~' d
  717.         if(fp)
    1 U+ \  z# z6 i3 q
  718.         {
    ! J( f$ D6 u  H, s  S
  719.           do
    ; s1 W$ K  [& ?: d
  720.           {2 o) {; n& `( V! x% I. |- H
  721.             iEOF=fscanf(fp,"%s",szString);
    & _0 }5 K3 U  c3 {' u& @  A, N
  722.             if(strlen(szString))$ l9 g* Y' U' o" \
  723.             {
    ' E. u2 `+ H3 S* ]9 l5 ]( o' v
  724.               if(bFirstChar)
    % b* J9 r, n( {- v3 O& ]$ H
  725.               {
    3 P, Z3 @! Z2 T+ Z$ Z# m" ?7 e4 U
  726.                 bFirstChar=FALSE;
    6 S/ [$ Z$ j1 o
  727.                 bConnectIsBig5=FALSE;
    " C3 M! ?" g' \6 F# Z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;0 C: y5 G1 j4 G: m! {9 u
  729.               }* R7 \0 P! m" L0 n4 ~1 O. O
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    % }9 J7 B- ]6 X& n) ^) u
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));9 j6 v( N9 Y, \$ I
  732.               dlg->m_ListText.AddString(szString);
    $ I  R4 e6 r5 k3 m1 I  Y: E& E
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 x) l1 E( N1 c0 W
  734.               *szString=0;+ U% M; C4 ^( s1 q5 k$ g
  735.             }
    3 c9 _& I' a7 o+ B1 e# x  B% R
  736.           } while(iEOF!=EOF);
    : U# H* X5 z2 l3 c% e5 b
  737.           fclose(fp);4 i' g- K+ E! W
  738.           unlink(".\\DownLoad\\readme.txt");
    . E1 q7 s/ ?" n0 l- v' U) X* v# b! r
  739.           dwStartUpSteps=3;
    ( d; H" `9 v, m5 g' }& s/ C
  740.         }3 N+ |0 G2 _& {7 m* U
  741.       }7 e! f* w9 f: i! D8 Q* J2 @  |
  742.       break;! S/ F: \3 b. \2 N+ v# d3 d6 h
  743.     case 3:
    0 c- _: v  K5 J1 _
  744.       if(!Dn.Connected())
    5 ^% L$ G5 c/ Y
  745.       {
    2 a0 @8 b+ ~7 M5 ]! S. n2 |2 X
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    . x% q5 ?' p4 N4 e( u
  747.         dwTotalFiles=1;2 W7 i  h' \: K6 z; r
  748.         dwDownLoaded=0;; n3 i8 n% C# p
  749.         bSilentStep=TRUE;& q* u' p0 Y7 y
  750.         bCompressed=FALSE;
    - X* f* W3 d  n' D
  751.         strExtLocal.Empty();8 l& I" F! }- d2 a! ^# m% y0 f
  752.         strFullName="checkversion.txt";
    ' ]8 K) K2 G- R
  753.         dwProgramState=AP_CONNECT;, Y' `/ X7 f& J8 i' g
  754.       }+ S/ ^) }4 ^2 b' ?1 b! Z
  755.       dwStartUpSteps=4;6 X) g; s2 o; c3 Z; l* E
  756.       break;
    $ g7 N3 z9 s! M
  757.     case 4:
    ; ^8 ~3 s* m! r8 C+ V8 d! N6 X3 q
  758.       {
    * r/ A  h- @& H# {! d
  759.         FILE *fp;
    ' q0 j8 k; u* f# @" C
  760.         char szString1[128];5 Y- O/ f, J$ b: ~& G3 V
  761.         char szString2[128];
    7 v) v# R$ o7 P( V1 ]& X: @
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    8 n7 {2 j( ^! R6 o# C
  763.         if(fp)
    5 Q! U9 x( s1 |
  764.         {% L; }4 S5 Q. |/ G" X
  765.           fscanf(fp,"%s",szString1);4 Z$ ?: h8 ^  R/ r
  766.           fclose(fp);+ z; I3 Q) U5 A! N
  767.           fCheckVersion=atof(szString1);
    - O; [% p5 z- p# e
  768.           fp=fopen(".\\checkversion.dat","r");! f% R/ C3 j- e1 b% T, j& c' F
  769.           if(fp)
    : S8 @$ D; F1 t5 `- l
  770.           {
    ! u! r. _( n5 m
  771.             fscanf(fp,"%s",szString2);
    % t" u% t  c/ y5 ?& Q
  772.             fclose(fp);: e5 x7 T+ d( C# M5 }
  773.             if(atof(szString1)!=atof(szString2))
    & P& d/ y/ G* r
  774.             {
    # d: \9 p5 v9 w2 U5 n! c6 F, Z1 X
  775.               if(!Dn.Connected())8 `. J( F6 E3 p4 X3 @
  776.               {
    ( `  S, ?$ k. H* L  ~/ G7 N
  777.                 bFirstUpdate=TRUE;
    * {" Q5 j8 o% ?3 c
  778.                 dwTotalFiles=1;
    ) w: K1 D8 a( G% F8 M* T* `) h
  779.                 dwDownLoaded=0;9 c8 Y1 t3 P) h/ V+ A
  780.                 bSilentStep=FALSE;/ X8 v* s' G, Q4 _
  781.                 bCompressed=TRUE;: y* P' c; C! m' P
  782.                 strExtLocal=".\\DownLoad\";  [. d$ \( `* H8 C" F0 c$ P$ B) y
  783.                 strFullName="update.txt";
    ( [8 i" r3 `: G/ F% z
  784.                 dwProgramState=AP_CONNECT;8 Y. L+ g; A% i$ b6 K' Q) |
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , O' k1 ]$ i3 v% ]
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 V6 V" A5 N/ f# _. `' X
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");% w; l5 j6 Z8 n* D& z  z" T" H
  788. / ]! J4 ^" ]- L
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & d" p! G- Q1 {$ {* b
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    0 p% \- I/ _  `; M3 }
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)- H/ z$ f5 p. O' R8 I7 z2 k4 ]& s
  792.                 {8 k0 [4 c2 |, i$ w: k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");3 Q0 I9 j3 X5 d0 B) [
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ T3 G. E/ T' [1 G
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");6 Y0 p7 K& }* C6 R% A" |- k
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 ?+ y' A! p# I8 H
  797.   ~; ], T3 n9 y1 M# F9 l: T
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / ?5 o) E  y" \; n! c4 w3 s
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - a% M3 o* e; {. S8 g
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");) D  g- j3 B+ ]) |
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , _% O: H  L5 y
  802.                 }
    / X" p! z& q. R7 h; l" [
  803.                 dwStartUpSteps=5;
    3 [. W1 I$ }6 ~
  804.               }4 G4 J+ S9 v" t, A, K! r% X
  805.             }
    + G$ \- ~' q  M$ N
  806.             else; k) D: q3 j# c4 ^! h. ^
  807.             {
    3 q0 F3 [7 L  w8 H: d; B
  808.               unlink(".\\DownLoad\\checkversion.txt");; m: ^9 l4 ~- |$ p2 r
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    * j7 M8 I, L  ^- |3 a+ `0 A
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : y  I- o5 D$ r. i
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");* f  e/ m4 P8 q  c* d1 c, ?
  812. ! u1 q' z, s* Z1 g
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' t# {( J; D/ q
  814.               dwStartUpSteps=99;" a9 Y  I( I7 H. h5 p2 ]' P# L: \" j0 v! ?
  815.               bFinishUpdated=TRUE;
    5 p/ t' {7 I, V; q
  816.               bCanUpdate=TRUE;
    7 r. x; R. d3 i* ?& X9 b
  817.             }
    $ g+ m9 i7 v2 P) |8 c
  818.           }0 x) q$ i. ^* a5 x' A6 z
  819.           else
    & K' z0 m* }2 h, N6 }- r
  820.           {% u3 S3 Y  k" ^/ }9 |
  821.             if(!Dn.Connected())
    - g! p* U; j3 L) D1 ~
  822.             {
    2 x5 g+ P, _4 @
  823.               bFirstUpdate=TRUE;) o' p8 q( |& P
  824.               dwTotalFiles=1;
    ( F- A. C" D# H1 [, j. p
  825.               dwDownLoaded=0;. V8 R: m  m# m
  826.               bSilentStep=FALSE;- A! B5 Q/ k  C3 R
  827.               bCompressed=TRUE;
    9 m/ Q2 s3 G2 X4 i
  828.               strExtLocal=".\\DownLoad\";
    ; n6 R% @3 I, U# e2 o& Q' f
  829.               strFullName="update.txt";
    . ]. z) D+ J2 V7 h0 a" e: F
  830.               dwProgramState=AP_CONNECT;
    - `- \0 |- |$ j4 h# q1 }: y- d# g
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 m8 l' D0 w, H4 n: h# }
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # x3 T. ~. V& V9 u9 ]# @
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % n- y7 z1 e. o; ]5 u4 V
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  Q  j/ j8 M5 X: S$ f* J! D6 M
  835.               unlink(".\\DownLoad\\checkversion.txt");) y0 G% K* W6 o  j
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    7 A- g8 b! C6 a8 P
  837.               {
    , w+ g8 `+ _4 G- r& O5 I/ }; x% O* V
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
      O7 A% S. b. I8 T% E& |
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
      b) W" _* t3 u6 X& `" g
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    , C+ T0 \' i' X' w
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- E3 y  Q$ u( D$ B% j9 _. v+ ]
  842.                 , l& Y9 I) p" R/ N7 j9 g
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 p9 A; ?/ [% Z4 g2 H# |" n% ~
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 [+ U& Q$ g5 p' v1 I6 [. T& o
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");* O; r) ]& P' t# |+ U4 M+ y
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. Y' z9 ^$ }  M( z% q- {
  847.               }
    4 k2 ^! s" [! R  B4 E6 L
  848.               dwStartUpSteps=5;4 p1 Q3 ]% y; V  S! X; S
  849.             }( E0 w1 a3 k* R1 K, h
  850.           }
    . T) n  |6 D- F  f, N
  851.         }8 r1 L) n) [# B* P$ X! @$ G$ E; I
  852.         else
    & W# N) E+ I2 |
  853.         {
    8 S0 U3 O7 S& B' x2 o) N
  854.           dwStartUpSteps=3;3 j; P( g0 L1 S; T3 d. h3 M
  855.         }
    7 A6 {4 i! b) D& q$ Z6 W9 x
  856.       }
    / A  Y7 [+ O5 e2 x5 \# n. n2 O
  857.       break;
    3 I7 u/ s* i9 |$ I* w
  858.     case 5:" e) m7 Z2 a5 N/ C+ Y2 x
  859.       {4 Z$ d( n9 _* \5 ~6 d+ z$ j
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    1 P8 ?) ^' ^/ f' ]8 D$ i
  861.         {
      b2 M* p/ P" W1 r4 Q
  862.           int opt_overwrite=1;
    4 b9 \4 V" y2 E. e; F: t0 H. p
  863.           int opt_do_extract_withoutpath=0;
    $ T; ^9 s+ J. T3 B) M
  864.           unzFile uf=NULL;
    6 q% n5 |0 G% W- S- H% ?

  865. 6 F& L( G6 Q0 g% k+ ~* `
  866.           uf=unzOpen("Wsa.zip");" K- S9 W. z. i9 J' M& m, `
  867.           if(uf)  P  `/ T2 `! g5 C/ M8 @, T
  868.           {) u5 e$ o! \( U4 w8 J
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);1 b+ H+ H- l0 K- |
  870.             unzClose(uf);& c# I  j+ d# p: v5 J" ^  C0 k
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");/ b: H; y( F  G4 n4 d
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    5 D& r1 O( X9 D  [1 _5 o% K
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    * J( u3 R& n, b& L2 z8 D5 \
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , O5 B+ x0 O% e
  875.           }
    6 k" L( O. l/ `9 r2 O+ j$ f: ]
  876.           DeleteFile("Wsa.zip" );. |3 T: w2 d) S; }8 L
  877.         }$ v1 {* ]: b7 _( ~$ _9 M

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

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-2-25 05:15

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表