找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
1 f6 p2 N3 A- J' y
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ; j3 D- w& @$ {
  2. //
    # P+ K; y+ F$ F2 c3 `
  3. 4 u: |. e. x+ k6 _- q  Y
  4. #include "stdafx.h"
    5 u0 ]7 x% f- z+ s/ r9 y
  5. ! l0 l! v9 R1 V; C2 s, ?! l* L
  6. //#define UNICODE2 W& H0 k  x' t6 s- r
  7. //#include <gdiplus.h>+ _1 w- k4 h6 q3 u/ i; `$ C
  8. //using namespace Gdiplus;
    9 p6 u, I0 y, B, {: }5 w1 ~
  9. 8 |7 B$ C0 D, v0 _  _. v! z) V
  10. #include "RevApp.h"
    3 y& A  Q; n: d% b% @
  11. #include "RevAppDlg.h"& o% w, o) |2 I7 h6 [
  12. ! v% \& n+ F! B8 k, b- o: M
  13. #pragma warning(disable:4786)& |9 X" G* T1 M
  14. #include <map>! I9 i# Z9 ~- w+ i8 r. H) Z; w3 Q
  15. #include <list>5 W3 t3 I- v, a4 ], _
  16. #include <direct.h>
    " K2 t: C% D/ z& j7 Q  M* ]8 |6 L& ^) \0 @
  17. - r; S/ m3 w5 |) q' S" `# L
  18. #ifdef _DEBUG* |% w* ?* e1 }: l
  19. #define new DEBUG_NEW
    , y' B4 Y+ J. r
  20. #undef THIS_FILE/ A8 x5 U% b. q
  21. static char THIS_FILE[] = __FILE__;
    $ Z, E3 D& f& E: ]/ F7 _% M
  22. #endif
    5 L! D) U+ k# `
  23. #include "SkinResDef.h"7 i4 I$ E1 g2 A& {5 _( i
  24. #include "ChangeBG.h"
    # m$ ]+ d- l. R& u+ g/ P3 h
  25. #include "AFXINET.H"" @( e, O3 D6 |) Z

  26. & i4 D+ W7 E0 u% f$ i: _
  27. #define TRADITIONAL_CHINESE 0& u5 W" B, q2 L9 d
  28. #define SIMPLIFY_CHINESE 1) a2 K0 S" L/ q
  29. #define ENGLISH 2( ?) f) l! w& D: i& [  b7 ]& v6 I
  30. int m_iLanguage = ENGLISH;% Z# L+ ]5 D& J) S1 I. S" B, W
  31. /////////////////////////////////////////////////////////////////////////////0 A* Q% S5 e. w; i1 }+ e) P
  32. // CRevAppApp
    # c' k4 i; h2 R% ?9 k9 O

  33. - U6 Y; y5 j& R  \2 j
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
      b. ^, C: e2 s. U( _& f
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    : Z; ]7 p% N9 P7 q' m9 l
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ( O3 R6 \! ~% x) K/ ?% U# Q
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!9 Z% ^  d" A9 x% E3 }
  38.         //}}AFX_MSG
    * A9 C. h. i. \2 G2 c
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . U8 u  p6 W8 _# h: L& p& k) h
  40. END_MESSAGE_MAP()
    . h& Y! \8 A! X7 A0 N& }4 |# g5 b5 f
  41. % g# e7 b& \7 ?8 s$ Q) o6 u
  42. /////////////////////////////////////////////////////////////////////////////
    8 _5 U! N4 w! w2 J; q( F1 \
  43. // CRevAppApp construction( K4 @: ]( d( |
  44. : e& S8 j" d7 @2 V
  45. CRevAppApp::CRevAppApp()9 C3 Z) z  C' J3 S2 X+ g" ?7 n6 @2 T
  46. {
    - Q4 n" e  s. u5 K1 I5 f( c# w
  47.         // TODO: add construction code here,( q, \- O$ n8 u  t1 A' M
  48.         // Place all significant initialization in InitInstance
    0 d1 L! A( @( H
  49.   bDisplayIsBig5=FALSE;
    / q1 o+ f$ a$ w& H8 I  j
  50.   bRestartUpdater=FALSE;
    ! H: Y- t+ G+ z- W$ x( b
  51.   bFinishUpdated=FALSE;3 \6 c6 a8 L2 r
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;- S& L- C+ i' y6 S8 s
  53.   InitChangeDataBig52GBKS();2 S- x- t8 Z- ^. v  ]4 `, P" a
  54.   InitChangeDataGBKS2Big5();
    8 C& B* P' \4 L5 j
  55.         //
    3 v5 R- h' t8 K9 `& l0 U$ T
  56.         bClickRunExe = FALSE;
    1 d# G  y9 y7 ?: x# i3 Y1 o
  57.         //' U: W, W, w2 k. h9 w0 a
  58. }
    ( L8 W; o# h: _! y

  59. 2 q# F4 M8 l8 ~
  60. CRevAppApp::~CRevAppApp()
    3 i3 G# V9 _" \* F( W/ Y" F+ R
  61. {; i& \" q9 }: ~. f
  62.         // TODO: add construction code here,
    $ ~9 |/ j% j( ]5 P: i7 Y- D
  63.         // Place all significant initialization in InitInstance8 ^6 Z' X' ]  d1 l! D7 Q. n4 T
  64.   EndChangeData();
    1 M9 c' Q" O/ {1 _, j' H% Z% m  ?
  65. }' |" `6 i3 v, |! m: K2 E) ?
  66. . h6 E1 m* x! z, W* y* K
  67. /////////////////////////////////////////////////////////////////////////////
    : K/ q' \  _% {% Z' R( U4 l9 u8 ?/ O. ~
  68. // The one and only CRevAppApp object% U% Q+ Y4 n2 Z

  69. 5 }  R; P" n4 H9 Z
  70. CRevAppApp theApp;
    ! b! J' @8 P3 r+ |" R! H

  71. ' E# [9 ^: B7 {7 R0 F& Z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)- x7 l8 J3 h4 c
  73. {* J1 P. Z6 K( A% a
  74.   int iEOF=0;
    3 M) [/ N2 I8 P, _9 w6 x
  75.   char szTempName[MAX_PATH];
    4 E0 |, D5 q( q) Z( H4 W
  76.   *szFileName=0;
    ; g$ U8 C( w6 L" X# [6 K
  77.   iEOF=fscanf(fp,"%s",szTempName);. y% K! L" }/ h( b8 c( t
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    2 Y7 G' ?' t8 N* @
  79.   {
    ( j' \( N( H9 P9 \& A1 z
  80.     strcpy(szFileName,&szTempName[1]);5 |; Z$ M8 R* H) @0 z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)$ w$ H+ B' u6 F
  82.     {2 J1 p4 c3 Y2 k, p8 Y
  83.       iEOF=fscanf(fp,"%s",szTempName);
    : C5 Y/ \; X' B8 L
  84.       strcat(szFileName," ");8 w# B1 U# t( \
  85.       strcat(szFileName,szTempName);) d" ^# z, [% u8 L9 S: g
  86.     }9 W! @' w  s. v3 w; o$ B8 k
  87.     if(strlen(szFileName)>=1)
    , F( D( f5 A8 g5 P1 ]% `
  88.     {0 l1 E" u! G0 I$ d6 A$ h! c
  89.       szFileName[strlen(szFileName)-1]=0;; C9 Y0 k: i3 W7 p' e8 y
  90.     }
    2 L. ~" q3 P3 j% ^# [7 S9 ?7 S
  91.   }
    # `2 j: j# H  U9 @4 z. ]# e: w
  92.   return szFileName;
    9 ]7 x* g- Q9 N) |4 D$ U6 J
  93. }/ z- c2 `7 T: F9 [7 i9 A

  94. , v5 E% p+ o- b9 V  j  e
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)5 t9 j, K, C8 f7 \% _
  96. {: W' m3 N: S2 b
  97.   FILE *fp;6 M( P+ c/ w9 ]% @  g0 G8 y
  98.   char *key=NULL;
    ! j0 X+ ~) _3 p$ X: ]
  99.   char version[MAX_PATH];
    % y- q$ c! K+ z1 O- t
  100.   LPUPDATEFILE file,olds;5 D: g) J0 D3 y/ D& Y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;+ k9 V! h* W1 k' w2 W* d9 I

  102. ! Y& }# b" Q3 E( f0 e2 I# m8 J
  103.   UpdateList.clear();
    8 K7 Z( g2 n# w
  104.   UpdateFile.clear();
    / m$ ~. B9 c: b: g# u7 W3 q, I% F
  105.   if(GetFileAttributes(filename)==-1) return false;) R7 [9 P7 s1 f, a9 Q
  106.   if(!(fp=fopen(filename,"r"))) return false;
    + e' d  y/ C( v
  107.   fscanf(fp,"%s",version);
    ! W. p9 ]) d$ P+ _* |1 m8 H
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    6 p# i3 _+ o& h/ C+ [7 c! m
  109.   while(fscanf(fp,"%s",version)!=EOF)' L+ A/ J' i: _! e7 J9 m5 E  Z: H
  110.   {
    " P$ B. g5 X' R0 h; g: H. Z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ C; i9 v+ q8 ?
  112.     fscanf(fp,"%s",file->path);
    ; ]! Q, K# _: B* K5 Q' `
  113.     ReadFileNames(fp,file->file);6 b9 |5 X  {" N4 e1 B
  114.     strcpy(file->full,".");! V; L* c7 g; p( X3 K
  115.     strcat(file->full,file->path);
    0 u1 ?& V/ s" {
  116.     strcat(file->full,file->file);& _. x4 j; n4 \
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())# d4 a' r( Z: Z4 ]7 r
  118.     {7 x& ^% k" \8 J( J! g
  119.       file->vers=(float)atof(version);
    0 P3 N) f% P3 C
  120.       UpdateList.push_back(file->full);
    6 j, T  ^0 {, `. n2 U' }0 o
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));6 n; R, q$ h) o: d! @+ p
  122.     }
    ' I& y$ q( i. ~1 H# T% \2 Z; Z
  123.     else
    8 o5 \; F) x0 p0 w& n2 F
  124.     {
    & g/ z) e' c* V- u, h/ k$ Z$ \
  125.       olds=(*p).second;
    6 S: V5 @" z, r
  126.       if(olds->vers<(float)atof(version))
    ; X! H& }' p4 j8 _, V, H3 y
  127.       {' H' \1 e, `0 v. W9 {3 h
  128.         olds->vers=(float)atof(version);8 @$ \% Y2 O7 t5 `# T3 @+ ]
  129.       }, J' M* {: A$ [
  130.       free(file);
    8 m9 Q" A# \) Y$ g- R8 l  i9 A
  131.     }$ Q0 F( |/ D$ p
  132.   }
    * P3 n; G9 [9 e4 ]% A3 @  l
  133.   fclose(fp);
    / {) v; X/ ~  I8 q/ ]! H1 c
  134.   return true;6 a( T9 R" t' F+ Y, D, Q
  135. }  W( }) Y, m: H6 H! D4 d, X6 Z
  136. & h: s: K; ^# b
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    * `) e" n0 M$ u: b3 b  X
  138. {
    : I0 ?; X1 K& G- f
  139.   TCHAR  szFull[MAX_PATH];" x, }" e3 ~- Q" h4 m$ h' ]; D
  140.   TCHAR *token,*inter;
    . A; e8 d- n: J: R. d3 L. m+ s
  141.   *szPath=0;
    : k# K- d& }' F/ a' N/ a% w
  142.   strcpy(szFull,szFullPath);1 g$ i) @, U! K# o0 q. F) w) N
  143.   token=strtok(szFull,"\\/");5 g4 ~. j) @2 S* I
  144.   inter=token;
      [: n+ q  A& @% N
  145.   while(token=strtok(NULL,"\\/"))
    5 x) g. h( ~/ A: _+ @- t# z
  146.   {
    ! B# K7 J& I8 W% c
  147.     strcat(szPath,inter);# r* \! |3 x9 x7 w: z+ e- S* X
  148.     strcat(szPath,"\");% s0 M) s. N- N$ {' T
  149.     inter=token;
    2 ?: m. Y- `5 Z' }6 H  S
  150.   }/ [5 ?2 L. x6 z2 F! u% }9 d
  151.   return strlen(szPath);* A5 Q+ i* i6 f$ ^  M
  152. }
    - ^8 ?/ |& Z' x3 v

  153. 5 N. r/ ]! Z* q' |, w$ t; K. R0 N
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) B, X! X& T0 s& m2 b+ k
  155. {2 U3 _& x* Y% f. S: x: u9 Q( a7 x7 t
  156.   DWORD attrib=GetFileAttributes(Target);4 A/ q) h4 Z' `  D7 [# S8 y
  157.   if(attrib!=-1)# _8 ]0 D+ _7 W. y4 n+ h* E7 e& \7 D
  158.   {, Y) O5 t0 T+ o3 |' W
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ v: o+ X# W  `" O, l2 p5 \5 _% D& d
  160.     {
    8 k0 c2 S! g: |0 r, c" `* O
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    1 f! ^9 c( K' Q' o
  162.       SetFileAttributes(Target,attrib);5 E* e, F' S. y  P' m! s& X
  163.     }
    9 z9 ?/ D2 l5 ~% n/ C. D; E  w: f) s" K
  164.   }
    5 X- s, `. y  m5 ]2 z
  165.   CopyFile(Source,Target,Erase);
    9 p+ h6 _5 u* X$ O$ ?1 [- P4 Y
  166. }
    # D) c( L+ ?- ^% `& E) e

  167. 8 l+ s% P( J" Y$ x4 Z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...): ~$ E3 e( E* L
  169. {
    ) Q# |2 u6 }3 z1 A' y
  170.      FILE *fp;
    ' I0 u1 Q, n% n# c% D% M1 }( Z
  171.      char  szBuffer[8192];
    / L+ z) w' o: g/ ^6 G) q& r9 V1 Q; U
  172.   va_list  argptr;
    3 j- \% P# a2 U9 U9 e$ v# `
  173. " |% M. n* Z2 g5 H
  174.         va_start(argptr,message);$ v8 i/ O" L/ \* p2 u$ h" b: Y1 t+ Q
  175.         vsprintf(szBuffer,message,argptr);4 @+ H& I$ {7 ~
  176.         va_end(argptr);
    % ?5 G5 y. F& |. g) P* H& X% O
  177.   fp=fopen(FileName,"a");
    : ?/ g2 b$ }7 ]" V& S. t+ q9 E
  178.   if(fp)$ {( F- D0 E; G3 f+ f
  179.   {
    * x8 W+ k* M) j+ K; o6 N# f8 E7 s
  180.     fprintf(fp,szBuffer);
    $ x1 a5 g) Z% k
  181.     fclose(fp);
    ) d& \: D4 l' h6 d, l
  182.           _flushall();- o. v2 w* \- g' R, M+ C
  183.   }# N& B& J& L9 E! e/ h
  184. }
    1 u1 H+ p& d6 A0 Y% [
  185. $ S, Z3 s$ P  `# k2 @0 c' u- a1 e
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    2 }2 V" Z" b2 t' U# u2 ^* @
  187. {0 `. d& y! [/ e, e( C% Q# {+ I
  188.      FILE *fp;, k& X9 Q; K( o& J) G# t3 x, Q
  189.     DWORD  attrib;% m' n! R4 y) t) f
  190.   attrib=GetFileAttributes(FileName);; e3 r8 Q$ k+ k7 d
  191.   if(attrib!=-1)
    : z1 h. U. e8 e  u# K2 g
  192.   {  r! a. y! i4 y$ }% n" \
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    & i# q3 K5 {+ p" c; j
  194.     if(!SetFileAttributes(FileName,attrib))
    ! ~; \5 o/ N) r! }. z+ b
  195.     {, c3 p, F9 U6 G# s) l
  196.       return FALSE;
      @1 W) _- e( y/ Y9 g$ t
  197.     }: S' l8 Y# t. r# y2 y+ d
  198.   }: o. \/ y- l# n% C! o- p
  199.   fp=fopen(FileName,"wb");
    & F$ u  [' B' [
  200.   if(fp)
    ) q+ H, Y' I" L( y
  201.   {
    * w# e# y! J; l% W1 l: W
  202.     fclose(fp);
    1 b; a, d+ M/ K8 B4 R4 q. L* s
  203.   }
    " a* Y! I. F! T* K6 S0 y
  204.   return TRUE;
    ! O% R. H9 u6 u& u0 G
  205. }
    & V, t4 n  R. Z5 ?
  206. 8 n& F$ S7 h: i$ ]
  207. BOOL CRevAppApp::UpdateLocalVersion(void)- D1 |- I. x: `1 f' q; g' r
  208. {
    + \2 |7 M& S# K' G
  209.   char filename[MAX_PATH];$ v6 R" A' u; N( q( s7 F$ _
  210.   LPUPDATEFILE file,olds;
    5 n  ?4 }; p7 m8 g3 \4 O5 [
  211.   std::map<int,CString>::iterator i;/ H# ?! V/ Y3 X% K6 N
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
      p8 v& {% U( {
  213.   std::list<CString>::iterator l;  R2 Y( h* Q. j$ ]
  214. 2 T* _5 c6 i4 c- g1 [( `& U8 i/ G
  215.   if(bFirstUpdate)' O3 ^. V7 A" o; u
  216.   {
    2 u, j+ c8 d' p3 r* `
  217.     dwCurrFile=0;6 c5 V0 s" y! b' F2 @) a3 L
  218.     bFirstUpdate=FALSE;: c2 {4 ?/ Q3 \: v
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 D, [" N% C( |7 M9 F0 ?
  220.     {$ s. g# u9 M7 q/ A# T. m
  221.       dwTotalFiles=UpdateLocal.size();8 y+ n& Y- N8 H- y
  222.       dwDownLoaded=0;
    ; S0 N6 Y4 r$ T; l$ {
  223.       bSilentStep=FALSE;
    $ d7 u1 w  B' _  ]. f2 u$ s
  224.       bCompressed=TRUE;
    & e4 S1 g; p% [5 t9 A% R; U  r
  225.       strExtLocal.Empty();! s; m. `: k0 ?; _
  226.       strFullName=(*i).second;
      n- o1 O( |! c1 h* g
  227.       dwProgramState=AP_CONNECT;
    7 l1 n8 B8 I+ T1 ]
  228.       return TRUE;
    / q) C# |" j% V
  229.     }
    1 O8 n, Q( N0 _" J4 x  @; l# Q
  230.   }& v( B6 o1 \0 {+ B
  231.   else if(bRestartUpdater==FALSE)" w4 {& @9 \4 w. l& _8 T
  232.   {; x9 a$ z2 o( G! `" @& s* W. N
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())* ~. q8 Y1 W1 P
  234.     {( X4 U/ F# m7 X. W! }/ P2 g) y
  235.       file=(*p).second;' M1 |& A. V; D7 M' Y. m
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ) m6 q4 z. O! {- u
  237.       {1 C5 c# S# j" {
  238.         olds=(*p).second;
    5 z0 s; u3 c3 q* A. J) m) h
  239.         olds->vers=file->vers;
    ! Q- Q" M" ^; \
  240.       }7 C( |1 a+ b6 m  P5 j
  241.       else  c2 ^. H4 S1 {+ S# b! S7 N
  242.       {2 {9 f  G" O9 P5 K
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) Z. l6 I! [8 B: _3 \/ n% d+ q. F
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    . i+ Q7 l7 E' M$ u, ~# A
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ) `) D, M2 j+ M
  246.       }8 i' c( l- I2 r8 [$ @) X" w
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    3 l4 m4 X1 K1 M0 @( w, A
  248.       sprintf(filename,"(%s)",file->file);8 J* ~- Y! L5 C6 t9 r) I$ }& a( y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % {. v% C" r+ }" y' ^, s
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }- ?$ N( Z6 C2 w& r
  251.     }
    5 Y2 h4 N* ]% I  J5 V5 ?  r
  252.     dwCurrFile++;
    ! q" D' X" {2 U  U+ ~% S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& g& ?8 D4 U9 F- [% M
  254.     {
    2 c7 E8 E; T6 Q: ~5 t: U, g8 e) l, w3 _
  255.       bSilentStep=FALSE;' w( t2 r+ A/ R
  256.       bCompressed=TRUE;, q( C1 Q5 ?3 @1 q
  257.       strExtLocal.Empty();
    : ]! {8 I# `9 {3 n) K6 x
  258.       strFullName=(*i).second;% L, Q  y$ G% w* i6 E' {) m, Z
  259.       dwProgramState=AP_CONNECT;  s1 C$ d0 A0 p6 r; W7 n
  260.       return TRUE;9 a9 w& k4 W, ^( P
  261.     }
    6 t- H% ^6 p9 B: V2 w; Q
  262.     if(!bRestartUpdater)
    " [3 R1 F) E  ?  O
  263.     {
      ]2 x) G/ Q0 ?4 Q
  264.       int iCurrSize,iFileSize;
    ' R0 S/ f. m0 y! q+ C7 x5 H
  265.       iCurrSize=0;
    # h( m/ b! `7 ^; {5 ~3 u7 \
  266.       iFileSize=UpdateList2.size();( i: f; Y0 J; C3 E& o2 l
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    & k6 m7 y5 A2 |8 _8 C
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");7 J7 ]% |; h# ?9 P4 O7 q/ |
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");* O$ I, e5 ?% e5 d6 u, Z/ f* e2 ]
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + a: c% ~5 J5 A3 _
  271.       Fclearf(".\\update.dat");6 [: \& L( O5 h/ M+ a) i3 X
  272.       Fprintf(".\\update.dat","Bloodyf\n");8 m/ V& q; z; R0 s- r, E* Q2 q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . J7 x+ t! \7 E' D
  274.       {+ S4 y% b& ^; B! i
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    1 i' i: F( F+ Y, Q4 n% ?
  276.         {
    : x2 M4 y9 Y. f* C5 ~4 m
  277.           file=(*p).second;8 Z6 }, [4 B! S2 G- d
  278.           sprintf(filename,"(%s)",file->file);
    % g' b* q) K3 \0 B+ c5 q& T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 o; G: w% K; i# ]9 z0 [2 U% M
  280.           iCurrSize++;% M- ?6 y9 d" Z* }' l) U
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));- E; M+ b  r" S  O4 u
  282.         }
    8 k! k3 M: v; w" ?5 Z- B# |8 b
  283.       }" r% M/ F  W6 C. y' f2 T& \' I
  284.       unlink(".\\update.txt");# G# X- U  _1 o
  285.       unlink(".\\update.tmp");- V  P; `! a; I
  286.       Fclearf(".\\checkversion.dat");( h8 X8 X  @( T2 l7 y0 Y
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( \. l5 y0 P* `3 A8 v
  288.       if(UpdateLocal.size())
    + X  X" w0 _+ Q  D4 W
  289.       {
    : f- [& w+ v# }6 T* p
  290.         UpdateLocal.clear();- \, l& E3 O1 V) d( c. \) j
  291.       }
    5 _& S$ ?! ?' Q
  292.       if(UpdateFile3.size())
    0 d8 i! a- V2 u) M! Q; o% V2 F
  293.       {
    % n" `% Y* W$ u; E# w& c
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 g0 k  O$ C7 D) o; k6 r, W
  295.         {
    0 ~# B( A% Y2 o7 Z8 @' k7 @
  296.           file=(*p).second;% k8 j5 ]* \& t; M  q. |: U( n: O( \
  297.           free(file);
    : P- D& u  P* f- A0 E# l5 M
  298.         }
    # }/ T1 ~7 M2 {8 T
  299.         UpdateFile3.clear();4 E+ C6 F, R4 Z
  300.         UpdateList3.clear();
    : ?5 j; n: N# v0 k! [4 U# C! R# d6 ~
  301.       }
    , B! R( j6 m9 C) p. j3 @1 d9 {
  302.       if(UpdateFile2.size()): M& Q0 C  R5 Q4 T' Z6 f+ v
  303.       {$ `- P1 s0 U/ z' x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( y( U* d% a4 K; v
  305.         {
      d' J6 F8 W9 S3 j3 V" X  S- n
  306.           file=(*p).second;. B% n: w! x" d: ]! z* E
  307.           free(file);
    ! \1 N: W8 g) P% t3 a/ ]8 l
  308.         }" [! C( w: Q& `' F; d& ]4 U
  309.         UpdateFile2.clear();
    . X0 w* P; h! E
  310.         UpdateList2.clear();
    ; O" E  G& H% |" J  c6 r0 @
  311.       }& G/ H' n( {+ j: N* S8 Y" k
  312.       if(UpdateFile1.size())
    0 z" H. n, r; ?3 Q+ _
  313.       {6 [% o- z% {4 Z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# G5 G: E8 N- V. N0 ]- t$ I' x
  315.         {- Z% J9 v# r. I
  316.           file=(*p).second;
    " F0 I( n. x1 N0 _
  317.           free(file);/ B# B2 |  t% S/ @# `  P
  318.         }2 h$ ]  H& h, W: `5 `
  319.         UpdateFile1.clear();
    ; f) j: z( p4 l, ], u1 p
  320.         UpdateList1.clear();
    $ e$ ~% ~, e1 \5 W  T
  321.       }
    4 J2 q" m+ I  @, b
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));& T9 x3 B! ~$ i" E. l/ p. E! g$ p' a5 D
  323.     }! u$ T* _- F% v  M# n
  324.   }
    * F% d# b8 O6 @. G5 q- d7 w: W3 n
  325.   return FALSE;2 n, R# p, c  d, ]* W; U9 m
  326. }
    2 p7 i" \' h& |2 ]. |$ q- r: h
  327. ' w: h+ O! E" d- O. }
  328. void CRevAppApp::ClearAll(void)* b7 S1 s7 J' r- y, @) V2 r
  329. {
    - I8 r5 g4 `6 u( _* ~: W! l
  330.   LPUPDATEFILE file;
    % s* q0 ?6 f8 s7 q8 }% t2 G' `+ F
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 T" T9 }* E$ x9 j, _& \$ Y, Z
  332. 1 N) {8 ]7 ]+ i5 A! i/ t* o9 T1 g
  333.   if(UpdateLocal.size())1 Q, D# s) Z- P- K
  334.   {
      M* B% U. D4 [7 o' u
  335.     UpdateLocal.clear();( Z7 a" Q6 L- U3 s
  336.   }
    * O$ |2 r; h6 C7 k; {3 s) n
  337.   if(UpdateFile3.size())' k6 v, H. k& c+ g2 D) E
  338.   {' g, R/ @, [9 [& Z. Q+ x
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * K. R/ I' H) q! C4 z' Y* O
  340.     {3 _; c, |$ C. l8 T6 Q5 l# ?! y
  341.       file=(*p).second;$ K9 j2 j, c/ g8 T' l# j; `+ z
  342.       free(file);, ~: A+ _4 Q! W7 E  f- `! }' _
  343.     }
    - o7 u) h0 M* S  L7 U2 V. q
  344.     UpdateFile3.clear();8 ~6 A* K, [1 x. _: ]
  345.     UpdateList3.clear();7 z4 Q% T8 o) a; e
  346.   }  {9 ]" G# C$ w2 v4 w2 l* S( s: {
  347.   if(UpdateFile2.size())
    " `8 Q* Z; q* `$ N
  348.   {1 m$ K- M7 o! ?" U5 Q7 g
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  R. O. z# M3 h7 K) S& Q. w
  350.     {9 \7 B+ G  u' u& `9 e& \% n3 D
  351.       file=(*p).second;
    0 K9 p2 ~; Y* V9 t( ]/ i
  352.       free(file);' D  @, P. {- \  e2 v
  353.     }
    6 I. g3 G% ?4 X7 t
  354.     UpdateFile2.clear();
    $ G6 t3 T. n. ^# P, n5 B
  355.     UpdateList2.clear();
    : d9 N( h2 H1 o( n! o* {+ P$ J
  356.   }# h, L# o/ y6 X. e- P
  357.   if(UpdateFile1.size())" R6 z# W6 a0 I- v
  358.   {
    , N/ T- S7 |6 ]) c
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% C5 h: J  i' {, e5 K2 l! Y" x1 l
  360.     {
    0 f( W9 F0 `/ m7 v( f' s" X6 W
  361.       file=(*p).second;
    ! Z" r. E2 m& J% u8 L) p5 @
  362.       free(file);
    8 @3 u" F# J# p1 Q' R
  363.     }1 _7 `, [5 [: e! f: Q
  364.     UpdateFile1.clear();
    7 D3 g4 y) ~5 y
  365.     UpdateList1.clear();
    1 e4 A% O2 v$ \
  366.   }
    4 z* h5 i0 U( k  L7 Y5 ?+ H' z
  367. }  
    2 P0 Z' X, Y3 R, Y, s
  368.   
    % s6 o2 Q# @* _6 R
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    , \3 }7 c" x0 Y9 S* X; c/ E
  370. {4 Z0 O4 j+ c- N1 a( R( w! _" W
  371.   int c;3 k: I$ h% t! X# \9 d; l3 Q
  372.   LPUPDATEFILE file1,file2;
    / K1 k. u5 w7 ?8 `1 ~
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ S) Q; l4 X& n1 C
  374.   std::list<CString>::iterator l;2 v* l% Y% G$ k5 i

  375. ( [( ]6 G' B5 L! Q
  376.   UpdateLocal.clear();* v% Z$ D# n. p2 R2 r+ R% v* `
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);4 _; g5 j, v2 X
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    1 G, n+ M: k1 y7 M" H
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    % F  s2 I/ C* k
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    6 x) S- V( v' |4 L/ J
  381.   if(UpdateFile3.size())
    ( B1 b. g% D- B" w8 I3 Q, |, N3 j( P* d
  382.   {7 b8 R1 a2 E  o: v. Y$ o0 `! g3 ]
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ) V1 w% z5 l) ^- p- @$ Y
  384.     {4 X: ]- ~! J0 k$ H$ _6 ?5 \# I( }
  385.       file2=(LPUPDATEFILE)(*i).second;
    # `2 O( @, j5 U" ]1 C( T2 {! l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 P- R" U2 o* W4 h) Z) I5 ]( M
  387.       {
    * P! w) k; f& e6 [6 M2 {5 B
  388.         file1=(LPUPDATEFILE)(*p).second;
    ; m% b3 T- c: I$ B7 l! g
  389.         file1->vers=file2->vers;0 `& p% T! b$ U3 \
  390.       }% k+ h5 y& x+ D( C
  391.       else
    0 A* M5 ~) z  x+ g. a. e
  392.       {# O1 |1 N* V0 X6 @
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 t$ b; H' c0 i% |* Q! {
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));% |- ~* Z$ }% ]* I' \7 w
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    8 k: g* g$ z% I' _
  396.       }. X5 a" T, y9 G4 b5 \. C
  397.     }
    ' ^; T6 H* l# I' K
  398.   }
    & R* ~7 R2 u4 S1 N
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ N3 I* e8 _2 U
  400.   {+ K) J) r6 |( M/ [3 s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    # N8 {2 |8 s" n
  402.     {: @0 D; ?% r' b$ E" Q
  403.       file2=(LPUPDATEFILE)(*i).second;/ q, Y- G) Y' ?4 A$ q2 w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - J& t9 Y" _) |6 b
  405.       {
    ! p$ j5 ]! t- K) k8 n" o9 a
  406.         file1=(LPUPDATEFILE)(*p).second;
      v  ?" s6 @; a% b7 z" j! n
  407.         if(file1->vers!=file2->vers)7 e+ K2 g# i0 S5 ~: C2 M( ?
  408.         {
    - a* i" F. z1 b4 x1 }. s
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" m3 t, y  C  `/ ^9 s: T
  410.           c++;
    + c& m/ K6 i* c/ w5 `, [3 X. ]
  411.         }3 @. R9 C3 ^$ U6 k! _
  412.       }# V- a6 X) ^) j8 @
  413.       else8 v8 ?  W1 G! w5 m9 }3 Z4 P
  414.       {$ }; \5 x! g1 A) s( A5 V" n
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ w2 ], V$ p/ E$ Z
  416.         c++;
    7 c6 `" i: n7 c2 J0 _: ^+ \8 Y$ \
  417.       }9 G1 k( B2 m; G1 f, g% O
  418.     }
    4 p, ~3 c8 f0 W
  419.   }' z3 l2 e5 h% K- N0 g
  420.   unlink(".\\DownLoad\\update.txt");
    . G( g) {$ y  Y- ~' A# @2 ?, @9 H- t
  421.   if(UpdateLocal.size()) return TRUE;9 N8 M7 x: o8 X5 E
  422.   else                   return FALSE;
    3 b9 t6 {$ p: F
  423. }( C( _6 `/ Y$ p: `1 C1 t

  424. ' l% z6 `/ t- ]5 s- K; A( `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"& P5 n) Y# o6 F% U- H/ r
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - N; E9 L1 }- F8 r( k. u
  427. # p0 x( Q% ?$ J# c/ p% C

  428. % t, t7 g5 e' ^, K

  429. - b* K! O' X6 g+ F/ {3 B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; M% Q0 ]; Z. I
  431. {
    8 V$ Y- O* G( a  `2 v4 z/ L
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;8 C2 v* r7 ?2 I6 [4 F
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 v* D& h8 U6 v: [7 N5 e' e8 |
  434.   {: M9 T9 Y& H$ ]" Q4 t8 E' S
  435.     char szLanguage[50];" h& ~0 ?! x% \# \8 i
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" e+ Z- N/ {! S0 x# I6 V+ O
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: p( g5 F& ^; \) h# L, v
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; e. s. v. Y/ v/ [3 X* D+ x3 f+ T
  439.     else                                   m_iLanguage=ENGLISH;& P2 B. A0 U3 r2 a3 c0 o' z! L
  440.     char szRegister[100];* V. ?, ^& }  f; {. U! Q6 k
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    0 G. y5 t) T( c5 V  Z* F0 m
  442.     strRegsName=szRegister;& Q3 I! t2 X3 X% @. s( y, S
  443.     char szPatchURL[100];
    1 i* h6 {6 \5 J( ~  v7 H6 D
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) e+ B4 g7 }" x! U# ?- X
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' b  U( o9 ]2 w, S# Y- |# W% ?6 N; j
  446.   }
    $ f. J6 {: {" P# w
  447.   else& Z5 @+ G6 [% Q* ]& r/ M
  448.   {
    + R' Y" w- ?% z/ D
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);' Z4 I* T' K$ P
  450.     strRegsName=DEFAULT_REG_URL;, Y! v% Q7 O6 Q2 K8 p) \& K0 |
  451.   }
    7 {/ x; r* U# F% s0 E* W
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    / ]: @& t; o- t2 R' E5 F
  453.   {9 a! v) E4 c. O+ f
  454.     char szIP[50];, x7 p3 Z* H2 p* k0 R3 p
  455.     char szDIR[300];3 @/ l, \1 [& v" Z$ F; |$ y6 f
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))# }5 L  F/ S7 \# C7 e, Z  ~
  457.     {
    ! }  l% D  F1 v* z# R1 }
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    2 t+ X& i4 C. Z# z) I1 L4 [# ~! r
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    % r8 d/ X/ P, `9 I
  460.       strHostName=szIP;' h, t! c2 u9 y* ?5 q4 K
  461.       strHostPath.Format("/%s",szDIR);
    3 P( b/ Q2 K* s, W$ d
  462.     }
    1 c4 j. U5 [4 f9 ]: G
  463.     else
    . f5 T0 l# f# y4 j* S# C- \; Z
  464.     {# U$ O0 I, K  a7 j- z. ~
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( m" Z% p% |" B; U
  466.       {
    ( X) u0 l% C3 m3 {/ h# p' q# {' H
  467.         char szLanguage[50];; X% n# b" B5 \$ `
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ) Y7 b: w( T* {9 k% p( H, t
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' `- d! d! H4 b: e
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 H: y# z, [( v8 v" v
  471.         else                                   m_iLanguage=ENGLISH;
    6 U; [" R! Z6 P0 S! U* b* J8 Y+ c" \& z! G
  472.         char szRegister[100];0 f* f4 t; T( ^+ u: l
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 \) T2 x- P2 I
  474.         strRegsName=szRegister;
    4 Z1 e7 s8 i9 C; s8 `
  475.         char szPatchURL[100];
    3 C0 I. U7 {$ G( ~3 [
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ; _# G. O) T2 \+ z2 H8 g
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( u- I( i- F) _( k/ X+ I
  478.       }  ~3 I1 n" U- s( O  ~3 L
  479.       else
    2 `% \$ N# `! S5 n& \
  480.       {
    ( ]. Y4 W- I/ z& V8 k
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # g, [# [( T0 S0 q: _9 U4 A
  482.         strRegsName=DEFAULT_REG_URL;7 r  G$ W  Q1 y) v5 B
  483.       }
    - e7 [- `. M% o- c
  484.     }
    0 Y8 g  J( m# L+ k5 W
  485.   }8 V, X$ B6 c% H
  486.   return true;
    ) M/ k/ U% ^5 p# c; ^9 e' M
  487. }
    % x4 j. R! Z1 m

  488. + F) e: Q9 M4 l
  489. #include ".\ZLib\unzip.h"
    " q0 v; U4 t1 q: C! [! d
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);1 _9 Y; b% p# g( v0 U
  491. /////////////////////////////////////////////////////////////////////////////6 v# [2 E1 ^$ w# N; D
  492. // CRevAppApp initialization
    * A; L7 n' g/ [4 P: E9 N
  493. ) _, x) d2 q  d, J) _3 G
  494. BOOL CRevAppApp::InitInstance()  v, S5 ?# C5 W+ y" T4 z- o( ]
  495. {
      Y: p- Z( V4 A1 z; e
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& p- ]& L& e- N- M  g
  497. % ~- y, p# {0 F( C+ K0 A! m1 q
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' U4 O4 w, w! c+ U6 g- z: G
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . K! ?0 c  f* {$ t: f* E
  500.   {
    4 m6 T  B; a9 F$ ~, t5 \: P) W8 Q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    : Z# A. S% y- o5 G
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    8 n: a! z1 @! I( L
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 g0 N2 L" P6 ~; f. W( h* ]
  504.     {  B1 J' C9 T) t/ L
  505.       strcpy(szPath,szPathTarget);
    + I3 P: L& n) V2 j% F( }
  506.       SetCurrentDirectory(szPath);8 }0 @0 d# o* s6 l& D1 v$ b
  507.     }; \4 l5 A' v7 i& R/ Z4 d
  508.   }) b: `, ~  L- ~' J" m  Q
  509. #ifdef _DEBUG
    4 n* U5 j  d2 E- ]
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . |2 F+ c* {; @
  511. #else
    7 g2 c8 G! l' Y; y2 A. ?
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 w% `+ t  S* \. u, g- y$ L
  513. #endif) n) b: n! z1 v% t3 A  X( B
  514.   {
    1 z& h/ J  o/ R, _& v3 z9 A
  515.     char tempFileName[MAX_PATH];2 e: W. s  h( Z* Y
  516.     strcpy(tempFileName,szPathSource);
    ( c' b' \# L4 r5 o: E- G& Y
  517.     tempFileName[strlen(szPathSource)-12]=0;
    6 P# [' G/ c2 o  A% u- p) S0 ^% k
  518.     strcat(tempFileName,"\\$CSUpdate.exe");) _; M) u8 h% [' ?* ^" L( Y! P9 R
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ( `/ {, p; ~0 ]; `+ M% v+ M
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);3 F1 S4 L* ^. K- l" ]
  521.     return TRUE;2 L$ l. e) z" `2 j: ?& n  u
  522.   }
    ( U2 c2 O% D7 k4 a" S
  523.   // Nuke 0118: Delete run.exe
    7 G9 a9 h6 i2 r/ `& b: P3 e0 ^' g
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );: [" S6 S, e. M6 M3 e
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");$ U! Z; _% T) @3 R
  526.   if(!ReadCfgFile("Config.ini")); n# D: `, z2 ~/ j. Y, p8 w5 [
  527.   {
    , Q" A7 K. `6 R+ H0 G3 K% ?
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ! h% T, v5 K2 e! f3 c8 x. N
  529.     return TRUE;: A$ v) B3 L- f/ W8 v; S* D
  530.   }
    , D0 F4 \' m  E) g3 |
  531.   HANDLE mutex;/ O: T5 D! w7 [% V- ]" _
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 y5 u+ t$ b+ Z
  533.   {
    # h8 i3 H1 Q; ]' p3 d8 w
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)- |5 G* f9 X5 E2 q
  535.     {
    * V% N3 Y( M# s2 g* \+ D3 z
  536.       CloseHandle(mutex);" |4 x8 x6 U2 f: O6 q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    2 f0 G- g6 b) c" a) M& O9 ^7 J2 [
  538.       return TRUE;
    * a1 {* @5 j$ T- a/ |
  539.     }. J+ v, l: s7 B6 p' N8 }
  540.   }  + j9 ~6 [. Y. t
  541.   CloseHandle(mutex);; o1 E) i) }7 Y' \' p

  542. 4 \) a4 w6 q9 B& C6 Y: M, g
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);2 C: m) t( D$ }* `

  544. 4 R) R/ o  X$ V; S5 a
  545.         AfxEnableControlContainer();6 V8 X" J) a$ `1 Q% @

  546. 5 S2 r# V- C; |
  547.   bCanUpdate=FALSE;6 g* S( D: q; u. x+ }9 \; k
  548.   dwStartUpSteps=1;: T7 T7 ^2 Q( A+ H
  549.   dwProgramState=AP_NOTHING;
    & l; e0 {$ w- N  ~
  550. # k5 H9 A/ q8 @3 w
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    9 Z6 Z9 U* }2 G; E

  552.   z4 e1 i) v/ ]: L
  553.         // Standard initialization& Q' w' @+ B6 w+ a
  554.         // If you are not using these features and wish to reduce the size
    6 G2 x- _/ Y! C9 R
  555.         //  of your final executable, you should remove from the following9 A6 T8 L# e4 q) r
  556.         //  the specific initialization routines you do not need.3 N& g, L' T" T5 r

  557. 4 h+ s5 ]$ a! h9 y. p: `
  558. #ifdef _AFXDLL# D1 I* B' L, ?
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' ?' i3 a! {$ P$ ^0 I5 J- E9 b
  560. #else5 t0 b3 N+ A3 t2 g
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically3 S' B% ]* c" Z) l  b8 b( d
  562. #endif1 U: N! O/ d: j" K. s
  563. 0 P" f# g( l% t8 D# z* B9 \% m
  564.   dlg=new CRevAppDlg;
    ' m- Z9 A7 |, [3 R% D3 B; Z- S( T
  565.   dlg->Create(IDD_REVAPP_DIALOG);# O* I  p1 g- o4 _; P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);# X  F% X" u/ T+ h# ?
  567.   m_pMainWnd=dlg;
    ! n2 J& R! ^( D& _

  568. : T( Q6 n2 f% F
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);% I* q& {7 v9 u# M
  570. - U' k' Q  x# Y# b
  571. //  GdiplusStartupInput gdiplusStartupInput;
    . l: }! f) ^5 G2 }0 ]
  572. //  ULONG_PTR gdiplusToken;5 V, W" X/ T$ p6 L# y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    - I* ?4 T; r5 }# Q, t) o. W

  574. + n' A9 W( ~+ |) g
  575. //        CRevAppDlg dlg;  v2 o) \  o$ X- O
  576. //        int nResponse = dlg.DoModal();
    - H& a5 z, t/ ]: b. w3 D) o
  577. //        if (nResponse == IDOK)7 ^" p0 Z) r" i+ J5 p
  578. //        {9 d/ S6 Z9 o+ ^$ K
  579. //                // TODO: Place code here to handle when the dialog is- ^' u) L; w; N
  580. //                //  dismissed with OK
      g; i7 [1 r. c. c: P! i
  581. //        }% g9 W  R, R* ~4 s- ]
  582. //        else if (nResponse == IDCANCEL)
    9 ~; E. O- D% F
  583. //        {9 R0 g% j  e* T1 _
  584. //                // TODO: Place code here to handle when the dialog is
    ' Y0 q" C) [3 E2 g
  585. //                //  dismissed with Cancel. x& [8 B5 s3 n: m9 V
  586. //        }. z5 h5 x; J) b5 c

  587. 6 s' S1 Q- {, {, \) ^+ L
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    4 f8 B9 x' d& s: I9 @, ^+ s
  589.         //  application, rather than start the application's message pump.. Q# `& R* V. U2 X" K& [
  590.         return TRUE;
    & d! @/ j& H! E3 t6 s  a8 {
  591. }$ [) |( S+ y! U

  592. ' {% x- ]& ~5 ]
  593. char *CRevAppApp::strtok3(char *pSource,char *token)5 U1 X% f, i. H9 m# P
  594. {
    ( F1 V$ u7 D  p. D2 g' E1 t
  595.   int i;
    # N+ j( l' H- F; u
  596.   char *szRet;* T  V9 T! G+ @9 b

  597. $ l, Q, o" y1 ], J
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    0 B) @0 K* G) x6 i" p( y# g3 V, d
  599.   if(sztoken)
    ) x0 ~  M4 w* k; X. ~  I0 h
  600.   {
    ) f* x( V9 d& c& x. ^9 w
  601.     szRet=&sztoken[itoken];
    ; J" f0 }2 G$ f
  602.     while(sztoken[itoken])
    : J: t$ N$ [1 O" }+ X1 Z+ K
  603.     {  {, W% _' t/ Z! T1 r9 e
  604.       for(i=0;i<(int)strlen(token);i++)
    , w( M$ F- f" o3 g  d- u5 a( ^
  605.       {8 _" `' `9 R( Q) W$ d  `) n
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])* B# d, `: u' I$ u0 M2 `; F
  607.         {0 B* `6 \" Y  k2 \
  608.           sztoken[itoken++]=0;, d5 H, p9 B. a' K. z1 Y
  609.           sztoken[itoken++]=0;
    ! n3 Z) R6 F1 ^0 J' r% Y
  610.           return szRet;: U% ]. D4 L* O. p+ t$ V
  611.         }1 z/ d) k; m9 a5 s
  612.       }
    ( o3 |8 n0 a- O. {/ I4 ^. d
  613.       itoken++;
    0 @& J' ]6 H2 R
  614.     }
    1 f/ _1 @4 f' D' U; [- ~
  615.   }1 I( i/ X9 G; |& i7 N9 G
  616.   return NULL;
    0 @4 f) \4 B6 d. o  W% ~4 ^7 K
  617. }; G% e5 G3 y; Y, Q: o
  618. 5 h9 Z: T  ]* H" X6 l1 j) {5 F
  619. void ProcessProc(long Total,long Current)
    1 I( V1 S1 P  u/ e
  620. {6 J3 c& W8 z; G9 R+ b2 J3 r. M
  621.         MSG msg;9 H" m0 _/ n% _% E7 D6 L& s  W
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);& H0 j+ [$ w+ _, `7 k7 l* x0 z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));( \6 J7 [: o1 x- ^/ L
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + t4 L1 q- t( r- T1 d
  625.         {0 A/ |/ x6 [' C' w% ^
  626.                 if(!GetMessage(&msg,NULL,0,0))& X$ W1 Y& n: V3 Z% H
  627.                 {
    3 a) i+ t; j6 W* d  }! A. s' f
  628.                         return;
    7 r+ T' J: z( G$ o  s
  629.                 }
    : a8 W, O4 Q. i3 f) [% g
  630.                 TranslateMessage(&msg);: L/ V+ I, A, x' w8 S, w: M7 p. {1 `
  631.                 DispatchMessage(&msg);5 E( X: N, H. u8 Z% \5 P1 c2 U
  632.         }        ! J& D$ A! R) B. ?! k
  633. }# q! Y& z2 B* x; s% |4 o. r  F0 v
  634. " V8 E! Z+ s9 A9 H+ o
  635. BOOL bFirstChar=TRUE;
    7 }! k* _. G& T9 Y9 ~% Y' {

  636. 3 @: X1 d9 l% Z" B9 d$ A- _
  637. BOOL CRevAppApp::OnIdle(LONG lCount)1 R. H$ v0 @* m7 A
  638. {
    ' l4 b" m7 i7 c  U9 I
  639.         // TODO: Add your specialized code here and/or call the base class
    0 W# `3 ]6 y6 a* E# Y& j
  640.   switch(dwProgramState)0 A) E) Z5 m( c6 H. H5 g2 U
  641.   {
    , p1 r- L6 l( x- y: O  |
  642.   case AP_NOTHING:- m$ ~6 o- N4 f  K/ |
  643.     switch(dwStartUpSteps)! K& Y# C& {# Y! t4 L" u
  644.     {
    , r* C  _0 F9 _" {# @! b
  645.     case 1:* Q# p( I+ `/ F4 k$ c) u
  646.       {7 o7 ]+ F8 v  \( @9 y) z+ g
  647.         int i;
    ; Y8 L+ Y3 X4 N" M1 j% u
  648.         CDC *pCDC=dlg->GetDC();) ^  g1 v& t' A
  649.         HDC hdcwnd=pCDC->m_hDC;
    * f, \) a0 q" n! D2 S
  650. //        Graphics graphics(hdcwnd);% _" Q9 ^; c: j% k6 j. K
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");8 W' D, x+ t  D6 C" n* [" [: M+ E
  652. //        INT iWidth=bitmap.GetWidth();$ e! s4 T* _  K/ ]0 C: p6 ]: v
  653. //        INT iHeight=bitmap.GetHeight();
    / b0 T' _- `/ W' [# |# P& z5 z
  654. //        Color color,colorTemp;* g& V' \% a( B# ~' H$ C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ! k" b; \; }0 B3 k. o6 P- a
  656. //        {
    ) Z  }! I6 S+ D: z0 a
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ' ]7 T% D. Y2 B- s
  658. //          {' \* @4 I+ t8 v! P! o8 E/ G
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    7 [: g  s0 I1 o6 U; I
  660. //            colorTemp.SetValue(color.MakeARGB(
    + o9 F+ f+ s4 w$ K9 Y
  661. //              (BYTE)(255*iColumn/iWidth),
    % u: l. A7 z7 J0 m
  662. //              color.GetRed(),
    9 {7 [/ A: n) l- K
  663. //              color.GetGreen(),* y% F$ y/ B0 x% e5 {# l
  664. //              color.GetBlue()));
    . O- X9 n# q- A5 u) k) m) k
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    . q. S1 Z: P4 n1 v. N
  666. //          }+ a/ D3 n0 x" S. }
  667. //        }" j8 ~/ S7 ?# m5 s9 p8 }$ T$ [! X5 E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);, a# m! ~# u, i0 H
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 I/ r6 N+ F( u# V4 N) p
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");- z( {2 `5 _; Q9 R& M& f8 i
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - T: r9 u: u0 d$ a  G$ J
  672.         for(i=0;i<240;i+=8)7 |9 V2 p( y+ K9 c( t3 s
  673.         {
    8 S3 M" ?, ?- F9 g
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);3 o* \. z% o  Q! n5 J
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # s3 W1 A' r4 y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; |; }* p4 J4 E
  677.           Sleep(33);
    ; P0 U; i$ M% E
  678.         }( J8 i. `5 ]% g5 u% v* s  v" k1 Y
  679.         Sleep(1000);' c1 G' `. G8 h5 H
  680.         for(i=240;i>0;i-=8)
    ; B$ K7 \8 Q# N+ l5 d* K- z
  681.         {
    ; v: ]: C. l1 u6 Q$ F& p% q/ s
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! `5 @5 H; w: n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( T5 C9 x* F! D' N
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);9 `( F' t; \7 u
  685.           Sleep(33);
    , B( r2 S6 S. Z+ u- `1 }; v
  686.         }$ Y( Y6 @& R/ I# n) o2 r4 u
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    - s# U; r- k' r3 B- n: e
  688.         dlg->ReleaseDC(pCDC);+ E8 _8 {7 d9 y
  689.         DeleteDC(hdctar);7 g4 B4 r( ~/ n0 w- v5 W
  690.         DeleteDC(hdcsrc);
    8 ?: l$ ]# N" F) ~
  691.         DeleteDC(hdcorg);- `( {0 z4 Z5 U0 n2 C" E7 [/ E
  692.       }
    / P: D9 o  O% Q! b9 {" c
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    " L! p  e) y7 b# C
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ' F  ]: A+ \) @# T5 R
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    # p# }; Q! [0 N3 X7 }. e2 A
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    $ G; V2 F( L, L& F" Z+ D2 m
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 C  i& _, N( Y
  698.       if(!Dn.Connected())( ~6 U. D( U; N! a1 b1 F- O' W
  699.       {
    6 v( \# m- e: y4 d- L& [
  700.         dwTotalFiles=1;
    - V5 R$ a9 }6 r5 w3 o! m7 S0 v/ I
  701.         dwDownLoaded=0;
    7 {# v0 Z7 y# Y
  702.         bSilentStep=TRUE;# w' A5 f0 L6 u2 F9 ]: K# V1 Y9 a
  703.         bCompressed=FALSE;
    1 J# a6 {0 w1 r' M- n# ]
  704.         strExtLocal.Empty();9 |' h' L9 j; k2 e# h- K
  705.         strFullName="readme.txt";7 K, J- `0 S1 X+ G6 H9 f
  706.         dwProgramState=AP_CONNECT;
    & n; ~' r1 j! p, S3 I
  707.       }% w( V3 ^7 V0 t3 z
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    / C8 N( Z5 b' M
  709.       dwStartUpSteps=2;8 x( ^% L6 J& D. |+ E2 P6 ]1 R
  710.       break;! b: D* }) \; l, Y
  711.     case 2:0 X# Y8 A/ b+ B7 e# l& f$ Y
  712.       {
    ( x5 T$ M  O- |) k& l$ D( X0 [, k
  713.         int iEOF;" H# P' j! ^+ y* A- l! ]
  714.         FILE *fp;' H9 E5 n, `# c( ~( q, X" R
  715.         char szString[512];
    ; x5 W1 |2 ?/ N) {9 V6 _
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");. c) p0 k3 t. U
  717.         if(fp)
    / C! X' M: x( s! {( q+ U
  718.         {
    ' ]5 X) d: ], B# b, @. Y% w
  719.           do
    * O4 A6 j; e; w  H4 Z% p, }  M& @
  720.           {
    ' `& K. ~- V, I  Z* O9 T( a& O
  721.             iEOF=fscanf(fp,"%s",szString);" x7 r& v1 {& X" I- Z3 f  J
  722.             if(strlen(szString))
    ' o* Q  ^6 u# C: D
  723.             {$ {6 H1 R3 J! U/ I& s% O. o
  724.               if(bFirstChar)
    / ^: C7 C' r2 U+ T, B4 Q, A
  725.               {/ w( p0 I$ }- A& U# L# \- E
  726.                 bFirstChar=FALSE;
    : s  |* w" [- M: ^9 k& S
  727.                 bConnectIsBig5=FALSE;1 y% z9 y& `% a7 O
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    8 t: r. P8 F+ K6 N# l8 F: {
  729.               }
    " _/ A! O/ c$ @) [
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . l5 a2 X/ [+ e4 n3 J
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));6 e5 B! b$ J, ?( A& w6 ]4 U+ i/ ^
  732.               dlg->m_ListText.AddString(szString);
    5 ]% d" H. v$ ], A) x: h
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ C3 T6 e! f7 X. U- z& R
  734.               *szString=0;, j. a. Z& ^3 ]/ ?/ h
  735.             }6 P7 a9 X8 L* W3 |+ C  ^
  736.           } while(iEOF!=EOF);1 i. s" E  y+ N5 K6 a; C6 I
  737.           fclose(fp);; F4 X2 x) u' m4 \" T
  738.           unlink(".\\DownLoad\\readme.txt");% v! F" G7 x7 \. d/ a/ \7 o
  739.           dwStartUpSteps=3;' `. [/ s! u5 \% E/ I/ R
  740.         }/ j) t# J0 K( p+ Q! u; c6 y+ e
  741.       }
    6 }$ P0 u5 e2 P2 M; D8 D& |" m
  742.       break;% q- ^0 c/ Y& ]4 Y( [
  743.     case 3:. v( Q5 J. w$ E
  744.       if(!Dn.Connected())0 q4 v9 f9 z& U9 ?
  745.       {5 V3 ]# I, e4 ?
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ( M6 L$ I0 L2 O6 z
  747.         dwTotalFiles=1;3 p& [. S) |# {9 W% w
  748.         dwDownLoaded=0;
    5 S/ h( X' H8 n; L: U. `3 b3 ]
  749.         bSilentStep=TRUE;
    6 D) h# e- N1 h  B# U# X: D
  750.         bCompressed=FALSE;
    : {7 D- h/ H: y( w: z" ?" o- _
  751.         strExtLocal.Empty();# w  r3 w) i  ]
  752.         strFullName="checkversion.txt";: L2 F% e. Q+ W/ R0 |
  753.         dwProgramState=AP_CONNECT;9 n& ~) i! _9 n
  754.       }
      _9 ^# C$ \, B- I- R4 c# X: F
  755.       dwStartUpSteps=4;& r8 r1 S0 X  f* w
  756.       break;. H+ t1 R* ?* t
  757.     case 4:
    9 n" l1 a$ l, j% s
  758.       {
      g$ e& K% z8 D8 s8 Y$ \& N5 }
  759.         FILE *fp;
    ' S7 a  B8 d1 {3 p/ g' k9 k' k
  760.         char szString1[128];
    & ^" _; z/ X, U2 A/ Y: [
  761.         char szString2[128];3 y+ F5 @. F# b
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ! K* Q7 y2 X6 G6 X
  763.         if(fp)5 L2 C! J5 w0 n
  764.         {
    0 E8 l8 v4 o1 g# K
  765.           fscanf(fp,"%s",szString1);
    6 a; u4 T: p& _5 u- j& q- M
  766.           fclose(fp);% i6 K# e7 g% e: ?
  767.           fCheckVersion=atof(szString1);8 U- G' @% o# D0 y; [' c/ s
  768.           fp=fopen(".\\checkversion.dat","r");2 q+ F' r) _: C& Q# @/ f
  769.           if(fp)# W. |; _( j  r6 y4 u% m
  770.           {
    + `, j4 o! g6 V5 }9 y
  771.             fscanf(fp,"%s",szString2);
    ) O5 [4 c0 q  ]/ Z4 l
  772.             fclose(fp);
    0 t- F& u+ t3 A$ X7 N- r$ ~4 ?2 H
  773.             if(atof(szString1)!=atof(szString2))8 W% b8 z  H: `1 [& b+ E1 P! p
  774.             {
    8 n' P1 L. d: m# f: K. f4 s& Y
  775.               if(!Dn.Connected())
    2 x$ [' [3 v) d$ f* ?( {$ ]
  776.               {
    0 m& f$ ^8 ~# s" w- v8 n! l
  777.                 bFirstUpdate=TRUE;
    1 f# ]# O" b  n
  778.                 dwTotalFiles=1;
    . N9 q& I- [( b: J. d- n- Z
  779.                 dwDownLoaded=0;
      g  k9 `. D# R# `$ _! V
  780.                 bSilentStep=FALSE;
    % f: r+ ]# B& L) ?9 s' @
  781.                 bCompressed=TRUE;
    4 H  c( v0 Z' C
  782.                 strExtLocal=".\\DownLoad\";
    2 t8 ?7 T' S6 @; M1 ^
  783.                 strFullName="update.txt";
    - l* Q7 \7 D+ M, B4 L0 q* _
  784.                 dwProgramState=AP_CONNECT;) u; Q4 ?+ j. W5 k9 y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 }( z' H, c$ v$ E
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 {6 H" z/ y2 r" W- }6 {
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- R& d2 Z% v5 r+ Y* [
  788. # [* R1 R( x* |' t2 Q7 u% C
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' m8 L9 c$ a( w, f7 G, r
  790.                 unlink(".\\DownLoad\\checkversion.txt");2 u! n4 H; V$ P, ^, O
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    5 Z6 f; `! x  b; g
  792.                 {4 h8 i1 T* y/ I: L
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");6 [8 p1 h& j& f4 ^% j
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 s4 G" ?, O" S2 M/ O
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");. b$ ~: h) }, A) j) E/ S
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - s0 T. n9 _4 J: ]

  797. * U$ N9 e: a, e9 P8 w7 `, t8 {
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ B8 p5 _9 x; X) C5 ?- ^! N
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; q$ B8 q- Q4 W
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    % _( r6 l( K) [* S9 H, H- H
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 S% P! [0 X5 _" N
  802.                 }' P/ x' ~4 L! q7 r" c- _9 w
  803.                 dwStartUpSteps=5;
    0 _  `( n/ q7 R7 z
  804.               }; S7 B) a3 h9 `+ e$ I) g
  805.             }/ }# |. f* l! d: P& g6 n  w
  806.             else
    0 Y# J9 P$ u( X) m* s! L0 g3 N
  807.             {  S4 Q9 l: E+ H
  808.               unlink(".\\DownLoad\\checkversion.txt");
    , P- m2 [$ L- H
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    6 q% f. [+ x/ \
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    6 c! ]& V1 ]5 M# i; t
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ! d  @6 v6 [/ Y3 k+ x

  812. + w9 c) c8 F: f$ ~
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% ?1 t6 T! T9 I! N$ Y( x
  814.               dwStartUpSteps=99;- J: a* X8 E7 V$ r9 `! h  s
  815.               bFinishUpdated=TRUE;
    / o7 d% ~- ]2 [
  816.               bCanUpdate=TRUE;. w$ ^5 H6 b2 u; t7 \. g  e
  817.             }
    ) k# z4 f+ {, r
  818.           }0 ~: @4 @* R2 P* Z; Q2 D4 R" @0 e0 Q
  819.           else1 \% h3 i( \# h6 s
  820.           {$ f$ X: U- o- `8 \  s
  821.             if(!Dn.Connected())
    ' J( J" k) c6 _2 @
  822.             {4 X& F" `  @4 p5 i
  823.               bFirstUpdate=TRUE;" ]  A8 M* z" ?% F/ p
  824.               dwTotalFiles=1;, T/ A' k3 s1 Q, F8 J
  825.               dwDownLoaded=0;
    # ~% A2 O7 q, a" g/ H
  826.               bSilentStep=FALSE;" g+ }$ H# F2 |8 M) h& k! `+ e
  827.               bCompressed=TRUE;3 q2 g* F3 K+ p9 m  ~
  828.               strExtLocal=".\\DownLoad\";- {4 g5 ?' p0 p* t
  829.               strFullName="update.txt";  v* }0 L& q( ^# a% w4 q
  830.               dwProgramState=AP_CONNECT;
    ! V/ |& u4 l4 w2 c' _% y6 `
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");( W/ G) U! ^7 s" O! G+ O" h. z
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, [# P3 A9 q8 ^! L" ]* `, k' v# [
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");# Y  v2 ^8 l* v1 e4 t
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 X& ]# [# n5 i1 V; F; d! e
  835.               unlink(".\\DownLoad\\checkversion.txt");
    1 j. }3 {: Q, d8 _- j
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)1 `* s; y: w. O0 N) ~
  837.               {, T1 j5 K6 Q6 y  ^! _, [& P+ `
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");) X/ u/ X2 l6 A0 @2 a+ s/ R
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    8 A0 a. c' |8 C8 T7 K3 K4 f
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");! g/ k1 Y$ W( x3 N$ ^! x
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 W3 g2 ?5 W) G( }# l3 t
  842.                 5 Z: l6 @* \" g( D
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 I$ e4 w$ d: [6 G4 U
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 a% [  Z* E+ d0 L
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    " Z, v& y2 u. z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* O6 _* z, d# r3 m( q# v; s
  847.               }
    1 P8 D: F7 L, _$ @, ^1 H  m2 K
  848.               dwStartUpSteps=5;
    ; V# l+ s: |- T" Z0 N. W
  849.             }
    6 ]) m# X* f+ n$ m  K5 S
  850.           }7 T6 f4 H9 n2 x; C* z3 p1 j7 i
  851.         }+ `7 s1 R# V' g1 K" ]
  852.         else8 Z8 ]; s5 \0 d/ k4 y
  853.         {4 W6 i8 t  p% T8 U0 U% T/ d, F
  854.           dwStartUpSteps=3;. _+ {/ [0 Y; _8 j6 E7 a/ v4 X8 r
  855.         }
      x/ r$ ^0 e# {4 H8 r
  856.       }
    8 W6 {- P( d3 W: F) |$ D
  857.       break;
    , w! v) I6 E+ i$ ~9 d/ A  n
  858.     case 5:$ Q7 ?9 p$ Z. n
  859.       {* g7 c# g1 h1 F7 K& Q6 ?; j) v
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)$ D) Q6 b, f9 ?! e, B, ]% X
  861.         {
    4 e# e& [  }8 d" P! X- u
  862.           int opt_overwrite=1;9 I. N+ A! A4 @8 t6 I; l! ?
  863.           int opt_do_extract_withoutpath=0;8 l5 d: N6 [' J8 i" X0 q# X
  864.           unzFile uf=NULL;
    ' W, m4 J. z# R6 K, j7 E

  865. , y3 o& h# J( t, J# ~$ L6 ]
  866.           uf=unzOpen("Wsa.zip");
    9 D9 T& P& U) U% @; E7 H1 _+ j- T( s
  867.           if(uf)( i% ]- `% a6 W" `- k7 b" t- k. {) [
  868.           {
    " _0 h  n, B# B1 d( U% |
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    5 B9 r7 ?8 c2 I" i7 K4 j: D  I
  870.             unzClose(uf);
    # u2 R# M6 E6 L! |$ x1 K, E( W
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    . I! D" A  W9 ?
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");9 R' i/ D) v( r0 Q' l% u
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");: I0 L( H6 ~  o8 d) r
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. ~. `8 S. x5 l; E
  875.           }9 z; e+ d$ c, G+ s! b
  876.           DeleteFile("Wsa.zip" );, c& P# v* D! i
  877.         }* M( D5 U7 y; d# x, ?

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

) {4 `+ N1 m" W1 v  m# `  I, l

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-9 23:55

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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