CSUpdate.exe源代码

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

) |6 P( d( X6 W9 v- B
  1. / RevApp.cpp : Defines the class behaviors for the application.
    # i+ G( b$ M. Z/ K1 Z+ C$ |
  2. //1 \1 F* x$ S9 B1 O
  3. : y% B" H# C- x! j" ~; o
  4. #include "stdafx.h"
    & z# b: f) @" F, }. b

  5. 8 @% k5 E) U- F/ u# a9 r
  6. //#define UNICODE# t1 Z- Z5 K! N* ~' _
  7. //#include <gdiplus.h>
    ' C8 j6 z6 }6 \5 ^: y
  8. //using namespace Gdiplus;
    % R  Z$ w# l  g4 E% w

  9. 3 _5 M- b' G. `* `4 S6 [
  10. #include "RevApp.h", n; C6 g) u- `4 I4 ~* B% @# T
  11. #include "RevAppDlg.h"
    3 A0 G$ Y% X/ c% \

  12. 4 k2 I4 `9 B$ n1 P
  13. #pragma warning(disable:4786)( }  e( \4 f( v. O! p: _3 W
  14. #include <map>
    ; D! n7 n* s+ L8 ~0 w1 @6 T
  15. #include <list>
    : c2 c0 i( Y+ b% Q
  16. #include <direct.h>; a5 p* V7 v3 j* ?& c& B

  17. & s! q4 j1 d* A* y' e/ m, ]  g
  18. #ifdef _DEBUG8 j7 q, S1 X, t4 z& n3 S
  19. #define new DEBUG_NEW( g) M. ^/ F. q7 j
  20. #undef THIS_FILE3 {* x* T- f! a" x
  21. static char THIS_FILE[] = __FILE__;
    , L- ~, c; U* }) L
  22. #endif. S" f7 W- }5 c, \% P
  23. #include "SkinResDef.h"
    2 L" S: ?' z& l2 S% J: v
  24. #include "ChangeBG.h"
    7 {: t! V6 F; c# p
  25. #include "AFXINET.H"/ K# p0 q( w( U* M* O! D
  26. ' K: q6 K' c# F2 d
  27. #define TRADITIONAL_CHINESE 0/ j4 ]3 G2 r) |6 V
  28. #define SIMPLIFY_CHINESE 1
    3 U# i7 |* k0 K3 y/ U0 i7 ?
  29. #define ENGLISH 26 Z/ Y2 w1 R; G! i# ^; t  H* G
  30. int m_iLanguage = ENGLISH;/ N& C' A' c! \7 D% q
  31. /////////////////////////////////////////////////////////////////////////////6 k0 P9 C# ?7 @; M9 R/ O, ~
  32. // CRevAppApp% `7 K% }$ G: e

  33. ) }% A& ~, h( i* D3 _0 |' i: |$ y% R
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ( f. m: v- o( i2 q
  35.         //{{AFX_MSG_MAP(CRevAppApp)  l7 n+ W- H2 Z9 b! I& X  N
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    5 E6 h9 X3 u/ d3 {2 T& C
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!- D8 _7 G* q  K" L
  38.         //}}AFX_MSG7 P. }8 \$ @1 C
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . i9 \8 l! L( B
  40. END_MESSAGE_MAP(), Y% v0 C9 W9 x9 l( a/ g& |

  41. 9 O- b  ~* T* q
  42. /////////////////////////////////////////////////////////////////////////////# U! o; Z3 e* L% [' u
  43. // CRevAppApp construction6 r" m7 `( L/ Z3 F' z, A0 J
  44. ( u- F+ @( D& H7 K2 G2 }* y
  45. CRevAppApp::CRevAppApp()) @( D& ^% d0 }4 P/ h9 d
  46. {7 N  q4 a' r+ R: u7 T& u
  47.         // TODO: add construction code here,
    " G0 H! h3 Y  B) _6 y" s
  48.         // Place all significant initialization in InitInstance) N/ I8 D- V' O' q
  49.   bDisplayIsBig5=FALSE;7 E7 k7 w! J/ u) x
  50.   bRestartUpdater=FALSE;
    # X" w9 r. O+ ]& `" G) e' x
  51.   bFinishUpdated=FALSE;
    * C% J0 u7 R3 }& O8 G/ ~' B
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    + L3 F# H( A' ]1 i4 [
  53.   InitChangeDataBig52GBKS();9 k# X6 _) d: R, G
  54.   InitChangeDataGBKS2Big5();' d& I% ]. Z8 ~
  55.         //
    # p  N. ~, [! n1 Y$ Y
  56.         bClickRunExe = FALSE;% k) E  `' Z. ]% Z
  57.         //
    , C) A( S3 w9 d* g7 |/ F4 D5 [' k
  58. }
    * {) D# ]7 b; F/ T' C* k; R  K
  59. 1 O/ H" ^: z. H6 Y
  60. CRevAppApp::~CRevAppApp()3 W' B% ]8 ]& h
  61. {
    0 L1 d2 M- r: B% S- y% F3 \7 r" G! c. ^
  62.         // TODO: add construction code here,
    ; I/ K6 m+ R: N* u
  63.         // Place all significant initialization in InitInstance8 L/ E9 l. V+ b7 t4 g, M
  64.   EndChangeData();
    1 X( @9 D" d  ]; G, y( Z9 G. D
  65. }
    & p4 {$ W0 Y+ ~( C  J# e5 o
  66. 6 C7 q4 y9 n8 G
  67. /////////////////////////////////////////////////////////////////////////////& R. t# T3 Z) S
  68. // The one and only CRevAppApp object
    % r# b* b% \+ q3 O2 d" W: _9 Q
  69. 8 P: \; m0 s5 T% O# S& `
  70. CRevAppApp theApp;) d$ ]( }$ ~) Q; L1 `
  71. - s9 G+ N+ v: k- J* J2 F
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : C$ r' K1 D# @
  73. {
    . x9 v$ J* p7 O. V1 w: R
  74.   int iEOF=0;
    % Y. I7 \# p1 ~: @. `# m
  75.   char szTempName[MAX_PATH];* Z) c7 E4 ~1 m, v3 T
  76.   *szFileName=0;* T. _& Z6 B! \4 p! u
  77.   iEOF=fscanf(fp,"%s",szTempName);+ P$ r4 O  n- I8 A5 @
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    5 Y. z5 L. j$ Q' |- E# v
  79.   {7 W! J0 C- j0 M
  80.     strcpy(szFileName,&szTempName[1]);6 N2 ?5 h' e# v( v
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)3 y& R$ [0 g" K: K# a
  82.     {$ [1 n. [! S0 g; [+ Q7 }1 ]3 |
  83.       iEOF=fscanf(fp,"%s",szTempName);
    + |' ?5 ^' @8 Q* {
  84.       strcat(szFileName," ");6 [- w: m6 _- V. q4 \4 l3 p4 u
  85.       strcat(szFileName,szTempName);
    8 D, B: E' J: d4 ~: C& S
  86.     }
    ( T( |% O8 M6 b/ q, g& e6 ?# k
  87.     if(strlen(szFileName)>=1)9 l) X2 _" C8 F+ [7 g
  88.     {
    4 S0 M5 m  {# l. z# C  r! n" s
  89.       szFileName[strlen(szFileName)-1]=0;/ L3 z! O: j$ E$ B7 S4 n
  90.     }
    % P3 n- J. }! o0 E) z, a
  91.   }
    & k: ^# ]6 b/ H, E
  92.   return szFileName;
    " g, O" {2 T" G0 Z1 l
  93. }7 x' g6 R, D- ^3 N, L8 B4 D

  94. - g; [# L! a) {' w7 Z0 r2 x
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ' \' C8 O4 G; E4 J  {
  96. {* T1 u* I+ [  @2 ?0 m' v
  97.   FILE *fp;- z, t) m, C0 x
  98.   char *key=NULL;1 _5 w+ B3 w: V9 Q5 r: H9 O
  99.   char version[MAX_PATH];7 F  E/ o5 F8 a  Z- r2 x
  100.   LPUPDATEFILE file,olds;4 t* z. o( A# g) _6 U2 P9 E
  101.   std::map<CString,LPUPDATEFILE>::iterator p;7 D* q! r! X; I8 c8 {" i& e% k

  102. $ B$ m' h) F, {1 y* f9 }
  103.   UpdateList.clear();8 C0 U4 Z' T4 N: v/ @
  104.   UpdateFile.clear();
    . U; c" y& d+ Z) y. c! m8 K; S4 z
  105.   if(GetFileAttributes(filename)==-1) return false;7 |# Q% v! P8 o
  106.   if(!(fp=fopen(filename,"r"))) return false;" u% J* ?  r% m4 z3 V5 ~& }5 n+ b
  107.   fscanf(fp,"%s",version);
    9 b0 u3 }4 ?  Q1 D6 d
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    4 _1 J/ ?7 M4 a- {! y
  109.   while(fscanf(fp,"%s",version)!=EOF)& \& p  [- D1 T2 q$ ~- r
  110.   {
    $ [+ _, U  P: @8 P+ u0 z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 V8 c" r. C' \; }& q
  112.     fscanf(fp,"%s",file->path);- o0 J+ E  I% c4 X) A# Y# {( i1 G! U
  113.     ReadFileNames(fp,file->file);
    . x6 t8 |/ r9 x/ f8 M
  114.     strcpy(file->full,".");
    " N3 n1 k* a" H/ f1 t
  115.     strcat(file->full,file->path);- |0 L  f% n9 j. m8 {. I
  116.     strcat(file->full,file->file);: E  {" G7 d% U
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())9 r. n4 O8 q7 _" z* w" S
  118.     {7 I/ ]; [# E+ [9 t3 E5 M
  119.       file->vers=(float)atof(version);
    7 U- H6 K- m4 x2 O% |7 W/ \2 V7 F
  120.       UpdateList.push_back(file->full);
    3 P7 v0 _/ G9 c7 [- ]# x: Q$ K
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));5 o( ]1 [" x/ L$ |) l% D
  122.     }
    * {: o+ d: r9 Y6 q! N8 i
  123.     else2 ?# U0 e7 g! A+ `/ M
  124.     {, ^# D0 \. v# W' v. v; A9 x. N
  125.       olds=(*p).second;2 @4 a) E6 S: T. }5 `
  126.       if(olds->vers<(float)atof(version))
    ( w& L* B. W8 D0 F0 E, L
  127.       {
    1 N; S; S. p' p7 P3 \
  128.         olds->vers=(float)atof(version);
    8 o  z- T+ ^: k3 i7 H9 |: c
  129.       }: ^+ L. T3 S3 o7 Z: C/ N* e
  130.       free(file);! ~9 _* g$ l% o& Y" N
  131.     }
    8 F) \6 L2 B( f7 H( G
  132.   }0 Q! n* t1 d4 T, t$ L0 e7 o
  133.   fclose(fp);
      e& Z  u5 F+ E
  134.   return true;; v$ R6 G7 N/ T1 Q9 M
  135. }
    ! Y/ Y/ n$ \* B% V- Z4 n  T& [# |

  136. 5 N. S: @9 [$ l* }8 W- Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    2 {8 }, I, W( W
  138. {" C) Z" b$ a, M& W. \
  139.   TCHAR  szFull[MAX_PATH];
    & j1 \' `4 i: c( f0 R3 x
  140.   TCHAR *token,*inter;
    , h5 u0 a( `0 O  i; L7 X
  141.   *szPath=0;
    & a2 d; V; b6 W+ r7 U2 X/ d
  142.   strcpy(szFull,szFullPath);
    - {1 ~% t( c$ x1 E
  143.   token=strtok(szFull,"\\/");9 n3 D& Q) C* j9 h
  144.   inter=token;' n1 s" v9 D" b( i
  145.   while(token=strtok(NULL,"\\/"))
    7 n; u) H. a% l: S; z' O) E
  146.   {+ v) T2 j* M) E$ O
  147.     strcat(szPath,inter);1 L6 E8 H5 l! |, o4 Y+ B
  148.     strcat(szPath,"\");
    6 L4 c9 w: U( z3 F8 I+ a
  149.     inter=token;
    ' P! K4 f5 w4 d3 c. m* `9 @
  150.   }
    % x5 G5 ?# u/ H
  151.   return strlen(szPath);
    2 i8 C6 w, u* W
  152. }) o9 ?* O* E5 z+ ^2 z" Y
  153. ; l3 K9 o4 G. t; J$ f3 f* v- |
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    " k$ P9 w4 R' H% Y2 C9 E% Y
  155. {& t& F5 j  c! q
  156.   DWORD attrib=GetFileAttributes(Target);
    * @" a7 \6 n( o0 ]" }7 x1 O  h
  157.   if(attrib!=-1)7 I$ `, Q+ A( B& g
  158.   {" [/ \$ r0 E0 c7 |, s  n
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))0 \7 w: s$ E  P: U7 O# Q8 E' S1 i
  160.     {
    6 {. K) K6 H$ s* [" Y% f* R# x
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);8 p% g  A* b2 g8 r
  162.       SetFileAttributes(Target,attrib);$ c3 p$ m% j- E
  163.     }
    ) N) q0 ^: O* h$ o
  164.   }$ V/ J2 ~3 |4 a% ]: L
  165.   CopyFile(Source,Target,Erase);
    ( r0 }4 N+ `. J+ y$ u0 k6 ^
  166. }2 c$ K% Z5 u: z

  167.   h6 c% e% r+ R/ L' U: J
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)( Y$ V; G4 I0 W- w; u7 G2 H# Y$ E
  169. {: }+ M8 ~* v  C. ?; h( b! k
  170.      FILE *fp;; W5 T) Y3 b5 c: j* S
  171.      char  szBuffer[8192];9 n7 O& v, D  r$ F0 o6 W6 q
  172.   va_list  argptr;
    , y8 w7 w9 B6 h+ }7 Z" e
  173. & i3 J& z9 l# u7 _, _
  174.         va_start(argptr,message);
    5 [8 p# a$ k% U  o. p0 @
  175.         vsprintf(szBuffer,message,argptr);
    7 k7 _" c* ^. d; F, G
  176.         va_end(argptr);2 ^4 G) e8 C% w4 Q: L% f
  177.   fp=fopen(FileName,"a");  r# j& T9 v% D2 D3 J
  178.   if(fp)
    # A/ }. k6 f" D% \6 P
  179.   {
    " O$ E( E& Q+ {  q! U0 L
  180.     fprintf(fp,szBuffer);
    3 M  G8 Z$ z  I! s
  181.     fclose(fp);) Q# d$ U) i: D6 W8 H
  182.           _flushall();) x7 L  z5 V. _. q& L
  183.   }
    5 Y5 N$ H# J4 o3 D: J' j
  184. }  ~" g* F0 e5 ]) d
  185. # k: Z8 b. d5 p& s: J1 g
  186. BOOL CRevAppApp::Fclearf(char *FileName)9 L; Z' W# W1 @- w  s8 m, f  U
  187. {# A+ [6 I, T( `, ^8 h& j
  188.      FILE *fp;
    1 b: V  P4 P. w4 a
  189.     DWORD  attrib;3 o2 Z9 o& R. N" T2 I3 {5 _
  190.   attrib=GetFileAttributes(FileName);9 G/ ?) @# m" a  \& u& r. `
  191.   if(attrib!=-1)
    % C, i, L' C7 k$ X5 P+ G8 x$ N
  192.   {" d: `: q. y# L: V! t
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);/ ^' _6 e" x9 N. p" E; e9 b
  194.     if(!SetFileAttributes(FileName,attrib))
    . z- x  |+ N8 E$ B  Y
  195.     {# Z6 y) C2 q+ K1 O6 Z
  196.       return FALSE;8 u$ O( k: [( w/ x& Q6 \
  197.     }: S  J' i$ v6 O1 r3 T& V! `3 o
  198.   }
      I8 s+ I$ O' D# n
  199.   fp=fopen(FileName,"wb");/ x% Q, d6 c2 `% Q- Y/ d: B6 {+ Y3 A
  200.   if(fp), m! R9 M% J% ?/ e7 R' u3 n
  201.   {
    1 A( q) G' T. D6 r8 {
  202.     fclose(fp);
    ' n: z/ t! B' Q3 z# T
  203.   }
    - c6 P+ P# `. G" `" Y* V
  204.   return TRUE;- D( {+ P, C4 B1 m6 ~
  205. }
    ) n; ^7 Q4 F* L. J2 |

  206. 0 J4 z7 a- Z6 E1 {# Z3 x) Y$ ?
  207. BOOL CRevAppApp::UpdateLocalVersion(void)6 p$ f' x4 D8 `" M9 W3 c
  208. {
    1 B: f" j" p6 M5 \: I, X! ?1 I
  209.   char filename[MAX_PATH];- R- H  x  M2 H2 c: x
  210.   LPUPDATEFILE file,olds;$ _/ q% ?3 Y# h  e  K( d
  211.   std::map<int,CString>::iterator i;7 g, v- d3 b/ A# `, ^
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    : F+ }& [* o$ h3 |. E- p- p
  213.   std::list<CString>::iterator l;+ ?: |7 y* f9 t! q
  214. . J. m/ d2 p% A9 }
  215.   if(bFirstUpdate)
    * a) \- [- t7 {* Y3 |. `1 x
  216.   {4 D/ U$ o! @+ a- s# N
  217.     dwCurrFile=0;
    ; G0 _2 N9 q8 R6 Z6 h* D& r
  218.     bFirstUpdate=FALSE;7 l* L' e5 e2 q: t* C7 ^; [9 F
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    1 \* v, |) D8 O# h
  220.     {
    - k, a/ @! k( O+ V* C& S8 V
  221.       dwTotalFiles=UpdateLocal.size();
    . Z& e4 ]" R" M7 v
  222.       dwDownLoaded=0;' D5 ^# R# N. P0 n
  223.       bSilentStep=FALSE;
    9 s: w- B, H. }8 h
  224.       bCompressed=TRUE;
    2 k5 U2 v: R8 _' L
  225.       strExtLocal.Empty();
    / d# t; O7 m+ u2 K' y9 p4 i5 s( ^
  226.       strFullName=(*i).second;
    5 a6 P. X1 d( r5 ~9 t
  227.       dwProgramState=AP_CONNECT;
    / @. N& R1 ^5 s/ F3 ^2 n" B& z6 r5 g
  228.       return TRUE;
    3 Y1 v* c3 x& J  w4 `: h7 L; _0 R9 S+ p
  229.     }* E- |* o/ G$ n/ U
  230.   }* i; f  s& u1 o: `
  231.   else if(bRestartUpdater==FALSE): n3 O5 |  V0 y* R
  232.   {
    6 l. o" ?2 K+ M% N. [5 G4 a
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      @; P. j- ^( {3 e4 B% E) o* A
  234.     {
    * }5 j9 R6 k3 q' s# Q4 J, i2 t4 f/ C
  235.       file=(*p).second;3 V# o& A. j/ d
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()): Z# R) ~% n; R6 i( H* ~; R3 g7 y
  237.       {# t' g1 L6 f  }$ y
  238.         olds=(*p).second;" s! z1 M; f9 t: h2 r- M9 ?; ^4 Q
  239.         olds->vers=file->vers;
    3 z# [% B% s4 `5 J2 a* L
  240.       }
    0 t# k8 z" }9 |3 @6 x
  241.       else
    $ c/ _- ?2 C1 @8 V2 _9 q
  242.       {
    9 O& Z9 [8 |* \, H; Q5 G
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 |7 u: L* N$ b; C* {# B& R
  244.         memcpy(olds,file,sizeof(UPDATEFILE));2 ^+ y$ h; h; Z( q2 e+ K3 b, L
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));" {" y$ n) ?# C( P! n
  246.       }* J, P) l) t  C, R6 i0 @$ k
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");; O  O8 L/ h7 _4 E  a3 K: Z
  248.       sprintf(filename,"(%s)",file->file);
    ( \" E( N7 f: t  \2 k  \, K: M0 j) d
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ y6 K& R' f" ^/ s4 I8 O4 v
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }+ a' f% {; ]  L0 O
  251.     }
    ! u8 w! Z) b7 \& [' K
  252.     dwCurrFile++;& f" P( g  u9 W) ^. b9 g) z3 t
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 l  U: E/ d9 p6 T) N- z. c, |7 G
  254.     {  P8 }) N& U- Z3 K% m! I) g
  255.       bSilentStep=FALSE;
    , ]7 M0 `& `! a/ U8 N
  256.       bCompressed=TRUE;
    4 p) ^: c7 v. G8 @, o+ r5 c
  257.       strExtLocal.Empty();
    ( c5 a, N" T1 S9 f
  258.       strFullName=(*i).second;8 ^' B  s% I1 b# c( t' j) \; O$ M/ d
  259.       dwProgramState=AP_CONNECT;
    % j; }. }& Q2 L" E6 ^& @
  260.       return TRUE;
    6 l8 ?- U; x4 \8 _
  261.     }
    1 m0 m* r" ]7 Z
  262.     if(!bRestartUpdater)! M% A' G3 }- F
  263.     {0 G1 k$ o# J7 r% c" J' |7 z
  264.       int iCurrSize,iFileSize;% Z5 Z/ ^4 f/ y5 h& m8 z
  265.       iCurrSize=0;% N6 E9 R4 j$ V8 x+ I
  266.       iFileSize=UpdateList2.size();
    8 [! b4 T6 a$ N; S: x
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");1 G0 g& T* `4 L
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
      K$ S: I  f* @" Z6 ]
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 C, m2 {+ E3 h# m
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 r  ~, I3 Z8 w( B- l3 |; L
  271.       Fclearf(".\\update.dat");
    , P4 y/ L7 ]- D8 P
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ; e7 }; Q& e. V: l
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & b5 P5 L6 m( [" j% ^
  274.       {. c" A" S8 x, q" E" ]- q) }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    6 M& U3 t3 X- s6 ?9 `* `1 h
  276.         {& E4 J: L) l5 q& E- v
  277.           file=(*p).second;
    , m: s. ?+ r1 w2 d1 S7 _/ t7 M
  278.           sprintf(filename,"(%s)",file->file);, n" I9 h0 m4 Y! H5 J6 a0 D- [
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* c1 {' E) d' U! S' B8 E
  280.           iCurrSize++;; ]8 m! O" Q" h) E9 b3 [5 a
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    $ I. v5 n4 v4 p( l& @$ T
  282.         }
    * L. {+ s: A' I
  283.       }
    ( j; r9 k* k8 @( w
  284.       unlink(".\\update.txt");/ s( P; d! x; K9 b' w0 p( k1 s0 Q/ \
  285.       unlink(".\\update.tmp");
    7 ~- \* }1 s$ t+ o/ F+ ~& N+ @/ G3 F
  286.       Fclearf(".\\checkversion.dat");
    , |% j) x+ {5 t6 d
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ) u: i0 j( N+ X. b& E: r2 T
  288.       if(UpdateLocal.size())
    & _# h0 k8 l! k6 G+ l
  289.       {0 _! N* O4 F6 |9 ^* ^$ H2 L- o& Q
  290.         UpdateLocal.clear();
    7 h% }7 g$ e6 D& h. S3 R$ E
  291.       }! _, L  u/ F# r. c) |1 ^8 D
  292.       if(UpdateFile3.size())' m. x2 r$ f+ G8 y- f
  293.       {
    % I9 T7 K7 i4 U0 k
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* w0 r6 x+ U8 U8 }* U# u1 v( Y5 W
  295.         {3 `, B4 x/ s3 w( @# A
  296.           file=(*p).second;
    . d; Q- @8 `( j: h( d
  297.           free(file);, }- `- F+ S, b3 `. u
  298.         }
    7 S( h- @1 M5 O
  299.         UpdateFile3.clear();
    7 t* y4 R: h5 A& w2 x6 f
  300.         UpdateList3.clear();& O7 t5 |# j% e* E# r9 a
  301.       }5 G$ A3 |+ G- G
  302.       if(UpdateFile2.size())3 r  C: ]" y1 M# `$ r/ Y2 {
  303.       {
    % b' i& \0 X. J# f* g
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- x& B* \3 r( Y4 u( u) N. O6 i
  305.         {3 R$ q( y% g; H" u5 ~9 K
  306.           file=(*p).second;
    & G* d% D8 V3 e  _& @/ o9 u- Y% }
  307.           free(file);
    1 B/ h2 D! d( w" ]
  308.         }% y9 c+ p- c0 d6 J7 C+ ^+ Z
  309.         UpdateFile2.clear();
    $ q5 \. x; P! J% Y
  310.         UpdateList2.clear();3 y; Y) q$ V% k1 o
  311.       }
    ( C. q; u' J; L" H8 J  F8 e
  312.       if(UpdateFile1.size())6 Q! F/ L% M) a3 Y6 O
  313.       {
    ' u* z& b+ a  x
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- i& f7 Y& F! |( Q' b
  315.         {
    - p7 B) e6 q; e  k6 z: Y: N: g
  316.           file=(*p).second;# c! f# r5 N8 |6 x* B" D' N
  317.           free(file);- S& [9 n; F0 P  V$ J7 n
  318.         }
    4 m2 B& j& k& ?
  319.         UpdateFile1.clear();
    4 s3 o( Q0 l6 p+ }$ @5 g
  320.         UpdateList1.clear();3 i# ?$ F5 k) N, O+ |! F, g* i2 s# O
  321.       }# ^: [6 E% ]1 Y$ {3 I) H
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));0 C2 S+ ~. B( l* M
  323.     }
    . X; H, e( `. y# g: s/ A
  324.   }$ ~2 h, a# T6 g. r/ E& ]9 M
  325.   return FALSE;
    - B( H0 s8 A; t2 |  R: }1 w
  326. }
    ( E0 [* ~% h: e8 l" t( Z
  327. 0 V6 b% D) {: H
  328. void CRevAppApp::ClearAll(void)
    & b/ B: P$ ]% |* ~8 _
  329. {
    . V2 p% F5 |- e' v4 h) r9 Z+ Y3 ~
  330.   LPUPDATEFILE file;
    2 q' J; g& w3 B& L+ N: z0 i4 S( o
  331.   std::map<CString,LPUPDATEFILE>::iterator p;/ p$ Z# _- e/ n/ _5 f" I
  332. 7 y, R4 ^4 b4 S( I. p9 D% g
  333.   if(UpdateLocal.size())1 \5 \0 Z0 D2 D0 I
  334.   {
    4 s7 v0 Z$ z) p
  335.     UpdateLocal.clear();. E4 i% n& u8 d# o4 U$ V
  336.   }" }0 r+ p1 s4 z* Z6 B9 a2 |  ^1 \# n6 h
  337.   if(UpdateFile3.size())
    + w1 i' K. ~* o# i1 e
  338.   {
    - m/ Z8 W, Q8 ]! [2 e6 y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! l& W" J# p) `8 u4 b9 @6 S) V
  340.     {- b& w2 |+ N" ?" E
  341.       file=(*p).second;
    6 J0 V- J* k2 i
  342.       free(file);8 a/ ~. B, }" I% n* h
  343.     }0 |$ f) F: s1 X! X$ A
  344.     UpdateFile3.clear();( ]6 [0 s5 M0 F4 S- V
  345.     UpdateList3.clear();, ~0 k8 Q4 X' \: X! h5 G1 }8 Y
  346.   }
    % E) f  N% A& u
  347.   if(UpdateFile2.size())
    3 Y+ ?% `( @% ]! I/ G/ g' H6 R/ p4 S
  348.   {
    - a8 f% p) V2 L
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " e$ S# P- |/ n1 D) w) M3 _: U
  350.     {8 M/ n, |$ }/ W0 v  [) k
  351.       file=(*p).second;
      U* j8 k. I" M( i' e( b/ m
  352.       free(file);8 \5 ^: e. \5 A0 O
  353.     }4 G5 T3 n3 t5 }: u6 B
  354.     UpdateFile2.clear();9 R8 e  h! G  I
  355.     UpdateList2.clear();
    : e* B- t9 p1 r1 a) ~
  356.   }: ?' `1 ?2 a$ F) b( ^
  357.   if(UpdateFile1.size())
    0 W7 ?& w) p  E9 J, E
  358.   {/ X& q9 Z) E0 f( ?% d
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; s/ Q- m1 ~$ Q0 ]
  360.     {
    ' E$ K) M: {% V0 @+ \0 s6 j- [
  361.       file=(*p).second;1 |3 `* x0 c) A  H# M" f' Z
  362.       free(file);
    & N. Y! o. {7 x& r. g
  363.     }
    , j2 n1 E$ u: _$ F9 g: D# P
  364.     UpdateFile1.clear();" d" _2 `9 q( K) n' Y2 h( H' j5 Y1 l8 ~
  365.     UpdateList1.clear();
    5 q& R2 ?* Y: D! j( j- c& i5 `
  366.   }" ?; l$ U0 F9 R: L
  367. }  - R- z; e8 ?, y4 R
  368.   
    % f: E, U# i) l" e9 d! @
  369. BOOL CRevAppApp::CheckLocalVersion(void)) Z" `0 k) _$ I. ?; C
  370. {5 n) r1 E& h7 g: q
  371.   int c;/ z  J/ |4 {8 @0 `1 b
  372.   LPUPDATEFILE file1,file2;6 w; E1 o' o7 D+ z; i# K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    7 O. d3 W, k: w# V5 u
  374.   std::list<CString>::iterator l;7 y/ F+ F9 K) Y3 ?, {; p
  375. ' F4 R2 ~5 U: u/ o, U
  376.   UpdateLocal.clear();
    4 F6 z8 t4 H/ P, ^1 ?3 _
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);. C( ~; z+ r, K- [4 z2 E
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    3 E. f8 Z9 h# z5 g+ y) r0 r
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 X8 A* I3 ?2 B* {3 I/ r$ A7 ~
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 Q; s9 F% b; [4 E3 U/ A
  381.   if(UpdateFile3.size())
    - w& {# T- {! F# E
  382.   {9 C" K( ^5 ^3 s% r. A
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)5 b5 x# W$ a: V1 p5 X
  384.     {
    & |. D: _( O- e# I+ U% {% c/ H5 h" |; R5 D
  385.       file2=(LPUPDATEFILE)(*i).second;
    : b# O  Q* A4 J7 j
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 m; t7 l0 Y* e
  387.       {" u& u% p. y" S+ R4 o  L8 Q
  388.         file1=(LPUPDATEFILE)(*p).second;
    ( R3 H9 o  z: V" j2 o; a( [0 W
  389.         file1->vers=file2->vers;
    * b; W) Y3 N) E% {9 E
  390.       }& `6 k5 \& n7 g$ ^1 b, D
  391.       else
    ( h$ x( E8 V  t" T$ V
  392.       {" D2 j' h" a0 @0 p! y8 ^" d5 B
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) j: ~6 u) Z8 n
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    & H  H$ j8 S/ K' J2 W/ J' a
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));! C4 i/ Y9 v- n( f$ u
  396.       }
    6 R7 P) T0 {/ \. c: J8 o. A
  397.     }, P( G. G4 k+ @: H( ]
  398.   }
    . l. C: F2 N2 E4 _( s) ]9 s
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++). @& {5 P0 s+ u% ^( G
  400.   {
    # A* q/ C! _' c" o+ `9 p% w
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    - _  d: R' \% r7 G. L
  402.     {+ k3 \$ r: A) G1 u1 a; q& e: i$ K, K
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 h. s1 U  l" k. h
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): B* T0 |: h8 g, ~; s- f
  405.       {% K2 c2 t  h, U- L6 ~3 V$ l
  406.         file1=(LPUPDATEFILE)(*p).second;. {; t8 Z. P+ w2 d) o& E0 r3 t
  407.         if(file1->vers!=file2->vers). C# u9 T0 C$ \- V( N/ W4 B4 o6 U
  408.         {" K/ L! d) r8 D- s) c; h- \
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - w6 Y+ U* {& u/ N
  410.           c++;
    ! U$ O& B" U$ g- h( w9 i( N6 Z
  411.         }
    # O! V- O# d+ S
  412.       }
    5 p  D: [. z, P# O
  413.       else
    ( @' A6 Q9 Y$ M2 `1 J) l
  414.       {
    * Y2 t- _- W8 m' H5 |
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % Q9 W5 K. A( I* g* W3 i6 f
  416.         c++;  b8 O3 t/ p2 O7 U2 t# Z$ Y
  417.       }* N, \8 w4 x2 {) ~: y
  418.     }, n0 j1 i4 H6 Z
  419.   }
    # w3 F" p6 `+ c9 }7 `& Q( R/ H  t
  420.   unlink(".\\DownLoad\\update.txt");
    - M1 m8 q4 C$ E8 _/ J1 j
  421.   if(UpdateLocal.size()) return TRUE;
      [. Y/ _0 ?3 l* b+ H- O
  422.   else                   return FALSE;0 \7 C1 Z0 P6 L5 j& z$ U
  423. }2 n) V  K9 Q# K. K- I; L, p- I

  424. + I5 I' t' @2 `# e& X" X1 V7 q/ _
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"; f- S- L* y9 Q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"9 Q4 x) j" h8 ?
  427. 8 C) _# m% j$ @1 b  o
  428. % j# C- _, q: h# r; n
  429. . w- z' Q1 U1 J4 `1 N
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)+ c0 h- L/ Z7 H# F* y& a/ ^
  431. {) h0 l: B' \! Z$ ?- g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;' _9 ]# x7 b9 |
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . Y; `  [. O8 g' |5 N9 p# e( S
  434.   {
    ( K' u* {  w  G- U
  435.     char szLanguage[50];) k4 O9 t( D- K; H
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 w0 V3 y, m( e1 V1 [/ J' H
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. ^- Q# ]" N4 U, H: W, P" V% N
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      N+ x3 c/ }& D
  439.     else                                   m_iLanguage=ENGLISH;
    7 G/ M8 u& q6 [5 Z% H3 O
  440.     char szRegister[100];; o2 b. k4 T. b0 {9 G
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 I" x& p0 C  K0 o7 f4 @
  442.     strRegsName=szRegister;+ _. b/ U! y' `& ]! b3 g
  443.     char szPatchURL[100];
    . M# {5 O5 Z% F- ~- }
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 t# u$ T1 c. n% J
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ |  c5 V1 |9 n* K9 O6 a
  446.   }
    1 m: k: U0 Y& F" Y, Z
  447.   else
    9 f) `% X) Z0 U, h8 @, G
  448.   {
    % X0 k5 E, K7 G9 F: p" Y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 y' ?2 m( |4 l* k0 V
  450.     strRegsName=DEFAULT_REG_URL;1 `2 q$ w2 L$ \: I* n- |
  451.   }) K: ^8 _/ w' A
  452.   if(GetFileAttributes("hosts.ini")!=-1)0 k" A1 P4 P9 T* c0 ]
  453.   {
    $ e) ^' h6 ~3 b% n9 y2 `. u
  454.     char szIP[50];8 S  u4 P( l9 ?- B) d7 ^4 b8 H
  455.     char szDIR[300];8 R8 [/ [# Y  @
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))6 K4 q* ^8 S% e
  457.     {9 B. b# D0 g* K8 f0 Y, R  O( M% x
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");( Y, J; ~  U2 B
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ! ~# _1 V2 n9 e4 h. `6 l9 l
  460.       strHostName=szIP;! p5 i( W% r+ ?$ Z
  461.       strHostPath.Format("/%s",szDIR);6 O8 o7 c( r  l& p2 h. w& F3 B1 D$ `
  462.     }/ _- z! g5 C2 e
  463.     else& e2 }" f+ C3 y4 p! ?2 t, k2 P" l
  464.     {
      Q: ?* Y0 t9 [& F* v" M5 n) Z3 T
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 j; D' w, v/ q1 t1 g/ k
  466.       {
    ! k7 T# k# q" T' U, J( L: w4 [
  467.         char szLanguage[50];
    % t5 b8 Q) o: g2 X3 K9 ~
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ g5 Q" }% g6 I, H4 x
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 D0 _" ]7 M2 i0 T; q! Q8 C
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 N) u; u+ z% U5 h3 N+ v) B' H
  471.         else                                   m_iLanguage=ENGLISH;1 P+ @. r, C3 K# I* v
  472.         char szRegister[100];
    / j7 f5 l* R; J8 p
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & T/ H( }! P( H2 ?# ?! m
  474.         strRegsName=szRegister;7 C+ J) d" J( H& V. A$ Y4 x
  475.         char szPatchURL[100];9 z) Y8 j0 ^0 }$ e7 u
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / A) A: a9 m- R( |7 {$ Y5 {8 J
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  z8 G7 d3 Y& i$ H: I3 f: V5 G
  478.       }
    - C  o) {# V8 J6 ~( f
  479.       else
    % H9 d* z4 F% J: v
  480.       {+ i2 C- U1 h  g" n1 Y
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # U7 T( M/ H2 m( \/ `" {# N* F* Z
  482.         strRegsName=DEFAULT_REG_URL;- x& n. U( i' N4 A7 S; N
  483.       }
    2 z4 h5 I( Z" l
  484.     }
    3 b5 S  Y% C" e1 r" {/ k
  485.   }" `0 U+ k4 i' d6 \, C2 e3 n+ l
  486.   return true;
    6 L/ D- h5 v" ]: D5 n8 m3 V
  487. }9 Z$ A" Q+ ~0 u" g" I

  488. ' c1 g* n( }) \1 d& b8 F- N1 L
  489. #include ".\ZLib\unzip.h") k% \: c- L& Y! ]* r2 h8 m
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    0 l/ G% m, D) T& K9 Q( O7 A
  491. /////////////////////////////////////////////////////////////////////////////
    : X& q! J! Q* e
  492. // CRevAppApp initialization9 R6 W8 `. H) E. z2 v
  493. + y) m0 w/ v' s/ d+ e3 W
  494. BOOL CRevAppApp::InitInstance()8 B! v" D7 T, b% v/ ^
  495. {
    0 r& B4 R& O# V9 |7 q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];. U9 Y$ a5 c9 z; I- y9 J( `

  497. 0 h/ @# A1 c- k/ v# ]' z% a) _
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);+ j% e0 v: a: ]. f% S) Y* r
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    # S3 m; f0 q( _! U% c
  500.   {2 P1 e/ H' j6 J; I3 o
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");. k1 {- ?6 v6 R. t8 ~  C5 Q+ F5 R; r# ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);1 `0 r5 \& [/ S. a
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    * X# ?' Q! \1 P4 K$ p" n
  504.     {% i6 [0 @7 b* B0 w  c8 C: X& p
  505.       strcpy(szPath,szPathTarget);: r" K3 i3 r* `% {3 G5 U
  506.       SetCurrentDirectory(szPath);
    0 i% C  ]! W4 a0 `
  507.     }. B, E% x7 N; {+ f' |
  508.   }" j+ T! N8 z. H4 r1 `
  509. #ifdef _DEBUG
    % _( J+ A% k$ M! z7 ~
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' l$ ~/ L& w; j# F
  511. #else9 s3 N5 A: ~5 i9 z0 W0 x* j+ U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" U4 v& b2 L1 v& k+ g  u, y
  513. #endif; d5 z7 _* O' Y" t$ Y7 \2 n
  514.   {7 P' b0 B6 D/ }6 p% g
  515.     char tempFileName[MAX_PATH];
    9 ~# b0 p& e0 |# g: q
  516.     strcpy(tempFileName,szPathSource);
    . R) `  I) V5 B" f$ s3 _( B
  517.     tempFileName[strlen(szPathSource)-12]=0;5 c* Q. x) X7 V4 c4 u7 e2 c6 \
  518.     strcat(tempFileName,"\\$CSUpdate.exe");9 ~6 X4 q# {- m. _& U& p. C: z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);+ S. j( z1 m; I( O
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    6 Z2 T8 v! K) a7 \
  521.     return TRUE;
    . `( f- K1 d: r
  522.   }; J8 j+ L3 ^) c/ Z7 }! }$ _4 p
  523.   // Nuke 0118: Delete run.exe/ r0 S: O$ c, D2 P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ( t( A5 b* d3 r5 t( T. u9 X
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");1 K# t/ @+ K; P
  526.   if(!ReadCfgFile("Config.ini"))4 [8 S* u$ {, P6 `; a: [
  527.   {0 ?5 e7 g% ?' N/ U
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    & G0 o$ s% f8 @- S9 H$ p
  529.     return TRUE;' o0 z% V4 A) `1 z
  530.   }
    ( d) N+ m" {$ D9 ?5 R6 j3 l: @! O
  531.   HANDLE mutex;
    1 F2 q3 p5 M* K  v6 d8 A
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    " F( G. l7 L# W9 B* @
  533.   {. j9 t$ j; p6 v! Z" b% c6 E) h: M2 Q
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    # |' y+ F4 m- j/ e! ]! f+ |0 A& g, `
  535.     {
    6 }/ k4 |: @; g0 A. e
  536.       CloseHandle(mutex);
    ' w, @/ q5 @1 l! M' }  F' e
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * O. g; U; t5 x4 e2 Z
  538.       return TRUE;8 r6 D8 n! Y0 A1 ~) U0 E0 [
  539.     }
    2 Y2 g' c$ h2 w! x
  540.   }  
    : d' I( u! n" O- {$ r+ ]) ?+ }' e
  541.   CloseHandle(mutex);
    / n$ d2 P5 `8 A* m, k6 R/ t
  542. , |, U9 g. k( t& q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% K4 F/ k& h7 e3 R# d3 U* |
  544. 7 g# z9 U2 S3 ~/ f% Y0 }+ g
  545.         AfxEnableControlContainer();
    ) S- e, v" y. q: A: I
  546. / z; D3 }/ F5 S3 p5 H! e( ]
  547.   bCanUpdate=FALSE;3 \' |( e* G' H/ b0 F
  548.   dwStartUpSteps=1;
    ; w3 O! j% v' Y
  549.   dwProgramState=AP_NOTHING;. h5 N: G' l7 [( l# a' |1 K) V2 H* o4 h
  550. 2 y* @: v5 E" o; \) E
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);8 x3 l, `( E8 N" L
  552. " ?0 {9 V3 v9 f" Z4 X
  553.         // Standard initialization5 E1 v. ?, q+ w& P) t7 A8 r6 \
  554.         // If you are not using these features and wish to reduce the size
    5 r# D/ a6 ~$ v! c+ i: \9 P
  555.         //  of your final executable, you should remove from the following
      J) B4 d$ [/ r
  556.         //  the specific initialization routines you do not need.
    " d9 D( {( c* b  F9 q/ m
  557. 7 i; j* K! b& b
  558. #ifdef _AFXDLL' _3 r" h* o5 O7 W7 [
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL# E3 K5 W6 n) h$ [  `
  560. #else" s. F& B" c8 ], Z4 |! e
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically# x& F0 l& g, J7 n. m
  562. #endif
    " R9 a, u4 u/ _
  563. : Q* L! d5 B4 ?
  564.   dlg=new CRevAppDlg;
    6 w+ ]5 F9 f7 p  Z" L1 ]1 H+ A
  565.   dlg->Create(IDD_REVAPP_DIALOG);. M1 @0 ~$ k; \  R* h% t
  566.   dlg->ShowWindow(SW_SHOWNORMAL);$ Z4 f" P9 G8 c7 \' |
  567.   m_pMainWnd=dlg;
    8 u  @$ [: ^: T+ C
  568. 0 u7 ]% K4 p# u+ J2 h
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 x/ {# H' Z% T* k

  570. 1 K( K: q1 ]+ G! N, E$ E* V
  571. //  GdiplusStartupInput gdiplusStartupInput;
    4 q0 p8 Y" u, R2 a4 V$ Z' k# j
  572. //  ULONG_PTR gdiplusToken;
    7 D' Q& ?$ d7 |
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    : m6 I2 N+ d  }3 `
  574. ) p5 m5 P+ r* L6 V
  575. //        CRevAppDlg dlg;. U# ~6 m# N; J) o  _' q1 i7 q
  576. //        int nResponse = dlg.DoModal();
    . p: c2 Q8 t8 v4 s- u
  577. //        if (nResponse == IDOK)
    ) E/ W( o2 B' ?2 o* K
  578. //        {
    3 C# k, h6 d+ E; t
  579. //                // TODO: Place code here to handle when the dialog is
    , i! X9 f8 L; U* N8 O" c
  580. //                //  dismissed with OK
    ) l( D8 c5 D. O' s$ X: |: T
  581. //        }( {4 o. ]/ F0 i, a5 j
  582. //        else if (nResponse == IDCANCEL)  W4 S9 w0 \9 z& |+ K) y
  583. //        {
    1 G% q5 M3 u- l) g: H' b0 O2 @% [
  584. //                // TODO: Place code here to handle when the dialog is
    9 r$ p4 h$ B1 T/ j
  585. //                //  dismissed with Cancel& `% V) W1 q% X2 q5 l- _
  586. //        }1 ]3 S; N, l- J0 g  P7 K
  587. " |7 B/ h" f/ D- Q+ g
  588.         // Since the dialog has been closed, return FALSE so that we exit the0 A6 Q) C; Q- C% T( V- @
  589.         //  application, rather than start the application's message pump.
    / R5 E$ o& N3 j. `# f
  590.         return TRUE;
    7 p0 d0 j8 p  a/ u8 _
  591. }& Q. |9 r2 B- k; D
  592. 4 @/ x! Z6 b5 ]( T  W$ c
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    3 T( I7 J! ]; T8 f
  594. {
    & C* I7 o( Z: e
  595.   int i;
    # J' v: v7 W* i6 ?
  596.   char *szRet;+ t# I% @0 [9 q. Y" A

  597. 2 D  c  c( b" G7 J
  598.   if(pSource) { itoken=0; sztoken=pSource; }; [! K3 `, x/ C9 u6 K
  599.   if(sztoken)" @; d- \, ^) {1 q' h3 U0 O& C
  600.   {
    7 X! T' q, g2 e' K
  601.     szRet=&sztoken[itoken];; W; b2 }  d7 ^& o( T' v: N
  602.     while(sztoken[itoken])
    7 k( Q; I  z, X
  603.     {
    5 ]" _/ Y( \+ F! Q& O. G
  604.       for(i=0;i<(int)strlen(token);i++)6 g7 v, P: a! [/ E' M3 |
  605.       {
    % j/ D  N2 J/ N4 N5 U8 t
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    * U- b3 l0 W0 G; @- X# `
  607.         {
    ; I# V; P; q; ]3 y
  608.           sztoken[itoken++]=0;
    ; R5 y' ^% C; r6 `
  609.           sztoken[itoken++]=0;1 E0 n1 o5 _8 g6 B2 V% {" D5 l) R& O) L
  610.           return szRet;& B" c. }1 m+ Q, b6 V
  611.         }# x5 E0 E# E6 G" S' P
  612.       }
    ( g& s0 c5 I5 b$ V0 f
  613.       itoken++;* y6 y% r' X0 x8 n
  614.     }
    0 ]; c0 a5 s( T( p* k/ s; K
  615.   }) ^/ }' a+ i# k* u7 B& @: R6 o
  616.   return NULL;
    : b0 x$ m' s  O8 O" g
  617. }1 k; T7 I8 S' ]- {1 U, S0 }+ r0 a

  618. # a! a% O5 [3 f$ N$ S
  619. void ProcessProc(long Total,long Current)& h) s- ]7 M# x% W' i! f3 Y
  620. {) d" `) ^. R+ A9 L/ e5 h/ p
  621.         MSG msg;" s3 S8 j/ _- H( O0 V7 L
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    2 ?% N( C5 `8 @
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    + C; ^# \9 @( B$ ?- M
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    - K' ?4 q7 a4 }% A5 ?0 m  K% L
  625.         {
    ( x% ?+ j+ u0 r* d
  626.                 if(!GetMessage(&msg,NULL,0,0))
    2 E3 H: E) k& W9 R5 ~( t
  627.                 {6 P" m. ?) W8 i2 P
  628.                         return;  M; y, e5 d4 p
  629.                 }# y) u& s% V0 S* i) R
  630.                 TranslateMessage(&msg);$ D& x+ t- ]: y; q
  631.                 DispatchMessage(&msg);
    . n5 ~/ e7 X) r& J3 G
  632.         }        % D) O2 |* O# X5 x
  633. }
    9 ^5 |+ r" C6 n: O# M$ e

  634. 7 N& ^2 `! D9 n2 }& _, V' S+ P
  635. BOOL bFirstChar=TRUE;/ \) O3 J- r- z9 n2 j
  636. 0 E* t6 r% D# [! D* i. \6 f+ ]) Y( l
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ p- ^0 T  E2 o- D
  638. {- y* C+ G5 q. c2 i
  639.         // TODO: Add your specialized code here and/or call the base class
      T7 b/ p4 }" B1 |: Q" D3 e. L
  640.   switch(dwProgramState)
    5 _4 p4 m  n3 K& e
  641.   {
    7 B1 x* T% u6 y9 a8 A
  642.   case AP_NOTHING:
    - ~9 i- R( |8 S7 M
  643.     switch(dwStartUpSteps)
    ( k/ O: I# y3 c5 k% T4 X
  644.     {8 {$ Z+ |  y# Z8 }: J4 E6 C- M
  645.     case 1:
    # n8 G7 U0 B2 l7 H$ z1 O9 j
  646.       {+ G; _" I+ w9 o# V# P8 P
  647.         int i;( y  z" w. K8 G" P% b! l. a2 j) M% L$ X
  648.         CDC *pCDC=dlg->GetDC();
    , w6 h7 T5 J. L" `
  649.         HDC hdcwnd=pCDC->m_hDC;. ]8 X2 t& y5 }, B; O
  650. //        Graphics graphics(hdcwnd);
    $ h2 j" n8 t; e9 h3 y, Z+ `
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");8 [$ E) D9 d  S7 Z5 c' }
  652. //        INT iWidth=bitmap.GetWidth();
    0 X( i; I+ R% d
  653. //        INT iHeight=bitmap.GetHeight();
    0 e" S$ ^- Y! H6 g- _; |+ [
  654. //        Color color,colorTemp;
    2 o) O, _* ?  I6 `0 s5 P0 b3 i
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)1 b5 k$ {. B3 G" H2 r
  656. //        {
    4 |7 P  r( A# q- B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    : [+ r8 I# I/ j# M& z, D/ O4 N
  658. //          {# a- e4 R5 L* N+ M. S8 F) D, \
  659. //            bitmap.GetPixel(iColumn,iRow,&color);  `# T- T' u/ J1 R: c  X
  660. //            colorTemp.SetValue(color.MakeARGB(
    + C' y  K- V+ R  l$ \
  661. //              (BYTE)(255*iColumn/iWidth),' _; n6 z4 K6 q  C( z! p
  662. //              color.GetRed(),
      o: g& |! M0 S
  663. //              color.GetGreen(),
    " A* S% M" U& q' G
  664. //              color.GetBlue()));/ P/ H: r( u0 b+ a9 m
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    9 }3 d$ E0 a# n7 @2 h" q+ [" Q
  666. //          }
    : L; i& O8 w# e/ [/ _) `' ], G) u
  667. //        }  r( e8 g" g, ?( s9 E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    5 \- b$ L9 L" T
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # `/ x" E# x& z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");# b+ E$ R* ?9 q+ C3 o+ f$ K
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 U5 e6 C: y! H' {, h. N  t
  672.         for(i=0;i<240;i+=8)
    + P+ \$ s7 S0 H/ G) k
  673.         {1 Y  I; s, ?5 i5 C" ~7 t. g% v! G
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 }2 k1 y% F' t7 n- y: S# ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% M9 h/ p0 T; c  ]
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  I8 o8 ~% T/ w+ b, S/ J8 _
  677.           Sleep(33);
    6 Q' m0 R  f, k1 \) J  r
  678.         }
    0 v5 n; [$ o/ G$ x
  679.         Sleep(1000);
    . v5 w( ^7 w: G
  680.         for(i=240;i>0;i-=8)9 ~) b* L' y* a5 ~' ^2 F
  681.         {$ p8 {" P+ d) u  O( A8 v
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % @9 n- ^  T2 v3 y. t6 \' l
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: z8 W$ t2 I8 Y  S2 B2 p) H4 ]1 l
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);8 S, q. M& }' l, t
  685.           Sleep(33);0 _- Z# \' B- v3 L! R' A, \
  686.         }6 W! b; _. ?/ s6 o$ ?
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);; a% h) E$ C$ g
  688.         dlg->ReleaseDC(pCDC);
    8 L2 [  O8 C& H/ i" q0 G5 q3 n
  689.         DeleteDC(hdctar);# u5 z% G. D6 J9 K' }! X
  690.         DeleteDC(hdcsrc);7 o- J+ ?1 Y7 G! P1 \+ Q
  691.         DeleteDC(hdcorg);
    , e) ]% f3 e% y3 ]9 h+ [1 O
  692.       }
    ) C0 [' C$ @8 o, G7 c7 {/ Q' v
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    + c  q7 v6 `% x* o# z
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    # [* c0 `- C3 P; e: L
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");  W' G5 z2 m* j+ q# \& p+ O, U$ R
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' ?( G9 q" j, l6 y* o8 N
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 ^7 f9 m+ w/ }' U0 p
  698.       if(!Dn.Connected())' O5 b' {" L" X3 R( `9 V
  699.       {
    2 \8 J7 L$ |% q$ m: l$ p
  700.         dwTotalFiles=1;# p2 X' o- |% S' p- b0 T
  701.         dwDownLoaded=0;, g, ]. b. u$ F) E. m+ D
  702.         bSilentStep=TRUE;4 X3 @; ^9 l4 j  k+ P4 |
  703.         bCompressed=FALSE;
    0 k1 L6 E& i0 E0 U: X6 z
  704.         strExtLocal.Empty();; R' D$ F2 F2 N' O1 N
  705.         strFullName="readme.txt";, t& O7 ~9 B! \4 O" L% ^3 M
  706.         dwProgramState=AP_CONNECT;1 k, c( G6 m' Z  c8 B/ C
  707.       }
    . R( ^6 E8 `( I! w% k& {
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    $ [+ z5 e) A! x8 u( \. I
  709.       dwStartUpSteps=2;
    , L# z0 T2 K7 \, Z& ?: T! S4 e
  710.       break;
    . |# t( Y  y' f5 s$ A$ e, {+ f+ v
  711.     case 2:9 e7 I6 M  i4 R  e4 R( e6 N
  712.       {
    4 N% ~' c6 V1 P. t* f3 D) {+ n5 u& M
  713.         int iEOF;
    . y/ R. r. D% d" w
  714.         FILE *fp;  Q$ T$ }. E6 `" ^# ~
  715.         char szString[512];
    9 i/ s; ]! R( T5 `- [6 D, g
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    9 G& k4 F* c' n" H" n8 C4 i' j' R
  717.         if(fp)) H7 H5 T9 y) N
  718.         {
    8 [' e  k; [- B" g
  719.           do7 b6 y4 e8 v( u! e+ ?8 q4 P5 Y
  720.           {
    4 d2 t: N% _( m. K9 m
  721.             iEOF=fscanf(fp,"%s",szString);8 K! Q5 D$ F- N9 i1 @: B
  722.             if(strlen(szString))" u0 z( E4 g8 z% f5 V
  723.             {# S7 N3 K% M9 D. D$ P( f2 R  H
  724.               if(bFirstChar)
    9 v$ R- I7 o; e# W! j( ~
  725.               {
    4 k6 t' E1 g$ h# P+ F4 @
  726.                 bFirstChar=FALSE;0 i( i! x6 ~  B0 k; _& g  M' p
  727.                 bConnectIsBig5=FALSE;2 u6 P& H7 p2 W: z% _5 E
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    / `& j1 s  T, W9 S8 V6 E% e, [! v5 K
  729.               }( j' ]# \) |, Y) z; X  P# ^
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    2 M. m3 ~- ^, }0 w6 s
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));9 h7 r. a) y/ Y, \+ Q/ f
  732.               dlg->m_ListText.AddString(szString);
    ; \; [: C0 `9 n1 E( J& ^
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ {/ c3 I2 \1 n1 O$ C; k* b- E* F
  734.               *szString=0;
    6 Y: `4 {) d+ n8 \7 ^
  735.             }! G8 @* E5 X. q$ M6 T5 y
  736.           } while(iEOF!=EOF);
      c1 i8 K' e7 `9 ~* I' O
  737.           fclose(fp);/ V8 C9 y1 y" b5 n! X2 ]9 R0 {5 }  n
  738.           unlink(".\\DownLoad\\readme.txt");
    . `* o4 ~/ s! g# W
  739.           dwStartUpSteps=3;
    " N* u; z* }1 W& R
  740.         }+ G  _% L; h- s9 e# x  ?" [$ W
  741.       }
    9 F2 U! J, I1 S
  742.       break;7 ?) l4 I  G  M9 z9 I7 S
  743.     case 3:
    2 a& n* G' F7 D9 M  ~, Y# M
  744.       if(!Dn.Connected())& {) c. T0 d2 v( N( o
  745.       {" T/ @. K% A( v
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);9 W6 z$ D- n  ~* w! [  [
  747.         dwTotalFiles=1;* Y3 ~2 Q0 U9 b. Q1 p
  748.         dwDownLoaded=0;
    3 a! ^) v4 N% n& I/ K+ }" Y% d' X
  749.         bSilentStep=TRUE;
    . g9 s: {8 F5 [4 t  E4 t
  750.         bCompressed=FALSE;
    5 r' j$ K# s; w. }+ v  @
  751.         strExtLocal.Empty();
    , _  g$ _+ u7 q+ \/ Y
  752.         strFullName="checkversion.txt";
    , ]2 d% r; U7 m( B% j6 [2 ?
  753.         dwProgramState=AP_CONNECT;
    5 b4 h' g, m* z2 P  w0 V8 K
  754.       }
    $ |0 F4 g5 q7 t* H1 A7 E
  755.       dwStartUpSteps=4;
    ( b8 @* Q5 Q) b
  756.       break;7 r0 _# y! E$ {: s
  757.     case 4:
    * ], Z& N* `4 D( w% e, h
  758.       {* X: |" Q2 e$ q1 c5 G; k0 G
  759.         FILE *fp;' C$ k: V) N% H8 A" L6 E
  760.         char szString1[128];
    9 @# t  _1 d  l
  761.         char szString2[128];- w- B: X) O) F, I5 t
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    6 s7 o0 ~4 m& i
  763.         if(fp)& X8 x- R7 j+ z/ u" w; r. ~  P; ?- D
  764.         {- l' J! E% ^9 h2 [/ P! k3 E- s
  765.           fscanf(fp,"%s",szString1);; E" E- ^1 u  S& j0 Q
  766.           fclose(fp);2 o. z- I8 V+ h, x& I
  767.           fCheckVersion=atof(szString1);' I$ m% \& \$ p- h8 Q5 l
  768.           fp=fopen(".\\checkversion.dat","r");9 O$ L. u4 c; B7 W
  769.           if(fp)2 r! |( n& U9 n2 a5 K
  770.           {9 W5 @' G9 N7 I# \3 H& M
  771.             fscanf(fp,"%s",szString2);, k. L" ]% v( o% U6 I( T* p
  772.             fclose(fp);
    2 j  C- W2 ^6 u8 J. P" {0 L
  773.             if(atof(szString1)!=atof(szString2))
    , V) D+ u! {* J9 R% ~3 s
  774.             {
    9 h/ O; Q8 h; a# H- a
  775.               if(!Dn.Connected())% m8 B3 w  ~' [2 G- m  o
  776.               {' A) r$ {% h1 K& B
  777.                 bFirstUpdate=TRUE;; y, S3 A4 ]0 F- X
  778.                 dwTotalFiles=1;
    , D3 ?7 Q6 Q) ]3 o% ]
  779.                 dwDownLoaded=0;
    8 l/ @) e/ q) D! T& a7 q
  780.                 bSilentStep=FALSE;! x. `, @- E* s% g9 Q, z0 a9 {
  781.                 bCompressed=TRUE;; ^) i$ l" D/ `: J0 z
  782.                 strExtLocal=".\\DownLoad\";- V! v9 h6 m1 J( @$ D& {: P
  783.                 strFullName="update.txt";8 \8 u5 L9 k* A# A, Y& d
  784.                 dwProgramState=AP_CONNECT;
    ! Y! X" N2 a1 e1 N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* `+ r4 C! z& B+ q8 D4 _
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 G/ U2 Q# J9 K0 H
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ h- T5 K+ X/ ^# e, q

  788. 4 F7 _) E1 ?# ?/ V3 o1 R
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 X& B, U( U, U4 V& e
  790.                 unlink(".\\DownLoad\\checkversion.txt");4 e" Y# P8 n1 U4 J# V
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)! d: p' M8 o& C% I' s% s3 B
  792.                 {
    # X( [  D7 L- p. L1 o4 T5 i8 W. `
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");9 y% W, [9 ^1 Q8 u& O& f
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    + \- @  d& g+ T) v
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");* J$ u+ _5 \2 J1 z/ s! y# g
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 q4 c; ~. P" {

  797. 4 _( @" C9 \1 i
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " C$ [" L5 A* X; m3 ]
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - P7 B1 G! d) G/ s7 _
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 ]1 s" P: D2 d+ H7 F
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 a# i* \) L& {2 i+ R; `
  802.                 }
    & A5 F9 y% b+ W+ q# L8 i
  803.                 dwStartUpSteps=5;, }2 x8 n- `  e  F
  804.               }
    . T, a7 A- x# B6 V) P
  805.             }+ s4 ~1 ]% e  ]; u, R' z
  806.             else5 U: x) b; p3 G
  807.             {
    + L3 e3 |6 |2 V" M: |4 M+ c- |
  808.               unlink(".\\DownLoad\\checkversion.txt");
    4 G4 o* F% N- t4 j1 x
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");0 \( L5 C* l  J5 U# U
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ F6 N# Q9 R* k2 n2 h
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");' h$ \$ Q" ]9 G5 g0 |# [) [

  812. " n) k, S( z& Y( `9 O: K* a
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 {/ G3 N% }2 k4 E
  814.               dwStartUpSteps=99;1 J% {! i. l7 i9 ~6 z
  815.               bFinishUpdated=TRUE;4 j, x7 |- m% I4 Y/ S# M. {1 G2 @/ {% J
  816.               bCanUpdate=TRUE;# h/ }0 c$ _/ }4 B
  817.             }3 T% T, |1 L8 v0 `% u+ F
  818.           }$ B. Q5 s+ c' s& S& F$ G7 ?
  819.           else
    ( D9 l  @& F0 B3 }2 ~. o
  820.           {# b7 `# f4 P  @! f. \# Q
  821.             if(!Dn.Connected())
    5 C4 Y1 I6 u" z8 o
  822.             {" G9 V. C" p# ^6 z  {% [
  823.               bFirstUpdate=TRUE;
    . g* O/ q$ `9 w0 K( r
  824.               dwTotalFiles=1;
    ( k0 R2 h& s+ q
  825.               dwDownLoaded=0;
    # l: [3 x2 u$ r6 ?( G
  826.               bSilentStep=FALSE;
    ! u. V# Y/ P, v) [' F0 w8 C5 \! J6 K
  827.               bCompressed=TRUE;
    ' q% u  \& z% o% g" S4 v" u: @
  828.               strExtLocal=".\\DownLoad\";  u7 y6 a( q  A2 Z/ d- Q
  829.               strFullName="update.txt";7 O3 O. ^" ~& u1 _8 i4 q* e
  830.               dwProgramState=AP_CONNECT;! |3 w6 U- _: S( K/ F
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ' B/ c8 \: n3 I) p* p
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 b1 Q1 c8 @6 A: d) I+ U
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");" ]/ a; t$ t9 J3 Q9 ?6 P  h
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 @, L8 \9 S# g8 X2 ~" O: I4 R
  835.               unlink(".\\DownLoad\\checkversion.txt");
    : N. m; u6 n; y" Z) K5 g
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    , H" R, J; ^! E. ]2 s6 V- E7 n8 `
  837.               {
    7 d6 y% S! m9 x8 n2 p/ |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 y3 v0 v+ F. Q3 [5 ^6 Z$ c9 |% ?
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");- g! z- ~: e' S3 Q5 k5 Y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    : y1 X- y0 y4 H" [0 f
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' R5 `; i. w' P5 R) Y  e: P' M
  842.                
    0 u8 U& d3 D7 n' U* Q. _5 g8 W' H
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      L' N' m6 \1 c1 N6 `2 r* K( t
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % v8 |# |# W, Q% j8 ]- m
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    1 x7 @7 V" p4 m2 t' Q* G, [0 k- e
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # g0 q9 b+ O3 F( @5 N
  847.               }1 q9 m: S) E/ e" [
  848.               dwStartUpSteps=5;# E  ]  a5 ?5 ]* h3 s
  849.             }
    1 _. {/ L5 s- h* |, a
  850.           }, o3 y8 ^* M& `) }
  851.         }9 y% j5 V$ Y" {' Q* m1 Z- d
  852.         else0 F8 \1 d  U# G) G
  853.         {
      F0 t% u/ {' U
  854.           dwStartUpSteps=3;
    4 N$ _& v' U- z: v  h
  855.         }
    1 V- ]) ]: T1 C5 }7 \: [1 ]
  856.       }
    : ~. u* O8 o& V
  857.       break;4 A7 V( D2 W6 M* l6 C9 C5 b
  858.     case 5:( ]# {, K5 g5 S) a
  859.       {
    0 c: O$ T; y/ Z8 a
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)4 b; q, d# P2 s. g8 |- _
  861.         {2 ^$ f0 g' W8 d5 Y1 j; i6 i9 B) ^) ~
  862.           int opt_overwrite=1;- t; R! q+ B0 x  y- a: B$ w  Y
  863.           int opt_do_extract_withoutpath=0;
    # a6 h3 _* O* }# p0 L1 ^3 `
  864.           unzFile uf=NULL;
    , M; p  q0 y+ n. l9 ~
  865. 0 R0 ~3 ]* _0 m
  866.           uf=unzOpen("Wsa.zip");8 G/ z1 g1 B; ^
  867.           if(uf)
    & U  z) a! j0 r
  868.           {
    ) s) s  Q, S/ O4 Z2 e4 e/ x
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);' k8 \- K; Y  Y5 O
  870.             unzClose(uf);" _( h# c6 `* I" f0 a9 K5 A
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");4 |0 A. D% L) U& b4 N2 W
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");& s! @% ^' [) l3 R
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    * X( f4 Q7 I+ w& F
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 `9 U* W( d! d6 P
  875.           }" C) B. i. I0 K- n# O3 R! D
  876.           DeleteFile("Wsa.zip" );
    0 q8 ~. u! @- \
  877.         }
    ( L5 @7 Q! m. P- }0 G5 i
  878. ) d5 I$ s/ }7 |9 p/ E
  879.         if(CheckLocalVersion())
    - G! X2 `; W- v7 r. b
  880.         {
    / f" M' C6 ~! ^, L) o
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");, _' k. W3 x# v# {
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");% ^( m; E. t/ P+ z! |- }8 e7 X# @
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");+ O- x1 K) s7 v) O
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 m/ j% f4 f; U: n$ _6 `# M
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);: K/ C6 P7 f1 q( h+ r+ K% @
  886.           dwStartUpSteps=99;: \4 b% C, T6 V5 \0 R' R
  887.         }9 u& u# _9 A+ g
  888.         else
    3 h5 S% x9 @: Q1 i+ G" h( E
  889.         {
    9 a; d' V9 d+ }3 e3 A  a) }
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! R4 [1 C9 I7 A/ B5 B9 j$ Y: m4 ?
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 f! {! ~3 ?  \2 L# h" C
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 @: a1 A4 W" D; `

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

( n- m; ]* D- }& g! d" i: ?; i
  i7 p9 o9 B# v* N9 m

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_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
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部