找回密碼
 立即注册

CSUpdate.exe源代码

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

& E5 O! }/ g5 Y( q; @6 v8 K7 K4 Y
  1. / RevApp.cpp : Defines the class behaviors for the application.
    . k$ z" f0 V/ I2 }5 N
  2. //) m1 D8 O6 J8 T) C

  3. 9 h' J8 t, N- T' k& I$ `
  4. #include "stdafx.h"& `& M; M6 G% s0 H/ a8 V5 q2 O1 Q

  5. 3 X9 y/ F# z; V8 D: V, M( }7 H: g
  6. //#define UNICODE. X# q1 p: {1 I! W, {" V. ~& F
  7. //#include <gdiplus.h>
    & ^' y- y) ?) v- |
  8. //using namespace Gdiplus;' q# @$ y* X% h$ V4 r

  9. ! Z: j, c; ~4 x- L# c
  10. #include "RevApp.h"* d9 k" i9 W8 |6 m  l
  11. #include "RevAppDlg.h"
    0 v( }1 g8 d& y4 ~- H% [3 Q  w
  12.   r% W: W& j! W3 \
  13. #pragma warning(disable:4786)
    & w6 l, j4 `7 H) }7 C
  14. #include <map>  I1 C- U. K( E- G# f
  15. #include <list>: S) j( S6 z* a1 M2 h& z
  16. #include <direct.h>
      S$ Y1 z: h, V3 T. R; E1 S7 l
  17. ( C( ~) ]( C6 x3 e  a5 d& q+ ]
  18. #ifdef _DEBUG9 l3 x. ]8 b: |  d9 U% w
  19. #define new DEBUG_NEW  C# L- U7 p+ h; c' \$ q; t/ M
  20. #undef THIS_FILE
    : O: F- a0 j3 g- l/ P8 h
  21. static char THIS_FILE[] = __FILE__;! u$ `, K( e/ J& X, j
  22. #endif
      [6 @. D1 v' P
  23. #include "SkinResDef.h"+ H7 |4 E( X, J1 [* X) X6 k9 c
  24. #include "ChangeBG.h"6 j* X( M+ B  k" }: z- Q6 `+ a% k
  25. #include "AFXINET.H"
    ( b/ ]6 \8 l0 ^7 V# b0 L; f
  26. # @( E, m' D3 T1 h* {" w$ |
  27. #define TRADITIONAL_CHINESE 09 }( E+ h/ {7 g  G' n
  28. #define SIMPLIFY_CHINESE 1
    7 ^) {9 ~1 V! x
  29. #define ENGLISH 2& b, F  W" u7 U8 t$ p/ B
  30. int m_iLanguage = ENGLISH;! [, z% B; O0 P( u+ A
  31. /////////////////////////////////////////////////////////////////////////////: u+ N- E; K" `: @% [- A
  32. // CRevAppApp
    8 U- X8 e2 I# O
  33. 0 b4 A6 q+ E* u
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ! k0 @! z3 Y6 B! D
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    6 ^" Q) ~8 j: Z# w) m' d3 C
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.# ?. t8 R. ?" y  z
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    % y8 @: P! K* T) X% i4 O; ]+ o4 v. M0 C
  38.         //}}AFX_MSG: V: e" B! c; A2 K
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . v, U# Y% Q7 O2 w
  40. END_MESSAGE_MAP()7 N  {( G- J# H: h+ \+ \& q

  41. * X  j4 j  O( C# P- g# g5 t
  42. /////////////////////////////////////////////////////////////////////////////9 u+ c! L# [" T; |
  43. // CRevAppApp construction; B& t1 S; Y) w# T' @, C5 n3 q6 C5 _
  44. : u# A) w/ M" `8 _- W+ {
  45. CRevAppApp::CRevAppApp()
    " G/ U1 z( b0 s
  46. {1 ]8 u" E" F& ?* `7 E
  47.         // TODO: add construction code here,% v2 c( n7 E6 J6 P! D
  48.         // Place all significant initialization in InitInstance/ s7 @7 t" M! X6 }9 i% \! K" V
  49.   bDisplayIsBig5=FALSE;
    / p; F( a% V) k, l
  50.   bRestartUpdater=FALSE;% W/ b$ m" t& W! R2 j
  51.   bFinishUpdated=FALSE;3 r+ e2 g/ S' k
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    . W( M: R, X4 X9 F* ~
  53.   InitChangeDataBig52GBKS();
    6 k( z" p. @# F  Q& z* j5 \
  54.   InitChangeDataGBKS2Big5();
      c5 D  R  [! Y1 E7 f2 l
  55.         //8 s- j% [* n& H( ~
  56.         bClickRunExe = FALSE;
    6 G2 u) [: ^( n
  57.         //" L. k  H# H! ~3 _! ^
  58. }8 S  M. g# Q. f# U" n) l

  59. $ H$ t0 ?2 f  Q# G% N
  60. CRevAppApp::~CRevAppApp()* u( j4 v; s$ M
  61. {0 _( t7 X( A- l5 T8 {5 }+ V4 {
  62.         // TODO: add construction code here,$ _4 a8 \9 o. _0 O& c9 M$ G- Z
  63.         // Place all significant initialization in InitInstance
    6 L5 l) g0 r0 E/ ?4 V& l! b  h
  64.   EndChangeData();8 Q- r$ T, K6 G8 n' |
  65. }
      ?2 s3 g9 n# {8 D4 m
  66. 7 N8 G( y0 T. o! ^7 g/ J
  67. /////////////////////////////////////////////////////////////////////////////0 L' a0 M$ {9 ]2 n
  68. // The one and only CRevAppApp object
    $ k8 d4 l! Q. N

  69. ( m0 X' o& c; ?4 S. a! W! j
  70. CRevAppApp theApp;
    8 p: l# g+ Y2 j7 ~
  71. " y! b/ G; a! L/ m
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)5 B! q& Z- B( Z
  73. {
    9 u* U" `/ Y, K1 b
  74.   int iEOF=0;) A; W) e9 ~5 P7 ^7 i- C! c
  75.   char szTempName[MAX_PATH];
    ; W& p& T" O2 e
  76.   *szFileName=0;3 J% S, n7 ?' j$ P" n
  77.   iEOF=fscanf(fp,"%s",szTempName);6 c4 d( X  g- O: W: V* k
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    . Z' O5 J" o( U8 o# D4 c
  79.   {
      M2 A+ t! D8 _6 j1 m2 b
  80.     strcpy(szFileName,&szTempName[1]);
    , ]$ o$ Z; p* A7 \# P
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)  M# w8 H& M" K( g, C
  82.     {
    0 J, A1 y* M9 S
  83.       iEOF=fscanf(fp,"%s",szTempName);% N1 o5 C- R9 h" y5 C* c
  84.       strcat(szFileName," ");
    * _6 w' y+ C* M7 [% l
  85.       strcat(szFileName,szTempName);$ q. {3 G. Q. T/ r
  86.     }; T! x' E; l4 p
  87.     if(strlen(szFileName)>=1)
    * [: d% l8 H- Q
  88.     {
    9 g9 T, [- }6 y7 }( R6 k! M4 g
  89.       szFileName[strlen(szFileName)-1]=0;  H' g8 ~' b( N$ A* F
  90.     }
    % Q, E/ t2 I$ G  r3 j. v: [
  91.   }1 G( r. }  b6 {
  92.   return szFileName;
    0 w+ |! k1 k' x7 {* N$ [! ?2 |
  93. }6 e) ^* B8 X9 I7 @' F3 D$ K' @

  94. * v0 I& h8 g7 s1 t- _/ U9 a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)3 l3 l% k, n! C1 }
  96. {' \( c$ i% D* k; A5 J. l
  97.   FILE *fp;$ q" U. R; V. d
  98.   char *key=NULL;; O4 L. l" j: B- n2 A' Q
  99.   char version[MAX_PATH];( l$ d5 g% R3 ?4 T8 A% u2 x
  100.   LPUPDATEFILE file,olds;
    $ V/ w5 u- F& |- C
  101.   std::map<CString,LPUPDATEFILE>::iterator p;+ |# \$ t1 J: Y/ l, q# t' K
  102. 8 V, v% p& u' f* n/ f# @
  103.   UpdateList.clear();1 s. C  x7 Y0 E7 d) ~5 r
  104.   UpdateFile.clear();4 Z+ C1 c3 v' l- ?+ X: x1 R
  105.   if(GetFileAttributes(filename)==-1) return false;! b. m& ^& ]% X$ y/ _/ z& \
  106.   if(!(fp=fopen(filename,"r"))) return false;2 Y& X. K- Z$ [( f7 {
  107.   fscanf(fp,"%s",version);
    5 K6 H. Y" s  a0 H; f% ~6 O- O* B
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }& W/ T' I$ e# r3 b+ p) v/ {
  109.   while(fscanf(fp,"%s",version)!=EOF), I0 j$ f' o: d1 M( h
  110.   {7 h1 ~* K% F# F. ^7 W+ B
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , p8 o* J' x9 D
  112.     fscanf(fp,"%s",file->path);( _# V; L2 l1 Z0 G
  113.     ReadFileNames(fp,file->file);# h' j: ?% D9 v/ ~3 l
  114.     strcpy(file->full,".");
    ) C; U( l  ^' `
  115.     strcat(file->full,file->path);4 \/ M( E) X% j' Z4 [4 g* O4 K
  116.     strcat(file->full,file->file);
    ) o! P) D$ F. D
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())4 l4 n9 O+ H- r  A# {2 i
  118.     {
    / M4 E" w' p& v8 }- Z# W  {$ Q
  119.       file->vers=(float)atof(version);1 H- \  |5 N" j
  120.       UpdateList.push_back(file->full);
    0 T0 ~  Q1 B1 |- q1 ~! `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));: U7 ]+ Z/ Q' T/ D% z8 A
  122.     }
    ) e4 L* @1 k4 e  c* X" G+ G8 m% z9 D
  123.     else$ i1 O+ B5 P3 u0 p7 ~
  124.     {
    $ }- S  T$ ^8 V$ `2 i7 P8 j' e" P4 m
  125.       olds=(*p).second;7 q0 M* O' e: P7 G) U7 O
  126.       if(olds->vers<(float)atof(version))4 C3 F3 V" H* V3 @
  127.       {( N. u# s( F% [# H* e
  128.         olds->vers=(float)atof(version);
    ! I: z% {" g& p1 p$ k) x  {
  129.       }
    7 L* a& E1 A4 b
  130.       free(file);
    3 Q  C, k: T! A
  131.     }
    0 S  [: X3 }3 u- J, H" E, A
  132.   }7 b0 Z% P% I* Y% U9 W
  133.   fclose(fp);% i2 H5 E0 l7 l& @5 X' I1 `
  134.   return true;
    , A4 X6 ~$ d  A5 U/ P. s
  135. }
    8 s* n; J# w- Y7 `7 P
  136. - }3 O9 d# A  M$ s
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)+ F$ m" }* F9 y1 O
  138. {
    4 R2 i3 K4 I9 b, v$ V; ]
  139.   TCHAR  szFull[MAX_PATH];
    ' k2 ^/ l) u+ ~2 t% k& q
  140.   TCHAR *token,*inter;
    , z) Y* n2 b4 ]! n- D
  141.   *szPath=0;
    3 C8 V  z& _. D
  142.   strcpy(szFull,szFullPath);
    ' {, c  j3 z% i/ V* F; O, b* h
  143.   token=strtok(szFull,"\\/");# Y1 e8 F& V0 e, ?4 U7 [- h
  144.   inter=token;
    ' q2 S1 p' y2 b( N" m7 f/ Q1 p) O
  145.   while(token=strtok(NULL,"\\/"))6 c8 h3 S- h$ a8 s  Z
  146.   {
    4 G, }/ T9 [2 Q, U
  147.     strcat(szPath,inter);/ J9 u" \9 |% ^$ g% s& ~* T
  148.     strcat(szPath,"\");0 F3 x5 [: g; y' q% S: F6 |
  149.     inter=token;
    $ l4 g  m% b8 M, I* M6 S% j
  150.   }! l" o5 e* U/ e7 V/ ?: V
  151.   return strlen(szPath);
    / L0 D) O: U* s8 V/ a  c4 _
  152. }* g. H) h' \3 f% r
  153. 2 Y0 E  Z( J  Y! W8 Q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 A. g6 F2 Q& M! K6 ^5 u
  155. {( Q0 {; ~% ]2 L) Y
  156.   DWORD attrib=GetFileAttributes(Target);
    , |& P( l/ L, p
  157.   if(attrib!=-1)# w- D2 W; v1 i; s: W
  158.   {
    4 ^4 q1 b$ @" h1 V# c5 W( g* H
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ _# \' R/ n7 ~5 d7 ^
  160.     {
    7 p& G3 q6 O1 N+ ?; N+ A" N
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    8 q" i4 {* K. c! H' N" @
  162.       SetFileAttributes(Target,attrib);
    ' X6 i* K8 r( k2 M3 v' ]
  163.     }6 N# R3 y$ v5 F8 r: J
  164.   }
    ; z. i  q+ X% J  S
  165.   CopyFile(Source,Target,Erase);
    $ X+ V$ \. s  J! z7 ]+ f  U9 X5 V
  166. }8 t$ y5 s0 s2 ]' C

  167. ) O$ u/ R# D1 y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); L; B, D5 ?" T# {& I, k
  169. {( Y5 B: G2 Z4 f. c- P. K& p( S: r
  170.      FILE *fp;3 H! ]* ]- r; e! J* d
  171.      char  szBuffer[8192];
    " v) S0 _6 \- ]& }6 {5 v) B
  172.   va_list  argptr;, \  ]  r/ s$ p. |" v0 P
  173. / m5 I+ |2 l, L' z- y4 Y
  174.         va_start(argptr,message);* v, r* |: P0 e" B& E
  175.         vsprintf(szBuffer,message,argptr);6 z! T& |: N+ q2 U
  176.         va_end(argptr);
    ) D$ K3 I# i. z! ]1 h
  177.   fp=fopen(FileName,"a");* d" h. \3 t/ s' N4 H
  178.   if(fp)1 J9 Y! }+ Y) _3 r
  179.   {/ u4 v. e' g( k9 l9 G) @$ Y- E1 F
  180.     fprintf(fp,szBuffer);) Y& H' b7 F$ e) `) D: M
  181.     fclose(fp);* ^) Z4 q  t( \0 c
  182.           _flushall();6 Y/ f$ E* ?( y6 f- Z
  183.   }; y3 N+ W- n: i' Y9 O! o2 P
  184. }, P* ^  Q- G; j$ O! ?
  185. ' e6 h8 N2 W) o
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    " H5 _' ?  S/ Y6 x
  187. {
    - v1 K/ x4 [: F9 X* g+ i+ j2 y& B
  188.      FILE *fp;  @7 e# A: V) u! \! t, I
  189.     DWORD  attrib;
    $ ?/ R$ o( p4 M/ S9 G5 `
  190.   attrib=GetFileAttributes(FileName);, U- ^. s2 }; X" O- {
  191.   if(attrib!=-1)
    * R9 F5 i' v7 b- u3 u% \5 G
  192.   {
    1 s" e; @+ @# G+ d2 Z# Y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: i$ h+ I3 h; ?! S* A! A& B
  194.     if(!SetFileAttributes(FileName,attrib))
    + m2 ?; b1 h3 J6 L
  195.     {. O3 B& q. B5 }6 P1 U: m
  196.       return FALSE;
    ) W8 k$ o' D% q. `- z* m2 @
  197.     }, I( p$ K. k4 k  c' q
  198.   }8 b4 b/ q# p" i5 a
  199.   fp=fopen(FileName,"wb");
    , ]9 _4 K$ ?% ]; w3 ^* A
  200.   if(fp)
    3 ?  p! i  ~7 t9 b" x& E) Y
  201.   {' b+ Y: ?1 q, a8 S: e( d
  202.     fclose(fp);
    & X1 o6 F4 _% T& O. ~9 H
  203.   }
    3 z9 m( r: b4 M- C, N
  204.   return TRUE;
    ! V2 n* i/ a, ~  W+ o
  205. }; U; v6 b/ V# r( n& E2 \% }( U
  206. * o/ w0 W% p& l; C: o4 D3 g) H
  207. BOOL CRevAppApp::UpdateLocalVersion(void)! [" @9 R  E7 W: b
  208. {3 U4 v" s2 Q5 W$ ^5 g9 D' p, |9 J
  209.   char filename[MAX_PATH];
    : v. D0 j8 L  ?* a2 E* [5 J
  210.   LPUPDATEFILE file,olds;
    . A3 c9 f' F8 y# T, E: Q: S) a9 T
  211.   std::map<int,CString>::iterator i;
    # G9 z$ C2 ]% ^# [- E
  212.   std::map<CString,LPUPDATEFILE>::iterator p;8 E/ \( ?# k9 ]; g* p8 z2 S
  213.   std::list<CString>::iterator l;
    ' O- I5 }9 @1 k( ?. D

  214. 8 ^# L8 |1 J3 |. b0 k8 p2 m4 W
  215.   if(bFirstUpdate)
    + M. n/ u! f. u7 f1 ~9 G8 O
  216.   {
    . a; C7 ?, L+ B# C! p+ O/ {
  217.     dwCurrFile=0;
    ; e3 Q1 ?! E: \2 V+ z. V# i
  218.     bFirstUpdate=FALSE;1 {1 J* Y# m/ z9 @. N
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! I! Z7 {+ K: e1 \$ Y2 I
  220.     {, N& f7 @' q) {  b5 V
  221.       dwTotalFiles=UpdateLocal.size();
    0 B' W& N7 g/ G2 }  D6 A
  222.       dwDownLoaded=0;
    + Q8 |* L5 }! h# a1 t
  223.       bSilentStep=FALSE;: @- v8 }( u. ?2 R7 t& V- P& g
  224.       bCompressed=TRUE;4 |( l, ?+ j6 y
  225.       strExtLocal.Empty();) W8 [9 @. L, g- o
  226.       strFullName=(*i).second;
    ' e! V" {; d) K. |* R- s
  227.       dwProgramState=AP_CONNECT;8 [, J5 I& ]7 _0 J) T3 `) @
  228.       return TRUE;
    7 P; V" V& R3 B4 [, q- U' }
  229.     }
    9 S: r& F' ^3 x# @
  230.   }
    8 n0 F$ ?* T7 N7 g) d# R1 v3 a
  231.   else if(bRestartUpdater==FALSE)- w# I, O3 H+ b+ {2 _' [: y/ b
  232.   {
    # A. w1 }( x# F) I, S, c1 Q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    4 r% w. q( i, C5 s+ b. B6 k
  234.     {! d9 Z- @3 ]  c) \: E3 H1 z
  235.       file=(*p).second;
    1 C$ e1 P9 \% j: x1 R! U/ ]5 P
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    5 j( a3 a0 i; l6 p. b
  237.       {
    4 ]( X+ C/ Z) [2 u4 f/ A
  238.         olds=(*p).second;
    ) R; I; G0 @9 z. Q; T  u
  239.         olds->vers=file->vers;2 b/ [* I+ E+ M1 Y9 n
  240.       }
    9 B4 N0 }; l! w% c3 n# A
  241.       else
    % E7 I; e( \" ~$ l8 l/ H6 q- w0 t3 ~
  242.       {7 ^' k8 V  J0 y( G' [% y0 f: j$ Y& ?
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - {6 u- S5 v: X9 ~" b
  244.         memcpy(olds,file,sizeof(UPDATEFILE));/ e3 o( i% k+ i4 L# n; R
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    / J! T* \0 Z* q3 J
  246.       }: b; E2 m$ p9 t5 W8 N- t
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");! Q) G% Q" G7 Y/ d/ G; D
  248.       sprintf(filename,"(%s)",file->file);
    5 r  t+ D. a9 x* W! p' z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( O0 X# j5 b% f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }' W! E" }7 e3 C, F, T
  251.     }( S$ u, m- Z# H' T- ~
  252.     dwCurrFile++;
    4 T, f4 g3 ?+ U( k, f
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* a. y7 Q; v' H0 z1 ]
  254.     {* P4 Y, Z2 ], }- ~
  255.       bSilentStep=FALSE;
    " j. t4 q8 y- h6 l# P* i1 B
  256.       bCompressed=TRUE;' \% n' k( W% I. Q' B
  257.       strExtLocal.Empty();
    3 n  Y; s9 m' Q( A9 [  R( Y
  258.       strFullName=(*i).second;9 _% T* i0 A* R: K- J. u9 p
  259.       dwProgramState=AP_CONNECT;2 o* ]% \. E: w" d. C1 z. ?6 Q" @
  260.       return TRUE;" q- c5 a2 e9 Q# h/ [8 C
  261.     }
    # m+ R" L: w* C, i
  262.     if(!bRestartUpdater)
      r) w. ?) E% c
  263.     {+ |! x' @0 B. r& E& i
  264.       int iCurrSize,iFileSize;, }0 _- t  Q3 B9 ^) r6 {6 c7 p
  265.       iCurrSize=0;. @4 B1 `7 N# P8 k( f: z2 G: z) a! [
  266.       iFileSize=UpdateList2.size();
    6 X5 e. w, [1 s, Y4 U! A1 r+ J3 Z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");  L* V- c5 O! T/ J3 K7 W% e
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");  h2 c+ b) V6 L6 }6 |- d$ ?
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + \1 |! _/ q' n6 P
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & h, L+ B" M! d6 x9 c
  271.       Fclearf(".\\update.dat");
    # V: A3 O  \/ `) O
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    5 O% @0 F- @) h8 w+ o
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)! `  d" q% q% v) `
  274.       {
    $ i) r! }0 P% c' q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    & a/ X3 `0 d( o( H, `8 ~! o
  276.         {7 K3 F8 p3 K6 v: ?% E+ S
  277.           file=(*p).second;
    5 @' m+ }( [& O) G* j# U, B
  278.           sprintf(filename,"(%s)",file->file);
    ' M* c3 v8 O9 a: T% p+ o
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; v+ ?9 S" z( Y: z6 |6 ~; n
  280.           iCurrSize++;$ W2 ]5 i$ O: L  `6 A
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));* G! k: W# f  Z7 n9 }$ W- u9 X
  282.         }5 B% l, E8 p, t; Z6 a& n3 F
  283.       }
    ) C. q6 N2 ^0 [2 j2 p
  284.       unlink(".\\update.txt");
    # E, z! l# i7 d- U1 ~5 `
  285.       unlink(".\\update.tmp");
    9 J0 L" e2 C2 O% p0 ?# P+ p$ |
  286.       Fclearf(".\\checkversion.dat");5 \9 {; C3 S  O; t/ K7 \1 v6 k
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    2 Q/ u& {8 g8 m  L
  288.       if(UpdateLocal.size())4 I' K: l5 _0 Q/ A
  289.       {  C- r3 B  ^# H5 b' w4 ?  C
  290.         UpdateLocal.clear();
    ! N0 J' g2 E; [% A) r
  291.       }' u) N1 O/ k, I) W
  292.       if(UpdateFile3.size())
    $ s" U( t7 i4 G1 d' w/ i$ B
  293.       {% E# n* q4 X; V, p' f
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; F5 W( t# O! S5 g+ u  D
  295.         {
    7 P$ k) l/ k; Q* H$ T3 }
  296.           file=(*p).second;9 L$ I; N4 }# w0 M. M, U. _6 ?
  297.           free(file);" T. H6 ~# A1 L' {; U+ T
  298.         }* i  X5 V9 F. Q# W1 }) w& O  U
  299.         UpdateFile3.clear();* a6 ^+ {1 I) N3 o7 x1 V+ Q1 j+ K
  300.         UpdateList3.clear();
    6 ~3 M. Y% ?& T6 W5 z: S
  301.       }
    8 B, d" F' i- c& z# j( |" Q
  302.       if(UpdateFile2.size())# D8 C0 K& E- R" R8 A5 x+ o# ]# }4 ^
  303.       {. c- I1 T$ N& a- U9 }9 u
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& a6 M. ~8 U, g" S$ w, S
  305.         {; F1 M  ?0 p# e! F9 Y0 O  y" e
  306.           file=(*p).second;" J6 b# z6 U2 Q/ ~
  307.           free(file);  p" G& I4 _5 i: n, Q, Y
  308.         }* J0 F* \* M( _. p3 b, f
  309.         UpdateFile2.clear();" ^1 T& H) d: @5 J
  310.         UpdateList2.clear();
    + d  L+ L! y( x
  311.       }
    % ~( b. \0 p! q/ U8 T* w5 `  B
  312.       if(UpdateFile1.size())
    ( S1 N2 N( A/ P; k4 t
  313.       {; T; i; Z1 |2 B" j* k* w0 m% r
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' m$ A* T  `8 f0 y6 @
  315.         {" t6 a1 H9 p0 h" L9 U. K
  316.           file=(*p).second;
    8 @! Z, Q5 L; o( g) j( Q
  317.           free(file);( I, s8 @' W$ t
  318.         }& H0 Y- {4 w( L
  319.         UpdateFile1.clear();  E3 X8 {. b/ N% w9 O* g" ]
  320.         UpdateList1.clear();. k7 y/ Z3 @& K3 K. m9 G4 y
  321.       }; {) ?( c' x9 K2 E# M3 V$ |0 r
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));5 |( T6 P3 U# ~
  323.     }7 B& N# q- k0 l* g. c4 K6 D
  324.   }
    - l( k5 S) f; u/ R$ p, U; W
  325.   return FALSE;! f) p8 Z4 A( O2 ~; j
  326. }
    2 l' ^4 p+ u+ |% h/ m8 s7 ]& N, X

  327. ; P, T; K5 a' v0 |9 s
  328. void CRevAppApp::ClearAll(void)5 q  G7 V1 M1 t3 H
  329. {
    - {) M8 M% c6 X) e3 S
  330.   LPUPDATEFILE file;
    " y; \5 T7 G5 G: p: p, n
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; V& @% _" e  _3 `  @2 R

  332.   [2 E/ m0 Q; a) q6 B. x
  333.   if(UpdateLocal.size())
    - v9 n. L, h' {2 s$ `& H" K2 V
  334.   {
    - s  j2 ~( e$ }6 D& i4 [) t4 q
  335.     UpdateLocal.clear();7 n! l  z) D" z. Z# @
  336.   }
    , J+ _  i0 A  v7 J* i
  337.   if(UpdateFile3.size())) X: K7 Y6 p) L. _! r& r8 I
  338.   {. l" a1 j8 o' E  C8 O
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 E! f  x: y0 h* I. e9 b) j1 x
  340.     {; E( w6 |8 E) P% P
  341.       file=(*p).second;
    8 W% z6 }4 C* E* v. q, [7 S
  342.       free(file);
    4 c" p* O2 @2 C( z6 E
  343.     }2 j. a: }; D8 e7 M
  344.     UpdateFile3.clear();0 ^  D  N8 x; \6 ], G
  345.     UpdateList3.clear();  |8 A  a' q0 @- C. j
  346.   }, E: F  k6 ]. j' h8 S5 h% q
  347.   if(UpdateFile2.size())
    + T$ C& k; J+ F
  348.   {8 x6 E" v( l6 x/ k" R. g
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( g( p! s2 w" n7 Y7 w6 P1 `
  350.     {2 S. M8 X" X# Q
  351.       file=(*p).second;( F; E* T# Y0 G# g9 M2 u
  352.       free(file);
    0 X8 i3 M* Z6 a
  353.     }1 F- X! S$ T+ i* ]
  354.     UpdateFile2.clear();
    9 A. m7 G% V) J( i) W
  355.     UpdateList2.clear();+ G  k" P. n. |" U. P. i  @2 D
  356.   }
    3 k" m0 ?5 ^4 K9 n: P
  357.   if(UpdateFile1.size())) [) ]6 u2 Z3 \  L, k0 u
  358.   {
    9 k: }" I, H# w& d! q; r  K
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 d  m) W- s" q$ B3 b0 g
  360.     {
    $ ]( D+ ^9 b+ I' i) D/ d
  361.       file=(*p).second;
    . @/ G0 c) m# A
  362.       free(file);5 F% x% A% N1 U4 A! c
  363.     }% z; |/ G. G" T2 Z
  364.     UpdateFile1.clear();, G% x; ?+ g; r7 e2 D
  365.     UpdateList1.clear();& \: {) @( p4 Q% S+ `* c: v% u# t8 c
  366.   }
    8 P! M! _  Z. D2 O9 o- Z* x
  367. }  
    ; M+ w- @: N! D: Z: \
  368.   ) S! D7 a" a( @% z! \
  369. BOOL CRevAppApp::CheckLocalVersion(void)& p7 c* X; E7 I
  370. {6 S  s4 V% Q7 ~+ f4 {
  371.   int c;5 j1 J+ |. g  p( G! N: T
  372.   LPUPDATEFILE file1,file2;
    + Q5 @" r& b/ H: N$ g
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 z+ m" R) ~& V* F
  374.   std::list<CString>::iterator l;
    $ \( Q! k' J: |7 Y; o
  375. 1 J2 L1 D% J# I* I0 l9 \, W- r
  376.   UpdateLocal.clear();
    8 E. p! X' S/ f0 U* S1 o; G. }" B
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    1 z4 s1 }, E: }& i
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);# a% k+ b; j- S) k, R( l# W1 H/ }( E
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 B5 H8 k  x  o) ?8 I
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);6 x/ z% p- Q( K5 W7 A& ~
  381.   if(UpdateFile3.size())
    7 x( B$ {( ]# p( R9 @3 J
  382.   {
    . t+ \5 p( Y6 E+ ~, P3 i  b6 q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)0 i  @( ]. H$ Q% [0 i0 Z! \: @8 ~9 j
  384.     {5 T! d1 v7 p5 ?# m$ S
  385.       file2=(LPUPDATEFILE)(*i).second;7 p( G* I! @" X2 |, n
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). u' T( G+ w; K5 C6 @7 J
  387.       {
    . A4 b8 T" E: V7 }0 _/ q5 Y6 ?
  388.         file1=(LPUPDATEFILE)(*p).second;
    0 Z# }/ Y. `6 A" s& y
  389.         file1->vers=file2->vers;# J: i8 v6 s- a& G  s% w
  390.       }
    " S2 P1 [0 i  b
  391.       else' T9 d" x- [& k! ^* h( A
  392.       {
    * w1 D" J: D  |: K: r2 K) I
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 p' o3 J# S) K4 e2 H
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    / x/ O4 {" V$ g* J
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));. g9 J* _, x% m' z
  396.       }
    5 n$ }6 [( ~, x9 [- l
  397.     }. ^( J, [# ^# U5 i. v
  398.   }3 D' c) u6 E1 e* u6 _
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)5 O& a7 u- \: p* g! L
  400.   {% u+ I4 Y- X  s2 J, Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    7 V3 h* @0 c+ ]1 O' M
  402.     {
    3 _- Q5 X7 A5 V# i; \
  403.       file2=(LPUPDATEFILE)(*i).second;
    0 K! w8 f- y  B( I1 G
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# x  M; U- l) B% S( I) s4 M
  405.       {
    2 s- m' S8 `& l: ^0 e5 z
  406.         file1=(LPUPDATEFILE)(*p).second;0 [3 }9 V, l. S  a4 s$ L1 Y& j& S& s
  407.         if(file1->vers!=file2->vers), g5 S% N& ~8 B7 [- r& l
  408.         {( y( @: e! p4 @; R1 r6 H! A
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 i' Y# Y" W4 ^3 `# W# f1 |, b9 b
  410.           c++;
      U; C# u# }* ]0 z+ m  m
  411.         }
    & f3 ~1 y. ^! o9 o- T1 V/ A
  412.       }
    6 K# ~- e; \& ?* [) Z
  413.       else# j6 p! p) q, X. v
  414.       {( X$ d5 x( z! O* `
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 U2 M) s* n0 u( ~& P. @: ?4 s
  416.         c++;! w) I, z0 x2 }- w: ~' ?
  417.       }
    3 j( t2 E( S; V5 y' [! L( V* _& c
  418.     }
    0 w0 F7 b; E) G' h& ~
  419.   }9 i+ q7 v* e' a4 {2 Z' S% ~
  420.   unlink(".\\DownLoad\\update.txt");
    7 R! c3 |$ I) I" V  g& P) ?. X3 J9 o5 Z  W
  421.   if(UpdateLocal.size()) return TRUE;9 j( f8 W6 E- l& Z- U. E( P5 O" [
  422.   else                   return FALSE;
    & ]* s( Y& n0 n) y- `1 _
  423. }
    # E* j, z+ Z# X8 S
  424. 2 g* d0 N. ^- T- _, o  ]
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    + ~7 @( M/ y+ x
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    1 @+ i3 {6 T% W% a% s6 w" F
  427. $ n& @$ M: w. ?; l+ _7 f
  428. 1 k8 Z( M* h* @9 r: P
  429. / R- h/ M1 Y  I( z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    . v; i0 m* u1 {7 G$ c2 E* G, ~
  431. {! @2 K: f9 X8 ^% K% m! G
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;4 A! j& G+ }4 o0 ?1 g
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); R8 Y# @2 Z8 u3 A& w( {
  434.   {
    0 ~% [1 }) F/ n3 F8 P
  435.     char szLanguage[50];$ y/ F, J+ |& y) P# [! m+ ^; f
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 f0 J' A" v- p' c
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 ~7 m/ T5 L8 A
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. c- B) y& \4 V1 b' A. F9 j& A
  439.     else                                   m_iLanguage=ENGLISH;
    , w8 e* Q/ e3 @& _- k( ?* B
  440.     char szRegister[100];
    1 s+ a$ g( W2 `. S! P! f1 X
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" H4 m: e4 W) J8 }* K
  442.     strRegsName=szRegister;. B1 J/ K5 b# P
  443.     char szPatchURL[100];6 a  n8 s$ V) |) D6 i
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ B0 M& K' f) t+ f8 Q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 C( S8 c( s  n0 }) r4 U
  446.   }7 I+ }- ]; b9 H: c, F
  447.   else% D5 @: D  Q+ v, M, _# _- J
  448.   {( J0 ^; g7 c- _5 |" C& T
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 T( k7 \: r( q: I+ ~7 k8 D
  450.     strRegsName=DEFAULT_REG_URL;5 K, ~1 e0 _/ j  q% w' X
  451.   }
    5 I+ {/ ^7 N$ I( q( }$ o/ n: Q& R
  452.   if(GetFileAttributes("hosts.ini")!=-1)7 g. _- i4 A- }! o+ D
  453.   {4 \: o8 d  d' P- @% l0 Q+ V
  454.     char szIP[50];
    $ ^. D. h- e4 e: `3 u* B4 P
  455.     char szDIR[300];
    3 `7 [( L! h  \: m
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 O/ P9 ]! {2 D' ^# R% L& b
  457.     {
    + |8 q7 W5 J$ h
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");5 D0 i" X: x: I$ `- f5 ^
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ; @  q4 {% ~9 ?: t4 \
  460.       strHostName=szIP;% ~$ `, J, |' x: Z' ?+ q/ g# y
  461.       strHostPath.Format("/%s",szDIR);
    * {! c3 I# t2 H6 O+ T2 J) Y' k5 b
  462.     }
    " O- u# n& z  F: Q
  463.     else
    8 S6 Y/ [% C' b: A- s
  464.     {0 }5 q; J0 Y( W( ]2 D+ ?- Q$ h
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- d+ T+ I- o7 f! ~5 b
  466.       {2 N" f6 d7 [" S8 E, Q% u1 ]
  467.         char szLanguage[50];
    " J# {) t  g" N+ z( x5 `
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 J( G. n2 T3 S" p4 a; Y$ N
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 l/ O. e0 a4 H% ]% |$ k
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 _* P( n' w+ k  E+ P/ G8 l1 b, }3 ?( o6 Y
  471.         else                                   m_iLanguage=ENGLISH;
    8 f) I, [+ k$ h, V
  472.         char szRegister[100];
    % H9 g  W6 p6 z& C
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & D  `# q# O3 |1 K# ~7 d
  474.         strRegsName=szRegister;! l7 f+ B- c: _& G. E
  475.         char szPatchURL[100];
    ! ]6 @- z8 A5 Q" G  V
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& _) M$ r+ v$ E/ e; }7 a8 w0 I
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: H+ H! ~% H$ N, ~* F# r
  478.       }
    : R0 Y8 d( p+ z: t' H
  479.       else9 K' ]/ ]9 T6 |9 d! y6 l" S& Z
  480.       {$ b& C6 a) h/ E' v+ ^: b& \9 @
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 n" Z! l! W4 K3 ]
  482.         strRegsName=DEFAULT_REG_URL;
    - X) D+ f5 h/ F" a
  483.       }
    ) [% G5 Z; z8 ?# {
  484.     }; R% S; ~' l1 P$ r
  485.   }" {$ L! n) [% b' m
  486.   return true;
    ! a1 d" n% x! G5 i
  487. }
    * W& u  _" J% {/ L

  488. # e- @+ `/ o" c# H6 z# B/ q* x6 G
  489. #include ".\ZLib\unzip.h"
    ) F# M+ w, B$ d# ~! {2 z+ t
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ! N" E5 f' r4 {+ v  {  K* p9 N
  491. /////////////////////////////////////////////////////////////////////////////% z2 W/ r6 ?, ^' ~
  492. // CRevAppApp initialization. L1 t9 q" P& _; v
  493. 9 ^+ e1 b% D6 k
  494. BOOL CRevAppApp::InitInstance()8 A  X$ W2 d! {
  495. {
    / a: l5 v0 d* `, o+ ^. U/ p$ a  m
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    + @" U4 S: @3 g8 l9 |

  497. + B2 ?+ z* f- [; L, S2 K* t8 j
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    * c% w! e" F) H5 X
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))- I5 O9 E2 r: y( h
  500.   {
    6 C  R( H& n" s; u7 N8 D8 u
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");  s) V; y- V+ G9 B# R. U- W0 z8 z4 n
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    - ?5 K8 A3 j5 I; ~
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))% i' p* o; H; g" A( f
  504.     {
    % i2 e% g+ Z5 R8 C0 f% X, {
  505.       strcpy(szPath,szPathTarget);
    2 w, D9 x+ l8 P5 p) W9 r
  506.       SetCurrentDirectory(szPath);
    6 |6 H. A( w: F2 B9 a
  507.     }5 b' H& |3 ?& P5 ~2 |
  508.   }* k' P& v3 b) J3 H% u$ d
  509. #ifdef _DEBUG8 S: n1 q6 i9 ?
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! r% ?8 X/ ~- z. \$ K. U
  511. #else, a6 ]4 G% k7 {8 `
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ P. U6 d8 i1 H" E" R8 @) N
  513. #endif; Z, f0 r" e, P1 y
  514.   {
    & d3 c2 m0 ^% S; i: w& n3 q
  515.     char tempFileName[MAX_PATH];
    1 J/ K& g, G1 }
  516.     strcpy(tempFileName,szPathSource);
    2 H7 j/ ?+ ^! G4 p9 r4 R/ Y
  517.     tempFileName[strlen(szPathSource)-12]=0;
    2 d) C8 n$ T1 n3 W4 M/ O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    3 E% D0 D3 Q! e
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 ^1 p4 ^/ D8 i8 U# Z3 V8 m" {
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ; N3 }' |  i1 i$ y9 e. z0 w
  521.     return TRUE;- r. g, b7 N) G. _2 p
  522.   }
    6 i' ]' N( J/ f$ g- H, }6 b, u
  523.   // Nuke 0118: Delete run.exe
    ' `! J' `) ~1 G. `  R$ `
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );0 M% x6 v" y: V3 C  U, C7 {! O
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");. y2 G+ `; n4 f2 m/ z7 t, T
  526.   if(!ReadCfgFile("Config.ini"))' R4 H9 x, }" E
  527.   {
    2 u, x( X+ r( u: r* w6 @5 [
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    " @6 ~3 X9 o+ V5 U
  529.     return TRUE;
    8 }9 x" u  d' K" H+ k
  530.   }8 @3 y: q5 \: C( j& W
  531.   HANDLE mutex;6 y7 f& e* v6 t7 x1 L5 j1 X! ^
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 ]* f, b9 ]( k0 U
  533.   {
      Y( s! V( n) x( f/ t; D
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    , e( v; y6 H+ v, A& }* I8 O; Y
  535.     {( b7 c( T1 J' s4 `2 H
  536.       CloseHandle(mutex);
    " N" _! ^- N3 l. m1 n5 q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    & y( D- s( F" d+ W7 q
  538.       return TRUE;
    6 r$ {/ T# K6 E% s0 N( s: B0 i
  539.     }
    ' O0 [+ u9 x3 R( v' F9 p
  540.   }  % @: |) R& R& g
  541.   CloseHandle(mutex);" f0 s% J0 @  x& c$ O& Q1 X
  542. ; e0 Q% D" ~. O6 f
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);& P6 a  x# N3 f+ O

  544. 6 e' h" }4 e0 F. |
  545.         AfxEnableControlContainer();( J  J) G; i8 s0 Z" w- G' @2 V/ }

  546. 3 ?; T0 `  R& [7 C1 Z3 [3 B
  547.   bCanUpdate=FALSE;, ?0 z+ }. u" ~
  548.   dwStartUpSteps=1;4 t  I  s- J0 o5 F
  549.   dwProgramState=AP_NOTHING;8 ?2 R  O2 ^+ j! k' [& u

  550. / t0 U% C& W. q8 c' f
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    : ?8 v' \! _4 d

  552. , M; j0 Y3 I: [8 S7 X/ S
  553.         // Standard initialization6 F0 F1 |( K1 h( O( o" X( D
  554.         // If you are not using these features and wish to reduce the size4 b& {$ s. r+ t% |4 v1 n
  555.         //  of your final executable, you should remove from the following
    3 {! T* u4 V$ a+ x
  556.         //  the specific initialization routines you do not need.
    . G: f  `: u+ ?! F! g$ _/ E

  557. . C' X( Q0 T$ d- S3 q/ ~5 Q, L
  558. #ifdef _AFXDLL
    - u) t% ?0 X. j% r; `' y- ?
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    , V9 |; Q1 b. n& K, E5 x: c  ~( T
  560. #else) E" i) h# V! r7 [
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically/ A3 a! u8 l$ ^8 k2 {4 o. M. [0 `
  562. #endif
    9 ]" n2 ]* k. i' K3 }% g* E! C

  563. ; i0 N" b3 S. ?4 R5 _8 K* u6 b
  564.   dlg=new CRevAppDlg;
    2 q1 w7 Q% _! e. o
  565.   dlg->Create(IDD_REVAPP_DIALOG);, M! E  s* {) O6 C. e
  566.   dlg->ShowWindow(SW_SHOWNORMAL);9 q/ K6 _9 G% A# @# ~0 H
  567.   m_pMainWnd=dlg;
    , H/ Y/ N+ g  }) `: S7 }6 X
  568. ) ?' X7 {; r$ q+ U
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 z& i/ ?! A3 W/ \$ H$ |9 b

  570. 1 [; R. ?4 f, U  E( R; G# g
  571. //  GdiplusStartupInput gdiplusStartupInput;: S9 N# K/ k+ h% j0 I0 I- n
  572. //  ULONG_PTR gdiplusToken;. A3 `' h7 B$ F+ p" b5 c. R
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);5 w9 p* I/ E( f. t, t
  574. + Q% p# c0 A! @3 z6 t3 x: z6 l  p
  575. //        CRevAppDlg dlg;" q% Q% R+ p! ~* Q" j
  576. //        int nResponse = dlg.DoModal();5 t% A/ \$ c7 `+ l# n: E2 v
  577. //        if (nResponse == IDOK). e7 z9 e: T& D0 X( T6 e$ C0 |
  578. //        {
    2 i; `0 a9 D5 M
  579. //                // TODO: Place code here to handle when the dialog is
    % S& p. b1 A* W9 @$ |
  580. //                //  dismissed with OK- M/ |$ \+ s$ [: t! [( P
  581. //        }
    6 k1 ]5 V" v, a& ^# A
  582. //        else if (nResponse == IDCANCEL)
    4 X9 Q- c6 m" Y& h9 Q& V
  583. //        {
    2 k- u3 G: ]# g
  584. //                // TODO: Place code here to handle when the dialog is
    2 R( ]* p5 ]( ?# ~5 _
  585. //                //  dismissed with Cancel! u& Q; Q7 d% L1 {
  586. //        }8 M: Y; Q9 I& t% ]  u; }' V1 Q1 l
  587. & U! ~& y7 {8 M
  588.         // Since the dialog has been closed, return FALSE so that we exit the1 C2 @( B" s. |( p1 U
  589.         //  application, rather than start the application's message pump.  U# L+ x* j4 l, J8 I
  590.         return TRUE;6 V% t" L6 O/ v3 m
  591. }
    3 d5 l" S9 Y0 x) e; h- q
  592. / j- K* ?9 Z4 S3 Y; K# l
  593. char *CRevAppApp::strtok3(char *pSource,char *token)8 O9 ]+ ?8 f% [, ?
  594. {: b5 y  @) L% H% z0 ]3 G
  595.   int i;! p% z( J. H! b1 j
  596.   char *szRet;; U% n  }# k9 Q( j$ y

  597. $ q+ \4 _. R% u' }4 D7 X* K
  598.   if(pSource) { itoken=0; sztoken=pSource; }! T8 }5 Y/ _3 S+ J
  599.   if(sztoken)0 C" j: F, |7 }
  600.   {. B; c$ O. k! X$ D
  601.     szRet=&sztoken[itoken];8 }( y9 s5 \5 T# [8 U; J" V( v+ a" R! c
  602.     while(sztoken[itoken])* F3 `$ g3 @/ |4 ?$ g
  603.     {
    , D5 w7 S& w0 B. `
  604.       for(i=0;i<(int)strlen(token);i++)- r) V* L6 L& Z
  605.       {& e5 h3 T- p9 B1 A! _( c- F
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])0 ?6 U7 w9 u9 @& _
  607.         {9 J9 K" P4 L: m5 Y, {7 {" |+ s) |
  608.           sztoken[itoken++]=0;" c& s" \! L4 B5 P8 I6 k! l/ Y1 d
  609.           sztoken[itoken++]=0;! @! Y: u9 T: W2 L7 U/ Y# E& v7 `3 K
  610.           return szRet;
    8 p. U! ^& V' j/ Y* C
  611.         }
    5 A# j" ^6 E- r
  612.       }, A* L0 a  y0 p/ q5 Z
  613.       itoken++;; c8 y4 @: R, J+ A( i
  614.     }
    . @5 }4 |$ Y2 D) b- J/ A
  615.   }0 @' E+ I! M8 L
  616.   return NULL;
    3 D$ ]2 s8 |1 P- I
  617. }
    2 n0 m: q+ \7 y4 m: B' Z
  618. 0 R5 [. f0 E3 S. j2 J
  619. void ProcessProc(long Total,long Current)
    - d3 q: Q5 p5 v* g
  620. {
    3 ?* A9 K2 `  }" C8 ?. V9 `
  621.         MSG msg;
    ) I4 O* S! X3 ~: V# i+ h; Q# n
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ' T' ~! [' N: W
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    & Z: u' @' A" J
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ! r) _4 z" x; y" n# B/ F
  625.         {
    * i8 k& J% z7 k% ^
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ' d# i$ K: D" m0 r0 }0 p0 l
  627.                 {4 n- [0 c' b# g; n5 S- H; G0 Y0 @  z# G
  628.                         return;
    % R9 J4 {8 b: f4 u6 _% W. r8 G
  629.                 }
    ) r$ h& I/ z0 g0 b3 s$ n
  630.                 TranslateMessage(&msg);$ t6 N- i3 V! X" \5 @
  631.                 DispatchMessage(&msg);
    7 a5 E& c- Z# S' r: d. N
  632.         }       
    ' w: P/ v' ~6 Y7 H
  633. }
    1 _7 H5 K0 Z% p

  634. * a$ [- J" w, R$ \5 t) X# a1 h
  635. BOOL bFirstChar=TRUE;
    ' O0 x$ M: ^! ^1 F/ o8 D" q
  636. # {/ ~: P1 v% ^2 {5 ~- N. A  [
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    + d% p$ d! u$ c. h" k6 x+ [
  638. {
    : i! L" B  E" f- v: Q/ w' h2 }& p
  639.         // TODO: Add your specialized code here and/or call the base class
    ! A4 B9 M5 Z5 M6 B, Q- M
  640.   switch(dwProgramState)2 Y$ ]& M0 m7 Z3 Y; V( k9 |* o
  641.   {
    ' q4 r6 T( r. Q2 z' Z+ m7 h
  642.   case AP_NOTHING:3 r; |+ G; h& ?" c7 Y+ x6 C
  643.     switch(dwStartUpSteps)" H3 {& \9 B) k/ W5 R5 }7 b7 K
  644.     {
    6 o/ z* f1 j  d- [" q
  645.     case 1:
    , o4 Z, p; ]1 ]
  646.       {
    : ^4 H6 p. [+ J' F5 v! T/ ~. M) m
  647.         int i;( L7 {6 X% S7 u, w. o# y
  648.         CDC *pCDC=dlg->GetDC();( A: P% ?/ ?9 S. V6 C
  649.         HDC hdcwnd=pCDC->m_hDC;1 F+ `' F" Z& V# i4 m; e' G6 R
  650. //        Graphics graphics(hdcwnd);
    $ E) \0 {% W0 n+ ]
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ; j5 y1 S  D; v+ i4 n6 a
  652. //        INT iWidth=bitmap.GetWidth();- i' f4 Q- e& N& i
  653. //        INT iHeight=bitmap.GetHeight();  m% p8 S4 b2 @# s. T
  654. //        Color color,colorTemp;
    2 F/ H1 h* Q2 V& f6 H9 Z( k
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    1 t) b0 r2 k$ N3 q/ b2 c& _
  656. //        {  D( R- _! `& U
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    5 K6 V+ J7 J$ P
  658. //          {# c* I$ w" D- H' d1 d* a; T" Y$ g$ e
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    & M2 s6 k; M$ r/ O9 I+ q
  660. //            colorTemp.SetValue(color.MakeARGB(- A, Y0 D' l9 Z% D: C
  661. //              (BYTE)(255*iColumn/iWidth),4 C1 ?! X- ^& b) d, \
  662. //              color.GetRed(),* M) Z3 B  i2 @: T/ [1 g: V' [, |
  663. //              color.GetGreen(),
    5 e% M+ D6 H$ p& J0 y$ i6 H" a
  664. //              color.GetBlue()));5 k/ m( Q; v# g- X' _
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);1 ]2 q3 c* g' t- L0 Z
  666. //          }
    5 x5 W; O+ D0 S' {1 A# E0 G
  667. //        }
    ' h: [  i- e9 B: P7 m. j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + {& i- M" G/ g) m
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( u: n4 Q$ W# Q2 E2 k& R& `
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    $ x6 @' R/ k5 }" ?& k3 i9 m4 W
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- P* r/ y/ e6 d- g; X% X0 S
  672.         for(i=0;i<240;i+=8)8 A7 E* P4 L" x9 ^8 x. O
  673.         {
    . f! L8 ~9 m( G, C1 c
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 ^# Q8 ]0 B& `! N% T0 N( s/ T
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : x- }* D+ A: C! U- A8 ^# |" b& x* A
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; s+ t  O4 W- y; K% X) g' P& H
  677.           Sleep(33);
    : p: r& f4 v5 v( S" X! q2 Q6 i
  678.         }
    2 A7 T$ N. H$ P* g4 ^- U9 I0 D
  679.         Sleep(1000);: V+ x# Y/ J. Z. B/ F  m. X) ?
  680.         for(i=240;i>0;i-=8)% J, X4 s/ s5 ]9 Y# M
  681.         {) }8 e% q% [" _, u2 K! A5 R9 u) E
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * F9 m& R2 }* u7 R# z: K
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* y" b, `; _9 s8 P5 ^" N
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 K7 q9 j, {( ]: k# K
  685.           Sleep(33);
    3 o: M% C3 l. n* H7 j8 N# P" _
  686.         }
    % P: c' S' G; O' G# ^
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    , y; D! l" V! X: n) O
  688.         dlg->ReleaseDC(pCDC);( N: @1 C$ Y0 Y. p) ~& T
  689.         DeleteDC(hdctar);+ R& r' k$ }5 I6 c3 }( i0 O( m+ f
  690.         DeleteDC(hdcsrc);' ^2 M0 P# _7 Q5 w" n: ?- b& B
  691.         DeleteDC(hdcorg);
    ( o4 ?4 U9 _4 n- d* \7 t8 L4 ]7 Z& l
  692.       }- v# B( f) E3 a  m
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    9 }) [% g, s# u0 C
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    / z# U0 _7 ]% e7 e+ e
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, N1 b" _7 p( w- ^
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    6 G+ {7 b5 K$ d5 u; S2 R
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! c8 ?1 o+ e+ R
  698.       if(!Dn.Connected())+ Y! n  [  Z- z0 W4 J' Y$ j
  699.       {
    % o6 p# O3 j! c1 j" T
  700.         dwTotalFiles=1;1 U5 {( d6 X3 i9 G3 M
  701.         dwDownLoaded=0;
    # g" d0 n" h" e
  702.         bSilentStep=TRUE;
    6 w+ i, S- Q7 p. v: U: u' e7 {: O
  703.         bCompressed=FALSE;$ }6 w0 K# z8 s) O6 }! u& Q4 d5 G: q
  704.         strExtLocal.Empty();' H1 P. a3 ?* B0 O$ R2 Z. M2 ~7 K
  705.         strFullName="readme.txt";
    - Y" M; T$ x2 L, X. ^( s, j
  706.         dwProgramState=AP_CONNECT;
    ; Q" k$ C4 l( i' q$ D: o, A) {
  707.       }% {' V; Y& i' V9 b8 E
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    - g& |: T, Z! `$ N" m2 j7 t! n$ l
  709.       dwStartUpSteps=2;
    % f/ F- _0 l3 E
  710.       break;9 Y5 Q' t+ _( v% w8 V* d* R: w/ M
  711.     case 2:5 H- n$ d& I" M% L8 k2 b
  712.       {
    $ |! |6 F* ?; V/ d* B; H- {
  713.         int iEOF;
    - U# P6 Q# j0 L' m
  714.         FILE *fp;
    $ T+ J7 \1 s: H4 x
  715.         char szString[512];
    + p4 C" x/ P- w1 Y$ L! q/ f% r
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    - O  R" j3 ]1 I8 ^/ E; r" O; \
  717.         if(fp)
    ; |0 R: e% ?: K, y
  718.         {
    8 w4 a$ ^  ]+ Z0 t* v  v! D
  719.           do/ U2 d. }# e, N( R& L
  720.           {
    2 G7 `' k; ]3 E# V
  721.             iEOF=fscanf(fp,"%s",szString);. S  v/ a, k* O) i( C: a6 G
  722.             if(strlen(szString))7 C- Q& X6 O( R( {( p2 x
  723.             {
    0 f- I8 B% E& D) _" y% J$ J2 ^
  724.               if(bFirstChar)  X2 F" H$ J1 q. m/ {5 K
  725.               {$ |4 k2 z' n, N- Q
  726.                 bFirstChar=FALSE;" V/ S/ M: n. G: Y6 V
  727.                 bConnectIsBig5=FALSE;% I, i8 w" @% C' }6 ^7 W% K" l& e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;. T+ w6 r6 m) J6 Z: }- l; |
  729.               }1 N% k# V1 B% a! l7 f3 _6 J8 n
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    0 H3 u6 L- r7 r
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));: b) L* Z& r6 P9 @. s4 M" [) L
  732.               dlg->m_ListText.AddString(szString);' `& l- ~" f' N$ Q5 E) s- t$ @5 G. \
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 s* |& {# M% e6 K# I
  734.               *szString=0;
    3 @. U$ k" ?5 Y# z( M4 G& E: |
  735.             }( d3 t2 F, }! S( q3 m; C. G
  736.           } while(iEOF!=EOF);
    - q* H* O5 I# m# p2 n* |
  737.           fclose(fp);
    ' {; ]6 A, M0 \! n% J6 `/ e* P
  738.           unlink(".\\DownLoad\\readme.txt");. \4 k( P; K4 @: `* c3 n) O3 h0 M
  739.           dwStartUpSteps=3;+ I( p+ g( T2 Q3 E
  740.         }; j( L; n$ s" g1 S: `7 s: J
  741.       }
    + K+ d) a  g' L7 G
  742.       break;- @. _9 Q8 V; L
  743.     case 3:* |- f$ q! S4 n
  744.       if(!Dn.Connected())
    * r3 E" K$ H8 M7 L. D
  745.       {4 b  U6 s2 [. Q6 Q0 p( i
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    9 ^3 ~0 ^9 {4 `) g- ~
  747.         dwTotalFiles=1;
    4 A* ^0 d! ?1 _; @8 x
  748.         dwDownLoaded=0;
    3 N; \+ H/ B+ x6 g0 \* f
  749.         bSilentStep=TRUE;% G* V" i# Z( M) m0 V& I& ^2 O: \
  750.         bCompressed=FALSE;
    7 B* S( T( B! l& x* J; Q* j7 @9 t. X
  751.         strExtLocal.Empty();
    ! W! _1 B$ B' t5 @' T
  752.         strFullName="checkversion.txt";
    & O- c( d* S. h4 E
  753.         dwProgramState=AP_CONNECT;5 h  X8 k0 Q$ X  w: Q6 W
  754.       }
    - N; z, |% l$ h" o& D
  755.       dwStartUpSteps=4;1 A3 J* t' n( X/ M3 C* o6 u% ~- V; G1 R
  756.       break;
    ( i) Y) S/ @% p' b: X6 C( c
  757.     case 4:
    ( k1 e4 l( t( \4 q- f/ M
  758.       {  w: m) x( R- p% b  s; p
  759.         FILE *fp;/ b6 N/ W" u7 \: V- Z; w
  760.         char szString1[128];
    0 n) {3 O& u. }5 T1 A5 I6 N
  761.         char szString2[128];5 v" O9 e3 M! ]. r" A$ @
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( v+ N2 c* x: ^7 K/ w9 C1 i. c1 |
  763.         if(fp)
    ' L7 l$ q, @# C5 U
  764.         {1 I) @6 T: _2 |
  765.           fscanf(fp,"%s",szString1);
    % I# v  ^' ~8 ~
  766.           fclose(fp);2 O' s9 m! e2 s: d& k, C
  767.           fCheckVersion=atof(szString1);+ J7 W) r# n/ w9 y
  768.           fp=fopen(".\\checkversion.dat","r");
    4 X+ I* c9 D7 R: U
  769.           if(fp)3 y" b$ ^# a3 }. Y
  770.           {; S/ K  M) w( O. x! i  s9 L. A
  771.             fscanf(fp,"%s",szString2);
    1 Y1 d9 ?, Z- s+ n& ]% D
  772.             fclose(fp);4 g  R( N5 w: }& z
  773.             if(atof(szString1)!=atof(szString2))2 ?( E  J6 l+ H  X6 g, G
  774.             {6 M' V) X2 O( V1 F. X
  775.               if(!Dn.Connected())
    ! X$ A( f' K+ {6 V7 P
  776.               {
    * Z+ P! P5 W2 o+ g# Y$ k/ J  E
  777.                 bFirstUpdate=TRUE;
    % D3 G5 b) P8 A
  778.                 dwTotalFiles=1;
    4 w, M& K8 |0 H( i
  779.                 dwDownLoaded=0;$ z' O- m/ [2 O. m
  780.                 bSilentStep=FALSE;5 m& Y# Z+ t% P% \
  781.                 bCompressed=TRUE;
    & v  o: q; I& [* }0 S8 L! u
  782.                 strExtLocal=".\\DownLoad\";1 \0 W' O; H! Y0 d3 L
  783.                 strFullName="update.txt";7 `" h; e% ]8 Z: o+ l/ W- g
  784.                 dwProgramState=AP_CONNECT;9 Z3 H, P, i5 [5 H& p" O
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: n  ~) k. u0 k4 h3 x
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 }( \" M& l$ O! L7 N: G
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : ~' M0 e% u  Q

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-5-23 08:57

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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