找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
8 g6 S  ]+ _0 O
  1. / RevApp.cpp : Defines the class behaviors for the application.
    1 S; ]* B5 }1 ?; k
  2. //7 C( f6 E. P) A1 t3 K

  3. 0 t! d( J1 `" x( w9 n
  4. #include "stdafx.h"7 T$ ]6 H0 L) ?* M/ v1 R" G* `
  5. ! Z; ?& O# }7 V
  6. //#define UNICODE
    2 j' V: S$ R  V
  7. //#include <gdiplus.h>* q  d) ]. N6 v" U7 T2 T: A
  8. //using namespace Gdiplus;+ I# m2 n. `0 K3 _1 b% _

  9. * }$ @, A* A1 J$ ?: ^5 x+ M
  10. #include "RevApp.h"
    : v& C6 B, M% W2 C. n
  11. #include "RevAppDlg.h"
    , l1 L" @' T1 A# @" o' X
  12. % x# U% R7 ~. f8 k1 E
  13. #pragma warning(disable:4786)
    8 X, Z0 I- K1 A& r
  14. #include <map>
    4 x6 ~, G: C8 g' G5 }
  15. #include <list>
    ' l  B- F3 r' r7 W
  16. #include <direct.h>
    ( G3 f  o& Z9 {3 w  q

  17. % n" ~" k$ h. |2 t
  18. #ifdef _DEBUG
    1 R0 v; O3 s1 e2 N8 U# B
  19. #define new DEBUG_NEW
    - w) O9 p6 \7 N" B
  20. #undef THIS_FILE1 c1 z, X/ O  G
  21. static char THIS_FILE[] = __FILE__;
    4 ^% _7 K" X: U/ E
  22. #endif4 p6 ^( y5 q, C0 [3 E
  23. #include "SkinResDef.h"# \9 Q$ z) U" f3 K) |0 p3 {
  24. #include "ChangeBG.h"" R* `  {: P# N5 @) T. T
  25. #include "AFXINET.H"* ?* O# G8 b; @7 o% G& G
  26. . z; Y6 z& V; |) d) N2 Y/ a
  27. #define TRADITIONAL_CHINESE 0) a) }3 M% c6 m) X
  28. #define SIMPLIFY_CHINESE 1
    . {+ A: c0 E2 i
  29. #define ENGLISH 2& }9 w( O) x# g5 S
  30. int m_iLanguage = ENGLISH;
    & q1 w% E/ k2 R. Q$ n
  31. /////////////////////////////////////////////////////////////////////////////  w3 a% L1 I: U$ Y0 C5 X# Y- ^
  32. // CRevAppApp% ]' I1 N# _' u( v

  33. 9 `5 Y* K: L/ f/ p) O
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    $ U6 H5 g. ]! _% n4 K9 v
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    + d% w! s( r8 ~) b! w" N1 E8 u( a) F
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.2 |! n: y. U7 q5 H% O
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!% j, J' H& M5 a  ]) G8 {7 G
  38.         //}}AFX_MSG. ~1 G2 a0 ^& ]& L/ U4 O4 k
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)5 K# X$ r3 p8 |0 `+ `% q
  40. END_MESSAGE_MAP()
    ( j! }4 p2 A( _+ C7 \
  41. 4 P* h2 f# `# Q0 y) {& t, S
  42. /////////////////////////////////////////////////////////////////////////////, ]+ v* C; v5 G$ W& j6 c' n* S0 V
  43. // CRevAppApp construction
    - [% q' @  Y' Y: ^* m

  44. : Y7 T$ w, e8 S; V- s4 x4 B! t% p
  45. CRevAppApp::CRevAppApp()
    ; w- j/ l! o# \0 ]( t
  46. {
    ; L5 C5 D+ J# _
  47.         // TODO: add construction code here,( `9 ?6 p3 ?4 ^! g" l2 L. P
  48.         // Place all significant initialization in InitInstance" p! J7 u) N& L
  49.   bDisplayIsBig5=FALSE;
    2 g6 |  L! [: N, U1 x' Y; Y: e
  50.   bRestartUpdater=FALSE;
    + n0 E# w& D! O# D0 u) k% L" W3 [, I- ^
  51.   bFinishUpdated=FALSE;3 a1 o  N9 B& ^
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    # h! m+ z' x/ J" v
  53.   InitChangeDataBig52GBKS();) x  ^. _. e% W; s+ N0 {& z
  54.   InitChangeDataGBKS2Big5();9 _% J4 ~  d( [5 v7 w" @
  55.         //- B6 I) W2 ?$ G% W0 {1 I8 d
  56.         bClickRunExe = FALSE;) L! n& P, ], U, X" D
  57.         //
    ' a. P. R! \3 }/ L3 R2 E
  58. }% h$ v# U5 S+ `$ E, P# o; a) A6 Q5 f
  59. * C$ Q. H; ?  b4 D
  60. CRevAppApp::~CRevAppApp()+ |4 O# o* T: D, Y+ @0 a
  61. {' s4 R* D4 z) V
  62.         // TODO: add construction code here,2 R" r/ c3 d( P* q: N
  63.         // Place all significant initialization in InitInstance
    4 s* u9 A  N' p0 q4 R
  64.   EndChangeData();
    . `& J- W9 V2 t" ?' `: O$ y1 a
  65. }
    9 B' y& z: i) u! R+ d

  66. % N( B8 A$ c' p. U" p9 y: p: m& @
  67. /////////////////////////////////////////////////////////////////////////////
    ! a  s9 K0 V1 y5 r
  68. // The one and only CRevAppApp object: R1 u. _9 g# s

  69. , _) w' ^4 E8 P7 L1 z# R
  70. CRevAppApp theApp;
    $ a' d5 ^( ?- _

  71. ) }6 t8 j: V1 U
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)7 ~% w' V$ D% b6 F4 y1 @
  73. {
    4 X2 m) D8 B8 d% i1 g, U. x5 \
  74.   int iEOF=0;
    ( X' J' [& [8 ~% k
  75.   char szTempName[MAX_PATH];
    8 [1 x' U4 D* B) I# T- {
  76.   *szFileName=0;
    5 \5 E7 Z- p; D2 w7 ?' E$ x/ z% ~
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! K% R% u6 F# K& {
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('), D6 l. W. Z% R2 m* b% |: X  I7 x
  79.   {$ J# f, m0 _, c! A# Q
  80.     strcpy(szFileName,&szTempName[1]);
    3 V7 L- m% c9 V; F( Z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) U% V) X' ]5 I- x2 Y' o
  82.     {- g3 |; `1 ^3 q; f4 q
  83.       iEOF=fscanf(fp,"%s",szTempName);9 S6 ]5 C0 \! @
  84.       strcat(szFileName," ");& O- Z8 g2 }+ U) h: ~4 Y8 l
  85.       strcat(szFileName,szTempName);1 O# Y5 h: X: L/ Q. w
  86.     }
    8 k6 i0 m: E- E! J
  87.     if(strlen(szFileName)>=1)
    5 m2 M/ N; q$ g. h! x
  88.     {4 ]7 Y8 c$ b# m* s( E
  89.       szFileName[strlen(szFileName)-1]=0;
    ; w+ }' e+ m+ W
  90.     }" I$ `# P% b( Y- N; O
  91.   }1 n9 _" {5 f) U( }3 ?0 g
  92.   return szFileName;
    ) c  \! P0 Q0 V% B, k9 d8 w
  93. }
    4 t. A- M- r/ W
  94. : ]! X( ^( w' Q) h
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    + ]8 g9 B9 W$ O# o; I# P( E
  96. {
    7 }4 ~% \3 o* q& Z7 J4 v
  97.   FILE *fp;$ a& j( ]) H2 Z
  98.   char *key=NULL;* l0 \4 f  ?/ J* y: G+ m
  99.   char version[MAX_PATH];
    5 g9 w0 J6 {2 V& X
  100.   LPUPDATEFILE file,olds;
    3 [6 G2 F0 b0 L- @/ o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;& [% p! X. c4 e# f; c0 B" Z
  102. & f6 a' }% p* a- H
  103.   UpdateList.clear();
    8 q( j& N4 ]8 {6 h7 w1 ~/ F
  104.   UpdateFile.clear();: Y9 H# o& |; C$ s/ R2 ~
  105.   if(GetFileAttributes(filename)==-1) return false;8 G7 W; c6 r( P. q
  106.   if(!(fp=fopen(filename,"r"))) return false;
    + Y- }0 n" W; b" J
  107.   fscanf(fp,"%s",version);
    ( x" X5 C7 u# c" t% j, _7 K( ~! c# `
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    0 t3 i# A" |8 E, h# }
  109.   while(fscanf(fp,"%s",version)!=EOF)4 e+ o! u% E; J8 X. H% B' Q* Z
  110.   {$ [. r& U$ m& U1 g. G  \* R9 e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 X/ j5 v# ~, v
  112.     fscanf(fp,"%s",file->path);
    % h$ W- L8 |! |0 n: e
  113.     ReadFileNames(fp,file->file);
    ; C( T4 m/ ]5 _# T( J1 `3 v
  114.     strcpy(file->full,".");0 G! M" X- U% [+ I
  115.     strcat(file->full,file->path);; o- B2 s( i$ q
  116.     strcat(file->full,file->file);
    " c4 S8 |' H4 m5 r. Q
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ( \1 o8 q+ l: m( r2 ~- X
  118.     {
    5 A/ Z: H" [4 r+ y; o  p& K
  119.       file->vers=(float)atof(version);8 ]+ H" V2 h" Q& a% R: Y7 f5 j
  120.       UpdateList.push_back(file->full);& Y: ?, D9 |. @# l  k
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 Q% \, {0 ]" K' b: m
  122.     }
    & u+ w1 a: u; {2 ]1 f6 u1 t
  123.     else$ b3 r6 t# e) x8 i+ @7 y/ b
  124.     {* y4 `9 d8 a, o5 b, W
  125.       olds=(*p).second;
    * n# Q6 b5 s8 a* R, L. U' z5 J" k
  126.       if(olds->vers<(float)atof(version))
    ' W! [6 R; L+ b* ]; W0 f
  127.       {' q; ^# V% K! t7 a
  128.         olds->vers=(float)atof(version);
    # J8 Q6 `( \+ I- M. C% g; @+ j6 L
  129.       }. l7 D3 C- [0 a3 L. |3 j
  130.       free(file);" B5 L- X! T7 @+ T9 \/ W9 g5 f
  131.     }
    ' L1 h3 @8 l* |$ V# y* A
  132.   }! M: ]( K5 q! G3 j( }* O; T
  133.   fclose(fp);
    , [7 ~  V# S9 }1 ~; Z, a* D  J. q
  134.   return true;
    , T3 X3 y% V+ L9 V1 I3 N/ H
  135. }
    " R/ k2 N6 x) K+ ~' H# Y0 V1 [0 X

  136. ! Z; T, U2 \* D2 E& ?
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)4 \" |2 R! o& C1 r! d1 ]$ c
  138. {
    - }0 |! A' D8 ?+ n% I
  139.   TCHAR  szFull[MAX_PATH];
    5 U0 n* k6 U2 p7 {% c
  140.   TCHAR *token,*inter;, x; f- a1 B( n0 C
  141.   *szPath=0;( j9 Z* M: b, h/ v+ K" r$ e. m; l
  142.   strcpy(szFull,szFullPath);: u7 p; }0 L7 d7 |: W
  143.   token=strtok(szFull,"\\/");$ u* C* U5 X  L. H# C
  144.   inter=token;
      H4 n' s" W& e! k4 ^2 N9 |1 F
  145.   while(token=strtok(NULL,"\\/")). z* C$ E: o$ |9 u- f
  146.   {
    " z/ K$ G5 ?( {0 p" s& ]& G
  147.     strcat(szPath,inter);! K. L: D+ g6 i. s- I: _7 m& X
  148.     strcat(szPath,"\");2 z! m) `. C8 e
  149.     inter=token;0 w4 M2 x0 p2 x' a$ V
  150.   }9 T2 E3 X  S" L9 _$ Z
  151.   return strlen(szPath);
    $ O+ |  P- [* m- e0 t8 D
  152. }
    ) W% f3 Q2 j" |" a3 q8 u6 h3 F/ W5 e

  153. 7 e$ n# M& F- A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    : I- Q/ e; Y0 L7 w( `( j
  155. {
    ' g$ O7 F9 [: \- v
  156.   DWORD attrib=GetFileAttributes(Target);8 \, @) C/ I6 y* I
  157.   if(attrib!=-1)* a- b1 T  Z8 R0 h# a2 Y
  158.   {' J7 R; D* _; y; c
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))7 A2 a* L& b' g) V2 D+ j
  160.     {; M2 ^1 i5 g. x3 t5 b" e! B
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ) R2 U3 _9 U* a
  162.       SetFileAttributes(Target,attrib);
    , ]* P) h% ^& A. g+ e
  163.     }% ?+ C6 G$ r. Y$ `, f) f8 F! L
  164.   }
    7 a- x7 t# F- @# p( s
  165.   CopyFile(Source,Target,Erase);
    5 K0 K5 y; O) j* y$ z
  166. }/ ~- L/ W$ ]" I, ]; {

  167. 7 _$ ?* G& A; L% f/ H" Z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & t# k6 k& _! U# X2 w
  169. {
    ; f5 u% k* B- _1 I9 I# b
  170.      FILE *fp;! [( U' b' p2 _
  171.      char  szBuffer[8192];" N. H6 R, a& J" j
  172.   va_list  argptr;7 ^5 ?) Q1 Q" Q$ ~

  173. 8 K( O0 p- c9 A0 L* |7 B
  174.         va_start(argptr,message);: t/ M+ F& f* o
  175.         vsprintf(szBuffer,message,argptr);3 t5 |' M. l  s2 W
  176.         va_end(argptr);
    4 ~! ]* `4 m0 d4 x
  177.   fp=fopen(FileName,"a");
    9 n: t: q2 m4 f0 H
  178.   if(fp)  B& U* W; J/ \# Q9 T( y2 }
  179.   {
    % X$ z, z5 [8 i" H1 R
  180.     fprintf(fp,szBuffer);
    1 g$ s- R# [" ~; a1 c
  181.     fclose(fp);
    - p0 [( b" A# u% B4 X" g( S& s
  182.           _flushall();
    # Z! }( N; R0 |  Z$ X9 ^" r
  183.   }1 `4 j7 p/ v! h5 D# h
  184. }; [) Z' _  b9 w0 U4 z) D

  185. ( E7 h( m& V3 L. A9 \, O9 r
  186. BOOL CRevAppApp::Fclearf(char *FileName)/ ?; Q# h, m& d: L
  187. {
    - M& b, X) ~( j3 P
  188.      FILE *fp;* z5 M( }. O8 h3 N$ G4 h8 V
  189.     DWORD  attrib;
    ! m2 [% Q- a0 u, ~( @" t
  190.   attrib=GetFileAttributes(FileName);# _& h% D; e) z4 M) e5 Y& y2 k
  191.   if(attrib!=-1)* u7 _  y: _- z+ D
  192.   {
    , n& n3 G: q5 B; N! J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    9 d) Z6 L/ ^- l* J: e, J
  194.     if(!SetFileAttributes(FileName,attrib))4 u# _3 E2 V/ ?  L
  195.     {+ M! n& a* m2 }# y
  196.       return FALSE;
    & X) D$ R' R8 F/ ~5 p
  197.     }
    - c) Q' {1 C. w  {+ c) G
  198.   }" q# t1 B6 G+ U- E6 h
  199.   fp=fopen(FileName,"wb");
    7 M8 g! x# V' W/ l6 Y
  200.   if(fp)& ]( j; z0 o  x, S) T( g1 n8 g7 X( d
  201.   {; L1 D  [6 @: m
  202.     fclose(fp);" I- s0 g; o8 w7 \& v
  203.   }. R2 y1 @0 m# b9 m4 d: @& R0 u
  204.   return TRUE;! o% K! O4 L& y" f1 U, D) P8 C
  205. }! m9 y4 r) y8 w/ G/ `* \0 D
  206. ) ~  T4 Q: J! ~! ~4 [1 W* u# _0 b
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + E* W' t2 |9 K( Z* r* X
  208. {
    5 B. e) ?0 }0 f+ B1 F
  209.   char filename[MAX_PATH];! t9 q  G5 F% \9 G. G* a
  210.   LPUPDATEFILE file,olds;8 r1 c& C5 Q% \+ B, @. ^& d+ g1 R
  211.   std::map<int,CString>::iterator i;
    4 f/ a5 h# B3 X+ _0 e
  212.   std::map<CString,LPUPDATEFILE>::iterator p;6 f" o3 M: E* s5 e
  213.   std::list<CString>::iterator l;
    " F6 n$ t. t9 E

  214. 8 S  t+ `& H2 k; `
  215.   if(bFirstUpdate)
    / d$ C1 C; a; r
  216.   {# y  b  q1 L9 f' W2 U
  217.     dwCurrFile=0;2 U1 n& J4 ]0 n- m# u; U
  218.     bFirstUpdate=FALSE;
    5 p( a- L; V% _* |) M
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- x1 z9 g+ n4 N1 X+ F+ B/ l5 H
  220.     {
    ) V6 b# b) E; g% _! a2 I: b, L
  221.       dwTotalFiles=UpdateLocal.size();
    $ e1 F' T( ~# e, D, g8 a
  222.       dwDownLoaded=0;$ Q2 u7 @5 I4 ?2 u
  223.       bSilentStep=FALSE;( L( n0 {# h1 a7 m- N
  224.       bCompressed=TRUE;! x- `" {( x+ C( [
  225.       strExtLocal.Empty();
    0 S! m* a( W$ V7 z  {9 F, y
  226.       strFullName=(*i).second;
    0 N5 J  j' R0 l
  227.       dwProgramState=AP_CONNECT;
    ! T( p1 ~# p- o6 x! d7 t! M
  228.       return TRUE;8 h. l0 v1 h' m- D
  229.     }
    6 L( O5 I2 c, m- i& @) \$ {
  230.   }
    : F" O7 ~  ?; W/ R0 d$ X
  231.   else if(bRestartUpdater==FALSE)* x( a- j. z  B, A; J9 _4 ]
  232.   {
    9 y+ D, ^& p2 k$ |6 P; ?, Y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())6 k/ [: ?; e! c4 F& Z# f
  234.     {( e9 n/ X! E% ~
  235.       file=(*p).second;
    / N* e, n# d0 B2 n; E. v2 a0 Q
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    : l! E* H' I7 {1 X! n" \& Z
  237.       {* a9 w$ G0 Y* I2 \. i5 j
  238.         olds=(*p).second;
    ) q  S( C- z& ^' p% w
  239.         olds->vers=file->vers;
    7 e. }" m5 T% N5 u; E8 [: V4 _
  240.       }" O- M2 F+ }+ _  M0 c5 b
  241.       else
    ) k6 Y& e- M1 j
  242.       {9 h7 `0 E3 R6 B
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( O2 V/ C) B+ ^2 _# Z
  244.         memcpy(olds,file,sizeof(UPDATEFILE));9 v( w5 k  Z# j) }& A6 [; e
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));$ A. o( W. o+ L! _( v) \1 O
  246.       }" b  |) c; v6 k* }" |8 Y* f+ p% D; E8 \
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");2 |# }* U4 ]: m$ }$ W
  248.       sprintf(filename,"(%s)",file->file);1 w; v/ P. g  Q8 A. [$ I
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 r5 _* ]+ ?# E3 \" d1 w
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : _( X3 L0 N. K/ R* l; I( t4 Q/ `9 ?
  251.     }
    / X! J$ j3 p2 p! b8 X' O
  252.     dwCurrFile++;( w4 n5 l- ]8 f" T" Y
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - q0 S& y7 E! Y
  254.     {
    0 M0 O. Q" c6 J$ W
  255.       bSilentStep=FALSE;; O8 [. g1 K2 H% O; z+ [3 Z
  256.       bCompressed=TRUE;9 v1 N' J1 J: J3 _& m( l
  257.       strExtLocal.Empty();7 r: e" A$ g% ^( l
  258.       strFullName=(*i).second;
    # X/ Y( r( w: e$ u6 g: Q, C7 C" E
  259.       dwProgramState=AP_CONNECT;3 d$ h. R, ?+ r0 s4 V( L
  260.       return TRUE;2 \7 U- |, }/ _3 f; k
  261.     }
    1 [3 B/ i0 r- G9 [* @
  262.     if(!bRestartUpdater)" s* s- S7 `. ^; ?, c: c8 a
  263.     {% b6 o' Z% b1 ?0 n2 o- C) f
  264.       int iCurrSize,iFileSize;
    ! |$ C0 e' v! e4 a! q0 b! |+ t
  265.       iCurrSize=0;4 q# }- W& V3 [! R7 j
  266.       iFileSize=UpdateList2.size();
    9 {, |" g/ o$ X/ L' S' J, g
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    " i4 w3 K0 B* P' F
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");( c/ @: t5 j! o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");. }. v2 Q# r" P4 h  e6 B
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 Y  R" f% [0 j, A
  271.       Fclearf(".\\update.dat");3 W; @% U& W7 K8 r- x8 O% p
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    . m, X) {. P% E6 A* f+ Y+ K# H
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) V% j* |0 N) t6 y# B4 E, J: P
  274.       {" P9 v) `7 J$ d' [1 O; F
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    $ v: t. L7 u. o* o
  276.         {
    ' C" n2 h8 W7 W. {, `1 W. i/ e# \2 {
  277.           file=(*p).second;4 l' P4 I8 h( d" P8 P- @) S
  278.           sprintf(filename,"(%s)",file->file);
    2 j6 v$ y" f) ?! Y+ B9 L, p) b
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' s0 s) F5 j' L) {7 w4 |) t8 S) @
  280.           iCurrSize++;
    ) G1 `1 e) r- o* {* I
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));4 Y' a! [7 @  ]% a
  282.         }. \$ W' D/ n9 ^% F/ q
  283.       }! r& x, R8 G, h- V5 u
  284.       unlink(".\\update.txt");; }4 L, V+ J% d6 ~
  285.       unlink(".\\update.tmp");
    / D3 ^5 k8 @3 n1 L1 r
  286.       Fclearf(".\\checkversion.dat");
    3 L0 N5 U4 ^! j6 F: F
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);: l( G; P( Q5 N& z$ O
  288.       if(UpdateLocal.size())7 t. Q1 g$ a4 C& }; a
  289.       {
    ! [$ ]; F8 Y) D& M& @
  290.         UpdateLocal.clear();
    + z; m" I7 j9 s: C7 j. M
  291.       }
    2 C  p' S+ ]7 [1 {2 u. T( ?+ S
  292.       if(UpdateFile3.size())
    9 {7 P0 T8 n4 f; k) o' O
  293.       {
      l2 [2 d! Y3 Q( v; I
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 u% I1 e0 x$ b  A' x' U( H
  295.         {) ^0 `" y: D) D( C
  296.           file=(*p).second;
    : w( V' V# O) b1 {5 J, e
  297.           free(file);
    " M  }4 E. d* ~4 N, w# G1 l  @  D
  298.         }! N8 G2 m" U; O
  299.         UpdateFile3.clear();
    $ P4 q2 ~  m' x  R1 W4 `
  300.         UpdateList3.clear();4 `, q  S6 y5 M2 |6 ?
  301.       }
    9 `1 K1 Z) X  ~1 m; A
  302.       if(UpdateFile2.size())( W3 `+ h) D, j, M% p
  303.       {5 I/ [/ y- T9 e+ u! E& H
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 N# o" d8 Z0 t. C6 l* L3 Z
  305.         {$ S6 @1 Q4 y+ b4 S" G- i1 s; c
  306.           file=(*p).second;
    . x& L% w3 W3 m$ a! S  N
  307.           free(file);# A, T3 H3 Y) i# D5 ]7 @
  308.         }: e1 _: ~) G: g. [0 ]- v# `2 n
  309.         UpdateFile2.clear();
    ) ?7 }$ o. ?3 u/ I2 `: @% I
  310.         UpdateList2.clear();! {3 o. W' a0 @9 g0 e& N
  311.       }; x2 A% ~" e# a
  312.       if(UpdateFile1.size())2 _6 |- ~6 J& F: A4 T
  313.       {  V* F: g; U& P9 m
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / S' _& i- O4 x5 p
  315.         {3 p6 E5 V" N5 y9 ?# v
  316.           file=(*p).second;
    9 f8 z% b$ o4 p$ M' H! M0 b
  317.           free(file);: X' t9 _; K0 O* H, [& x
  318.         }1 C9 y" ?: B& q  R
  319.         UpdateFile1.clear();
    0 B/ n, Y5 J( F5 `% ]7 {/ i
  320.         UpdateList1.clear();
    6 a/ o" G, k# E
  321.       }
    3 L. N1 D5 ?4 f8 b
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    9 E- d: l1 `. J- }8 I
  323.     }4 y3 v; q& N' s) n, ?
  324.   }
    , e+ Y2 |5 @) P" e+ }
  325.   return FALSE;7 I! T7 \4 J- e3 |1 x7 P' j
  326. }, X! W! c# _0 M) F( h9 l5 B

  327. , ^+ M5 G4 p1 M* a- O. [5 C& Q, z
  328. void CRevAppApp::ClearAll(void)
    . S: E6 `/ A/ @# S- n, j
  329. {
    ; z( N. ~4 p$ x
  330.   LPUPDATEFILE file;
    ) U  N/ T; a$ E  H4 v) Y$ M6 j5 \
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 R3 f& m8 S2 F

  332. 1 q) V0 B' r$ A3 n2 ?
  333.   if(UpdateLocal.size())
      }0 J' E% b% o! |
  334.   {
    " X7 K; [7 T) J, V# a
  335.     UpdateLocal.clear();. c# C6 ^7 ?* E/ h4 R5 z9 B
  336.   }
    & }" G4 S% @9 p6 l- K; ~, ]
  337.   if(UpdateFile3.size())8 R; x- S% ^$ z# D2 V
  338.   {
    5 G; I  B# |3 D! U
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)& |, Z1 K  @. B
  340.     {9 _) s9 Y! X# |6 x( T! d
  341.       file=(*p).second;$ }) G# I0 P+ D+ g( J
  342.       free(file);* l! D$ |7 m. ~/ i2 g# S
  343.     }
    . `$ ^% g; k, R2 Y( Z- G; p
  344.     UpdateFile3.clear();( d8 ^5 w) o1 O! w3 q# i, n
  345.     UpdateList3.clear();$ K8 [5 s# ^3 \
  346.   }
    9 e4 C# r: j! @5 I
  347.   if(UpdateFile2.size())+ e4 h; Q* c& e- e- }! n( _% _; O
  348.   {
    ( y5 @* T* S% w0 S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! [! D! I. \. I4 O3 T0 A7 `0 X9 t
  350.     {4 P5 ?8 M8 u& k2 N1 a2 Y9 V
  351.       file=(*p).second;* c1 C# b( e! L' o- v5 Z
  352.       free(file);( q3 y: H# E5 S  Y- V
  353.     }! Q; S: X0 K% b2 i! G; K9 b% w
  354.     UpdateFile2.clear();
    , A  {. E2 f$ d0 t" O+ W; s& p- q
  355.     UpdateList2.clear();
      O, K. E( M2 M: {. w8 o; O6 Y
  356.   }
    8 @7 j7 V5 C5 A
  357.   if(UpdateFile1.size())3 ?2 C" ^: P$ C# m
  358.   {
    8 h) i. ~: p6 d
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ! q( C, [+ ]$ R* t2 j, y* h
  360.     {" R6 d& q' |# R) G1 }- ^# A! }) {
  361.       file=(*p).second;
    / O0 i, c* H' }$ }1 `
  362.       free(file);
    1 ^/ d0 S; R; h
  363.     }' O7 @; A5 {* V* q+ a
  364.     UpdateFile1.clear();
    ' V" A" C$ h. y4 D/ ]: Z
  365.     UpdateList1.clear();1 x7 `3 J9 R6 ]* M, n: L
  366.   }9 x% E, s% S8 \3 u( z
  367. }  
    2 t. _" Z" s) V# v& n  _3 T
  368.   1 p( C. }  t$ {
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    5 c# \! _6 |0 ~- {% h+ _
  370. {
    5 C( J* u' r2 N
  371.   int c;  Y- N. k# p/ D. \: b
  372.   LPUPDATEFILE file1,file2;) x. |: o  w5 c) I0 i! c* o( s+ s9 j
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
      h4 n% x/ {; G$ e6 w
  374.   std::list<CString>::iterator l;
    ' U' k/ L  n8 V

  375. 2 C, t. D# l5 X
  376.   UpdateLocal.clear();: V+ p& g5 Q$ A
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);0 W0 ]6 X2 J; G3 l
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    * S' H( u( A# R
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);9 g$ p+ H4 O+ W. D' f
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ) M- k2 }( J( u! b& G
  381.   if(UpdateFile3.size())
    8 q# }& [/ i8 h& l) ?
  382.   {  Q  J1 L) z( \7 x) z* H
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)9 S  P& e5 v$ g1 l
  384.     {
    1 i$ I' b( i* u9 `5 g
  385.       file2=(LPUPDATEFILE)(*i).second;  u4 _! Y2 c# o! U2 S7 E
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    , G5 Q- I5 E; C/ s, t
  387.       {9 N, o; N- W2 `6 e$ d! ?  n5 x
  388.         file1=(LPUPDATEFILE)(*p).second;$ k6 `. D1 c" r1 g+ }. ?
  389.         file1->vers=file2->vers;8 n  T: G+ `3 w6 x3 k, M
  390.       }/ D+ F  ~* j1 l, z1 n
  391.       else! A( y% m1 ]! |8 d
  392.       {
    + p) ^& S) S+ a( O) B( |
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ G. s* h- o7 ]: u& o0 U4 |1 X- M
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    : W0 W  E; w( g
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));2 F/ J0 ]$ e) w* F2 D5 ?' m( I5 K8 |, P
  396.       }
    4 d% l( _& k( L  @- @
  397.     }
    * I, F* m  {, q* t: b
  398.   }
    8 e4 T: u0 c' `% v+ }
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + \; X/ s$ U/ K( v
  400.   {6 B2 {" n7 Q8 U" z$ v$ Z7 S& d
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())" U  e1 N) }, y2 \
  402.     {
    & f; o' R5 H9 K
  403.       file2=(LPUPDATEFILE)(*i).second;
    % m4 G* T! t% q' c- P: \/ G
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : Z) o1 m% m/ f* L4 I7 d! k8 w* _
  405.       {
    ' P: k. Y3 w+ Q' w- l
  406.         file1=(LPUPDATEFILE)(*p).second;% I* \, C8 b* ?( c9 {9 B' S; _
  407.         if(file1->vers!=file2->vers)
    ( P! A+ _% O, f6 l& {1 N% {
  408.         {2 v, C! F! y9 t) _8 F  a/ U
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, O" M' p: ~: v* O
  410.           c++;2 h% u. u8 |0 e# Q6 A
  411.         }
    ) g* X% k& ^7 a' t' j
  412.       }9 D" g1 j9 k$ s: V1 O: q3 m6 G  _
  413.       else
    , x! M+ a0 \8 k) V$ Y
  414.       {4 N7 ~3 @, R( N1 `1 Z7 n* N
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 F* m3 o; L+ y/ V
  416.         c++;
    ' G, }+ u0 `7 |6 l0 U
  417.       }: n0 a0 z* k3 z/ `# X% E0 F
  418.     }$ `( l% k" P# T
  419.   }
    0 v; l/ e, u# b! j+ `
  420.   unlink(".\\DownLoad\\update.txt");
      Y6 Q! j5 B+ u. K
  421.   if(UpdateLocal.size()) return TRUE;
    , a# c, K4 h* h2 ~" i! V
  422.   else                   return FALSE;# k" r  b7 T% R4 o
  423. }
    & Q  _; N/ p! G, W2 j4 T* d

  424. 0 N, p, _4 O: j2 s+ L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    5 J  A2 ], p% l" J# A5 e2 }6 g
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    " N( v; K/ t! X" V! \
  427. 3 V7 P9 h5 @, K  N- }
  428. # d. S. w6 t. D- n) |+ Z
  429. 0 G9 \8 Z+ v) q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ( o. M" E, k0 J4 m; I9 b
  431. {0 i6 \1 R1 [0 o, M
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;, a2 }& s# \3 \1 L! G: G
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  Q( c1 c$ B) M0 {  A. _
  434.   {/ M# S0 N" X/ w4 ]
  435.     char szLanguage[50];2 V* w5 u/ p2 v" r
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% k( D9 U. Z1 V9 S
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 t% U: X% Q6 S9 ^1 E7 F
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 m6 j% D) _5 y/ {8 T
  439.     else                                   m_iLanguage=ENGLISH;. \! u# D, c+ Q3 t" b5 y# Q% v8 I
  440.     char szRegister[100];- ~  K3 M% n! G: B% }, p7 x5 T7 ]
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 m& b3 N! b! H' V# ?& M6 r2 k; P
  442.     strRegsName=szRegister;- z. P3 l! B) A# b8 S
  443.     char szPatchURL[100];
    , a1 B0 J. M( U" K
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ |' p, M: L1 D3 J
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 g. L2 n# p8 ~4 r! u7 i
  446.   }! S# I# e/ [& U
  447.   else( |3 R8 M8 u0 [* o4 `
  448.   {9 k: W' O" P' {  F3 o- m& t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ x9 l% a, q$ B% N9 I
  450.     strRegsName=DEFAULT_REG_URL;; O/ p  \1 u, A; i
  451.   }
    / _. X+ L7 ]  c/ r/ m
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ' M+ a0 C( h% K# g4 B* H+ X, Q. [
  453.   {, M/ V5 u4 ]/ N5 R6 H( U( N1 x
  454.     char szIP[50];5 V, X2 _( ?% b0 G* x1 M
  455.     char szDIR[300];( X( v4 Z, _) X( m( G1 P7 S, n
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; [& X$ m& G  X6 i
  457.     {
    8 }- G3 V  o9 d, Z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");# h/ ]3 r$ b8 e! v+ T5 _* T0 _
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    : N5 i: ]) l: m6 X& [
  460.       strHostName=szIP;
    8 l2 }/ u- P6 W1 J! H: K
  461.       strHostPath.Format("/%s",szDIR);
    3 O! t4 Q( b6 j$ v7 M9 K: ]
  462.     }
    9 L' m* X# \' w- o8 W; I
  463.     else
    5 z* b6 m( g( E- e: n  y8 Q/ E
  464.     {7 M; `6 R0 S) S
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): Z# q7 M" i; r2 G; G+ f( T- S$ Y
  466.       {6 E: v# D) Q# N
  467.         char szLanguage[50];3 C) D2 b4 R+ T. F8 j0 j
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 a# F# c) `; m4 s- @) j# r& F( P9 {$ L
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& M! l8 u0 X- q0 ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % \; c- n+ n; Q' O9 t- r
  471.         else                                   m_iLanguage=ENGLISH;5 a; w& t; W! g6 D+ }( M$ V* V
  472.         char szRegister[100];
    : E" S  Q( e3 U1 W6 K
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 H! t' c  z4 A' M* M% i( r
  474.         strRegsName=szRegister;
    / X+ A, N+ _# W9 q# P2 d- N* I
  475.         char szPatchURL[100];
    " c7 T3 ~! D/ _' N, J9 R
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. S, i2 n3 N# K! i: ?  X: J# {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 U3 N- J* ^/ Q9 Y" B, a
  478.       }
      P* p8 t3 Z; |4 Z4 r
  479.       else
      A8 |% p" ~# S; u
  480.       {9 R7 x! C" t( m
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 k+ I3 ]- W6 E, A. M" Y- D
  482.         strRegsName=DEFAULT_REG_URL;) G9 _; ~" ]$ W4 ~& \- b$ ?7 f
  483.       }
    5 p+ I3 k) y' m! u' n) Z1 x
  484.     }$ _: @' o" I& G6 X2 ?% l
  485.   }, e- i- S  T' B9 E8 q- Z
  486.   return true;. q* p& m( c/ a# \, @1 `
  487. }5 `' c- w5 s! y! Z4 H

  488. - X* @& `, I% B6 J) |+ N
  489. #include ".\ZLib\unzip.h"/ @# s, t2 o* Y; L  b3 K& T: u
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 t! {. |$ a2 P" p
  491. /////////////////////////////////////////////////////////////////////////////7 j4 r. j' G) E' @
  492. // CRevAppApp initialization
    4 X; w0 Q- d: ^' ?7 b6 h7 ^
  493. * [, |9 G& [+ \0 |8 O2 g: l" F8 O
  494. BOOL CRevAppApp::InitInstance()8 C0 O1 f, b3 ]6 p
  495. {
    / Y' U, \: g" E0 a
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' \# `* ?% j/ ]: i  z* r( E

  497. 6 q6 \( M/ X0 R1 v% d5 `0 I
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);" I: C$ A6 T; b. E) K+ {  P
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))5 b( S& ?; c3 |0 O+ X
  500.   {
    6 l/ [! Q5 h$ y& ^% L
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");: |- @8 b+ ]' k4 U
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! M+ e+ b3 S& E' ?" x4 q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    # v* W. s" g6 {  ?. h' }: E3 |
  504.     {" k, f6 K4 n# X5 Y1 y3 O( T# P
  505.       strcpy(szPath,szPathTarget);- p1 F, ^$ M4 I
  506.       SetCurrentDirectory(szPath);
    8 }: l" e  e: M
  507.     }9 s: z- h4 A# g, Z
  508.   }
    . B9 A: a; E, Z$ `
  509. #ifdef _DEBUG
    1 a6 w6 m- }/ P7 s1 Y/ @* O! Y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ L7 e; I* S4 b/ W% A" {
  511. #else
    # C* D- U  J$ \& b7 B/ T  M5 @
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . u3 l- R$ M7 s# D; T3 f7 v5 g
  513. #endif  B" O5 u4 i1 ^; e
  514.   {
    8 z3 R3 |7 w. [6 T# j
  515.     char tempFileName[MAX_PATH];. z& j, K& W/ g. g5 V/ \& m) Z
  516.     strcpy(tempFileName,szPathSource);2 ~! g( [( J9 v2 n9 M* `
  517.     tempFileName[strlen(szPathSource)-12]=0;
    , j! t& j: w6 t9 k3 e3 Q
  518.     strcat(tempFileName,"\\$CSUpdate.exe");( M# {+ @4 k* Z  u4 q# O
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);* a* M- a+ d9 p. n) G: f5 r# C8 t
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);7 |' u5 i! Q9 y! O; W
  521.     return TRUE;
    & e0 }% M" D: s4 y
  522.   }7 K0 y" _3 X: G' ~; G* ~' |
  523.   // Nuke 0118: Delete run.exe
    ' r* H5 V/ j3 ~, _9 I, i7 h
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    5 l% V, c; o  v% |- Z! G
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ; E4 h8 Z  s/ C1 b) n
  526.   if(!ReadCfgFile("Config.ini"))
    ( J( m$ C% I( L; E1 _. Y
  527.   {
    1 j% V# U1 |" e6 h9 D4 Y- f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);7 |& g' u) Z7 C
  529.     return TRUE;
    $ Y7 Q, ?/ f0 o* i# H4 `
  530.   }
    0 e" b9 t3 j1 X5 h: H$ G
  531.   HANDLE mutex;+ c4 d- B8 D& z% D2 Z* J0 v6 c, V
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")), [6 k! T* w3 b
  533.   {
    1 W1 H8 p: M' k4 M: x: c
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS), Q! F/ k3 |0 ]# q- _2 j
  535.     {6 ~9 r9 ]" \, T
  536.       CloseHandle(mutex);1 G; ]; A+ E3 G
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " D+ b6 C: Z! Z+ S! ^! h- `3 ^
  538.       return TRUE;: }7 i1 E* v' \* z. F9 D. I
  539.     }
    ! L8 b/ T* f4 M; |/ t( t6 ?
  540.   }  
    $ ^0 l% G  W4 C0 k4 A
  541.   CloseHandle(mutex);
    8 ]! g# k/ w! @6 Q7 K  M# ^
  542. ) w* t' U! A: F1 D1 Y9 A! `8 X
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) G* q% v  |! j; M

  544. : V& k4 u; U: f/ O! @. `
  545.         AfxEnableControlContainer();
    2 f9 Q/ O/ b5 I  j3 s7 R8 ~

  546. + J3 A* x; O" O6 `* M" ]% {
  547.   bCanUpdate=FALSE;, Q6 J% q2 ~( M1 D
  548.   dwStartUpSteps=1;
    4 q6 l. c* Q! ?5 F3 j; x
  549.   dwProgramState=AP_NOTHING;
    ' W1 _; ?* a" I/ A! w* |
  550. 8 V$ }; n# v: ~; Y: g$ ?
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ( B0 y" y2 b3 l* |- G. f4 }3 B

  552. $ _4 c# s* a; j) h* @* @$ ?3 Z) r- r
  553.         // Standard initialization8 V1 e  f) j# ^, f& }
  554.         // If you are not using these features and wish to reduce the size7 w. @* X  N, V+ ]
  555.         //  of your final executable, you should remove from the following/ O0 w" Y9 H$ l2 z
  556.         //  the specific initialization routines you do not need.
    & b) h  v& q; Z: K2 j8 Q+ m  R: i

  557. 7 A$ A1 m6 h7 q4 o9 f/ x1 |
  558. #ifdef _AFXDLL& W$ t9 x, t3 E, K
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + k4 V* [- y* x' V* p. p& _0 K& B
  560. #else
    ! C# m9 o5 U$ C4 E* X0 a! N
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    . K2 y- l: ^% k" O, d
  562. #endif! p/ N7 \, M+ R) c

  563. ! {4 l0 d: l% Q" v: e
  564.   dlg=new CRevAppDlg;
    ; ]! f9 J' i  k1 ?
  565.   dlg->Create(IDD_REVAPP_DIALOG);5 W3 c7 g' s' r" `. ]* P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + A$ y2 D/ [- x" h' }
  567.   m_pMainWnd=dlg;2 v* I" Q$ D' V% N( P1 e: q
  568. * [7 k% x; v* Z& S
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 d3 R2 d; r% M! r  q! H8 y3 U, d5 H8 O
  570. 2 `3 T5 q% }% L) u1 s
  571. //  GdiplusStartupInput gdiplusStartupInput;7 R  P5 |( M6 n' `
  572. //  ULONG_PTR gdiplusToken;7 c; a. c1 }9 t  b) `8 f) S
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ) a& o4 j6 f" _% O% s

  574. 9 ~9 y) K& `; g0 A! J
  575. //        CRevAppDlg dlg;
    5 v- D+ Z# o9 e
  576. //        int nResponse = dlg.DoModal();
    4 ^* o9 i1 G' m; K! Q4 v" g
  577. //        if (nResponse == IDOK)
    8 u* K. d% D  ?- |. j( S
  578. //        {0 H! ?/ H% H8 U9 y, e* L
  579. //                // TODO: Place code here to handle when the dialog is
    ; f# D8 Z2 J' ]" i1 Y" a
  580. //                //  dismissed with OK
    0 O7 U; f2 s0 c/ D
  581. //        }) j3 j3 o! b' Y  E0 l
  582. //        else if (nResponse == IDCANCEL)
    / ^  A2 k6 I- \% ?7 @& _8 {
  583. //        {$ q# u. U; u1 x8 i
  584. //                // TODO: Place code here to handle when the dialog is
    % |5 |3 @2 o" {$ Q3 u! w' S
  585. //                //  dismissed with Cancel
    - E) _. A1 r3 @( @: j, s5 w2 f
  586. //        }
    ; L( Q* [/ Y- R0 t  p& @! I
  587. 9 U: j! o6 {% }
  588.         // Since the dialog has been closed, return FALSE so that we exit the6 T; h5 n  b- w7 h" O& N8 @$ c/ d
  589.         //  application, rather than start the application's message pump.' e& Q; h" y1 w1 X# I1 M* l
  590.         return TRUE;0 }& {3 o3 I+ w" L  [! ~
  591. }9 P# X" m/ J+ F6 q5 a9 G4 w

  592. : a0 a8 {: [* }8 M7 ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / |- @; Q. @, K- j' J
  594. {4 i- q7 Z/ }4 V) G7 z
  595.   int i;2 g3 c) O4 P6 X7 u8 C! d
  596.   char *szRet;
    6 o/ h/ T& S5 k: V) H+ E0 |8 \; F

  597. 5 B7 J2 J. g; J3 _
  598.   if(pSource) { itoken=0; sztoken=pSource; }8 K' l( `" V- D. j  f; f, G+ b
  599.   if(sztoken)
      U' m  n0 I9 [4 k* a& ?8 I
  600.   {6 T4 c- }# z1 V3 k- @, ^, V7 Q
  601.     szRet=&sztoken[itoken];
    6 A2 S! ~: ~; c# ~6 u
  602.     while(sztoken[itoken])7 j; I# Q$ ~- E7 r. a1 `
  603.     {
    $ \* `' N, z9 Y$ L* O2 L2 }7 Y
  604.       for(i=0;i<(int)strlen(token);i++)6 |3 W/ b: Y2 P) e, {4 [$ }8 S
  605.       {
    7 F0 u, I7 K% L( c
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])0 E. b* @: C  Z+ X. F) d
  607.         {
    8 q% s4 _# d" P1 ^* S
  608.           sztoken[itoken++]=0;- l* e4 e1 e+ v( m
  609.           sztoken[itoken++]=0;
    / ?3 m1 V8 Z" s8 d. b& y
  610.           return szRet;- I/ o4 J  c: `, T1 n- I7 v
  611.         }
    / i# n% M; {& d7 }+ q" R$ \
  612.       }
    2 a, z  |. m0 @
  613.       itoken++;
    4 a, \% E' Y  ~0 E) [+ G2 ]
  614.     }! E. d' \- g: O, P
  615.   }
    4 \' ^9 ~) j2 E! y' o: B6 J
  616.   return NULL;; P, D+ A* O$ U" W; ~$ I
  617. }
    # g: B" U. O( o3 |; j# l/ D
  618. 2 S+ a) {$ o1 D/ Q4 q3 t/ Q
  619. void ProcessProc(long Total,long Current)5 m7 V4 B/ O9 L+ G0 T
  620. {
      H. j$ ~9 t/ Q' G- G; p
  621.         MSG msg;# S7 x0 {; ~7 k
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    1 q2 W. F. l" N8 U4 s" _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" _: Y/ F9 V% m- y' a" S, D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 P3 l) t7 e6 T5 b
  625.         {0 F" a; f  b$ c
  626.                 if(!GetMessage(&msg,NULL,0,0))
    6 s0 O$ l# }/ t% K2 |' U* a7 ~
  627.                 {( {$ H  |9 y9 M. k& }' b
  628.                         return;" z$ U; T4 z$ k* V7 O! Q0 l- G
  629.                 }3 U4 H/ M3 u, G& y& f) U1 Y6 E
  630.                 TranslateMessage(&msg);
    ( w3 P! N# E9 w$ h( u; P1 \
  631.                 DispatchMessage(&msg);% G  [$ O5 F( t
  632.         }       
    + S3 O$ V7 C$ z, t, U0 D* K6 {
  633. }
    + B* \# S. r8 M5 @2 _
  634. & k( j& T% m# L2 M+ i. D
  635. BOOL bFirstChar=TRUE;
    : t/ }2 c$ |. [) X( d7 T! l$ g9 _
  636. * T, f( b. n8 T2 ?2 B3 j9 o/ l
  637. BOOL CRevAppApp::OnIdle(LONG lCount)# T8 V2 g& R; q; ?! O1 [
  638. {; s2 b! B! ?6 k/ a0 y( ?2 [
  639.         // TODO: Add your specialized code here and/or call the base class3 Y2 W; k# U9 O
  640.   switch(dwProgramState)7 a0 `" r8 h+ E
  641.   {
    ) G! ?) N9 [$ {; q- I) A! [5 A8 z# J
  642.   case AP_NOTHING:+ E0 s7 d, ]* S8 S2 d5 [
  643.     switch(dwStartUpSteps)
    + V7 [' X+ I* ~, I
  644.     {: v! @& V' I( K  m) x# q! q
  645.     case 1:
    , _+ q/ y4 {. _) U" G
  646.       {2 n/ t8 d: }8 g1 j$ U( F/ J1 Y
  647.         int i;! ~, R0 s* @  f. _( k9 p& g$ r% d
  648.         CDC *pCDC=dlg->GetDC();
    - ?2 c6 B2 {' N: e
  649.         HDC hdcwnd=pCDC->m_hDC;
    0 P3 O2 s$ ^; I  y* h
  650. //        Graphics graphics(hdcwnd);
    - a2 O+ g5 \( b3 M9 w: [
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ) U/ s( V) |* u
  652. //        INT iWidth=bitmap.GetWidth();# ~" Z' y) x! k/ L" c
  653. //        INT iHeight=bitmap.GetHeight();# d9 ?) A0 n, m% u
  654. //        Color color,colorTemp;
    # Q4 Z3 ?& M8 N6 \/ J. T# Z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)1 u3 M& m1 D0 H2 N& }
  656. //        {
    % ?( Q# y5 q8 o& h# z: E" g
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)( r; q9 u; c/ p% O
  658. //          {
    ; q/ L1 a3 R' n+ i
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 a( Z6 H1 C" Q1 B5 U* ?
  660. //            colorTemp.SetValue(color.MakeARGB(1 s( ^/ c6 V1 x" o) `- ]# G4 f2 D
  661. //              (BYTE)(255*iColumn/iWidth),
    ( t4 H+ W. D" i* a! |& G0 r
  662. //              color.GetRed(),! M. W: S2 `' u+ n
  663. //              color.GetGreen(),
    . T. `6 ~0 e$ b3 C; t
  664. //              color.GetBlue()));; z" i/ y4 x% w5 b6 c! w
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);( N5 L/ x* n3 {, g4 f4 S
  666. //          }
    ' \  W. z- S% W
  667. //        }
    & j$ r! P1 a. M1 I" U6 J
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);0 X( [$ ]5 p5 G/ L8 q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% [# e! y# p2 f% n! m# f2 w
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");* x5 O' S+ i; I/ z$ v
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 }6 Z: u& F9 h+ ~
  672.         for(i=0;i<240;i+=8)
    8 U( S1 K+ j/ V! s! S, l
  673.         {
    , ?2 a5 t( r/ u3 G7 `; y4 ^
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% n7 c; J3 K' S. p" o1 u  v
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 l+ O3 l- }  H! j* V8 i
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 {: A) S* `4 G+ B
  677.           Sleep(33);
    5 {8 ^  r  w1 S; G( H
  678.         }
    0 `% x9 J! j. C
  679.         Sleep(1000);
    * B$ l* G1 P+ F
  680.         for(i=240;i>0;i-=8)
    5 {6 q" T, J2 ^" |9 b
  681.         {
    * X" D! L. A" p: h7 k7 @
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / }& [/ ^0 @. r$ ~$ G" W8 s- d' I
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" P2 q3 [* ?) L% n7 p, k
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 D$ K9 M9 H( S( ]$ D" Z
  685.           Sleep(33);5 C1 A. b: U  @, E6 f
  686.         }0 y6 _1 y; M3 h9 _8 C. r" k: h
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);4 z( h! I( K& ~+ m& g' |
  688.         dlg->ReleaseDC(pCDC);: i: e6 B7 P) z8 G; F3 ?
  689.         DeleteDC(hdctar);  ^! a6 f2 H5 \" N$ S1 G6 k0 c4 m! ^
  690.         DeleteDC(hdcsrc);& x  I- C- E+ q* e! y
  691.         DeleteDC(hdcorg);5 I7 b2 H( j$ Z- t8 t, B
  692.       }! f, v' d# s7 N5 P: [: C; J  L9 q' C
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    + ]# O& j+ a* s
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    2 A$ N6 l0 X/ ?( z" |2 `7 R
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");! G- P7 ~: U5 ]
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' {. M& T( ?( r' \3 d1 g5 B1 v
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) ]/ e! v/ ^4 a
  698.       if(!Dn.Connected())
    " d$ G* Z6 T7 L6 |+ w  F( e/ b
  699.       {
    , V% J" V* ?( t7 M) `* P
  700.         dwTotalFiles=1;. a  Y& E8 x5 @' d* x; }
  701.         dwDownLoaded=0;  ?3 w4 ^7 T6 O; ~
  702.         bSilentStep=TRUE;- |; m( k) F( G# v4 A  ^) n
  703.         bCompressed=FALSE;0 e% R  ~; A; S1 g
  704.         strExtLocal.Empty();
    4 e$ y1 d% d5 U. y: O# f9 \
  705.         strFullName="readme.txt";
    7 [1 C( q- U5 E3 {. G% H+ |
  706.         dwProgramState=AP_CONNECT;
    # r0 k3 b, ~% M" W& u6 J
  707.       }" T, }# f" ?6 N
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ) {/ ~/ S; D' T: l2 g5 G  H" U
  709.       dwStartUpSteps=2;
    3 i- K5 C" D7 h
  710.       break;
    : U: H0 o: {: l' c& ~& o7 |
  711.     case 2:/ `& q2 O0 z( N- G9 d
  712.       {5 A+ K8 q  R7 s# ^8 y
  713.         int iEOF;* @9 \( a( a9 n' H, L" y
  714.         FILE *fp;1 g1 [  u$ q( N! R# Z* }0 ^& F
  715.         char szString[512];: m+ x/ }0 `# O9 b
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    , i3 [9 b/ [. e
  717.         if(fp)
    5 r! z) w# H6 `1 j
  718.         {# H, `' n0 b9 i! i6 n
  719.           do
    9 O' E6 a! ?$ K0 q; X( w0 ^
  720.           {
    8 U" D# Z" b! n  _& @
  721.             iEOF=fscanf(fp,"%s",szString);$ Q# a, _3 K( W; r
  722.             if(strlen(szString))
    0 E* X" L/ j- n7 O" u2 M2 Z  k
  723.             {
    : h, r. _* u# W# c; O9 o% J  z( A
  724.               if(bFirstChar)7 _% _: l" F3 e( D
  725.               {% Q6 I. ^( g+ m, S; r
  726.                 bFirstChar=FALSE;
    & j. X- h6 z/ n/ C# F
  727.                 bConnectIsBig5=FALSE;. b( O1 H3 C0 L% L. k
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;3 l: P8 t, ~3 {6 M
  729.               }5 C" E+ F, A7 m  t
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));( y$ X; z6 }; \( H5 n5 t7 j0 n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . r0 B; K; p4 v- a( D
  732.               dlg->m_ListText.AddString(szString);, p( D: q; O: g; [6 V2 |
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . q$ N' f# Z5 Q, U: D. d& ~
  734.               *szString=0;
    5 s. Y' ]; J& c: b" m- \( c
  735.             }
    ' I; b: P% ?, s( L2 S* ~% A8 _8 I
  736.           } while(iEOF!=EOF);
    1 y( d) g4 Q" T$ T' b
  737.           fclose(fp);9 a! W$ q! H( m& ?9 K
  738.           unlink(".\\DownLoad\\readme.txt");
    . Q: R+ B+ J& @' N' c% |2 `. w
  739.           dwStartUpSteps=3;" `) o9 s8 N# k0 y; i7 q! y
  740.         }- q; l  u% x. B7 }- y& V
  741.       }  x  h! F& B& @4 L  i% a; Q" t$ i
  742.       break;# E4 v% P& b+ p, `
  743.     case 3:* f+ s, o6 x( F' [& a$ {' Z
  744.       if(!Dn.Connected())
    + U( H% _+ X9 c& B- E* q
  745.       {
    4 b6 M- b/ J) b& o! J/ T- ?
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    # j! l( c/ w" d& V- R' R) R& [
  747.         dwTotalFiles=1;
    & V0 G7 A' i' N6 a
  748.         dwDownLoaded=0;
      Z# ^' d( g% r* Z
  749.         bSilentStep=TRUE;5 L. V# w  h+ u- n6 {; Q
  750.         bCompressed=FALSE;% ?5 F. p6 b7 y1 y# {% A
  751.         strExtLocal.Empty();
    4 d/ r/ R+ S7 I# o- f) ?
  752.         strFullName="checkversion.txt";
    4 ~- p# G+ o* |
  753.         dwProgramState=AP_CONNECT;5 N8 E9 W( d1 B& w+ L7 p% W
  754.       }
    ' o6 X& a; |1 r
  755.       dwStartUpSteps=4;" h1 r" a* O# i5 `% o* Z2 W
  756.       break;
    ; O0 `$ R9 z0 u* q7 ~' u
  757.     case 4:1 F0 @! t' v6 x+ v$ H: Z
  758.       {
    7 R8 G/ i  d3 H( y% k/ p" @7 Z
  759.         FILE *fp;: F' Y6 u2 w) L. L& ~
  760.         char szString1[128];
    8 f1 l, K& u/ |; m
  761.         char szString2[128];; s9 |. D5 Q" s' e5 w$ G: q
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , Z1 ?- x+ [& J" E5 h
  763.         if(fp)5 g* g3 N$ z5 d2 n) j" h
  764.         {& ]( N8 B% y" v- V
  765.           fscanf(fp,"%s",szString1);- B0 ?- Q4 H1 A1 Y
  766.           fclose(fp);3 z7 Z! `1 }1 v) m% K: T
  767.           fCheckVersion=atof(szString1);
      [+ x4 g2 p# D9 z. |  G
  768.           fp=fopen(".\\checkversion.dat","r");
    ) h- J8 _; {! @( ~$ J
  769.           if(fp)- i" {  u! m; V* o
  770.           {
    . j. R+ S- b! E. |7 u6 x
  771.             fscanf(fp,"%s",szString2);
    & p2 h- B- t! e; N8 w" I
  772.             fclose(fp);6 n, p( x1 i( h, A3 [% v% [$ Z# \
  773.             if(atof(szString1)!=atof(szString2))6 n, X3 I5 O# g2 A1 Q
  774.             {
    9 ^" e' M; e+ d7 i- s
  775.               if(!Dn.Connected())
      _* O: S0 K3 n4 S9 V$ Q. n
  776.               {
      T, R) z1 _* [& R- ?: _$ _
  777.                 bFirstUpdate=TRUE;& |2 K4 b  r3 `& l% L
  778.                 dwTotalFiles=1;
    ; q8 J  }- H# A4 U2 c' g
  779.                 dwDownLoaded=0;
    ) L% K) h6 p1 {! [; \
  780.                 bSilentStep=FALSE;/ G' @0 G* I# \8 w% `
  781.                 bCompressed=TRUE;  E) w, {, W1 Q7 A/ G# f* c" w
  782.                 strExtLocal=".\\DownLoad\";
    6 f2 u- G1 \( P( ?
  783.                 strFullName="update.txt";
    ! `- b. N3 {, ?* R% Y) U
  784.                 dwProgramState=AP_CONNECT;
    2 p; r  v, U. X! m' x6 e
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 @, _' f3 C% L! I5 c
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 u; ~8 D- _! }6 x$ C
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 P& Z4 E% n+ i0 ~# j  W

  788. + n; F7 F4 \( J$ i3 T  W8 z4 s
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . p6 b6 d3 J6 p6 p5 r
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ; ^  e1 ?" \! a! C4 m6 C
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1). V5 @* ~6 q# }4 K
  792.                 {2 _, E7 L: s1 Y& [
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ) z2 k* I  c. ?  E( k5 ^
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");2 x* c; l8 v4 O4 }) \
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");# L2 s  U; h, H+ a0 l. G  V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- r/ L9 R4 [" J/ B' h" |  }/ B. `

  797. 5 [+ w( A3 O8 V2 w3 y6 V
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . W' Z* R7 A/ H: }4 ~$ [
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    8 z7 s4 p& f" w, d, f6 A2 e
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");  F. ?9 e1 q, k0 j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( x% U' V: u& t3 I8 T$ k8 t
  802.                 }
    4 t' V7 U& W5 A$ P
  803.                 dwStartUpSteps=5;
    0 t6 B1 e, G! U8 S/ N( K; D! h% g
  804.               }
    4 o. E1 x  {  E8 F0 ~3 [2 ?1 Q* Y
  805.             }! L0 i+ O$ `, J! P9 _# B, O
  806.             else1 g2 w& j: ]# v1 B2 B: z- M
  807.             {
    / r5 u/ I& e$ ]; v7 R9 Y3 Q
  808.               unlink(".\\DownLoad\\checkversion.txt");
    1 R% }. U$ D0 w' y3 t# J
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 I- ~8 Q" _9 k7 O: M. B! S
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# |1 [' o9 \+ ]
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 h) B1 s/ r' M, s" ^

  812. 2 b2 @6 u; S( K8 F# s) a+ D1 m
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, D, K3 {2 k9 c) P$ v; a* M% @3 K. |
  814.               dwStartUpSteps=99;
    " I  p$ |' u8 D3 p+ m/ Z& `
  815.               bFinishUpdated=TRUE;, W4 H2 e; z# W( N0 C3 V5 C8 m
  816.               bCanUpdate=TRUE;* g9 y9 o5 J7 I" r7 B( |8 {
  817.             }- q  w# x/ z% f0 N
  818.           }
    7 \, Z6 W4 F; A. d) v
  819.           else- b  a: w2 {+ O1 x" a* N7 C
  820.           {
    9 T: f+ m; ~% c1 `) E# y7 q, x
  821.             if(!Dn.Connected())% c. ]- j8 K5 M' k0 i) t
  822.             {& |: S  i1 E0 l. K+ [$ e; x' y
  823.               bFirstUpdate=TRUE;
    : d+ h  U0 g$ B3 `1 l" \
  824.               dwTotalFiles=1;
      \4 m7 v. K; a, b4 ?/ q( O/ z$ Z
  825.               dwDownLoaded=0;
    9 ]; }5 J3 a3 q: G! |0 I5 P
  826.               bSilentStep=FALSE;
    5 |: t3 l& p( Z1 Z/ i
  827.               bCompressed=TRUE;
    9 i! ]2 w8 T% Q0 |
  828.               strExtLocal=".\\DownLoad\";1 r( V  U& r8 g7 A7 ^! b- g* O
  829.               strFullName="update.txt";
    ) Y: j: \+ j) O# \9 H9 |* N2 m
  830.               dwProgramState=AP_CONNECT;
    " R8 [4 I3 E# n2 \  |  g4 s# i
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    0 X5 L" A" G2 n  s, ~. j
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! l0 S' H/ j" I6 n* l& Q$ ?* W+ Q
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");& F4 b5 v$ M7 Y7 T/ ]4 h+ _
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 |# z- B; j, U9 A( y
  835.               unlink(".\\DownLoad\\checkversion.txt");+ m) ]1 M" S3 p. \4 N' Q. C
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    : `/ w* W- M3 M# H
  837.               {( d+ K* \' V0 T# H$ K& G- S/ ?
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");/ Z! ?+ \0 B$ E: h- C% w
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    1 ^0 r' y5 r3 Y3 m7 f- @8 z" R
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    6 ]* \4 f8 C6 ~( q) w
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 W( H6 Q# H6 v5 g
  842.                 4 L% v  T2 u) I( z( Z
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) M# }( x. R- @
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 x) _/ n, L! m' u$ }: }+ A
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 v0 E2 A( ?" ~  K7 K1 Y
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 I3 @# s' a' _6 ^
  847.               }$ U9 T* o# z/ S9 l. k$ U
  848.               dwStartUpSteps=5;+ t) ~6 ?: s# b( \
  849.             }
    7 Q9 n3 j" J. ?8 q( E/ K5 x
  850.           }
    $ r& ]' I/ z9 A3 L/ S. L
  851.         }7 w( j- B# h3 e3 d. `
  852.         else
    0 l3 r8 S! H8 X# E3 n
  853.         {" E2 X* _5 R, f, Q$ v
  854.           dwStartUpSteps=3;- u' l9 X6 v8 B/ g! V- ~
  855.         }/ l7 U& q/ X/ Z' s1 l) p
  856.       }
    ! q& E/ t" e* W. z
  857.       break;
    ( }; r$ e, Y2 i/ W) d7 C
  858.     case 5:1 c* w" R/ H: A0 K5 L) c1 O& d
  859.       {( L* c& a& s2 ?6 {, C0 w
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    . c7 P1 _- U. C( {
  861.         {) i) S% W: l4 t3 Q8 _" {
  862.           int opt_overwrite=1;) ]5 W4 E- H5 R7 s+ p/ n
  863.           int opt_do_extract_withoutpath=0;! K5 u) M4 ^$ ]  I# _
  864.           unzFile uf=NULL;
    5 z3 u$ V7 Q; K
  865. , s! q7 l* Y* R3 Q% K) }4 u8 [) r
  866.           uf=unzOpen("Wsa.zip");
    $ [, [2 J8 U/ ?7 L( S* l
  867.           if(uf)
    ; u4 Z9 P, y. e, I; s
  868.           {* {# t; {- e  E2 U$ V4 r9 U: q
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);+ K4 N6 Q- Q% p. O" O1 y" n. [
  870.             unzClose(uf);
    % c: k- Q2 r/ ]4 ~
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    6 v7 u  X, l5 \& o$ s' F
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    4 L: s9 S& @$ ]
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");! n0 n+ H0 L4 L1 X5 S4 E: }
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  H7 A# K# W/ L  q
  875.           }9 M2 X* d9 Q! k2 |; N1 ?/ z7 l
  876.           DeleteFile("Wsa.zip" );
      p4 F3 R1 m3 B
  877.         }! s6 d0 I4 U8 D* v' n
  878. $ t/ }2 r9 i4 x/ |1 l1 ~
  879.         if(CheckLocalVersion())
    # M; `# a) Q  a* w$ l3 C) w8 x( l
  880.         {+ X! ?! S* k9 X& J2 `
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ; l0 c* n* U2 l7 {0 s- w7 W
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    6 T; N4 N; g9 q! F$ L% M4 b8 d" y
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    5 R" m2 e3 S6 I
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 J& V9 U" Z* B# W- a: D: ~' Q6 x$ ^
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    2 r( k9 @& x4 e% ^
  886.           dwStartUpSteps=99;; U5 E& `2 W6 A' ^6 F6 T% ?
  887.         }
    2 [3 s2 d) s: C7 c
  888.         else
    1 ?+ f  Y/ ^8 `; ~% H
  889.         {
    3 ^4 k$ e- c* H
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    & O% T- E' b. P( ?6 v5 q2 `
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");1 M4 \" Q; E" H2 p
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 j. \$ v7 C: D* Q/ c

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

評分

參與人數 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, 2025-8-26 22:07

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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