找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
- l) I4 z& W2 T; X
  1. / RevApp.cpp : Defines the class behaviors for the application.  ]! G: J( g% K' G
  2. //
    : K+ j8 N/ L* N# u7 D

  3. ( S; F0 ]3 W( W/ G
  4. #include "stdafx.h"5 A/ ]7 m8 H! `& `( F
  5. + l1 B& O4 Y. o* |5 O
  6. //#define UNICODE
    7 f: p5 \, y) }, e
  7. //#include <gdiplus.h>
    " e( @7 T2 @0 z. G& A
  8. //using namespace Gdiplus;/ e" Z* n! B. R* S5 \
  9. " g( G+ c% w1 A" l$ k
  10. #include "RevApp.h"
    9 l  B  b. a3 @# p
  11. #include "RevAppDlg.h"
    ( O& N1 `4 ?* V+ {$ ^

  12. 1 J8 ~, Y& B# K( V
  13. #pragma warning(disable:4786)1 D1 H8 O$ \- h* u7 H, O1 S- ~! }
  14. #include <map>: F# w7 h  S' d) y; j: X2 ]
  15. #include <list>
    + b. S) d& |, f. i; i( |( e1 e
  16. #include <direct.h>
    % `$ C$ Z$ {! B% _# G

  17. 2 X4 W2 e; z* M/ w+ `
  18. #ifdef _DEBUG
    $ ]2 P2 q! D; O/ m% f# f2 b
  19. #define new DEBUG_NEW
    ; w; \9 P+ S# m$ h7 d
  20. #undef THIS_FILE/ ~( O- q* `$ X- H" ?
  21. static char THIS_FILE[] = __FILE__;( F$ R9 k, H5 e& o' E" t9 O
  22. #endif6 j8 X1 I1 C* p, \: U, }: Y
  23. #include "SkinResDef.h"2 T7 Z  }- L* S, D, w
  24. #include "ChangeBG.h"
    ) @4 d$ s1 [% u
  25. #include "AFXINET.H"
    1 Y5 N5 f/ w* b2 Y* {
  26. ( T3 v# E( }) j5 {* S+ I1 @1 t- v
  27. #define TRADITIONAL_CHINESE 0. J- {+ S8 E+ u
  28. #define SIMPLIFY_CHINESE 1
    0 }4 G+ z) C4 }, H7 i  @7 v
  29. #define ENGLISH 27 W" t4 z8 V: ^1 _) a* p
  30. int m_iLanguage = ENGLISH;/ Y( ]3 y9 G* X( @
  31. /////////////////////////////////////////////////////////////////////////////
    * o+ ?/ n% V$ N8 b
  32. // CRevAppApp
    1 G9 x+ G' g% P& z" a- O9 P

  33. " a! L9 H) }1 Q* A
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    1 H0 v+ _4 N3 J6 S
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    + `+ D3 |: L3 ]6 R' O
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.) |3 n% U$ Z) F/ g
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!! {( k' v5 W# M
  38.         //}}AFX_MSG
    " o% C! x: c( V' {6 t& I& c& x4 v: ~
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)5 ?! d( v# m* J$ e: Q$ b
  40. END_MESSAGE_MAP()+ v, t. i) g& e, `/ F: j( i" C5 S4 C
  41. + Y) X- m# I  X3 b! w
  42. /////////////////////////////////////////////////////////////////////////////
    7 W5 J, T: \6 p
  43. // CRevAppApp construction' ~( K- E* d4 r6 [4 c
  44. / D* c0 I: I- h9 P7 W
  45. CRevAppApp::CRevAppApp()% V+ `+ j2 J, I
  46. {
    2 U/ ~" m6 h2 V7 Q/ H
  47.         // TODO: add construction code here,$ I- U5 S8 L6 d/ P7 [9 n: g
  48.         // Place all significant initialization in InitInstance4 _5 p8 Q5 |6 v  p; u4 `% H9 k2 P/ T
  49.   bDisplayIsBig5=FALSE;4 ^: @3 P( L1 B9 j; \0 U
  50.   bRestartUpdater=FALSE;
    / b" i( U9 M; p- x) r9 i+ E2 d. _
  51.   bFinishUpdated=FALSE;
    & I; k, M; X4 i: `: o1 _
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;! R" ]- K2 x& V6 j6 \% C% H0 N3 Z
  53.   InitChangeDataBig52GBKS();8 ^: s/ _( |' ^2 \& n- {
  54.   InitChangeDataGBKS2Big5();
    2 w% F: m, K9 a$ u
  55.         //
    / d2 t# s4 b, G! ?9 ^2 ?# t
  56.         bClickRunExe = FALSE;7 |% k5 z6 F' m$ j5 H$ A" ?
  57.         //8 R0 _/ _/ q5 s1 `# K0 Q6 a$ q
  58. }
      k9 O% _8 h, }6 h5 |

  59. 5 v, w; b  [1 m# }
  60. CRevAppApp::~CRevAppApp()% U1 d# O7 s% p0 k  J  Y  ^6 c
  61. {
    & O$ y2 `4 J, `! K
  62.         // TODO: add construction code here,
    3 {7 u4 I/ r: {6 M0 K
  63.         // Place all significant initialization in InitInstance
    , U6 ^" J; _% u! J! p5 s0 |
  64.   EndChangeData();$ G- }/ x7 P7 Y- z: [' u: _
  65. }
    1 z: s% }5 C5 @. @5 [
  66. 1 y) E& \' p8 U% E- m
  67. /////////////////////////////////////////////////////////////////////////////# u' M: D, g8 W( ?: f1 ^
  68. // The one and only CRevAppApp object
    : Q8 q$ t. Q7 g, a" A5 y$ M' U

  69. ' w3 `$ e9 c5 O/ H  M+ A
  70. CRevAppApp theApp;/ H# R" f4 a( r2 v7 Y0 i

  71. + P# s' Z( T' Y+ ]( ~
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : }. S( K3 H6 V5 g
  73. {
    , f( t4 C, K$ f: {# s2 o
  74.   int iEOF=0;1 {" ?# H1 Z1 B- A( _+ _
  75.   char szTempName[MAX_PATH];! W  {7 E+ q7 f
  76.   *szFileName=0;
      S7 L. v: v; L2 e2 f0 l" V. Y
  77.   iEOF=fscanf(fp,"%s",szTempName);, v. t/ s+ Q/ ~6 |
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    6 U$ Z+ ]# J1 Y+ D% K, X
  79.   {  U, l% T$ a5 p
  80.     strcpy(szFileName,&szTempName[1]);
    - Y7 X! B& q* y8 g" y7 u6 A
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)9 A: K+ t+ q. m& j4 J3 z/ C
  82.     {
    3 K: K" Q- O. @! C
  83.       iEOF=fscanf(fp,"%s",szTempName);
    % Y* p& I/ k  R- d/ y! W" ^
  84.       strcat(szFileName," ");( z( ~7 n  I9 u  T+ O
  85.       strcat(szFileName,szTempName);% K& r& ?, }6 t/ R5 b
  86.     }$ ^; N6 J7 O* c$ _! \( g4 Y. |- S
  87.     if(strlen(szFileName)>=1)5 y- e9 j+ `0 o  @( ^8 a
  88.     {
    # d9 I/ J9 I: |$ s; b7 o0 Q
  89.       szFileName[strlen(szFileName)-1]=0;* p5 M! h2 G0 h, c' q
  90.     }* ~: ^( Y4 e$ i
  91.   }
    - J& B! o. K; j
  92.   return szFileName;& {9 \% c0 h" a) h7 U; y0 U- \; I6 @
  93. }
    & _6 T, U8 s. M& g

  94. / P& E0 ?% y. w# e6 r1 x
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)! |8 p% L! X3 ]
  96. {
    ; h" W1 w, w0 c9 P
  97.   FILE *fp;
    2 X% ]& r: N( \! \. y3 i/ u8 H- M7 Z/ e- f
  98.   char *key=NULL;* x+ V% t% W% J1 ?/ l- W8 n
  99.   char version[MAX_PATH];3 J& I1 B9 D+ p6 L4 |
  100.   LPUPDATEFILE file,olds;; H4 h$ }) z: P) y, W
  101.   std::map<CString,LPUPDATEFILE>::iterator p;8 _8 _- k# P3 Y. d* W' N
  102. 8 ~: ]0 l4 t2 R$ i7 y/ @
  103.   UpdateList.clear();$ s+ p& I! D& @9 T) l
  104.   UpdateFile.clear();9 R& ~0 }* Q" |4 T, F3 @
  105.   if(GetFileAttributes(filename)==-1) return false;
    4 i+ A/ I# r! X+ ?5 j4 X9 k
  106.   if(!(fp=fopen(filename,"r"))) return false;
    / g% f7 K1 F. M& V9 [& P4 z% l
  107.   fscanf(fp,"%s",version);
    ' T* r/ G4 T" n+ _7 o1 ~
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    5 r2 b7 |( o7 L
  109.   while(fscanf(fp,"%s",version)!=EOF)7 F! `5 u4 }" |. w* O& m/ a4 y
  110.   {
    # V2 Z& v3 N( w) v& s" K
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ `- q5 A9 G( S0 t: _% \
  112.     fscanf(fp,"%s",file->path);
    8 F7 O6 E4 i3 z
  113.     ReadFileNames(fp,file->file);4 I$ C! S  h0 w5 W6 ^
  114.     strcpy(file->full,".");
    5 g& i6 q% w5 o% o( t$ L! t
  115.     strcat(file->full,file->path);+ C* v+ ^) v4 G' j
  116.     strcat(file->full,file->file);
    - y3 n$ Q% C$ _( p8 h% `
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    0 G) \6 q# A; E
  118.     {
    / t: K- y2 w* A3 K% f+ p; c4 o- w
  119.       file->vers=(float)atof(version);( x8 a2 q" d+ K
  120.       UpdateList.push_back(file->full);
    ( M5 M2 V7 s" C7 ~+ H+ L
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));( |0 ~4 w/ }7 z, v
  122.     }
    * P  T: _5 a0 S$ ^6 j' o
  123.     else- p8 _% M8 y' L6 r2 k
  124.     {5 h2 D7 R' x2 ]4 n; v, W+ s
  125.       olds=(*p).second;) U( t& ?2 z4 a$ E
  126.       if(olds->vers<(float)atof(version))
    - g5 S2 K1 ~4 a" G0 |
  127.       {
    8 A  z$ b* b$ k$ c
  128.         olds->vers=(float)atof(version);0 j* L0 w1 w8 ^9 h* I
  129.       }  E8 S* b- V) b( b; D
  130.       free(file);  ~4 x3 l! H) k$ I; i% v! [, G" E3 q# F
  131.     }
    * [6 ^* |5 n8 U4 @
  132.   }
    0 O7 u* M: |$ K* M! A( K
  133.   fclose(fp);) G, U4 x' O8 ~0 r  c1 m
  134.   return true;" t/ d( r. R. F4 `
  135. }# B2 K5 X6 _% ^( o" a' P
  136.   S" J* t$ D. t9 x' h/ @( N
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! S) h' P! |# v7 q1 R/ K
  138. {: j0 z, [& z$ v$ a; x
  139.   TCHAR  szFull[MAX_PATH];& W! ~& v% W8 R
  140.   TCHAR *token,*inter;
    6 z' `. g, }" v5 L3 y/ ^+ ]
  141.   *szPath=0;$ Q- K- Y* s7 t& A* r
  142.   strcpy(szFull,szFullPath);8 O/ f" u; E3 I/ @8 o6 \! _
  143.   token=strtok(szFull,"\\/");* ^+ s2 p0 P" A5 ^1 g( w
  144.   inter=token;
    . k, p$ \2 P# h; s$ {  V, K6 H
  145.   while(token=strtok(NULL,"\\/"))
    $ _" ^. B) V5 }, H; w& L  s2 j
  146.   {
    ( P( w# V: v# H. \0 ]* R1 _
  147.     strcat(szPath,inter);5 a$ h- [1 a# u1 v7 c$ A1 l! b
  148.     strcat(szPath,"\");, V1 K( X5 e0 _7 U' i! ]
  149.     inter=token;
    2 Z/ f2 q- p, Y0 M) w
  150.   }
    9 q, h" o# J/ X: w' I& N1 Q/ i. P
  151.   return strlen(szPath);% l" R$ m- l$ M$ z: g3 J, S5 H7 ^
  152. }3 n0 D3 z+ }5 ^+ i; ^! b$ b

  153. . O6 O& b6 N0 ~  o2 @6 e0 c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)3 X! H) \9 t8 m' K
  155. {
    , h1 {. i( E8 }# @) U
  156.   DWORD attrib=GetFileAttributes(Target);
    & @9 _* |- g3 {/ u$ a
  157.   if(attrib!=-1)4 t# M4 x. ]. i( S
  158.   {! K4 w: @2 I4 Y
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    6 Y# _  K9 O  M8 ?+ ~3 Z& p
  160.     {) f: m/ S( p2 S* I3 ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ' x$ w  V4 ~! n" @( y
  162.       SetFileAttributes(Target,attrib);% p$ ^8 R2 @  k0 H* M
  163.     }
    3 ^2 [6 [) _( r% S: r
  164.   }
    ) j5 Y0 ^9 i- a6 c0 a9 u
  165.   CopyFile(Source,Target,Erase);& `9 @: r- ?# W' ~0 V
  166. }
    9 M' E5 S* w9 e- v
  167. , A& o! r, b0 A3 v) n
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . T4 P  i( l4 {: A; Q0 e* f
  169. {
    8 I" O4 @# u: X, o! @4 [( }
  170.      FILE *fp;
    9 b* f* b* x: {
  171.      char  szBuffer[8192];
    - P- l0 @5 s- I
  172.   va_list  argptr;0 k2 {7 n: C3 e$ U

  173. $ c' w% Q8 `% A% G% @8 ?; }( h% y
  174.         va_start(argptr,message);
    8 E1 g, D/ c' P. n- S' z* X7 O7 o
  175.         vsprintf(szBuffer,message,argptr);, {. O% s# N6 E# Z: F
  176.         va_end(argptr);$ H4 g: s; k$ j5 Z
  177.   fp=fopen(FileName,"a");
    , _1 g8 T7 {! L$ s$ u$ {" A
  178.   if(fp)! O3 O$ F) t4 a) U5 b4 @5 ~
  179.   {2 {7 {0 q1 x6 A1 q
  180.     fprintf(fp,szBuffer);
      m) P% ^& ]* ^
  181.     fclose(fp);
    / {& L+ M+ t1 r
  182.           _flushall();
    9 Q9 T9 @/ a+ U" t, c
  183.   }! m, T7 N9 t# M9 c
  184. }! ~+ p5 B6 K! X- A8 d8 v. i

  185. 4 z4 s- O) M9 B1 K* G4 Y
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    * j* L: d  q( ]4 C& i% N
  187. {
    3 g( }, |4 j1 c
  188.      FILE *fp;! q: F# p; z7 @5 J  R/ ?2 `) T1 d
  189.     DWORD  attrib;
    # Z( k4 g/ ?/ }3 P. i0 X- ]2 `
  190.   attrib=GetFileAttributes(FileName);
    $ v" {8 p. S/ E8 g$ h- U
  191.   if(attrib!=-1)' ~( L& r4 H. W4 N/ K/ w. Z4 a
  192.   {
    % H! P7 }) w/ w; |& W
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);# x, g$ W( i3 u! a6 v
  194.     if(!SetFileAttributes(FileName,attrib))
    ! ]0 {4 F: q2 `
  195.     {
    ' b- X0 c( Z2 h3 K9 f
  196.       return FALSE;
    7 a6 y0 z& _- _
  197.     }' W) C' y- N6 m8 e
  198.   }
    ( D" {, d# ]% I. q  [
  199.   fp=fopen(FileName,"wb");8 v& b4 E6 z1 D  j$ L$ [$ C
  200.   if(fp)
    # l% C4 Y$ G. W; e/ |# {
  201.   {: S2 X$ {& g( i
  202.     fclose(fp);' W! @6 F1 l5 e+ H, E
  203.   }9 J8 r8 D  z  L& C/ ^
  204.   return TRUE;
    ) G6 A/ T  N$ s1 ]0 k' I6 H
  205. }
    7 d0 N+ K7 ~! n; s

  206. 4 O! }- C) |, @, {0 l
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    & N$ e- m4 J( {& |
  208. {
    , w' g! z* [$ G& G9 L0 `& y' W
  209.   char filename[MAX_PATH];! h: p8 N) Q& F
  210.   LPUPDATEFILE file,olds;0 ?9 j) M0 A$ e/ y
  211.   std::map<int,CString>::iterator i;+ Y' t  H# R6 h& @! _: }5 h
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . A' o+ r# z0 q: m
  213.   std::list<CString>::iterator l;' ~6 r, ^3 R3 d- X
  214. 2 n$ E* j" ?8 ^% g* F' j- ~0 J- k
  215.   if(bFirstUpdate)
    ! \- l' [& z3 u8 [  O7 c
  216.   {
    1 j1 E$ J. j$ [! q* ^& `
  217.     dwCurrFile=0;  w( L, \( M0 b2 ~5 T
  218.     bFirstUpdate=FALSE;# D7 W* V! T+ b4 o
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      v! v2 p) J& }8 \! N* \& n
  220.     {
    % u/ d; H& |2 ?& G) u
  221.       dwTotalFiles=UpdateLocal.size();
    " e  P4 W. ^+ i; C
  222.       dwDownLoaded=0;
    0 h& j% F. i. i
  223.       bSilentStep=FALSE;
    2 E6 c- m( J! {+ ]  U% M! o
  224.       bCompressed=TRUE;
    8 W1 S2 W0 H/ y! @
  225.       strExtLocal.Empty();# ^4 o. f- [8 ~& R  B5 G& O  h
  226.       strFullName=(*i).second;1 S3 R& H) C( p, G/ a5 p! G
  227.       dwProgramState=AP_CONNECT;
    - |9 g# J+ |' N5 @3 X" \7 J
  228.       return TRUE;+ z7 q' D' ~! u9 A
  229.     }  g: f- {6 h5 `
  230.   }
    , C0 V+ j7 u; H9 i$ x
  231.   else if(bRestartUpdater==FALSE)
    & C  }% r! }7 h6 D$ Z' `8 {
  232.   {9 o0 h4 J8 c6 X; I9 s
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    + T0 E2 z7 l+ [, V! F
  234.     {
    " w) m. k2 h: v8 l* r1 w
  235.       file=(*p).second;
    ) H( A( _& ?- q5 j
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()). T( B  O; {( }3 N; J1 L+ J
  237.       {
    9 u' R  V5 Q: Z4 `5 g2 E: \; G
  238.         olds=(*p).second;$ G1 D4 ?+ b8 ]& d
  239.         olds->vers=file->vers;
    6 |' u5 ~; t2 G1 r
  240.       }+ ?5 F! K) b% H5 |7 C
  241.       else; y+ s& n9 }/ ?# P
  242.       {
    2 w% M9 ^# O9 R$ ]5 C/ `1 `( b* {8 y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 a1 ~" t* U& D+ ^5 {
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    : O( G$ N/ c% P' n# W/ n2 E
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    5 H: @, R& Q( T$ Y; e3 N  K
  246.       }4 W  B# b( D9 P+ X% g
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    : f: x) L) V9 r& g' K
  248.       sprintf(filename,"(%s)",file->file);
    % {/ U: ?5 h% I1 S1 e
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * B" R8 F$ C' M3 g
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }) T1 @% C  L, Z/ T) ~
  251.     }
    ' N4 j/ H% d$ }6 I0 t
  252.     dwCurrFile++;. \6 F6 g9 y( b+ W( Y' n0 o
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ! v0 m2 G( J- m& E# _
  254.     {
    1 \* X7 j% J! s7 d3 M  I2 S- }
  255.       bSilentStep=FALSE;
    0 v+ l- ^) A* }4 s9 q  }
  256.       bCompressed=TRUE;
    3 O; b& O: p  N4 u: z3 y
  257.       strExtLocal.Empty();
    * ]4 N, z( @/ R) }  K
  258.       strFullName=(*i).second;
    & v5 K) E1 y3 F
  259.       dwProgramState=AP_CONNECT;/ v7 R3 W1 |/ C# U6 p/ ]9 p
  260.       return TRUE;
    , d" d: H. w& B! w# Y' j
  261.     }! b% L9 S8 }# Q5 ]; k7 a
  262.     if(!bRestartUpdater)( l' P( M) f; o0 _; {5 D5 ?
  263.     {
    6 W& i3 l+ A& c' j2 Q# r, B3 I
  264.       int iCurrSize,iFileSize;
    / g8 M2 f& e: E7 M/ q
  265.       iCurrSize=0;
    / M4 {1 j& N, w; p9 B$ a* n, V
  266.       iFileSize=UpdateList2.size();
    # y: Q& ]: ]1 p! ]8 i& i+ |
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");. T  Y3 n' |0 K( Z) V; _2 Z' I
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    : ~7 @: s  s& k4 i$ L* P! ?
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");0 `' O' Q; v' K- M* {4 K
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, U4 y( e9 V+ T4 E- E
  271.       Fclearf(".\\update.dat");
    ; b4 K1 o6 P/ ^+ I, K
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * Y  ^3 X$ G1 p! c
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ U  }6 e7 W$ Z6 v
  274.       {4 N/ e7 B2 h5 y* w1 i* F
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())2 w$ I' H- T. ?9 ]4 X6 a, X! P/ q
  276.         {7 z  e1 D. g. p7 l) H3 c
  277.           file=(*p).second;' L9 Y, z; e/ d+ B7 V
  278.           sprintf(filename,"(%s)",file->file);
    , E& D: ^$ l4 q3 Q6 M
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ q) Q) r. f1 F' m( e: V
  280.           iCurrSize++;+ L, t* G, f) F7 |8 Y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ) {$ c3 g5 a% m9 A/ ]
  282.         }7 F" L4 i/ _# h* P) O; O+ D7 D
  283.       }7 O1 {& R7 s: @( E: F$ n$ x
  284.       unlink(".\\update.txt");
    # f% F$ f1 S- q/ v5 \1 f. Z: c
  285.       unlink(".\\update.tmp");
    9 p$ }" L5 |" @3 X
  286.       Fclearf(".\\checkversion.dat");
    4 Q- y! S% G% i4 N. K$ f- d$ V
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    : J7 v- o$ _  h5 j
  288.       if(UpdateLocal.size())
    2 A& J; t6 M# Y
  289.       {
    5 w7 V- F. |# d4 e; P, V
  290.         UpdateLocal.clear();
    0 A3 a( i: A3 Z; Y8 K
  291.       }
    , y( f) X4 U2 i/ J  y8 f1 u
  292.       if(UpdateFile3.size())
    - R) J) r* P, F# Y# d
  293.       {
    3 G! t$ F4 J4 P. v9 `& F* W
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); P7 m8 {* t1 _( c. w3 K7 u
  295.         {" H0 I0 l/ X7 ]# b+ O
  296.           file=(*p).second;: Z$ t. G$ F2 g& A
  297.           free(file);# V7 @+ w6 n: i3 Z6 q! `
  298.         }
    - h9 {2 d! j  x4 f1 B8 T8 |
  299.         UpdateFile3.clear();
    ; B7 A- M; ]+ f" o" }. E
  300.         UpdateList3.clear();) i1 ?; X- d6 y$ ]/ @4 F
  301.       }) b. a, S# g, d; U' b4 ^
  302.       if(UpdateFile2.size())
    7 N8 b: F  X$ p% y+ A. i/ f
  303.       {
    . \2 `$ v& t, h
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ D( \! F1 `. N
  305.         {# p( H+ Y5 X" E9 H2 T7 {* G
  306.           file=(*p).second;! _3 n! K. {0 r" O8 d5 G: {
  307.           free(file);
    - x& o  l7 D, W: v  h2 L
  308.         }, w; h5 a* K5 T. t. G
  309.         UpdateFile2.clear();
    & h" `# ~8 x1 L4 X
  310.         UpdateList2.clear();1 f, Q" I5 V2 U) ~# I& j# J
  311.       }
    ; A) w. r, y# g0 r7 ^6 A
  312.       if(UpdateFile1.size())& M# D' X" G- I6 U
  313.       {  ~2 L$ K  {1 [. q9 J2 k5 \. V
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - R/ B! a, \9 e2 }( O" C
  315.         {5 e4 w# U; u9 A/ @" R) Z+ C( q
  316.           file=(*p).second;; d% a* D8 ]5 d3 e# T5 t
  317.           free(file);
    # }. d- k, A2 c5 ~
  318.         }
    9 X+ o/ E4 Z7 V) n9 p2 g0 `
  319.         UpdateFile1.clear();
    : R, H# E0 R5 I, f- a0 h
  320.         UpdateList1.clear();  S8 ^+ @# c6 O8 q. ?2 F, G$ d
  321.       }
      |% m) E- u3 s! p
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    # ?% y" m2 B7 W7 v
  323.     }2 G+ d  E7 s  {' C
  324.   }9 a/ g$ d/ O2 p- `" {- f- j
  325.   return FALSE;; s" _7 G: J2 I0 ?& R
  326. }
    ' e3 [3 s9 ~% Z7 g! a( B

  327. * f8 E* R7 Z0 M2 v6 F  a
  328. void CRevAppApp::ClearAll(void)
    3 q& B) U/ o- D8 q4 ^' _3 o
  329. {2 ]' x) w+ i- v9 H1 |8 H
  330.   LPUPDATEFILE file;
    / j8 R1 \- j6 c6 [$ ^
  331.   std::map<CString,LPUPDATEFILE>::iterator p;# U2 ~5 Z" I. o, l# d( x0 c& F
  332. 1 i5 ^  G3 N9 d9 Z) m! [
  333.   if(UpdateLocal.size())
    ' Y* k* c5 p7 C8 L
  334.   {
    + @3 K& Y, {/ v$ {3 `( y
  335.     UpdateLocal.clear();9 Q5 H9 y1 n/ G; A+ K. Q
  336.   }
    : H$ N+ M7 f& N* j9 X
  337.   if(UpdateFile3.size())9 |! q% _. O* ?7 ?9 q
  338.   {0 T" y+ [- \! n5 k& K4 G5 p0 l& n+ b
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ ]5 d& R5 }. x. b1 R
  340.     {# ?6 }2 S5 ^( D5 B
  341.       file=(*p).second;
    7 a; s! c2 w, X  f$ X' A% N
  342.       free(file);: n% a* J% {+ [3 u0 P2 g  J
  343.     }
    4 x' O5 }& T6 @* ~  u
  344.     UpdateFile3.clear();2 n: W3 Q9 r3 N
  345.     UpdateList3.clear();0 V- C: F# c' ^) F  H; [1 C# Y& k
  346.   }
    3 I1 [5 Y& S/ j" c$ {
  347.   if(UpdateFile2.size())' T' m6 i/ z. a( V! @
  348.   {- C. q: D* K7 F# U. G2 L# o
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  q2 N: O5 M- ]( v6 K& ~
  350.     {: b; g# _+ L$ r. n: i
  351.       file=(*p).second;4 c* z0 _) T6 L
  352.       free(file);) i3 M& D" i1 i$ F& I
  353.     }
    ( D( u9 m% ~& d! V2 V: o9 G
  354.     UpdateFile2.clear();2 r# N! ~, W  I
  355.     UpdateList2.clear();+ S; f: L6 Q4 U: F2 Z' p
  356.   }; {+ i  T9 g) e  u
  357.   if(UpdateFile1.size()). |2 s; z0 I, u- |
  358.   {
    # j0 N9 t6 w* r* r
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 s6 f7 ?: w) Z/ J7 n6 v
  360.     {
    . G1 |6 C- s, F6 X/ s% Y
  361.       file=(*p).second;
    3 i. f3 e+ Z8 |! n4 u7 ]$ Z; B4 ~& R
  362.       free(file);
      v# [4 X( J$ }  z% Y$ t
  363.     }
    # l# |; X8 H- z5 {: U
  364.     UpdateFile1.clear();) C2 V9 ^6 ^4 V, g0 _# Z
  365.     UpdateList1.clear();! e4 V  A6 z; @) D" ]! @7 u( k
  366.   }
    1 ^0 H7 H( u0 c: o. O- q
  367. }  $ m6 f0 ^4 Y; z
  368.   $ F; F8 P; p- T/ j8 \* S
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 }" g- J( \0 r# j; X! O" K
  370. {
    # L. ]( r/ ?5 Z8 m! E$ A( H
  371.   int c;
    7 [/ Y- \4 J8 d, V
  372.   LPUPDATEFILE file1,file2;
    : w; W* s' {9 [: j0 S9 C" K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + R- G2 X8 y9 h* o3 r. r6 d# j2 t
  374.   std::list<CString>::iterator l;8 G- a% l) V: Z6 D* x4 ^% e6 g
  375. ! B# g; n& x. Z2 y' Q& v1 y7 Q/ W# s
  376.   UpdateLocal.clear();
    6 F2 L3 o" h. Z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    6 M1 N) V; g4 Y. h+ y: u% N
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ! Y% ~: u, Q) H6 B
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    8 ?6 `% I# J+ s" x
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);0 @& t6 r3 I- O; l. [, ~+ w
  381.   if(UpdateFile3.size())( x, m5 d7 s3 c+ [3 X: s
  382.   {
    ! W8 t% P. R+ L2 ~# z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)0 g/ w7 z8 Y! p' |! U- D5 W& Y/ {
  384.     {2 }1 G4 w, j7 E- W6 C
  385.       file2=(LPUPDATEFILE)(*i).second;
    / I5 |( V2 x3 T2 E2 V) V* }
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 R1 |% N3 u- r4 l0 p1 i
  387.       {- u( k& W, M8 ~0 g7 L! D
  388.         file1=(LPUPDATEFILE)(*p).second;: v$ j( N9 T) R
  389.         file1->vers=file2->vers;
    : G0 p7 C+ Y6 @% A2 g9 u0 F% [) a" D
  390.       }. N8 g4 @6 P* c  n1 H, U8 [
  391.       else
    ; z% B* Y9 U% c2 Z5 V1 R: E
  392.       {7 Y" n( s9 M, r) `3 i9 f
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ y8 `, C: M1 p; h
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ; O# s* c; g- E  Q" B! p- e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));: N, Q5 c' B' Y* Y3 U1 K
  396.       }
    ) w! A3 T! @, o6 G" l- g- p
  397.     }$ h6 r/ X4 O& [" \( q
  398.   }7 }6 i8 P9 r2 X3 {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    : k2 _  Z3 n; b# f9 [! R
  400.   {
    4 C( t" M* G+ C, F! W5 N
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( b! A5 n. [5 h5 `
  402.     {
    ) X7 Q; ?! s+ B7 v7 L8 P1 h
  403.       file2=(LPUPDATEFILE)(*i).second;
    ( K! t' D: e, @/ n
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    . `* \2 L1 `' T. c
  405.       {/ k( [. t! j' J3 q% e9 b0 a0 W
  406.         file1=(LPUPDATEFILE)(*p).second;
    ' V* @# i& x( G( @1 Z6 E- m
  407.         if(file1->vers!=file2->vers)
    0 S6 T4 {* R4 H
  408.         {
    5 i2 p- A6 ~) w  _/ d
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 _6 g# U$ l% n" }4 U+ e' X- D1 N
  410.           c++;6 r4 }* r9 ~- X/ w8 J
  411.         }$ ~3 \# B& ^1 [
  412.       }  b+ I* t. _2 K2 _7 k) S
  413.       else9 n: N  M. n- [* V; r! ?3 ^2 F: d  O
  414.       {
    5 ^9 }* M3 _% U: E2 K/ t
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 u* ]9 f* H0 b0 W. n
  416.         c++;
    1 v. ?" f. P% _* q$ L5 ?7 k/ N
  417.       }
    5 K- f; Y% |9 t5 N. p' y* F; t
  418.     }& o1 H# D- `1 P+ F  r8 P
  419.   }
    6 N6 \8 G  V; v! l8 g) ]2 L& B
  420.   unlink(".\\DownLoad\\update.txt");# S: M; w4 d5 p2 P( q. q
  421.   if(UpdateLocal.size()) return TRUE;
    / F6 A- V0 N0 o* l$ F4 ?' S
  422.   else                   return FALSE;4 Y& z5 `* y0 f
  423. }
    6 j/ U0 E( T) Z

  424. 0 \, k( {( I  H: e
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , X4 ?# r+ w* \* n4 g3 u$ _
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn", z& W: n; n8 h- g% l+ i5 M+ C2 d
  427. 2 o, T: [1 a  @; D
  428. - S3 o: I- x/ z7 O+ p6 s
  429. , c3 K3 ^) H8 N+ q4 f1 o
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ' d! _. E4 ^7 h1 `" y) i3 I
  431. {
      D6 ~" Z" ^# [
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    1 L) q! o  \4 r* ^$ x
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - e" @0 B9 P; x
  434.   {0 s) j6 j2 z% ]4 u( r1 r. B, p
  435.     char szLanguage[50];
    " E( Q5 a' @9 ]
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& D5 e' I1 _( R6 r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 U: F1 V  B( l4 k% n$ q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! V: t% N. k3 a+ U6 Z' C
  439.     else                                   m_iLanguage=ENGLISH;
    $ y7 I* K( p) d, L' h
  440.     char szRegister[100];9 C& l  B" i8 L1 h
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , f& j( e) Y  G4 |/ S# E) z
  442.     strRegsName=szRegister;
    8 E- x! x9 u7 f
  443.     char szPatchURL[100];# B3 Y3 W4 G& S' p6 b/ x+ J" q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! |# R: K6 U% \; ~, z' G
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / I% I- D6 v3 t5 F* P' u& C- P
  446.   }
    , z! O7 c3 z. o# I$ }; f
  447.   else7 ^+ a' a; Q6 {
  448.   {& i  N0 g) R7 B- [% r' [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      n8 a) [8 \4 k; Q
  450.     strRegsName=DEFAULT_REG_URL;
    + G3 w. E3 O  L' x- b
  451.   }) W+ u, O6 b6 G
  452.   if(GetFileAttributes("hosts.ini")!=-1)8 n7 u* @: A5 U1 C
  453.   {% A+ B+ X1 j: n" \
  454.     char szIP[50];
    $ X. ~. j" e& o+ w* y8 P% O# q
  455.     char szDIR[300];
    ; M4 Y1 f: Z* w$ Q
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))/ ^4 R0 _3 S1 u2 A) D( q) D( @
  457.     {
      ]  T# {" D, U. w4 ?. P
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : J) f' z& o/ l; K$ x. I
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    1 z. g/ u, H" ]& t0 O
  460.       strHostName=szIP;/ H& h* j4 Q( F! q+ Z0 _; W
  461.       strHostPath.Format("/%s",szDIR);( n- x# T( Q5 L
  462.     }6 S8 Y" j$ U1 H8 S8 X0 ~$ w
  463.     else
    2 P$ \7 k2 K- @7 ?
  464.     {
    + R7 J) T2 \, O
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 p/ z7 @+ a& o0 ?  a" K; [( `
  466.       {
    : k0 ]8 ?1 U/ ?9 C9 r+ n% R
  467.         char szLanguage[50];6 P, @3 h$ ]" x6 i! Y6 o. d
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- z1 I2 p+ O& i
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;$ [3 O; n- ?" F( r7 z- m4 H
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) {; T9 v. P$ j" u
  471.         else                                   m_iLanguage=ENGLISH;- Z; v' m4 s# N, ]  [( S. D* Y
  472.         char szRegister[100];+ \: d! ~7 o9 ~8 r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");2 e" E$ ?' \; p  d
  474.         strRegsName=szRegister;* \" I0 Z( ~/ v2 z* ^7 ~
  475.         char szPatchURL[100];
    ( |0 p! P; V" n. z0 _4 I8 ]& L: [/ T
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : Z0 d4 f: l. U  |- z# l5 H$ Y! `
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 E" m& u) p+ M# v$ s) [
  478.       }
    . p" p( Y4 ?. v. I3 O7 @
  479.       else$ l0 `" J1 C; q5 x  Y5 ^
  480.       {: v0 z) D, C( y3 ^, C5 R; `
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' y2 ]; W; ?- G8 h( }
  482.         strRegsName=DEFAULT_REG_URL;
    . Y3 ~' t' |! h# c
  483.       }
    * i$ n2 ~9 A, h2 i; H3 H. Z+ J
  484.     }
    - I+ o! N$ C. v# P9 B1 [4 t
  485.   }
    ! b9 ?* y; k8 N3 s; h- K/ k0 K
  486.   return true;
    5 j0 Y( \& i. \6 u- a0 A" F+ X
  487. }7 k; F, c" {0 o/ L# s

  488. : u, x% U2 p( ^" F3 T7 e6 r
  489. #include ".\ZLib\unzip.h"' c( w& T0 z) f4 a+ H4 V
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);& F$ W  _4 P7 Z+ c( F% Q. Z0 A5 n% a
  491. /////////////////////////////////////////////////////////////////////////////
    & F/ z, r& }6 y# [$ K8 i9 K
  492. // CRevAppApp initialization/ u8 o/ E5 k. X2 j9 A9 R! R

  493.   k$ K% P9 l1 q- z9 B) w
  494. BOOL CRevAppApp::InitInstance()1 s3 F+ I8 b% b0 a4 G# t. G
  495. {$ d' r  ~$ X2 B  F7 K
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];; X1 |* }; d/ o5 W% P

  497. ; P7 r3 [% H. ]! v. k1 a
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    6 M: Q3 b& F/ h; w) E! d5 a
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ! K6 B4 W/ Q' O+ H2 n
  500.   {
    0 h+ y8 F& B) t# d! P7 [
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");( R. c& f" N7 _, C. J
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    9 c( ~6 o. A1 N  u( O* `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 P/ e& d% ?4 F
  504.     {
    ; D; |$ b4 x2 r3 t; X% N1 J$ q
  505.       strcpy(szPath,szPathTarget);" P" ]% T1 [: M  P+ [; R
  506.       SetCurrentDirectory(szPath);
    & L6 x' V9 `9 X
  507.     }3 N$ G: f8 b$ {! ^" H; u- q* x  i
  508.   }
    , r- e& i6 L# S! g
  509. #ifdef _DEBUG
    ( ^1 M9 v2 o* }, B
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 @5 N$ Y- h& _, S" B) S! w
  511. #else
    1 u) G( Z; V2 W( a
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ p; e: E/ M) C# C: d# u5 T
  513. #endif
    , T; v; l, z, k) C4 S
  514.   {$ J  I& c# V! s
  515.     char tempFileName[MAX_PATH];
    6 i" q2 b' x- v4 ]- ~/ p+ c
  516.     strcpy(tempFileName,szPathSource);5 C- j/ k2 a5 ^" e9 _
  517.     tempFileName[strlen(szPathSource)-12]=0;; D' t+ ?. b' K0 i% ~/ v
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    3 i& F6 f7 f% u
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);2 R/ z$ {8 I0 a* H7 r2 e
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    / B6 V/ P4 u: I# W2 @% F! e% `' f
  521.     return TRUE;
    8 E" Y1 _  B; D( i! K9 R+ A
  522.   }
    9 V" v9 m" G1 ]9 a# _9 b
  523.   // Nuke 0118: Delete run.exe" f' K) }- k; O& z+ ^: o  R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );" ^( e6 b" }1 B3 X1 ^
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");7 y4 @$ V2 o- l: O
  526.   if(!ReadCfgFile("Config.ini"))
    ) m& w2 ^' g, C6 w0 j5 g9 v
  527.   {9 O- J3 G0 _+ K1 {6 n- X
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);, ^, {. V5 {, I& x$ b
  529.     return TRUE;
    # K3 ^! C( l8 B2 G( @6 P. _
  530.   }
    1 m0 e$ g/ M" D3 b* E6 i9 x7 Y
  531.   HANDLE mutex;
    1 ?% Y' l: `* ?* I4 Q- ]" L( g' e; S
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ p- R7 A$ l7 j2 t' Y
  533.   {
    2 [9 {, d' R/ M+ F2 l( O; t
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)2 _+ ~  |* P7 O$ O! N! S# u6 m
  535.     {
      v9 Z$ q7 [: B% e" i6 y/ p
  536.       CloseHandle(mutex);
    7 o! C, {4 s% Y8 ?) @& ?/ P* F
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);% C" p  R  [5 f) x+ l& d4 j" {0 p  y$ L0 ]
  538.       return TRUE;9 T+ B5 h4 S/ N, g, z1 @5 X5 ^
  539.     }* k& k: ]' c, f- \$ k4 b% z" R' W
  540.   }  8 f8 W9 G' {% W* M* O, q
  541.   CloseHandle(mutex);
    4 J% K- _' D, W
  542. 8 R, O+ F9 f; b( ?5 F! c; N' M  c
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);1 s. x1 d6 Q$ H2 r. S8 d7 @; E

  544. % G. U0 g% W! A! O
  545.         AfxEnableControlContainer();4 T) _- }' o( L; a$ D1 ]/ b  C$ j
  546. 0 n* M4 I$ o+ E# T5 S
  547.   bCanUpdate=FALSE;  H0 B  T& j# M( O
  548.   dwStartUpSteps=1;
    - I. f( ~3 i& l. j
  549.   dwProgramState=AP_NOTHING;3 h) g2 d; Q3 ~# c! P

  550. $ f; K9 c& P% S- g3 f
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 D, {% ?9 _. x, {( w

  552. / ]4 R7 a7 [+ G$ a6 _- E" K, G
  553.         // Standard initialization; Q! h: @$ P3 {, e: a
  554.         // If you are not using these features and wish to reduce the size5 T. z9 \: J/ P: R( Z+ }# r- o9 N
  555.         //  of your final executable, you should remove from the following0 f" N. N- Q1 |9 J7 U$ v
  556.         //  the specific initialization routines you do not need.
      \. }, \% Z" }+ v

  557. 7 G+ N% X2 O' d2 \
  558. #ifdef _AFXDLL
    + `7 t' u; d: L7 Q! e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL2 U1 q: P3 n" c& v! d% k
  560. #else
    4 L3 I3 B( U# z. t2 e" N( X& E/ L
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( R/ _) N* @4 e$ _' k' _
  562. #endif) R# ~1 d: l; G. t' V$ ~9 N5 l; {
  563. 9 T9 a( c( N4 ]8 r5 q, r& u
  564.   dlg=new CRevAppDlg;; c) u3 t/ p# o
  565.   dlg->Create(IDD_REVAPP_DIALOG);5 |3 _( c* B7 F% z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    : k5 a: n; p6 v' ?6 `: i
  567.   m_pMainWnd=dlg;
    " X6 m, R  l/ L7 `
  568.   ~) ~1 w8 C) ~- B) g% U: y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);' V# [9 i4 c6 F5 _- b& J/ t

  570. 9 o" q/ v7 }- x2 {
  571. //  GdiplusStartupInput gdiplusStartupInput;9 J8 A# A! C0 M. p$ S
  572. //  ULONG_PTR gdiplusToken;5 D# \: h0 h0 `# t* {$ m" ]' u5 L
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    3 |9 \6 E( Z0 v9 |# }( q  E

  574. . i0 W0 E9 d1 a4 s
  575. //        CRevAppDlg dlg;
    - B7 K' s3 j; ~5 V7 r$ p; ?" Y
  576. //        int nResponse = dlg.DoModal();0 y  m* D* ]! Y# x' A! q3 D
  577. //        if (nResponse == IDOK)
    9 B1 ]2 [0 R- n
  578. //        {5 u+ F, ?% D2 d8 b
  579. //                // TODO: Place code here to handle when the dialog is6 i2 G1 d' M* X! r% W! ]
  580. //                //  dismissed with OK2 w/ {; w7 J# J* y2 v$ A
  581. //        }* g5 J* p* t" u6 u
  582. //        else if (nResponse == IDCANCEL)* L2 O# M* h9 K- j" c" _1 }$ M: {
  583. //        {
    : r  q% A9 y1 K8 O
  584. //                // TODO: Place code here to handle when the dialog is# Y$ O5 r8 ~1 r2 U" u& |+ ^+ m
  585. //                //  dismissed with Cancel
    : b) N* n6 W. O. H
  586. //        }* a+ C0 v# ?+ O( o6 [! B

  587. ' z+ d# s7 N, H7 S0 D* n1 `& ?, V+ V1 S
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    - U0 z+ y6 @& Y9 j; ~
  589.         //  application, rather than start the application's message pump.
    # b1 J  I" \7 v! k
  590.         return TRUE;
      b; `  K) U7 a: Q& V; L
  591. }
    ' Z' k7 l/ ]6 x; }6 y
  592. ; h# c7 a  }  H4 D) F  j, r+ o- G) p0 j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)' k$ E' c: U; g0 V+ C  V; J) v
  594. {
    3 \: F! \  ^# k+ w3 ]
  595.   int i;
    2 E* ]8 ?) E3 \
  596.   char *szRet;
    4 x: a+ L$ G% ]* v0 d1 H5 ~

  597. 1 O; h0 K$ q# s6 X* x
  598.   if(pSource) { itoken=0; sztoken=pSource; }! w4 H' @5 p8 {. O( `
  599.   if(sztoken)
    + B' ~+ }- V+ {5 M$ A4 i
  600.   {4 W  P; w, l1 z( R: k
  601.     szRet=&sztoken[itoken];7 g; i  a! ]0 Y
  602.     while(sztoken[itoken])
    & u( w6 ^% ^5 m$ K8 ^- Q
  603.     {
    6 B' T- e! k, X! g1 n. h/ R
  604.       for(i=0;i<(int)strlen(token);i++)
    7 n, x( U2 A9 y8 S) T: _' S, {
  605.       {( e# ]" e- ]7 ~$ K$ k4 g3 G1 G
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])# ~# a  R1 P* c1 h# t3 x
  607.         {. @' _  I$ o! K5 q  e8 a# ]1 V
  608.           sztoken[itoken++]=0;; _% j: s3 h: V9 s
  609.           sztoken[itoken++]=0;
    ' U1 ]/ y/ o1 F: X- N( U. v$ B$ c
  610.           return szRet;
    9 J/ E% P: q' _5 S
  611.         }+ {* {0 T% g+ W+ F6 d
  612.       }" V# l: f6 y# U8 x0 {. ?  h- t) X. U4 A
  613.       itoken++;
    . ]' |7 x8 E3 O: i9 z3 W
  614.     }
    4 r- j9 B. N% l4 l5 k1 r4 k
  615.   }0 K, B* |; t8 V$ o
  616.   return NULL;/ C$ f$ s. R( G* @" G' @+ l8 x
  617. }
    * w# F# J% A5 S" f2 L  J

  618. 3 W: ?2 \( w+ h
  619. void ProcessProc(long Total,long Current)$ m' l$ Q" B; S8 ?6 P5 Q" k
  620. {& V) i+ P& B2 ^, J9 J  V
  621.         MSG msg;
    " A. e, @0 j) ~2 X  D( f) ?* B
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);7 v9 q5 m+ u+ c$ n8 R6 X
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));+ G! F9 t; h" i" v; a2 v
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))" I8 o: W# F% x9 W, i
  625.         {
      n1 u: i; m0 M# S# J+ y0 G1 w2 f" e
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ; U( {/ r. |' l; c
  627.                 {8 D: N! t2 w& H8 u
  628.                         return;
      C% Q( M- f: |
  629.                 }
    5 ]% h# ]  f( U
  630.                 TranslateMessage(&msg);$ X; d5 X0 z5 Y# O
  631.                 DispatchMessage(&msg);5 }' j$ D% F% U) X9 c9 s" Q- }9 A
  632.         }       
      X/ n: d5 h, ^. Q) M. g* {
  633. }
    / j( r4 t2 I& t; U
  634. 0 b) ]& ?2 D% I: Z& k9 z4 i
  635. BOOL bFirstChar=TRUE;! M  o. i7 `/ h  @5 X
  636. ! C  w& S% d8 [0 {) i
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - ^( V8 K4 ?- U# Q8 o+ ~+ Y
  638. {
      U+ E- o* [; T. c5 j' N# d- S
  639.         // TODO: Add your specialized code here and/or call the base class( m6 P( a: X9 U* k6 i
  640.   switch(dwProgramState)$ B% e2 a# A; S# ?# R* r
  641.   {
      W8 ]; [9 F8 T7 n" \, R
  642.   case AP_NOTHING:6 `% U) k) W  [" c( k
  643.     switch(dwStartUpSteps)
    $ d& M- V' `% v" b  R
  644.     {
    3 N" N& U# K  s) ?0 z% N: C( v3 I
  645.     case 1:
    # A* u7 c- t& u- _
  646.       {% s8 L$ `/ ?$ J
  647.         int i;
    : ]  Q  Y& a2 r+ a0 B
  648.         CDC *pCDC=dlg->GetDC();
    & W, J8 |0 U' P2 [; `" K" i1 E1 J
  649.         HDC hdcwnd=pCDC->m_hDC;, r: ^- r$ E# ]: U" C* O2 l
  650. //        Graphics graphics(hdcwnd);7 n9 U; l1 u/ z1 s5 d; c+ _3 K
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");0 e* ^% v0 p' C7 {7 h& r
  652. //        INT iWidth=bitmap.GetWidth();
    4 H4 S" V. o, B& s2 G- W3 X# M
  653. //        INT iHeight=bitmap.GetHeight();
    & o( h' Y/ u$ @- t* R* ?* |) u
  654. //        Color color,colorTemp;" l; ?) T* P. O: b. C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++), a3 L: X, j* h" X
  656. //        {- m2 g. P0 t" |' r+ O+ e" n
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)6 D: J4 u: w$ |  z
  658. //          {
    ( Z) \0 E1 P! o5 z! f
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ) K4 O$ K+ i% s+ z* ^1 {& c4 Z
  660. //            colorTemp.SetValue(color.MakeARGB(
    & t" T! X/ P. h2 {% l
  661. //              (BYTE)(255*iColumn/iWidth),
    # \3 B# g, m  U1 S8 M
  662. //              color.GetRed(),# X# t% b7 l  O: z2 t8 G, n& Z
  663. //              color.GetGreen(),
    ; y: X' `& [: u& y* |/ I  A
  664. //              color.GetBlue()));
    $ f" Z6 t! a) ^7 ]6 L  z: s
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);$ q: F$ P3 Q8 |" a
  666. //          }3 @+ d$ O0 A1 q8 k4 |
  667. //        }$ S2 h- G2 ]/ P5 ]: t* M3 X
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);) }6 ^# f- r$ Z( p
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. B( o" R& K2 K* N2 }
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ) z. B) k8 G- {+ a, v4 @
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 h! ~$ k5 I+ F0 {
  672.         for(i=0;i<240;i+=8)
    : V& F1 c. m/ D: X9 G
  673.         {% ?2 T$ \  q- N, m* U2 m5 K
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & s( }( \. _7 o3 ^, m' z/ K
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! s. ]$ |5 I0 B' P( `6 ~
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; [+ R) @) Z8 ^: X! }
  677.           Sleep(33);
    # v9 ~7 ~7 |3 H3 R0 R
  678.         }. [) J. t% Q6 G+ @9 K" {
  679.         Sleep(1000);, O* u0 ^" b' X5 |+ \
  680.         for(i=240;i>0;i-=8)
      M7 {) \: X! W
  681.         {
    6 N( R! B- J- V* F: V+ ?" F0 ?8 G3 H
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 l( w2 g9 U* I: r0 T
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ j2 k& i9 W5 b6 T0 z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: `% _# x) J" l9 }0 Q/ Q. Y
  685.           Sleep(33);. i2 o& F& |( ], i2 z
  686.         }
    6 G% D5 M3 v' a" ~, n4 e. v6 A+ b
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ; a9 I  ~1 W+ N3 c- A) t
  688.         dlg->ReleaseDC(pCDC);( l) ?# D: u& r% N
  689.         DeleteDC(hdctar);! ~; k; b% @4 c+ |
  690.         DeleteDC(hdcsrc);
    : W2 N( F8 \! F- `3 w2 g
  691.         DeleteDC(hdcorg);
    ; U, {( m* o( S
  692.       }
    , m9 M6 @% U  K: I! y( s6 z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 V0 ^3 D) n& X3 w9 o+ P% \
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    4 N' @8 d0 [5 R- V
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");( Y; t& x9 y6 Q: i5 k6 K; e$ `: f
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");% }; G6 [/ ?# d& a6 B+ B
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 S9 D, C0 ~$ r
  698.       if(!Dn.Connected()). E! a% e" V* J) c' U
  699.       {
    3 \3 `$ G( m! c4 u/ E- y& N" x
  700.         dwTotalFiles=1;
    # r8 ^& S* J+ x8 U/ S/ J9 S" K
  701.         dwDownLoaded=0;
    5 @- o7 P# M4 w4 n
  702.         bSilentStep=TRUE;8 Q4 J6 V5 E6 u: P
  703.         bCompressed=FALSE;# `" u; i2 d- r, |$ \% a
  704.         strExtLocal.Empty();8 j0 l) t# D9 H
  705.         strFullName="readme.txt";
    7 S# P8 G6 l6 M0 I! F% R( x# S
  706.         dwProgramState=AP_CONNECT;
      k) b+ _6 W- A9 M% Z; G
  707.       }
    5 H; [6 K  Z3 R- o' N
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();# A6 p3 Q1 ]; w$ ~
  709.       dwStartUpSteps=2;% Y: I1 c, v( w, Y) F5 _" h  H# F
  710.       break;
    $ V; j$ b" |5 Q. a4 e" E, B/ n. x1 n
  711.     case 2:
    . S2 v0 g# f6 q9 ?4 e
  712.       {
    ( @$ F% o, `3 I  ?6 D; l/ m1 r
  713.         int iEOF;
    + C, l# n9 D9 Q* W) }* h
  714.         FILE *fp;
    2 f; _9 y/ ]0 \" ]3 r* r/ @  R
  715.         char szString[512];! i, E+ p. f7 x2 c" ^3 r
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    - N' [1 x# k  a$ q
  717.         if(fp)
    2 ]8 x- A9 c2 ^& W. w' o' t
  718.         {
    & t4 B# [* y/ `4 Y
  719.           do) p: I( ^( V3 g' r7 X
  720.           {
    3 `3 T" c) ]" g* k4 S
  721.             iEOF=fscanf(fp,"%s",szString);: n# S9 P( _9 m/ Y$ w0 y5 E
  722.             if(strlen(szString))$ ?; g9 }. Z0 E/ D
  723.             {" f7 W& Y7 y8 Y5 k! ?
  724.               if(bFirstChar)
    3 c3 O+ E% C5 e! ~
  725.               {
    * H; x( D- g9 _
  726.                 bFirstChar=FALSE;
    6 d* F+ k  P5 I! J' M
  727.                 bConnectIsBig5=FALSE;
    : q5 V$ v  V* O- U3 g
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 ?6 Q# N7 Q5 {- v% l% L9 H
  729.               }
    8 }) I9 S& z9 z2 {; V
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ' x0 f! n- C5 m9 z7 L' n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));# C4 w6 [: ^: I) Z, J
  732.               dlg->m_ListText.AddString(szString);
    / }: j7 i' j3 Z
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # O& S! u( V% W% Q% e( [
  734.               *szString=0;
    - B1 E1 g6 `( s8 _9 u( u
  735.             }
    ) r: F# x/ `9 U& j' Q/ z
  736.           } while(iEOF!=EOF);
    $ Z% m* m9 n! W# i" M. ~
  737.           fclose(fp);# d4 m# x" _4 \# O4 \5 S6 }1 O( O
  738.           unlink(".\\DownLoad\\readme.txt");
    1 r( ^3 f" P6 Q3 C2 J! Y- k, W
  739.           dwStartUpSteps=3;( U+ x* i/ e5 k5 U; C
  740.         }
    3 Z# Q2 ^% T4 N8 ~# I8 m# n
  741.       }3 B' E9 {3 _" c0 r; N
  742.       break;9 z% _5 ]9 Z" s& R
  743.     case 3:
    8 F' ~3 |% r3 u- k
  744.       if(!Dn.Connected())- P7 e6 c. H% k/ ^+ r% s8 G/ O$ b
  745.       {
    4 J/ ]5 R9 B; O& t
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);; v) X/ d6 M! {  B" ^7 u
  747.         dwTotalFiles=1;
    * V, r/ T. o* v, A* T5 z( n' X. M
  748.         dwDownLoaded=0;! D) _2 T8 N4 d* ?2 C% Y* B9 h8 l
  749.         bSilentStep=TRUE;
    ; Q0 o3 o* m7 v* F7 {
  750.         bCompressed=FALSE;
    5 N. S8 p6 ^  ?, ~( G: E* _
  751.         strExtLocal.Empty();# b6 h  r+ b. k
  752.         strFullName="checkversion.txt";
    6 H/ L+ [7 y: V
  753.         dwProgramState=AP_CONNECT;
    4 j/ q" E6 v: e! Y  ]
  754.       }) ^! Z  W. ~3 F# f9 A& e
  755.       dwStartUpSteps=4;
    ' C9 K; G4 Y# F
  756.       break;2 K: I- M9 i+ U
  757.     case 4:
    7 e0 b& Q( Y7 G% u0 r  i( O
  758.       {
    ' ^! R, N2 L/ }% N3 z0 T8 q
  759.         FILE *fp;
    2 x" Y  v1 H6 W! _+ e
  760.         char szString1[128];
    * W; U5 S7 D; P
  761.         char szString2[128];
    ! E: q" h" k+ K+ X5 e
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");. R! ^" _7 ~9 ~1 B( i# y
  763.         if(fp)# \: ?* y* [; b) p
  764.         {
    4 f7 |# a4 h5 Q. R) T9 _9 {, B
  765.           fscanf(fp,"%s",szString1);
    9 V. D( v9 C$ i+ E1 P! b0 y
  766.           fclose(fp);
    0 J( Y* l* |8 h. C+ c
  767.           fCheckVersion=atof(szString1);
    - ]/ O8 Q% j, K& U7 f$ U
  768.           fp=fopen(".\\checkversion.dat","r");
    9 U( A( }0 v8 x$ Q
  769.           if(fp)
    0 j0 Q9 v7 x6 \' _: `
  770.           {" n$ C. Y. P! f- q- k
  771.             fscanf(fp,"%s",szString2);& b4 P) U$ f7 y9 I$ P- }3 r  D7 @
  772.             fclose(fp);( m6 x. ~4 q7 O3 A7 v+ u; f
  773.             if(atof(szString1)!=atof(szString2))
    5 S* z& {: }* z' V3 p& C
  774.             {
    . e5 E3 L$ R/ g' E
  775.               if(!Dn.Connected())
    ( `6 ?+ }7 J" I
  776.               {8 w8 r& R) m: |3 Y! B& l
  777.                 bFirstUpdate=TRUE;
    % D  K7 _0 |1 t5 W: _$ Z' ?
  778.                 dwTotalFiles=1;4 q9 [' E, j- S
  779.                 dwDownLoaded=0;
    * i0 K- g. G/ f* H% V" w4 g
  780.                 bSilentStep=FALSE;
    + D( V0 |: o# p' u
  781.                 bCompressed=TRUE;
    : ^3 [* x, ~1 q) H
  782.                 strExtLocal=".\\DownLoad\";
    6 w* C& G, F3 ?5 D/ a. B
  783.                 strFullName="update.txt";& t1 P% [( R4 J, s+ B
  784.                 dwProgramState=AP_CONNECT;
    ( G! o: F) K3 R* }- b% {/ M, P0 s9 C4 a
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % c* v' c( ^+ m% H/ @1 ?# n
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " a$ U% F! G$ I8 C! W4 i3 u
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");/ S+ }3 \+ a2 F+ t

  788. 6 j# d' M; j1 q1 J& }+ `2 N1 i6 g
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 g5 x5 a7 S/ O5 P- \! r
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    , Y! X+ r' q) W, t, m+ Q7 d
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ' R# F, }% {- y. f
  792.                 {6 Z1 T  Q7 k$ {. s, \* ?0 X! U
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( r4 i0 a% j4 H) j
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    , G3 P9 C5 }& c5 u+ Z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");- D" @' s) Q+ X0 f
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' L6 P% V2 u1 {. [: P

  797. 8 D& Z5 e* A2 [3 J; ^7 R1 f
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! C2 g) W- N9 x7 r* S5 e
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 D7 C# K3 |& o/ q0 G
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");( f( M$ a- W9 m9 j& I' Y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 v" ~+ W5 g5 d4 n
  802.                 }- I2 D! x* ~  Q5 g# l& C
  803.                 dwStartUpSteps=5;3 B$ Z! \: u0 O: G& t. I1 S9 p
  804.               }3 M& o9 [/ s4 M( R% s1 R9 |
  805.             }
    . a% Z# ~9 [1 ~3 D- Y) l4 q& u
  806.             else
    " o1 ?8 h$ N# e
  807.             {$ P' W9 `( {- t0 k; }
  808.               unlink(".\\DownLoad\\checkversion.txt");# g+ |+ i+ {# D+ X( r+ f
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ h7 d; D7 P4 W3 v! t' ^( [
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ W: N5 A) G: Q5 m
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 E4 `- y% R4 v0 |

  812. . P" z3 J6 Y5 |: o1 {* ~
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 F9 b. z' Y/ T. \! E
  814.               dwStartUpSteps=99;# Q( w, G8 ]+ K, _4 d; I
  815.               bFinishUpdated=TRUE;
    $ f/ ~2 ]! R6 j! K0 d2 R
  816.               bCanUpdate=TRUE;
    ' A8 v- J  V  {1 X$ E4 u
  817.             }8 W4 }6 f* E* Y4 E. R
  818.           }" T2 l5 q' C- D, W! Y  k  d$ x% H
  819.           else, K  V" V+ R1 y1 O0 d) l! D
  820.           {% f  Q6 t5 `/ @5 N9 N
  821.             if(!Dn.Connected())
    * Y+ A2 v" [$ ]7 S: {) o  |& o
  822.             {
    + [7 b  g7 U  e4 X3 m
  823.               bFirstUpdate=TRUE;
    * y/ S: y! L& v$ d
  824.               dwTotalFiles=1;: t. q/ f5 D. \, _' a$ N& p2 Z: X, Y
  825.               dwDownLoaded=0;2 K! m% l6 L" v$ J2 U
  826.               bSilentStep=FALSE;
    + b8 U6 N7 W1 i6 F0 X0 \* `0 v
  827.               bCompressed=TRUE;
    % d7 Y, I, H! H
  828.               strExtLocal=".\\DownLoad\";
    9 y, K$ q: `" `5 c: R( z' p
  829.               strFullName="update.txt";) e- q# @+ h: f
  830.               dwProgramState=AP_CONNECT;$ K8 D. x. B9 A; ]+ P3 }) @
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; ~% {6 ]3 e& B  G% ?
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 x3 v( k2 \6 @; c6 Q: P( L) U
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 q; m& |/ Q6 p& \
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! S3 w" [6 y  s; p
  835.               unlink(".\\DownLoad\\checkversion.txt");6 D" D1 w* Q% v6 n. ]" G
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ! `2 f. Y7 g2 x+ V
  837.               {" N1 k7 L; C6 k+ u' Y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    5 U# c! k2 Q1 a5 J- L
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ) ]0 G3 h+ k1 E9 _* }* s; x
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    1 d' [0 {1 i' U: m9 D+ I5 ^2 ^
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; c% o0 |. |* s. t6 d
  842.                 3 J6 B6 a6 n* W- Y2 \/ U& j
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 G" r6 O; e# e6 q
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 e0 T' O" d9 D9 f/ ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 R8 k5 ?5 f3 V! U: [
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 F7 x! n' Z# i& e/ U$ {' n
  847.               }
    : l9 Y3 n0 H/ N4 H! Q; d! b' F. \
  848.               dwStartUpSteps=5;
    # N6 V# J* l8 Q1 C" u( A% j
  849.             }
    ) n- M8 |9 \7 F
  850.           }
      E3 Q$ k) `7 H% U& K7 u% f  Z
  851.         }! x( v9 g4 w/ a, Q% m: C
  852.         else
      E0 x* d1 u! Z- Q6 _4 m
  853.         {
    ! Z* t* B% l. x
  854.           dwStartUpSteps=3;- F: k5 X6 D" s6 j+ r1 Z
  855.         }
    , l: W0 O6 D& p8 R! ~+ A3 [
  856.       }  L' t+ K  N3 a# T, W! u; i1 T
  857.       break;
    / r* S9 q& P( t# J& h  ~2 @1 J6 L3 _
  858.     case 5:' v, Y7 t6 c' M+ B& l( w# }
  859.       {4 L7 ~8 H7 I( s$ `. g9 J% T1 m* a
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    $ O; J$ K0 `0 ^
  861.         {
    ; Z- L2 U) m# u4 J9 @
  862.           int opt_overwrite=1;
    ; }& C' j0 g) M5 |5 H; q( c
  863.           int opt_do_extract_withoutpath=0;# b% [. U6 ]8 V! `/ ?
  864.           unzFile uf=NULL;' t: O" y) A) k1 H, t1 i

  865. 1 o% f2 i3 @. |. ^, m& L. v
  866.           uf=unzOpen("Wsa.zip");
    , x# |/ y# e; S3 z4 h% b5 R
  867.           if(uf)7 e! C- b, V& a- [. u
  868.           {
    + I5 Z  I; @! \0 F
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    $ ^. R0 O9 q- f$ r3 W4 t. [* B
  870.             unzClose(uf);
    2 M; A. Q8 f' s( V
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");" c, D8 t# I* |' Z- ?
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ) ]$ s# u0 v5 P- n1 `! H
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");/ h! I8 q; B2 X; [) P0 w6 `
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      g: |, V% l* X) o
  875.           }
    ) C2 |# e$ j) l/ X/ Y& M
  876.           DeleteFile("Wsa.zip" );
    8 N) r+ n; C3 I: n& @& N
  877.         }) k  Y$ u/ q& l. i! J: b5 y1 `

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

  t: l) J1 ^6 f( q2 V8 ?- S1 a, b0 P
, ~0 ?3 x! [" x1 ^

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-18 15:14

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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