找回密碼
 立即注册

CSUpdate.exe源代码

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

+ V0 {; T. ?" q' Q
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ' ^; t$ l" }. a
  2. //
    7 C) h: G5 g4 K/ t6 G9 h
  3. % V/ i( s8 |- \3 z' b
  4. #include "stdafx.h"
    ( O  x, z6 c6 B
  5. & ?2 C6 G7 {. h, u+ ]% W! B1 \
  6. //#define UNICODE
    ( ]% x) n: h6 K4 t. z
  7. //#include <gdiplus.h>
    ! D( |, {, W/ |) g
  8. //using namespace Gdiplus;
    ' M) Q3 f  v% c8 @! T4 I3 F& a, Q3 }+ t
  9. * p% Q' s7 I: }4 M
  10. #include "RevApp.h", a' Q& R- a; T6 p4 b% G! G/ s( q
  11. #include "RevAppDlg.h"
    ; b, T0 ~; i$ C
  12. % Y# j# L( D; W( H7 N" Y
  13. #pragma warning(disable:4786), Z: ~8 u' [! D; X- h8 g3 e
  14. #include <map>
    + F9 a6 m0 A  v# h, Y! n3 p; j
  15. #include <list>, ]/ [! \1 W" z# u$ L
  16. #include <direct.h>$ y& p) t/ k+ [+ `" e& W
  17. 3 U- z0 B- B8 E& j2 R$ ^/ l- k  S
  18. #ifdef _DEBUG
    * c* M7 f+ I0 F: M$ c6 O! j
  19. #define new DEBUG_NEW; L# }: Q: r  D( c
  20. #undef THIS_FILE3 [* F) z* o/ m6 ^- w9 o
  21. static char THIS_FILE[] = __FILE__;
    & d# a+ q: ^/ h; `* b
  22. #endif4 T" |. [( |) l% Y% d
  23. #include "SkinResDef.h"
    6 ]) r6 L# v( ]9 s
  24. #include "ChangeBG.h"
    ' j" N6 q# A. _8 B
  25. #include "AFXINET.H"/ e- i; E% ~+ J' d$ m  P

  26.   k9 ~& E9 c5 ]0 b
  27. #define TRADITIONAL_CHINESE 0
    " k4 g( A; A- r# w
  28. #define SIMPLIFY_CHINESE 1
    2 `5 k  v+ Q" p# S* y( N* M
  29. #define ENGLISH 29 c& b: Y) b% q$ W
  30. int m_iLanguage = ENGLISH;
    * _& J( f! p5 e# q% q, w, h1 |
  31. /////////////////////////////////////////////////////////////////////////////
    + K( y# E! n) k/ V9 c3 e& ]
  32. // CRevAppApp  ^5 q- M6 b; z1 l6 l
  33. * q9 X# G1 X/ R4 N5 E
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 D! d9 W, n1 u) f, J
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    0 H& e6 y& z- J! H4 t& E
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here./ a" W  v4 w+ d0 c. b9 N
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
      G% ?. s$ K+ \, n; b6 h
  38.         //}}AFX_MSG
    % j' r8 F" a. K/ g
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)4 ^+ w( w: R! P" M. h
  40. END_MESSAGE_MAP()
    6 X* C% [! c. ^% w

  41. , Q: B1 c6 Y, `/ \; l$ d) Y& P% B/ w
  42. /////////////////////////////////////////////////////////////////////////////
    ' W. z/ g4 b/ L) I' J3 p
  43. // CRevAppApp construction# a; _: [& J0 ]) u) D
  44. . k. M  ~& _5 H* L1 ?" V6 S. s2 c
  45. CRevAppApp::CRevAppApp()' d+ g+ s. t/ J
  46. {
      h$ z0 Y) b! N$ ~$ M9 h; l
  47.         // TODO: add construction code here,
    ( e+ f5 e( x2 b
  48.         // Place all significant initialization in InitInstance
    5 c& Y- w  _) ]  O
  49.   bDisplayIsBig5=FALSE;9 F; M% O6 {5 T% t
  50.   bRestartUpdater=FALSE;& A( x* Q% E* f. S
  51.   bFinishUpdated=FALSE;8 ~% j0 E4 Y7 b
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;; i( h: l0 {/ }7 T  ]' j1 D, _
  53.   InitChangeDataBig52GBKS();
    . D' j( S1 P' G1 p0 w% {8 t
  54.   InitChangeDataGBKS2Big5();' V. ~  P( ]  p& T1 s
  55.         //
    + A/ i- K# q0 \' ~
  56.         bClickRunExe = FALSE;9 ^7 P: f% v7 n
  57.         //! _& N4 l/ J! n5 {2 w
  58. }4 k. F% D4 I6 V  j! ^3 A7 D  Z; N! }
  59. 8 w5 Y0 r4 E; W1 Q. l+ g
  60. CRevAppApp::~CRevAppApp()$ H5 t: `5 l0 z& Z7 ?
  61. {. F: K9 x# ~0 r+ T
  62.         // TODO: add construction code here,) L' p- w$ z9 |8 N/ h4 z# J
  63.         // Place all significant initialization in InitInstance
    # n% s/ g/ M5 E6 Z0 _( X' C# ]" u
  64.   EndChangeData();: Q3 r  Q/ u; `) b9 H" s: b
  65. }
    8 d: d8 G7 X$ z; a7 B

  66. ( e( }- V1 m- i9 j7 l
  67. /////////////////////////////////////////////////////////////////////////////
    $ ?. a/ y& b6 [0 {' E7 U
  68. // The one and only CRevAppApp object
    * O& |) Z" P7 D( N* i
  69. * ~' O2 |4 }9 n* P# c/ ^; K: N) N
  70. CRevAppApp theApp;1 {- h7 g5 d$ ]3 z* n& F3 m, o

  71. . c! g$ m- {% C; h6 N
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)- o. E4 U( t3 o9 _( q
  73. {
      t! }1 y6 w+ e3 x" z$ v, G
  74.   int iEOF=0;
    3 D  Q3 q' R% m, O4 |2 N$ t
  75.   char szTempName[MAX_PATH];
    : S6 ~- @: a4 Z  R% p2 Z7 x- c& d
  76.   *szFileName=0;' x2 e# B- p, E# y
  77.   iEOF=fscanf(fp,"%s",szTempName);$ m' e1 d  H% r7 S
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')3 ]3 [- H2 c/ ^* e4 M: T$ d7 F8 v
  79.   {3 N1 [$ z# U  A+ h
  80.     strcpy(szFileName,&szTempName[1]);* b( N- N; z9 l! J
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)0 J% E' l2 M, S% Z
  82.     {
    & R  }# k+ }& k6 o
  83.       iEOF=fscanf(fp,"%s",szTempName);' }% {3 V$ @+ x, F5 P
  84.       strcat(szFileName," ");
    ) S' \. R2 L5 q' t8 c4 y6 {! u
  85.       strcat(szFileName,szTempName);& }( K, t1 b5 N# l: k# ~1 U! a
  86.     }
    * t( T; V& N: G3 i% }( I) F) H
  87.     if(strlen(szFileName)>=1)
    2 S; W8 `$ F; \, a1 x8 _
  88.     {
      K0 |, e, a4 I  \
  89.       szFileName[strlen(szFileName)-1]=0;
    0 C: N, f7 A: j4 I" ~8 P
  90.     }
    / F7 W( u# l1 {. [# v; m8 A
  91.   }
    " }) E9 L3 E. G, I; T
  92.   return szFileName;6 X# q( x6 D# N0 |& j) A
  93. }% c: W: }- z8 i

  94. ' ]6 r% ~! V  T$ R
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)! Y; B6 y% |: V& P1 \9 `
  96. {" E, u* F  H: C+ `/ Y
  97.   FILE *fp;1 P6 f8 b0 U7 F) ~5 T
  98.   char *key=NULL;
      V8 P9 R& Y5 N7 \5 N
  99.   char version[MAX_PATH];
    , N3 {) {! U9 g$ k; Q  z; y
  100.   LPUPDATEFILE file,olds;9 z- v; S3 Y4 n2 j0 r1 x/ Z/ \
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    . a4 o9 j2 B- ~  V5 x  m6 A

  102. 7 m" e" _. c' i1 j
  103.   UpdateList.clear();
    4 S' H! [# X: C0 ?
  104.   UpdateFile.clear();$ C0 I! H6 d" x5 d2 ?( r
  105.   if(GetFileAttributes(filename)==-1) return false;
    & o0 g1 d+ g' O- v; F, Q
  106.   if(!(fp=fopen(filename,"r"))) return false;
    $ S# [2 V, t3 {9 G& U, h# {
  107.   fscanf(fp,"%s",version);5 ]; f1 [, E7 E
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    * F) E9 M8 N; n+ g& P1 p
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ! ^0 O& m8 f8 o" a1 Z' _: c
  110.   {
    2 d- y# o- u) [3 N6 u' P  a9 e( S8 R
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ d4 a2 W( l* {; o3 D. H) c
  112.     fscanf(fp,"%s",file->path);+ o9 S: n8 a7 c* ^; A8 d! P
  113.     ReadFileNames(fp,file->file);5 Y+ l4 M5 R  X5 L+ M. a
  114.     strcpy(file->full,".");0 J' G( I6 b0 J
  115.     strcat(file->full,file->path);% e3 Y  Y$ R& i5 E9 U* }
  116.     strcat(file->full,file->file);1 F  C/ f8 ?/ H6 w' U- Z+ U
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    7 N3 u* u. u6 l& x4 l
  118.     {
    ( X  R7 _, F; ~9 \$ \
  119.       file->vers=(float)atof(version);6 K) v. d& b0 @1 M6 J! S1 ^& f
  120.       UpdateList.push_back(file->full);
    7 ^) k) K/ B  |9 w( [( b
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    4 n2 \8 i4 T% d! v$ ^6 p* Q
  122.     }
    / P1 [: j2 k7 t* H  Y. j
  123.     else. B" m0 n' @; e' U/ S8 S
  124.     {
    ) M- R. ?0 c0 Z+ x) C
  125.       olds=(*p).second;
    7 w3 u" s# n, g
  126.       if(olds->vers<(float)atof(version))- C0 a- h; I3 e1 t0 _1 {
  127.       {0 t9 [9 [. a. u9 L: l5 w& `1 }4 W
  128.         olds->vers=(float)atof(version);5 U+ B, y- |4 F8 n: U
  129.       }- E* v8 N. ~. m. H, X8 b* V
  130.       free(file);
    $ W  k! p$ o8 v6 n
  131.     }! }( n1 c% j0 O7 |% O/ L/ e
  132.   }
    5 V0 r+ s8 P9 i3 v7 U( k  {
  133.   fclose(fp);4 ]6 A/ i& a9 _% m
  134.   return true;
    ! _4 Z( h! y) ?, O% Y! h
  135. }) j  m; J& x7 q- j0 m7 u( A
  136. - N; V: j( Z' j: l; F: o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)# m. F; }9 z0 [" j
  138. {! I1 V3 V. b# c
  139.   TCHAR  szFull[MAX_PATH];# V3 o9 F- s8 S+ j0 N) {7 W
  140.   TCHAR *token,*inter;
    4 J9 x7 {* u. f+ {; l7 L6 Y
  141.   *szPath=0;
    2 m' p% k# K6 O& |' J
  142.   strcpy(szFull,szFullPath);5 @) E% a9 r; w: Z! u6 U
  143.   token=strtok(szFull,"\\/");
    : m0 G. p* p/ w% y
  144.   inter=token;
    * _9 \+ x8 P, b/ o0 t' s6 C
  145.   while(token=strtok(NULL,"\\/"))1 W( j2 G& @  s$ B9 I( ~, Q" a
  146.   {
    3 t0 r/ r/ y' x/ B6 j" @
  147.     strcat(szPath,inter);+ A2 a7 o7 R, x6 R$ ~
  148.     strcat(szPath,"\");
    + }+ H+ s$ ?  a
  149.     inter=token;' m! _  P& S2 Y+ c0 _9 @
  150.   }4 H; k4 _3 w/ T
  151.   return strlen(szPath);
    / K! K6 ~2 F- n- U! H8 V
  152. }, m6 X- [1 w: J0 j- ^8 U# j: r/ i
  153. . Y$ G. c6 Y6 q; |! {
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)# }, J2 B+ O; D0 A, O
  155. {
    0 b: [# F! Z9 n  s
  156.   DWORD attrib=GetFileAttributes(Target);4 p, ~" g+ t- ^! a: r9 j
  157.   if(attrib!=-1)* r! U2 H- I# N6 H  \* S2 @
  158.   {
    , O6 ?5 h8 E0 h+ ~# V
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)). L" ?+ \4 p/ @; A/ ?, I( d
  160.     {
    $ ]; x6 |1 R7 P& \
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);8 m4 m& i* A! j5 Y) V
  162.       SetFileAttributes(Target,attrib);
    7 o2 s$ C# j) _; X' r+ f
  163.     }$ t; Z% H! ?( |) R% @  K, n7 T! r" c
  164.   }
    . |" ~0 v, V0 Z( O6 X4 C0 m, t
  165.   CopyFile(Source,Target,Erase);
    7 u4 @! E1 \5 T; r1 B; N( I- C
  166. }
    ; E! `: q1 O& O4 {

  167. 7 e- K5 j! z6 s# x* q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); ]3 K  Q) L1 G, R# B
  169. {
    5 q4 H5 A2 g1 U8 Y1 Y' h$ |. A
  170.      FILE *fp;
    + j4 z% C9 n  p5 \  D) h
  171.      char  szBuffer[8192];
    # ]3 {6 E! U: G. Y- Q$ \
  172.   va_list  argptr;+ y2 f7 Y: Z8 n4 F
  173. 8 X5 u& _; ]9 m3 p: E1 J
  174.         va_start(argptr,message);' s3 Z4 M8 I3 P( g/ H7 j
  175.         vsprintf(szBuffer,message,argptr);4 |/ @& a$ @6 }8 N( L. r& l& h
  176.         va_end(argptr);
    + |+ |4 h+ p* c; G
  177.   fp=fopen(FileName,"a");# r' P  s2 H2 P4 ~$ I. O
  178.   if(fp)7 `% d$ z# [$ M# ?& @$ X  r8 ?7 J
  179.   {# k# \& G" G( X5 ~: f4 M
  180.     fprintf(fp,szBuffer);
    , D5 N; C" v* O9 @3 y0 N
  181.     fclose(fp);
    - o0 E4 |4 t" _
  182.           _flushall();
    $ X4 b, L* ~% B1 e1 ?' f/ V9 |
  183.   }) V8 Z0 s! P& ^3 u; ~( Q
  184. }1 t  F) U& e& F1 q$ A3 E1 \
  185. : {1 W- H$ p0 R# n
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    5 {1 k# @" v5 C- K$ X) o8 K
  187. {, D1 n1 H0 A, B$ n$ A: g
  188.      FILE *fp;
    ! M- F3 V; s2 R# W1 E. i' ^* n; ?5 ~
  189.     DWORD  attrib;
    / r0 V3 n, R; z
  190.   attrib=GetFileAttributes(FileName);, j- }: i& ~: G( ~7 L  U( t
  191.   if(attrib!=-1)
    ( q$ k) w$ \- \
  192.   {/ l) x4 `. c; F) n% ?
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);* i/ s8 U4 y8 u4 G' i3 f
  194.     if(!SetFileAttributes(FileName,attrib))8 I! }, q, T* Y& u" Q
  195.     {' g3 ]' T! {$ N, g
  196.       return FALSE;
    + P+ u( A9 ^3 S
  197.     }
    : J) Y0 x; t8 G
  198.   }- O; B- `! k; H2 x2 w' r% F/ `
  199.   fp=fopen(FileName,"wb");
    ( v/ u  P0 `# _5 e! e0 A
  200.   if(fp)
    % r  o9 `5 N% p+ ~2 f6 }& ?2 K
  201.   {
    4 M, y6 u7 Q( L5 E8 c
  202.     fclose(fp);) u- m7 e/ e' q5 J
  203.   }
      E: I1 _' h1 {  @% v9 y7 s2 w7 S
  204.   return TRUE;2 f' I3 C3 A( t% \( |1 j
  205. }
    2 L0 o4 V: p, y( y0 q8 u( m, f

  206. , j2 U) E4 O/ b+ A
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    $ g& G, R. f6 K7 D& ]8 C
  208. {
    * C  }1 |1 O( b
  209.   char filename[MAX_PATH];
    + D8 @( ?, U! \! a
  210.   LPUPDATEFILE file,olds;
    1 }3 X9 y' r' Z, {  A& a2 R) x
  211.   std::map<int,CString>::iterator i;
    ; m1 G9 h4 a* z/ w' F6 ]; {
  212.   std::map<CString,LPUPDATEFILE>::iterator p;  f( @- t) ^0 t5 e9 W8 x. v- n+ U, k! R
  213.   std::list<CString>::iterator l;+ F$ v) l* a( e) m1 N: Z

  214. $ n* C* \! K; P
  215.   if(bFirstUpdate)
    * r; s6 c' J/ v* X! a3 K
  216.   {
    8 A. U* L/ ?2 e  L1 p: w
  217.     dwCurrFile=0;
    5 k* }( a7 I' {7 N! U. ~, v( B) d+ Z) Y6 M
  218.     bFirstUpdate=FALSE;
      N0 x4 T2 z! b' J" n
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 n+ u6 |/ Y+ T" _9 U2 O1 ^
  220.     {( j% Y) C: i+ M0 D1 w7 g
  221.       dwTotalFiles=UpdateLocal.size();* w- f) z2 G. T1 b  H+ R* g9 y9 L$ o
  222.       dwDownLoaded=0;
    ' ]+ W3 |# F0 W9 [9 K! p
  223.       bSilentStep=FALSE;
    ) t! ^  p2 O" p  d& H
  224.       bCompressed=TRUE;7 F1 J* _9 O5 Q
  225.       strExtLocal.Empty();
    4 r' z4 S( m6 M) O1 {* @" ~1 {
  226.       strFullName=(*i).second;6 o# r! ]% v% ^% ]  o
  227.       dwProgramState=AP_CONNECT;# y( A8 d& Y! z2 d
  228.       return TRUE;
    - B0 r2 X8 h4 q, W. i
  229.     }
    & s9 W/ ?. v1 c9 |" {) G/ q8 C4 h* o
  230.   }* g9 k! }  G" s8 ?* G9 \6 a0 k
  231.   else if(bRestartUpdater==FALSE)- B3 a. S2 ]' L2 t0 o
  232.   {* {1 l. X1 d) I) z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    & j" G, e' c- a1 b, p& {7 K$ R
  234.     {
    9 Z& N- K7 ]( n. L9 V  e
  235.       file=(*p).second;9 n( M7 t0 z: F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())* x7 M) Z! x  o* z/ b9 \0 V
  237.       {6 P$ Q- C/ O3 P+ k$ x3 a6 \
  238.         olds=(*p).second;
    - ~' G" j$ t0 V  j6 x( }
  239.         olds->vers=file->vers;
    " B; }5 s5 ~7 y9 |+ m7 K6 r
  240.       }
    1 J9 J  i* m5 J$ \' ~- @8 M+ @
  241.       else, @0 p: f# J" f0 I: x. v
  242.       {! C) i2 J3 O+ T. h0 z# \* t
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / o5 A' K4 k) R  s
  244.         memcpy(olds,file,sizeof(UPDATEFILE));$ x( R$ F! F( [0 S( Y  J, R( l
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 {/ M3 y" F; l7 l
  246.       }
    3 c$ V6 E+ y  P9 l
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# T6 d* b9 r1 I- `  m# u, X2 m6 l- T
  248.       sprintf(filename,"(%s)",file->file);
    4 H, |1 D7 E# X% n1 K
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 D* F2 q6 {. D# h
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    $ Z6 Y2 u- @5 @4 J2 W7 c" L
  251.     }
    6 w  W, z; F+ A9 E+ Z
  252.     dwCurrFile++;
    8 n! c  @2 g. n9 h
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), ~5 s" _- W0 E' `- {0 G' X
  254.     {. C( r' D3 T  l6 `  A2 \
  255.       bSilentStep=FALSE;% ^7 p, @2 ?- U* ?% V
  256.       bCompressed=TRUE;0 n5 i# r! ]8 k6 J, ]+ e
  257.       strExtLocal.Empty();
    # ^# X7 w) q' O5 q  ^, s& @
  258.       strFullName=(*i).second;
    ; O2 ^% `) ?7 n  {" f
  259.       dwProgramState=AP_CONNECT;1 R0 m1 s7 r8 [1 ~& `9 U: R
  260.       return TRUE;9 `- l+ E+ e  J  k
  261.     }9 I8 s& w) M) {, X) m2 U7 `
  262.     if(!bRestartUpdater)3 ~7 [9 |' z6 C* F+ \5 H
  263.     {+ C1 d4 q7 g" x# e* `" c" a
  264.       int iCurrSize,iFileSize;
    ) g9 t0 I- }5 r
  265.       iCurrSize=0;
    . p- d+ a9 Y5 e( a+ @9 r
  266.       iFileSize=UpdateList2.size();' I9 L/ a9 f$ _& f5 l! F( q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");- E3 Q8 x, V3 s/ n, R
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ; t: ]  Y/ E0 b6 C( t4 e0 Q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");2 n5 `3 l3 {1 n4 P; v7 v5 K, n6 n
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 R$ p$ ~- ]# ^& F$ M2 F
  271.       Fclearf(".\\update.dat");
    + ~0 d/ o$ _9 u8 U' p, f7 |( c
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    3 a& J1 F0 L/ L' Y2 ~2 n
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)8 U  V: E  a2 @9 l
  274.       {. q& k' E6 x  |4 T  L, ^& ~
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())* K$ k5 W9 _% P/ e; d
  276.         {
    ( A- s$ u( U4 f4 ?0 o1 g( F6 @
  277.           file=(*p).second;! m+ m) _( I4 W& P2 `
  278.           sprintf(filename,"(%s)",file->file);
    ; m$ }! O9 l5 p- x% k( a9 Y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , ]1 {# M5 T' W# V9 {
  280.           iCurrSize++;( S$ [: i' [6 f% a8 O4 m$ @
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) A* l+ n4 H! }& t: {
  282.         }% u. Y( e6 T- n, T$ `& F6 J) [
  283.       }& |5 @. u+ T: b
  284.       unlink(".\\update.txt");9 z8 u3 D4 _+ r4 y2 m
  285.       unlink(".\\update.tmp");
    , g/ ^* b7 Y9 W0 i( R& t8 _2 h; J
  286.       Fclearf(".\\checkversion.dat");- h3 s) F3 [8 p  ~) Z; m4 f
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    7 }1 C* C2 C. P6 m, ?4 [, D. p+ P$ u( C4 A
  288.       if(UpdateLocal.size())
    8 P. Q. e( M; P3 r8 I) T: o2 F
  289.       {$ R# J  C* {! g: h8 c+ N4 {' r
  290.         UpdateLocal.clear();$ ]$ }! b7 A+ V: `: P
  291.       }
    9 _$ e2 n5 h  G& q+ b9 @
  292.       if(UpdateFile3.size())! |# @( C& u2 a6 K* i! Y
  293.       {3 q$ Q# O& ?2 o. G9 Y! t$ T3 _
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 D; x# y- w1 x: K5 q( y! G. ]0 X7 t
  295.         {& k7 P: @" w1 B! Q: j3 o
  296.           file=(*p).second;/ R) D/ t0 A. q2 }2 H
  297.           free(file);
    . c% i- x6 n8 h5 e' i
  298.         }
    4 y$ d8 g1 Q2 A1 x
  299.         UpdateFile3.clear();
    ! U6 {# k2 U  f
  300.         UpdateList3.clear();
    3 v9 Q! }% t0 {8 o8 r
  301.       }
    5 W! V4 j5 X0 o6 n( P" o* I
  302.       if(UpdateFile2.size())
    7 s& j/ o5 F; E6 r# d
  303.       {0 L3 A4 r% k" Q$ @' _; z& F) W
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). o5 m; }8 C# Y. j& {& p3 c
  305.         {
    ( {, B- t% Z/ |, }* {: O* s" A, a
  306.           file=(*p).second;+ H& l: S) N* g' G; N
  307.           free(file);  |3 ~1 O( S" \9 k. u' R3 ]
  308.         }
    3 d. t' A6 L7 A( [2 z
  309.         UpdateFile2.clear();
    % t! R5 E) d( J+ A0 T$ e7 D
  310.         UpdateList2.clear();+ @0 t3 m' S4 \# Z* C
  311.       }
    / P$ ~( W2 j8 j: F, `
  312.       if(UpdateFile1.size())
    . Q2 X$ p8 Q; u0 _
  313.       {4 Z6 `/ H4 S% v8 Q" `
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 U2 s  w4 Q) b& ~! l: c5 ~6 I
  315.         {7 u6 F  e  @- o$ l/ B; r
  316.           file=(*p).second;5 g  k3 @4 O" D
  317.           free(file);- \7 \$ [5 n" ?8 [9 T) a
  318.         }
    3 L4 u7 {1 O8 U% B& A. S3 L
  319.         UpdateFile1.clear();/ K/ \  Y% T: D' e! s8 A  ^6 N
  320.         UpdateList1.clear();4 v9 u5 X* r( e0 s
  321.       }1 S! O) n9 T3 l) D0 p* T6 B
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & M. B( A6 U; B; s" V) r7 n
  323.     }
    * N9 A' d5 O3 W$ P- W3 d! O
  324.   }
    4 p0 n) P2 V3 l, t, J
  325.   return FALSE;
    7 b! W1 _. D! g  l/ N; U) u- J
  326. }) S+ k5 |6 ^+ ]

  327. 2 n) |$ r+ m, z3 ^" n: u1 Q
  328. void CRevAppApp::ClearAll(void)
    ) I4 j4 j1 L. ^
  329. {' {! [$ \0 b6 w/ E$ U# l
  330.   LPUPDATEFILE file;
    " |/ U8 t/ l8 r
  331.   std::map<CString,LPUPDATEFILE>::iterator p;. K% v. Y5 B6 E5 F/ `! I1 b# K

  332. ) y; A. `8 ^- X
  333.   if(UpdateLocal.size())
      i4 z  {( n7 y1 y6 v1 a
  334.   {  Z6 X) ~; g, a- S# {
  335.     UpdateLocal.clear();
      C3 t1 P& \  T: G% d
  336.   }" Y9 ~% Z) P2 \# t, \  E* ~& H3 U
  337.   if(UpdateFile3.size())
    1 e/ L8 K8 s! Z0 [
  338.   {
    4 @& @: H- u& ~0 Q! q
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 {1 o, F: @' A- O1 R1 T4 [8 ]% O
  340.     {
    5 x7 B* g* |* i* y$ H
  341.       file=(*p).second;
    # l: Y" w) @6 h
  342.       free(file);
    . C5 ?3 m( f8 h
  343.     }
    ' u$ P  T1 U; H$ S2 V& [7 A
  344.     UpdateFile3.clear();$ G6 u1 o/ i9 X$ b$ o
  345.     UpdateList3.clear();4 {6 \. _" }9 C
  346.   }
      ?1 {( [# H7 D+ r6 f* k! y6 T* I
  347.   if(UpdateFile2.size())
    , x0 k# t% G& m& A
  348.   {
    4 X$ q- x9 T6 K  j. K& ]) g: h
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 _- u& A, m0 Z2 T4 u) f
  350.     {/ W; K, Z- F. U  F% H" z. f1 c
  351.       file=(*p).second;( a, W5 A8 ]4 @; N( p7 r6 _% U7 M
  352.       free(file);
    , p! G, p9 d# u
  353.     }
    $ ]$ C5 G5 V" k3 ^2 \9 S
  354.     UpdateFile2.clear();5 _: A3 E* `% \
  355.     UpdateList2.clear();0 j8 b* V' {/ f" F
  356.   }8 S0 _0 [8 B' G
  357.   if(UpdateFile1.size()), J( J# s" c# z5 N
  358.   {. V: f5 R  R' `; T3 N
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 q  j- @. a: {' I4 Z* V/ Q* ~
  360.     {
    - S0 v! Q- |: t9 _1 U2 @/ q8 c
  361.       file=(*p).second;% y9 P; o0 H2 @; C$ Q) T0 ~8 G
  362.       free(file);
    , E1 Y" Z' u- |8 P" R
  363.     }- T8 U% w* I# W" ]
  364.     UpdateFile1.clear();+ r& Q( Z3 [0 i
  365.     UpdateList1.clear();+ Y* S8 L* K4 a- z; _
  366.   }
    4 N7 R0 X; n$ |+ g$ ^& H
  367. }  
    . I( g1 [& k$ H# {9 d& h! K
  368.   : J+ B  b" h: @1 n& U2 t8 H) P
  369. BOOL CRevAppApp::CheckLocalVersion(void)  X& n# X0 {, }) M, ~+ C) n
  370. {) G0 D, q" \( }7 D2 f! L8 N! C2 |
  371.   int c;0 v/ T9 {# J/ d
  372.   LPUPDATEFILE file1,file2;
    - v5 A$ T8 @. z2 U8 R! t  A% K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;! @( e$ K7 w/ Q$ _, R1 J+ q
  374.   std::list<CString>::iterator l;5 R" J, ]- T) o, Y8 z( p1 ^
  375. 3 V* L* F( r0 J; z4 a0 _/ E
  376.   UpdateLocal.clear();( m7 s8 B  g: A9 A5 @$ h
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);7 d7 z( I- O2 _% {, ^
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);2 [, p0 s/ M) S3 N
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    3 X0 _3 [6 l" |
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    $ J/ Q7 r# w! ]. p$ |
  381.   if(UpdateFile3.size())
    * L6 y1 L) ^% J% R+ o2 i9 A8 p
  382.   {% `9 E% h2 C  X# ^4 q( @
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)0 L' }$ B1 N! l6 ?: q
  384.     {  }0 [, S4 G& N- Y5 d9 D2 c$ u
  385.       file2=(LPUPDATEFILE)(*i).second;" s3 H4 k3 k/ I, G! P) ?/ v- |
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). W1 s9 M# M% Q, ^- }) f
  387.       {
    ( U* y4 J7 |: F
  388.         file1=(LPUPDATEFILE)(*p).second;$ V5 O+ n! J1 o  F% t$ [
  389.         file1->vers=file2->vers;5 V) H" R( O0 I0 Z
  390.       }
    " x+ X) }/ w8 S4 b: L( c
  391.       else
    # \  I! X: F% o1 j: L! n0 w
  392.       {' i/ R8 q' n/ a7 ?
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 U8 ^& \( t5 a# [7 [" @6 S
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( x% z% X6 m  x6 R& m
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    9 U* K" t* `/ B- \- c
  396.       }5 y& U$ y( \1 @% z/ j. q8 a% x
  397.     }
    2 i0 X9 `4 Z$ R( i2 D) d' i
  398.   }
    9 E5 e' z5 ~; D1 @; ^7 ~
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 T/ P! U/ n3 {( I2 w
  400.   {) j. ?1 ?( P: V( f5 ^& [
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())3 h: P  x! w+ A% y8 a- w
  402.     {/ e: I1 F* v) ^( d/ b' I
  403.       file2=(LPUPDATEFILE)(*i).second;: E# O4 I! Y& g6 Q% |
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    % @+ {/ Q+ ?* ]3 F0 C
  405.       {
    * x$ K) }7 r( }7 |  D
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; `1 Q" o1 S# m8 f3 R
  407.         if(file1->vers!=file2->vers)2 A. m5 u; @, n5 P, j. Q# J7 z! V9 L
  408.         {/ H3 Z( t7 t/ f# c7 u# a
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 ?6 J: g" z9 F
  410.           c++;$ ~! ^5 X2 X$ Q- U" v
  411.         }1 C$ r/ v- j/ g0 }8 }( {
  412.       }! C6 T( J! M4 I& _
  413.       else
    & ]8 ^% D5 T/ L4 q$ H9 b+ L
  414.       {
      U/ h: a! m6 L+ s* ]
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 F+ a. Y9 N8 E. z1 W) G- K
  416.         c++;/ j* o, E1 m5 Q7 D% W0 _
  417.       }+ _9 Z4 N' ], q* ?2 Q: b2 @/ t
  418.     }
    " j; p6 f5 F# z: k, w3 M: F
  419.   }3 s( ~, A! s7 [. F. R" O. K& V
  420.   unlink(".\\DownLoad\\update.txt");
    ) |; d) w! E3 E
  421.   if(UpdateLocal.size()) return TRUE;
    ; t( k* g) R& L" ?
  422.   else                   return FALSE;  M; t1 Y/ d# ?8 j
  423. }
    0 Y3 a  G  |  M$ i9 d
  424. 7 z+ e1 M3 ^) H5 o7 D# S
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ) [& E( E4 G( L- s+ F: U% L
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"6 t3 }7 e' {2 t! ~
  427. 1 v5 g1 y# S2 d2 V  Z
  428. " l' \* x3 S7 ^+ ?& W6 w& e% f

  429. & y+ V2 f! o2 h; e. u: ]
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( T' Y! g2 N/ d; L4 q8 K  G% G
  431. {5 L; F, @: i; A
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;1 p" Q$ G/ S3 T/ C
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! R1 O6 N. o; Z. H' |
  434.   {
    8 w! }; N9 l) t% V- y: X
  435.     char szLanguage[50];; t2 c2 j3 w% K( ?- p- m% c( \
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! C( z5 _' T# k* Y2 t! Y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 c0 x: E. T) {' N
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 l2 C" e3 N" M6 u5 y/ \$ j) {) {! \
  439.     else                                   m_iLanguage=ENGLISH;7 \1 n& q) u; s/ V8 S
  440.     char szRegister[100];! ?2 g; z& k0 @) j
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) \- J. \" g; Y% h
  442.     strRegsName=szRegister;
    1 c& C  Y+ y" j8 U; s0 V
  443.     char szPatchURL[100];
    4 |; q" ]9 ~8 I: s, L! D
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ l3 p  H2 t% m4 }
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - j0 [6 }' z! h0 F" P
  446.   }
    : `, M" @/ X0 s7 f
  447.   else
    $ ?* X' l" H2 c
  448.   {
    , t0 J; j8 L) e& T& Y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 r4 S% ^. c- W+ f# \. z) |3 i
  450.     strRegsName=DEFAULT_REG_URL;
    + O1 l0 X5 W. T7 P( Y! q
  451.   }
      A* u. _0 g+ q+ ~! x& s2 J( Z
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    $ o6 O: V; a% L8 [3 t
  453.   {
    , a; I; @! A3 Q# o# {4 F/ `0 j
  454.     char szIP[50];8 D4 j  y3 [4 w- y6 M# y
  455.     char szDIR[300];! G; n2 E- l4 z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    0 @* v. Y, Z# t  ?# U( f$ S9 {
  457.     {, D9 X& z# E1 }$ o* V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");8 \% B9 {$ z% Q8 i7 `" _: Q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");2 H0 E4 R% u$ z3 G' U
  460.       strHostName=szIP;( q3 @' _- {3 {3 `
  461.       strHostPath.Format("/%s",szDIR);
    6 \' r& `8 x: L$ j7 s$ k: l
  462.     }4 P5 g9 L8 D2 \; f1 f8 L# `
  463.     else
    , f2 Z7 Y- c  m1 X: I. O; p
  464.     {8 [# q% E2 T, ]9 o9 V
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - q9 t$ g+ ^3 x! h. A0 z
  466.       {
    ( _7 v# D- _. h
  467.         char szLanguage[50];
    % {/ _8 _7 }4 p! K. b( g
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% ^0 J$ r7 L+ q  L
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- E2 }4 S1 z, M2 ]8 f* P3 }
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" p9 |' G1 k; W- h% d, Z
  471.         else                                   m_iLanguage=ENGLISH;8 y6 H  C) @% v; q1 f9 [- e
  472.         char szRegister[100];2 s& x% G- b! y( A
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& Y* y5 Y- C  k( C* \1 k5 o
  474.         strRegsName=szRegister;
    ' b9 ]$ Y7 L1 n' N( t) a5 [
  475.         char szPatchURL[100];
    ! z+ I' O& v0 W; R8 w, p# |
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , H  l$ j9 g- T# V
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ; Y9 V8 `9 Z. L; n; v
  478.       }4 R) p' G. b  S1 J
  479.       else8 s0 }" E) E3 r
  480.       {4 ]) b4 ~! [4 ?$ y3 Z0 w* z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 k/ q6 k! x# I5 F5 H& i, K
  482.         strRegsName=DEFAULT_REG_URL;
    9 @( g  Y2 }( b* b  \( g
  483.       }+ L4 e  l7 Z4 N& F
  484.     }
    9 Q( d) O# \% {; h6 |1 O. c4 x% n
  485.   }
    & ?4 d( h7 l+ s, p! M( V3 q
  486.   return true;
    & j% Y( _" A" k' W* k  Z
  487. }
    ! c0 g/ _  X5 Y* R( R. W2 ~

  488. + v# t2 E& W. ]( |, A
  489. #include ".\ZLib\unzip.h"1 U& G0 X) N2 |9 x& J' p: K% t) Q6 j
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);  `. U& X$ E( `
  491. /////////////////////////////////////////////////////////////////////////////
    1 q3 }2 \* b3 w
  492. // CRevAppApp initialization
    " s0 O1 O, M9 R. B) O/ m2 ~% O* S! L

  493. $ ^" U8 x5 ]8 [
  494. BOOL CRevAppApp::InitInstance()+ K1 z" c6 }/ {$ y1 r7 Q
  495. {
    3 T" Q4 t* H! E- ]5 y0 Q3 W: d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];1 u7 W2 u4 ~$ Y1 u
  497. " l* e2 ~: \: z% e$ e6 O0 A, ^$ N' k
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    * a$ m) Z5 N3 \% x. ]
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))& i1 C) U4 Z0 y  P9 O9 ]
  500.   {0 h, p! x  _0 {8 a8 S
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");, V$ g0 e9 g" @5 Q7 M7 _
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    + @* ~9 [2 Q' u5 ~+ R
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))7 d( }8 q6 a- W6 N
  504.     {* n$ M* k6 o6 b" e8 \" T3 {
  505.       strcpy(szPath,szPathTarget);. i# ?0 M) o0 Q" C# ?
  506.       SetCurrentDirectory(szPath);/ _4 u' a7 S% q+ _7 V- @0 ]; O
  507.     }" A8 n. Q% B6 H4 w; |) p
  508.   }
    3 W1 @  U# e, j2 I/ X
  509. #ifdef _DEBUG
    1 J# Y+ L& ]# W% y) A5 j# e+ t
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " B, V- }6 m9 _+ K/ W
  511. #else
    $ R% Y- l8 E! d; a% u6 g. b
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ' r: c; ?5 w* [, G1 z, q
  513. #endif
    2 V6 \8 M' w- s( [9 B
  514.   {
      i4 `! d$ u* ^
  515.     char tempFileName[MAX_PATH];
    ) K) s/ l% q7 r1 d
  516.     strcpy(tempFileName,szPathSource);2 Q! l% @! W5 R- d
  517.     tempFileName[strlen(szPathSource)-12]=0;
      h' x0 h% y7 h0 D8 c0 G. |3 ~( }
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    , G% q8 y4 d5 y& m6 B, b; K
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);& L) u/ V% B2 J7 S
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ' o2 B- l5 p+ n
  521.     return TRUE;
    . @( Y! E0 v& S3 Y# l% K
  522.   }
    3 ]7 c' K% k( E1 ~# D2 U: M
  523.   // Nuke 0118: Delete run.exe! e" H+ X8 h# Z" Z& l& z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );( i" \' v9 S/ L' }4 w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");8 p( h8 |* d3 o- U, h! Y/ b" }$ o
  526.   if(!ReadCfgFile("Config.ini"))
    * g- p3 p# U* ?8 f) a" {+ O: `
  527.   {$ q) q& y! T* r
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);, Y0 ~6 s0 a; |8 S
  529.     return TRUE;
    0 Y' U) U: P0 @6 j
  530.   }0 }2 R1 m) [' T& x5 A9 h; U; O
  531.   HANDLE mutex;
    ( l1 @/ G$ D; r% H! v9 n
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    3 ^# x. B* ]* F9 ~
  533.   {% m5 {2 P$ S- O. M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)* l7 B  S" l+ `$ g: L  d
  535.     {/ z% m; f( V' y/ u! s7 T$ h
  536.       CloseHandle(mutex);
    0 L1 ^) m/ Q$ H( ~1 _
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    6 Z7 V- r& }- ~6 V$ W/ Y- y4 J
  538.       return TRUE;+ m" S, S" ^8 q6 W: t6 G% p  d0 h
  539.     }
    $ w6 s0 N7 e% Y8 K9 L- |4 \( o: ^: e4 B
  540.   }  : _& j. M6 I! F. k% v% S
  541.   CloseHandle(mutex);
    ( ?/ O. P! u- Z8 O1 h

  542. . X& x8 ?4 e: {7 `7 n
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);3 [! A& e- Y& U! u, E, {
  544. $ N4 ~2 e8 ]- F* a, u7 |& @  y
  545.         AfxEnableControlContainer();
    7 \) U! ]* n$ V2 y2 S$ S
  546. 0 B9 T' L: f* A. s( b- p" z
  547.   bCanUpdate=FALSE;; `) b- J1 q% \8 h8 F
  548.   dwStartUpSteps=1;7 i4 U/ B- ^0 Z& @/ R, R
  549.   dwProgramState=AP_NOTHING;
    2 P: |/ a" r/ L3 _
  550. ! E8 k# T. K0 U0 h' Z+ U
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);6 d7 R* V8 C& S6 }9 |/ ]

  552. # u% ?- N8 G, r$ B
  553.         // Standard initialization
      o3 }8 c, k! s$ z
  554.         // If you are not using these features and wish to reduce the size
    : F8 l) ~; w9 j$ W
  555.         //  of your final executable, you should remove from the following: r! W8 b. r' T
  556.         //  the specific initialization routines you do not need.3 u% m# v& \3 ?  l
  557. $ V( @7 C) I7 F1 H: F, q) F8 b
  558. #ifdef _AFXDLL
    6 M9 T, C7 ?, b# B4 j, {
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL  q$ {9 L0 M8 N3 N" O
  560. #else
    0 ^( u& g6 J1 O9 D2 j; R
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically8 o0 q$ k; j* Z2 V$ j1 a3 r4 }; w
  562. #endif
    5 L/ p. v) a7 x

  563. $ m: _5 q9 u' _* I* f
  564.   dlg=new CRevAppDlg;: v6 g& ~6 z8 v. j
  565.   dlg->Create(IDD_REVAPP_DIALOG);9 v4 `0 Q/ o2 H' ^
  566.   dlg->ShowWindow(SW_SHOWNORMAL);: d9 U0 x. z4 Z- m, S1 z
  567.   m_pMainWnd=dlg;
    7 E# S( J& L. h8 p0 b
  568.   x; r5 G& P$ T& D
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    4 o# c, I! p4 M" I. Q( U

  570. " |8 C0 y: j: m4 X8 i7 G! G8 T/ O- z
  571. //  GdiplusStartupInput gdiplusStartupInput;; h' g5 B! ?! V0 L1 n
  572. //  ULONG_PTR gdiplusToken;) L( D# s, T8 s  s. v& ?: m- l
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);- _# r! D+ {$ f- K
  574. 2 g; m$ O7 _4 v
  575. //        CRevAppDlg dlg;
    3 x8 ]5 L# W) r' n
  576. //        int nResponse = dlg.DoModal();* `# E! [  R3 D, A
  577. //        if (nResponse == IDOK)+ b& r2 f3 |; {: S2 p' _
  578. //        {
    % S1 f* r- P2 e* k8 C1 H: S
  579. //                // TODO: Place code here to handle when the dialog is
      m. T# g4 E( F/ z/ A5 i9 R
  580. //                //  dismissed with OK) _  H1 }: \, V
  581. //        }
    ( t! m6 M8 j0 W& Y$ B; p& P
  582. //        else if (nResponse == IDCANCEL)! H8 Z0 j' m: J. @: v1 F
  583. //        {
    7 E8 f! _% E1 y' F- m3 {
  584. //                // TODO: Place code here to handle when the dialog is
    ! C7 Q- e, h& |+ ]- U# T
  585. //                //  dismissed with Cancel
    9 {$ n% x1 u3 |; S3 o
  586. //        }8 t+ z+ V  a3 K9 c

  587. 6 g, h, L$ f# o2 ^" r* O
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    4 f, L2 M+ T8 z0 ^4 p3 R
  589.         //  application, rather than start the application's message pump.- Z0 s' L/ Z2 H, T2 I, f# f
  590.         return TRUE;
    % S1 ~+ F$ J0 f3 E" \
  591. }
    2 H0 s4 t( t5 w
  592. & M4 q1 C) i1 r5 L; i' G, ?0 Y) `6 ~  ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    & C6 [# `/ L' m0 q2 N4 n) Y8 a/ |2 ]
  594. {
    8 p- l$ _" x( l: J$ }
  595.   int i;
    ; M3 y7 Y+ V& q( h
  596.   char *szRet;6 L# D. P/ C+ Q, n$ }& b7 V) n# q. ^

  597. ) ~9 T" Q( u; M3 K& ^* c3 s
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    : D, l% |+ c6 ], v7 o5 Y/ O$ r
  599.   if(sztoken)
    , @# k, F5 X/ ?; F) X, m6 o
  600.   {8 @: `1 {! F( Q, n
  601.     szRet=&sztoken[itoken];8 @6 }! ?9 R6 H7 B4 d1 p
  602.     while(sztoken[itoken])
    / I2 L5 c0 A' X
  603.     {" Z+ r0 Z# W. T4 W- p4 C' }
  604.       for(i=0;i<(int)strlen(token);i++)9 s+ C! |! ]) z1 t0 h) V
  605.       {! E& L7 U7 _6 U$ }
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])# n$ z! [. y3 p
  607.         {* C& g( f+ c- i1 P
  608.           sztoken[itoken++]=0;
    7 p1 N' A/ Q  u1 V9 Q$ ?2 P
  609.           sztoken[itoken++]=0;: E- O' i3 x0 Y
  610.           return szRet;
    & x/ z- n# [& Q0 ?# o1 @
  611.         }
    . `; Z3 Z: p! {' u+ I7 n2 ?/ W
  612.       }
    & G+ m) {5 y8 P" w% j: K
  613.       itoken++;0 z: g( m0 S; O* [% L% a* u, ]
  614.     }
    6 ~) v  \' N1 r, N
  615.   }5 q5 {6 f3 w% X1 ~. \% r
  616.   return NULL;2 C# B4 p. p8 |" Z
  617. }
    ( e8 l. P2 @6 A3 P8 E% K" U
  618. # ?7 u' _- v* |! s/ b
  619. void ProcessProc(long Total,long Current)* c  m5 X5 e: d6 b0 [) E3 N
  620. {
    " l( s- |7 {$ H! R6 b9 u
  621.         MSG msg;# T  ?  ]% ^9 F$ G; x
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    , o; b) h( q# h) z0 J6 w" m5 ~9 j* G
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 S; f+ H( t9 J& H$ l! T, x' c
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    : E" G" v: j1 [! ~+ z
  625.         {
    & b' P) v: s* R( Y1 u
  626.                 if(!GetMessage(&msg,NULL,0,0))% z# w  A+ b+ \
  627.                 {
    % \2 U; T7 \( G3 Q, w: w# f
  628.                         return;
    ( B! m, t/ m- W, K
  629.                 }
    / u: Z. [) ^' r8 w* a! Q) e
  630.                 TranslateMessage(&msg);0 v1 p+ N  ?5 u9 f8 e* R. U
  631.                 DispatchMessage(&msg);9 Z8 @3 ^- |' ?, V
  632.         }       
    ) K& E9 R; O) m- n1 U+ {
  633. }
    " b+ K+ U3 W+ E: Y* A8 B

  634. & t# U2 J2 i% Q( a
  635. BOOL bFirstChar=TRUE;
    + P$ r% \) M) S" E
  636. 9 n& b6 o6 D* a% s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)3 |) s7 W& v9 Q3 L0 ^2 }9 w
  638. {
    $ ?! h$ e" n+ a0 @3 ]( g
  639.         // TODO: Add your specialized code here and/or call the base class
    + a* {$ ~9 |$ v  w2 D9 G6 _* u
  640.   switch(dwProgramState)0 x& [1 n0 v5 B( A! b. N3 O3 L
  641.   {* B% Y; X, q6 Y! Y7 D
  642.   case AP_NOTHING:
    % G+ C1 O$ Y4 @: @- @
  643.     switch(dwStartUpSteps)- r3 c+ C& _  k% v0 G
  644.     {
      h# J$ @& h* Q6 O0 N) m4 L
  645.     case 1:
    ( M  h4 v# w( n) {4 L
  646.       {
    % @1 w, }7 G, W# L/ e2 D
  647.         int i;- J, T3 l- d2 T% b
  648.         CDC *pCDC=dlg->GetDC();
    8 b7 z! p' {! O8 J3 J
  649.         HDC hdcwnd=pCDC->m_hDC;
    7 J1 O2 G! W6 l) a6 P* j
  650. //        Graphics graphics(hdcwnd);
    , o/ T9 E+ R# A8 ?* t
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");9 C. {# u, J4 l7 K0 `! V' |2 r
  652. //        INT iWidth=bitmap.GetWidth();, B* w  A2 x. A! M+ o5 a
  653. //        INT iHeight=bitmap.GetHeight();
    ! A5 J$ m) s# o5 n+ d; \  x
  654. //        Color color,colorTemp;3 \2 X; c8 i; z0 N% {+ t
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 M- N6 E) `" v# ]5 l9 @
  656. //        {. y4 c6 ^( M8 w+ \9 {
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ) R# R: |% x4 Z( @1 l& j' o
  658. //          {* r" h* j2 x; S! R
  659. //            bitmap.GetPixel(iColumn,iRow,&color);! k, @0 M9 J% l
  660. //            colorTemp.SetValue(color.MakeARGB(8 V- @( r. _  a. d2 S, e5 {  ]3 i
  661. //              (BYTE)(255*iColumn/iWidth),$ `" R, ~: I, u  Q
  662. //              color.GetRed(),+ M  {- y; r6 _8 Q
  663. //              color.GetGreen(),5 X- r& T" }$ g
  664. //              color.GetBlue()));9 R" |% W. J+ n5 P
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);& \  y0 o# G. l; ~1 q0 y( D  t
  666. //          }# V7 g3 \$ E$ t# s' G
  667. //        }
    ' L- n( d& P4 D5 h- G% _7 f$ M8 g
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);% U- N  E3 {" O" X/ k! Z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 t& B  ]: Z# B$ H; i" u1 y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    , w5 o1 x1 p# p
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ Z: E; p" K) r8 ]7 r4 g; u" ~: T2 J
  672.         for(i=0;i<240;i+=8)
    " z/ Q/ R/ [+ b" `* n& z
  673.         {% x% b5 b) j1 ^. m2 O
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 q# Y, a, J* M  W: p5 V* p. M& _; {
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 J, t9 I$ m8 t3 _1 _2 o  J' y+ |
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 |3 k1 n  q" y$ t
  677.           Sleep(33);8 e1 w- X7 v; @
  678.         }# |7 ~. v3 W. C6 [# K$ t
  679.         Sleep(1000);7 u, Q, @7 f$ n
  680.         for(i=240;i>0;i-=8)
    ! R# R* }. k4 w6 n
  681.         {- r$ r) t: V2 G% ]; A
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ l7 ?5 Z# |; ~' ?# `. s: ?
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : E$ h- t) F* x
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ ?% l5 {+ F: w2 ?
  685.           Sleep(33);
    3 v6 E& O  z+ c  p2 c/ u3 i( _
  686.         }
    ' c9 U4 B  o( o4 a+ j6 r
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    . Z( k9 H1 c5 T4 U
  688.         dlg->ReleaseDC(pCDC);0 j9 x- s2 G: b: U  M' o& s
  689.         DeleteDC(hdctar);6 I' V1 d( w7 [& Z' ?6 B! O+ s
  690.         DeleteDC(hdcsrc);9 h8 f: ~# g4 h$ w% Y
  691.         DeleteDC(hdcorg);. R& J* j$ w+ U  c" X
  692.       }
    - n: p2 {  V; t; L# a2 M
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ' V  P4 Q2 @; K+ G: i6 G
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ( v- h) {! s1 B# E* b" `
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");# j; L: D( Q+ W  Z8 s; K
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");& l- E& C! F+ `" D) i+ a
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      V# F6 M( }, Q& k" f4 P# b
  698.       if(!Dn.Connected())
    # o0 d$ Y' V+ u5 C( y  E
  699.       {( q% j) C# h6 i2 I+ e8 w; k2 K4 q: ?
  700.         dwTotalFiles=1;! t- f" M. ^6 N: i
  701.         dwDownLoaded=0;
    $ X  B" x: D: E& r5 d  z( L
  702.         bSilentStep=TRUE;0 n$ v( H- B! L+ C/ r; g' N
  703.         bCompressed=FALSE;& ~+ A9 Y! f" E0 b" f
  704.         strExtLocal.Empty();) C7 Z( Q+ p+ K" a# y8 P
  705.         strFullName="readme.txt";
    9 v/ U& r& `  I/ o/ {
  706.         dwProgramState=AP_CONNECT;
    - ~$ J8 Y9 `: C( Q; d! y
  707.       }% O' Y3 P: [9 ~$ o. g6 M
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();. H5 p) c' K3 r
  709.       dwStartUpSteps=2;# B3 I" p: ^/ _7 N
  710.       break;) F$ f4 l' K: N
  711.     case 2:
    . m+ a9 D+ i! V; C1 x* p
  712.       {
    4 x% i7 T4 }& A% r$ m0 N
  713.         int iEOF;
    ' U3 O) o7 ]+ z& N, C
  714.         FILE *fp;. ?, l5 o% b& D3 c/ R3 y# o! s
  715.         char szString[512];& R5 z3 ^- v( [: r! A) t1 u" e7 V
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");( h, B( y; ?8 x2 s
  717.         if(fp)2 T5 r! Y& }- D$ k2 {3 A' J$ ~
  718.         {
    7 O+ `  R1 |' J7 Q" R
  719.           do' T: U+ p# R1 m3 _5 Q9 w- J
  720.           {, k% M% z0 l( k6 ^( X- x$ ?5 o# T
  721.             iEOF=fscanf(fp,"%s",szString);# c5 o, e' Y" `( f; j
  722.             if(strlen(szString))+ x( k% h- k9 h, F; _0 B" U' c
  723.             {, s4 j& S, P$ U
  724.               if(bFirstChar)8 X1 W- ^; \# v& i) E4 ^) j
  725.               {, M: ^7 f6 l  ]# `5 j2 \" Y: O
  726.                 bFirstChar=FALSE;7 P( i7 |- S/ K8 ?- D! [: J
  727.                 bConnectIsBig5=FALSE;
    9 U/ s! R& F* U9 v) K- _
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    # V/ @% i7 n6 s- J- d" S* C
  729.               }
    ; O/ @% s' \3 U/ s
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));! I" g" t( q6 ~' P% {- x5 d9 W
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));! \$ N9 J4 p; u1 X% K/ s7 Z$ X
  732.               dlg->m_ListText.AddString(szString);
    3 V2 `* _! J% \7 z
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      c9 C9 v3 s3 O9 i- M" T2 ]( x
  734.               *szString=0;
    & b6 k/ R9 {1 o/ B  s2 S6 O/ D
  735.             }
    7 I# {. U5 N1 Z- x
  736.           } while(iEOF!=EOF);6 ?& l7 z- s  ?7 ]! Y- ?6 }& R' j$ j
  737.           fclose(fp);
    1 Q0 _% X8 L$ h, z# j
  738.           unlink(".\\DownLoad\\readme.txt");
    ! q8 [% z/ A* B( P
  739.           dwStartUpSteps=3;' j2 Z) W& @7 [0 c9 k4 i0 O
  740.         }
    7 G/ N/ t3 \8 z0 G/ m+ {
  741.       }
    8 F  U1 X8 Z0 X! _
  742.       break;
    , j( b/ j3 m* H* ~( Y1 j% c7 ~( G
  743.     case 3:  N1 F, M) e* J# U, o4 k2 M
  744.       if(!Dn.Connected())
    # F6 ^0 C1 h: H  L
  745.       {
    ! H/ l0 \: M. P0 S1 b
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    8 ^0 ?* l. e7 u7 H
  747.         dwTotalFiles=1;" `. a5 {3 h0 X# o8 A' l
  748.         dwDownLoaded=0;& m, Z% n  i1 k) P
  749.         bSilentStep=TRUE;) t8 ~  t8 [2 Q" Y( a$ y7 @# ^
  750.         bCompressed=FALSE;
    0 |" L3 V1 U! Z, t' E* y
  751.         strExtLocal.Empty();, h" X$ c* U0 m. H% `" V8 a" D
  752.         strFullName="checkversion.txt";
    8 H) {/ z& H- \% t2 w, Z3 m4 B
  753.         dwProgramState=AP_CONNECT;. k& R% O' |& A8 K$ z6 a7 v0 `
  754.       }$ ?5 [2 o' u- i2 u" y/ j  p$ I
  755.       dwStartUpSteps=4;2 S0 D! j! l, _7 Z6 c' U: S3 f
  756.       break;
    ) X3 W7 v3 d  W. o6 p
  757.     case 4:
    : g" M7 |. B" n/ [
  758.       {
    , ]& u7 f6 ~9 J: t
  759.         FILE *fp;
    / {) C- n7 k6 h( G9 d9 V
  760.         char szString1[128];
    # f' X# ~6 c* _, I7 n8 F: n8 e
  761.         char szString2[128];
    . I0 P  k0 \: x9 T+ `% f/ N* `4 ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( z# J' ]0 {( \4 Y7 u/ w! m+ s
  763.         if(fp)* ?! x! z$ f: r2 y! a
  764.         {% p9 J* g$ Y% C5 J2 M4 @
  765.           fscanf(fp,"%s",szString1);
    4 t. M! n0 O2 i( f: \9 j: e
  766.           fclose(fp);4 L) E6 ^* e3 w' k3 g5 v" c
  767.           fCheckVersion=atof(szString1);9 K: l3 T$ d" c9 Q
  768.           fp=fopen(".\\checkversion.dat","r");
    3 e) G! ^, w7 c# z- `
  769.           if(fp), K8 _/ E* {5 x7 E5 d3 u
  770.           {
    + J$ S; _/ ]3 U7 a5 [% |
  771.             fscanf(fp,"%s",szString2);
    - `: ?, W6 z/ a2 [
  772.             fclose(fp);
    8 x3 A, \' T; g: p) s  V  o: t
  773.             if(atof(szString1)!=atof(szString2))
    ' j) F/ n6 o( A% x8 f/ R0 [
  774.             {: O: B' o4 I* M. E( O
  775.               if(!Dn.Connected())
    2 D: u1 |; y! W9 ^/ h0 k" s( j+ ?# m0 l1 `
  776.               {
    , _: U, t' A4 e/ Y9 q
  777.                 bFirstUpdate=TRUE;& B1 G, {$ i0 ~% J$ `, z  u0 ?
  778.                 dwTotalFiles=1;+ A% C' l8 w* ?- f- \; G
  779.                 dwDownLoaded=0;$ z; c7 N$ h$ w* o; \: U
  780.                 bSilentStep=FALSE;$ a% G3 ~" V; D8 C" Y- x
  781.                 bCompressed=TRUE;
    * ~, Q- h+ I9 @* R3 ?# r6 R2 O
  782.                 strExtLocal=".\\DownLoad\";# p8 F: Q$ F- O1 o) x
  783.                 strFullName="update.txt";
    1 D; Q1 P' ]2 b! ?
  784.                 dwProgramState=AP_CONNECT;
    8 c' J" Q% `& [4 p. H
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" k% h3 u  z* a& t
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# [% S' ]6 H0 K5 o8 u
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! Q$ e/ I7 R, u5 c( j

  788. 5 U& B3 J- O- A6 V
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& d; ^; N0 a$ l0 Y: d% E
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    " p( D' W( d- S' o) x
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1), d9 E2 W; m' k: X6 D
  792.                 {( D5 p$ L6 i. O* n8 M" O
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");+ `; j! I2 k! p! E3 Z7 C
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 b( [) T# W5 v9 I! U+ r
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    , J, a7 Y: E7 w5 J, |
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      h* d4 a# |3 }8 E/ I
  797. : b  b* b4 M: C/ ]4 g* j
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % x" m, I9 O5 ?" b) R# [3 S% ^( }
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' L. ?+ g! J, ~) y) H+ i
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    : P$ R* C! w- j/ p# h
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) q2 H: S( V% A: b* v$ u1 A: N# l
  802.                 }9 `9 H, K3 {# x
  803.                 dwStartUpSteps=5;
      k* G8 p/ p5 Z
  804.               }6 [0 G3 y) J+ d6 L+ g
  805.             }: d3 `& v8 S- p2 e' X# J* a1 f+ a
  806.             else  Z6 o8 P9 t2 T  B
  807.             {
    4 D( k! C: C, @% A
  808.               unlink(".\\DownLoad\\checkversion.txt");; j# o3 X7 @, O- H; y- g- V
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ Z8 R. p/ N/ v/ r8 l# @
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");; a) `" Z3 k# N" T
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");# J0 T, w' c. l! X% R

  812. 6 S9 O$ c9 ~5 U! V! A
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / r/ O1 y! X) N7 K; t4 ]8 ~
  814.               dwStartUpSteps=99;
    , {$ |/ z. x0 p: y
  815.               bFinishUpdated=TRUE;, z  [' s3 `& [4 E( |+ _9 ^% w
  816.               bCanUpdate=TRUE;" A& d. `/ W3 y0 h! b# p
  817.             }
    1 F6 i+ A$ m6 Q
  818.           }
    ) ?! p" _$ j9 G% d
  819.           else
    2 ]6 t/ W$ @4 @9 M
  820.           {& X0 R4 x  o; R
  821.             if(!Dn.Connected())  x, H1 T5 q8 o$ p; u
  822.             {
    4 ?0 i1 D7 i$ ^0 q" M  k) I* W* l
  823.               bFirstUpdate=TRUE;
    3 E/ m% ?1 [2 P1 V) T
  824.               dwTotalFiles=1;2 F/ l2 k  s8 s; y0 n
  825.               dwDownLoaded=0;
    9 m1 R8 b7 l& r% V
  826.               bSilentStep=FALSE;) P. i2 }1 ?/ b
  827.               bCompressed=TRUE;
    * [# Z; X; D5 G. a; v
  828.               strExtLocal=".\\DownLoad\";
    ) }" _4 b8 F) ?, o" p7 d' E
  829.               strFullName="update.txt";
      J7 h3 |0 T* \% c" z% M3 W7 H$ s
  830.               dwProgramState=AP_CONNECT;# j, N$ ?8 T7 o. s8 Z. l, T' ]
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      ^" x# r# p% O3 t% m/ H; s/ T: b# ~
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& t% K$ Q3 M% ^! D
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    7 Q+ ~9 `2 D7 P3 f0 H& [* h6 l
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " ]2 J/ E" m# f; k! I7 b. d
  835.               unlink(".\\DownLoad\\checkversion.txt");" V; i; Z7 s- }5 ~3 R& w4 l
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ( R; u* e3 K2 K& f5 w; G
  837.               {3 s4 o9 M2 N3 n+ z% U
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    : k1 I( i' L: `# |5 N$ l- B
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ) j" X  @$ f  K0 M
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    : M: u! U) o% U4 |) \- B6 h; [4 X
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( }. r# b( c1 A
  842.                
    3 ~) R1 b- }7 S8 S- y& n& W1 M
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    8 z7 Q- I7 n$ u1 S! s. P; [# q( U' v
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  P+ d0 _8 @1 v* M. F
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");4 C- @8 C: \6 \* e) K- W# J9 ~' q4 U
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " W/ Y: S4 |" k/ |: A8 a& o
  847.               }1 t6 Z9 g" J$ j5 t' x6 f) i6 j$ V
  848.               dwStartUpSteps=5;4 O% U8 G- A- i4 q  W
  849.             }% l: R# D1 _% F- w% }+ Z) w8 z
  850.           }
    ! `7 Q5 w2 [& [* |4 [
  851.         }
    , y; p7 a; n" a& \
  852.         else
    ) R, p( E3 m) g8 a" n$ @
  853.         {
    2 O: z3 i5 h! z/ u  R4 }
  854.           dwStartUpSteps=3;
    & |! @! \3 w% y  v3 l$ v
  855.         }- l5 ^- G( Y: M' T5 r, V2 P
  856.       }
    / ]. m  ]( j! ^( n8 r! \. o. _
  857.       break;
    . |1 G" L5 K+ N; M+ _
  858.     case 5:
    : i' H. F( @" G% r
  859.       {4 y- _0 v0 C6 Y# Q2 O
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ; G" h8 E! M+ B" |
  861.         {/ R) E7 o5 Y8 \) q, S9 P
  862.           int opt_overwrite=1;
    1 N; @# Q8 F% J: r9 n
  863.           int opt_do_extract_withoutpath=0;
      l! }6 n+ K! p4 ~5 U
  864.           unzFile uf=NULL;
    0 M5 }5 w% k; t5 B* b* c& z5 o) O
  865. 7 x/ Q& `, K1 Q! U/ J
  866.           uf=unzOpen("Wsa.zip");
    : e  }3 B3 Y! E3 u9 x  a7 D7 `7 x- j$ Y
  867.           if(uf)
      P3 h) O- q2 t8 i5 p
  868.           {
    ; B3 ^% _9 ^( Y! i% Q, O9 [* E
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    * i4 u3 k3 d0 x" X( p1 d7 }1 Q) X7 g
  870.             unzClose(uf);
    " S. r& O* X4 T. |; ~+ a; o" f! |
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* v# K! D. J; l7 b  R
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");2 [/ o3 b* a5 O; N+ J9 U' j
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    5 \1 t! e; R9 d- G) c
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, Y: G9 @; f% N, z
  875.           }& \7 V9 W: E6 Z
  876.           DeleteFile("Wsa.zip" );
    % ]( f9 }2 d5 t3 G* @6 X9 L
  877.         }
    . m4 [! k+ f% u: U, r- e  D( [

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

8 T9 ]* j; b# n4 r4 M
. t, A6 I: ^  y  ], ]5 |7 E

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回復

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回復

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回復

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回復

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回復

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-12 11:54

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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