找回密碼
 立即注册

CSUpdate.exe源代码

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

) R( R) H. T; i
  1. / RevApp.cpp : Defines the class behaviors for the application.
    - L# X( e2 m3 m: Z
  2. //
    ( ^+ Y! G0 X' W8 `+ T
  3. 9 M6 i, W3 ~* ^# \% w
  4. #include "stdafx.h"9 R% \5 b/ k# [/ }: E$ N1 X# Q7 |
  5.   i7 D& c8 q7 i) I  \$ \
  6. //#define UNICODE" F8 N% I" @; a. l
  7. //#include <gdiplus.h>
    . ]1 N, G8 O3 {6 Z. A- I# P% C$ C
  8. //using namespace Gdiplus;
    + [, n1 l+ q9 k( r) E4 e' B

  9. * ?1 D; D0 f( E% {& R$ h
  10. #include "RevApp.h"
    + Q9 ?! K: @, m9 h) L
  11. #include "RevAppDlg.h"" T/ o* m) O3 W! N9 }2 l$ ^
  12. + l  L; I: L8 _
  13. #pragma warning(disable:4786)
    ) z% |& Z( \+ [: x7 g  {- X
  14. #include <map>
    - I/ z* i8 W7 Z) I8 I
  15. #include <list>7 i6 e4 Q6 R7 V; Y1 n
  16. #include <direct.h>
    * H% E" A. t; a1 b& g& T7 Y
  17. 8 @$ D/ J. u1 n* z9 s: U/ }
  18. #ifdef _DEBUG
    9 q3 s3 O. A  P; P0 b
  19. #define new DEBUG_NEW
    5 r9 E' e# V1 ~+ S" A
  20. #undef THIS_FILE, X1 q0 t5 ~3 V2 l* G
  21. static char THIS_FILE[] = __FILE__;: @. j7 W' N4 o  o
  22. #endif
    ( L, A7 k3 B& x+ V# ^5 k
  23. #include "SkinResDef.h"3 {# W5 R% g( W
  24. #include "ChangeBG.h"0 v* Z. @4 {4 l) X  O; T
  25. #include "AFXINET.H"7 Y& d) L4 m8 I' X) [
  26. $ y$ _) J& w! D5 t: W$ B' h
  27. #define TRADITIONAL_CHINESE 0
    ) G9 y2 Y  y8 O9 m9 K
  28. #define SIMPLIFY_CHINESE 17 O7 E0 [- i: J0 a; T
  29. #define ENGLISH 2( e( Q# D( m* J+ b; P
  30. int m_iLanguage = ENGLISH;2 l3 K$ k7 k$ ^$ \9 Q7 e
  31. /////////////////////////////////////////////////////////////////////////////
    ( c6 ^8 o2 L# D- F) v2 ]
  32. // CRevAppApp
      w5 s7 v5 F+ Y! j0 s8 \
  33. 7 p5 n8 @$ y- X- C0 u: V' P$ C
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)/ G1 ^8 l5 v+ G3 O4 X8 g9 q; N: |
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    8 Y/ p  `$ [. z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.) J/ ?" ~7 Q" k4 F' ]
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    7 [/ d7 b- e7 Z5 l
  38.         //}}AFX_MSG0 D( p2 X4 A8 F4 a+ _3 T2 m9 E
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)8 [; F: r' f7 M/ C
  40. END_MESSAGE_MAP()0 k3 ^; v/ i' p* s- n

  41. " r+ E) H$ E5 A2 N8 p0 E
  42. /////////////////////////////////////////////////////////////////////////////
    # O7 b, O  A! I0 H) I: `4 r
  43. // CRevAppApp construction
    8 T* U- O0 M& l( U+ a- M# o

  44. . {1 u7 u  b3 x& ~
  45. CRevAppApp::CRevAppApp()/ Q- I/ i) v) P! [8 A) l; M
  46. {
    9 l; u6 p$ j# [6 u  {
  47.         // TODO: add construction code here,. z5 Y- Z) j* Z; c2 I9 l
  48.         // Place all significant initialization in InitInstance
    3 c9 A; i; B- C0 M( E
  49.   bDisplayIsBig5=FALSE;% F$ N, l; ~$ K0 T. H2 x/ q
  50.   bRestartUpdater=FALSE;
    ) u3 n0 g: U: n5 @9 y
  51.   bFinishUpdated=FALSE;
    # T* \9 W0 m' H% p2 u
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;8 s9 w; n3 n; S6 J, x! K& O' K
  53.   InitChangeDataBig52GBKS();
    / D4 U" @" B3 U1 X  ~% N$ }% c
  54.   InitChangeDataGBKS2Big5();
    ! n# F' g7 B: x: F: ?
  55.         //
      I( e" W- r( I3 {8 B. B" m
  56.         bClickRunExe = FALSE;! J+ Y. d% H2 C! R
  57.         //
    / t, U/ Y( f! r0 Z6 b/ A
  58. }& c( e) @6 _* f$ ?

  59. : J6 P- c  g: B/ I
  60. CRevAppApp::~CRevAppApp()
    " y  r0 l8 A+ W  e
  61. {1 t$ S5 [/ @9 f
  62.         // TODO: add construction code here,
    ' |+ H$ |% w$ e. ?
  63.         // Place all significant initialization in InitInstance& |* ?4 }* |5 ?( g* ~; j( y
  64.   EndChangeData();4 B: d. D. x3 L! A/ P& W9 W
  65. }6 D# P( W0 t- `9 a; S/ G4 c
  66. # @% C. `; J1 s/ |; i0 f7 i
  67. /////////////////////////////////////////////////////////////////////////////
    2 p* Z$ ]- o4 b* C! }$ i. C
  68. // The one and only CRevAppApp object! }- R8 o1 N8 `) `) z

  69. # ^5 M; \, h/ r. A7 S( i
  70. CRevAppApp theApp;
    ; Q) d" k% E3 H; O) P# F
  71. 7 B7 F4 C0 z+ W% V1 d* y8 I5 ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)" ?' ~5 T; H2 [( V+ n  I+ S! i7 r
  73. {. Z6 |- V8 b# ]9 E' N
  74.   int iEOF=0;
    6 m! j2 {" Z+ s* n) s
  75.   char szTempName[MAX_PATH];
    . e6 E& k. P- r7 Z% U- ~% s4 N
  76.   *szFileName=0;
    $ d; Q6 Y, ]! [# H$ Q
  77.   iEOF=fscanf(fp,"%s",szTempName);
    * k; ], v$ I5 U5 u5 w3 I' j8 d
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('): |6 x9 X0 t3 J0 \& p- p3 `
  79.   {/ A: ~. _3 d! q- K4 }2 m
  80.     strcpy(szFileName,&szTempName[1]);% r! x- z; m; {* v! w8 a
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)9 {! q5 }5 i) R9 Y# J4 x
  82.     {
    9 ~3 S0 R( A  S7 K( ]' n4 w6 }2 x3 P; U
  83.       iEOF=fscanf(fp,"%s",szTempName);
    + o2 y: X: \% O/ h- `8 k
  84.       strcat(szFileName," ");
    ! f/ `/ r0 [9 p. a7 [" W+ b/ T! r
  85.       strcat(szFileName,szTempName);
    . W7 ^) ^2 M) v5 m8 J, {6 i
  86.     }" s% \) ^7 |1 D9 s
  87.     if(strlen(szFileName)>=1)
    6 M# y1 j( T4 I8 g2 n  ^6 k* U
  88.     {! e5 ?8 G9 k6 q% A2 O& C; f
  89.       szFileName[strlen(szFileName)-1]=0;
      A" v8 ?  u3 n9 N: ?) K$ H6 O
  90.     }
    2 m4 q4 j3 A& f
  91.   }% @7 N" Y3 m+ k
  92.   return szFileName;+ [1 }) f+ x7 }. V" n, ]+ X0 `
  93. }# z. \! Q1 }$ c

  94. 1 L: m' c+ p; l4 @/ _( X, q9 b
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile), L( w5 O! }3 j
  96. {& |6 X7 a7 G( q7 B. D; T
  97.   FILE *fp;
    ; ~/ x# d7 \( T+ X1 k
  98.   char *key=NULL;
    : [  O3 |$ H. u6 ^: r
  99.   char version[MAX_PATH];
    9 F. S6 W9 U( I+ X( P! w' q* v6 x, K
  100.   LPUPDATEFILE file,olds;
    & Q( q1 G* R3 K6 c1 f0 X
  101.   std::map<CString,LPUPDATEFILE>::iterator p;, y" ]0 i7 t1 A7 A, z' D
  102.   W. D/ V- A! R, Q0 u8 h: p$ M
  103.   UpdateList.clear();
    $ g8 Q1 p* o, ~# i; |8 g! ]
  104.   UpdateFile.clear();  k+ L0 p! \- {6 a' f
  105.   if(GetFileAttributes(filename)==-1) return false;8 ]1 I0 ?% Y" d
  106.   if(!(fp=fopen(filename,"r"))) return false;
    # a* D8 \5 f" S0 P
  107.   fscanf(fp,"%s",version);2 A1 Z& y% F9 m- D# s
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    % H0 H# J) S8 h# N7 X. X' Y
  109.   while(fscanf(fp,"%s",version)!=EOF)2 U. A- v9 ~& e$ z' u% O+ y
  110.   {5 I6 c9 I% A8 K, p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " d! T4 z. q+ B% U$ L, x
  112.     fscanf(fp,"%s",file->path);- r0 w0 M; Z8 x# {8 \9 G
  113.     ReadFileNames(fp,file->file);+ X6 V9 Q8 l  W6 N9 t3 |5 {- E
  114.     strcpy(file->full,".");
    , X5 z( U- K, ?6 l4 Q
  115.     strcat(file->full,file->path);
    ( s: ^- [5 m' w
  116.     strcat(file->full,file->file);
      T: W% r  h/ U+ D( m& M) h
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    2 ^& R3 ~5 I  M8 O0 e- d9 Y1 |3 G
  118.     {
    ( y* s( R2 e( h% {6 r8 R& u& ~! ?
  119.       file->vers=(float)atof(version);
    9 G( L3 @3 O: [) D) `
  120.       UpdateList.push_back(file->full);; E& ^: P5 H9 l: s) l% k
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; \4 N9 J* U7 _! d1 j: m
  122.     }6 a" {+ e3 |% }" r( u. @* Y% c
  123.     else
    " ?& X4 i7 W+ T' J1 A
  124.     {9 _0 C5 Z4 z3 y
  125.       olds=(*p).second;
    ) G3 N8 o5 |. M: K4 N2 p
  126.       if(olds->vers<(float)atof(version))  n, ?+ \9 i% p
  127.       {4 d# e5 r1 p# D/ R& `( W0 ~
  128.         olds->vers=(float)atof(version);
    % c& s+ N7 o* ^9 K$ L
  129.       }7 B2 I2 `9 l6 [/ H% Z( W
  130.       free(file);
      K5 z8 u$ J6 ], C. a1 R3 T" A. c
  131.     }
    9 Q. \& B* k8 z1 y3 P
  132.   }  S. P# |/ v, c
  133.   fclose(fp);1 B9 N* j* v  r1 a  d' d# O
  134.   return true;
    ! i" [6 A' H7 [3 s+ H6 c
  135. }, H7 ]2 p: t+ R  B  _! D- f( t# M
  136. 5 S5 Q; v9 N: Z3 f6 K$ m
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    . N  W5 J2 Y# _$ {4 v1 f
  138. {" T% e0 U8 u( W8 X2 ~+ e" b: z
  139.   TCHAR  szFull[MAX_PATH];6 g! Y# r4 g% n: O% J. L
  140.   TCHAR *token,*inter;
    6 F9 N+ X9 o0 |4 J
  141.   *szPath=0;
    6 F, ~/ z8 S" C6 G1 w
  142.   strcpy(szFull,szFullPath);2 {1 z6 K% _! g- w3 J+ @; _$ v, C6 \
  143.   token=strtok(szFull,"\\/");9 C# ]( ]9 N( y2 c. `& a
  144.   inter=token;
    ' d6 k1 d. v$ a2 S1 W
  145.   while(token=strtok(NULL,"\\/"))5 |. d/ t* M. u; g
  146.   {
    - e  l& Z: C, w0 D- z) N" v
  147.     strcat(szPath,inter);# i$ D9 I. R# }" L" C# Y
  148.     strcat(szPath,"\");
    8 s9 B, |! z$ i+ i, d+ n/ m* }9 B
  149.     inter=token;, Z  w8 a) V0 c  e% T# g9 [
  150.   }
    # q6 ^' S* f6 j/ j
  151.   return strlen(szPath);8 `, M% Z; d. v5 r0 r
  152. }
    1 U1 s. W1 j: S

  153. ' x0 g6 e3 N( M4 M% v# _
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    7 N* n4 z# v) q+ ?$ w
  155. {
    1 i! T. T5 S" b/ q4 K6 u2 Q
  156.   DWORD attrib=GetFileAttributes(Target);
    4 Y; S0 I) L2 k$ {' j
  157.   if(attrib!=-1)
    / ~2 x: W: W( t
  158.   {/ V# Z8 p# g  f3 Z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    2 c1 J: D" j% ?; Y+ {$ i
  160.     {
    0 K" |4 a( m- {5 w/ m. L
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    7 }* N. K' ]- U6 h4 ~7 {1 {  `
  162.       SetFileAttributes(Target,attrib);2 \- c6 x+ o  B$ y* p3 H, {8 J9 u
  163.     }' B, [, I9 g0 [2 g3 M. r
  164.   }' b- t0 m; R! k8 W
  165.   CopyFile(Source,Target,Erase);
    ) C0 G# A- e: v; @2 Z, B4 b8 t
  166. }
    6 w  K  O2 y4 {/ E( J8 s
  167. 7 p( H4 f% R/ s1 k& \" W% z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    " V0 D* I1 U/ l% b7 v$ u
  169. {
    2 j: }. k# `5 T) D" O' W% t0 ?
  170.      FILE *fp;/ |" s5 h# F+ v* }
  171.      char  szBuffer[8192];
    , [+ i, ^  @, E8 z& ~3 n( b3 u. t. M
  172.   va_list  argptr;  Z( t/ @% b% r7 e! S3 @- v) C
  173. ( ~# h: Z+ I' F& o/ q
  174.         va_start(argptr,message);
    % j- d, Q: c% x1 k  K: d
  175.         vsprintf(szBuffer,message,argptr);! z) V1 ~+ [. L$ S" L- n
  176.         va_end(argptr);
    8 j1 X9 \  ^% k3 r1 H  c
  177.   fp=fopen(FileName,"a");  |8 p+ y# D: X
  178.   if(fp)  H3 B2 C# @: V% o
  179.   {
    0 }# U7 d+ Q7 F. C, S( M7 D% y( B
  180.     fprintf(fp,szBuffer);4 `# A( i! E# X1 Y
  181.     fclose(fp);
    , p* y$ U. m1 o. h3 S6 M" u
  182.           _flushall();
    ; [* x' @" j- g% E) b$ a6 x6 P6 |/ Q
  183.   }. c7 W5 N2 D0 b6 w+ G/ S1 P& \( h
  184. }- }* P" ?! s. l8 U1 j8 b

  185. 0 T% z, @9 B! n. [
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    7 L* u! ^2 j3 R5 R2 ~
  187. {: U5 P! V, R- i! }- _- l
  188.      FILE *fp;6 b2 |' `5 S  |/ H$ k
  189.     DWORD  attrib;
    . u- D$ u( _: g  I" B9 ]
  190.   attrib=GetFileAttributes(FileName);; A0 x. M- v& h/ J. x8 K% F$ P- I/ o
  191.   if(attrib!=-1)4 `$ G+ p+ n& `# y. ~
  192.   {
    5 z; A. d% S; Z* _' h1 l: ^
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    8 C+ B% c, p" U7 p
  194.     if(!SetFileAttributes(FileName,attrib))
    . _6 ^* A0 k1 i" `- f
  195.     {
    2 E( L3 \, `0 Q/ k% ]+ v+ S+ X
  196.       return FALSE;( k; O& \7 n- B/ o/ B
  197.     }
      }$ L( z+ @9 b% u/ Z/ l
  198.   }
    " u6 N: q% H3 v' |, X
  199.   fp=fopen(FileName,"wb");
    + T- s$ J' K; B* l' }7 K
  200.   if(fp)
      r. o- H  |6 \! v
  201.   {- O2 m7 E' b/ A8 U, i3 L$ p" K' H
  202.     fclose(fp);
    - H7 P0 ^  G: k  g4 {* ]9 R
  203.   }
    - T3 b- X& i0 C; b
  204.   return TRUE;! b. K& a- z$ a1 B! K
  205. }
    / E9 ^& n" H) \7 S$ U5 V" p
  206. 7 B" t& x$ A( c
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ) r5 ]8 Z& W6 l4 J; W9 W) S, u
  208. {& e2 u7 b$ R5 A* P
  209.   char filename[MAX_PATH];$ o$ L( N' C4 k8 E, \% M- o1 H* ?
  210.   LPUPDATEFILE file,olds;
    ' M' `0 M' p" s& S' p  E
  211.   std::map<int,CString>::iterator i;0 B9 ^3 t8 P/ ?
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    , o& N  z6 D; p+ W  w: E- o6 o
  213.   std::list<CString>::iterator l;
      I& v' ^( E+ e5 k4 ]* d% r

  214. " z( n% q, L$ {/ {4 ?( O
  215.   if(bFirstUpdate)( t$ E/ |( a) C% V3 F
  216.   {- O' S5 [% j3 N. t  m) z
  217.     dwCurrFile=0;
    / _. j% N" O. x0 h
  218.     bFirstUpdate=FALSE;$ g3 {: U3 m- F* W. `
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 h' S' d- y2 H" I1 S( C) z. H
  220.     {
    * U2 q/ r- c9 _/ i6 B
  221.       dwTotalFiles=UpdateLocal.size();
    ; A/ [% p: N" I0 ~. M+ o, x, W
  222.       dwDownLoaded=0;( f0 l% h' ~* `* R' m4 p& v
  223.       bSilentStep=FALSE;
      B  y+ o, C/ I  V9 F: s: F0 z5 i7 }
  224.       bCompressed=TRUE;
    8 Y" _# @! B- s1 R& A. x* {8 _0 \
  225.       strExtLocal.Empty();
    : ^8 h7 ?7 A! t6 a- {) d4 d
  226.       strFullName=(*i).second;3 T- G$ Q2 k9 t6 y7 J" Q
  227.       dwProgramState=AP_CONNECT;9 t. {' Q! q# T
  228.       return TRUE;
    4 Q4 {" T) J- l2 z
  229.     }
    * v1 v# D- U  }3 i- E+ A
  230.   }4 ?$ N; @' l' y9 D- B8 J
  231.   else if(bRestartUpdater==FALSE)
    # g. ~, X  U7 o9 k* _
  232.   {! ^9 ^" ~+ k! w$ I; T- Z- Z5 G
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 t* x1 L% }8 W2 o2 o1 @
  234.     {
    / E; ?  V: ^5 j8 f8 E/ g  V
  235.       file=(*p).second;
    ; J1 ^2 r  i9 c7 M0 H' m: I
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())9 A* Z. N4 V1 l- a6 r. g
  237.       {
    0 F5 _7 r! h8 K0 P, a& M% B
  238.         olds=(*p).second;
    1 T. ^* P7 n- l# r8 k9 f
  239.         olds->vers=file->vers;* B* D) V# K1 k' u. L7 R
  240.       }
    3 {' i8 x$ @* J7 N) y$ g
  241.       else  n. V6 Z* J/ ^; V! ^
  242.       {3 v& k" p2 w" t! g! k/ m, ^
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; a$ ~  |& O2 X! |
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ( T3 ~: P! [/ V9 N
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    - D6 ^7 Z: _0 M0 ]/ o+ n
  246.       }: c7 I* c7 W5 F' q1 N/ A' g- |
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    3 ?' h/ c, j  ?9 \
  248.       sprintf(filename,"(%s)",file->file);- u8 k/ b) w' w9 E  N; v1 N
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 O$ _+ W9 W3 w" x( A- }5 Z% v$ a
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }! V8 ^+ R! e1 c
  251.     }4 h* Q% i, E: w% x
  252.     dwCurrFile++;
    * h- Z) u* [% X
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): m5 H3 F) u9 @' k' t' N4 ?8 s
  254.     {6 h# N1 x4 M4 x2 x
  255.       bSilentStep=FALSE;/ d; I1 U  b# N- r
  256.       bCompressed=TRUE;
    ; s% n/ a$ r6 ~  R( S
  257.       strExtLocal.Empty();: S4 k: Y7 s, n9 B
  258.       strFullName=(*i).second;8 Z2 o8 q) Y; p% B0 f
  259.       dwProgramState=AP_CONNECT;: M4 X6 b8 {5 c6 d* e6 k
  260.       return TRUE;3 d1 ~' v6 R  _8 e) H, W& T
  261.     }. V7 ~7 ~( t# h% c/ U" L
  262.     if(!bRestartUpdater)* V0 R( z8 _$ J5 T9 s9 P7 b
  263.     {
    3 ~8 E7 I& j: E
  264.       int iCurrSize,iFileSize;
    7 U, X. W) w7 z0 [
  265.       iCurrSize=0;
    9 }, x# G# M, d/ Z
  266.       iFileSize=UpdateList2.size();7 p# t- K: `8 ]; V; F1 K5 J+ q% v, q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    4 P/ q) _0 y5 a2 I6 ?
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    3 h2 T" t1 F1 v& D; H- S
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ; w8 L8 Z4 w, N' r1 l
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 H0 l$ Q& T3 y" K7 |4 l! T
  271.       Fclearf(".\\update.dat");( R3 b* J  S" w  k
  272.       Fprintf(".\\update.dat","Bloodyf\n");. k8 [* b7 |7 j+ R$ p" h
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++): _; D# W$ y! a7 M" d
  274.       {2 q2 K. Q7 s; F
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())% w  `! v( J" y: C$ i, H# I
  276.         {
    2 ^" J. C7 G, M! h5 N, {  _) E
  277.           file=(*p).second;
    . S( G3 _  |% u# I
  278.           sprintf(filename,"(%s)",file->file);( m$ m) _# [0 l7 I& w/ z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & [7 ?- c; H. `6 }) Y
  280.           iCurrSize++;  W/ S3 M1 M1 i+ h
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ; B$ e; z+ l, @3 `! [$ M$ V  U
  282.         }2 T& W- C& U7 ^
  283.       }
    - l1 m, v" e" ?5 z. k7 F# S
  284.       unlink(".\\update.txt");8 c: h, E4 ^& U8 _% q
  285.       unlink(".\\update.tmp");/ \3 |% v' C( |3 u7 c' Q
  286.       Fclearf(".\\checkversion.dat");
    ! Q1 h2 Z# d1 K% ]" G" x; x7 r+ m
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ' T. E# M3 \6 G9 J3 B) T
  288.       if(UpdateLocal.size())7 K; i0 w+ E9 Z) ~7 A/ m5 A
  289.       {
    ) W4 f$ [9 T# t6 A  S9 g3 p2 c1 F
  290.         UpdateLocal.clear();
    1 p7 |8 s+ p( a5 o* K% Y% T
  291.       }
    3 z4 C* {- [) P+ [6 v
  292.       if(UpdateFile3.size())
    " ?; L- Z8 E3 ]+ t, T
  293.       {$ R6 ?/ d4 G) F& T$ Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  T/ A' d4 u! n/ \! l% w9 }, }% Y, {
  295.         {
    : c+ a# c) c- I' v
  296.           file=(*p).second;
    9 \4 a( i  [0 K
  297.           free(file);
    3 i5 {4 L$ r& _& D3 ~2 P, z' ^
  298.         }1 h, \% k3 o  g' Z
  299.         UpdateFile3.clear();
    ( K' B. ?3 A" ^: m
  300.         UpdateList3.clear();# w$ M6 q8 d5 N( z  l# {
  301.       }
    9 N# X' j6 F! G, F; z" V6 n, C
  302.       if(UpdateFile2.size())& y& @$ g+ b& _* A# ^( N3 k
  303.       {5 F9 a% ?# C$ M- b" @/ n( b" X
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / g7 G+ F) R3 z. j: q# h
  305.         {' I& d5 p5 D( l% T' q2 x, X" h
  306.           file=(*p).second;
    4 v5 w9 @+ ~* y) E2 t1 y8 R
  307.           free(file);9 j6 O% z( e/ a+ J
  308.         }
    ' h) F; q2 ~7 p3 I( E
  309.         UpdateFile2.clear();
    $ N; t+ F3 X: m* C% t* v
  310.         UpdateList2.clear();
    2 i. f3 y/ C7 X) {! ?6 f+ Z+ L. x
  311.       }7 ]5 V9 i2 v3 x/ _1 C/ o% ^
  312.       if(UpdateFile1.size())- [* v' K6 I. }( T5 I
  313.       {" }0 [2 _% {8 a' J% W" @1 u7 N
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  a* n, B% y! Z/ ?
  315.         {, E' z5 g5 e1 I0 b1 k  h& `7 Y
  316.           file=(*p).second;8 g" ]9 [- g4 u; C. k3 Z
  317.           free(file);
    / J! l2 s+ _6 _. g$ J
  318.         }  M5 Z7 v( p2 |0 s
  319.         UpdateFile1.clear();  K* a. }3 M; L2 F5 {9 Q7 @
  320.         UpdateList1.clear();# }3 P! W2 C5 l! k$ q; c  g3 H
  321.       }9 J- M9 d  g0 a. Y' {
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    . k( t0 Y. ~6 _8 Y: j% B! N: d
  323.     }1 T* p5 q- S6 N) ~% V8 e1 T9 y
  324.   }4 L3 W" f3 }' i
  325.   return FALSE;
    4 C8 K/ Y' o5 J  B8 z
  326. }
    8 E+ E+ G; N1 Q6 q: u

  327. # x: L0 m  r) T4 L
  328. void CRevAppApp::ClearAll(void)! j( h; ~6 C3 A/ e) h. @6 k  l
  329. {
    , E! |) @8 p) v4 x8 P
  330.   LPUPDATEFILE file;
    * I8 N$ J. \1 b% H) }! H% T
  331.   std::map<CString,LPUPDATEFILE>::iterator p;0 ~) Y4 ~# h5 Q  r( v2 T! h! [
  332. , Z' I. g$ b" B! [: c
  333.   if(UpdateLocal.size())( v3 X6 W% y4 R9 X( C9 R
  334.   {  W+ G9 J8 G8 o
  335.     UpdateLocal.clear();7 z: m; `. W7 M: S6 e. H
  336.   }5 p% e! u5 t9 v1 X: q8 [; G$ H
  337.   if(UpdateFile3.size())
    ; f% d5 h7 u8 m5 L/ l1 {: j
  338.   {+ G  Q3 f# \6 f3 b/ d# `, f
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " A2 |( o+ u8 u( {8 _
  340.     {4 v5 b' m$ G2 _% j; d
  341.       file=(*p).second;% U+ Q- e3 w7 {% F
  342.       free(file);
    $ O9 u! ]* o' h# w' x; K+ p" L
  343.     }
    9 x+ e3 Z! a0 S# \5 J
  344.     UpdateFile3.clear();
    % G$ ?6 X. }  O; L3 U6 N8 u/ G
  345.     UpdateList3.clear();
    7 g' B1 K+ u: h8 \% R+ v
  346.   }
    # y# R- M) b1 R7 e5 d& L8 Y, {
  347.   if(UpdateFile2.size())' N; {" m  V6 i3 n% D  ]
  348.   {5 l) P5 }" K& @' |* L  L# a/ o/ p
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ r2 {( s( s* C2 `- k5 h
  350.     {
    * d8 }: M! u. n9 J
  351.       file=(*p).second;
    5 G# g- q0 o; Y5 G+ O3 k
  352.       free(file);
    ) l# O. u/ ~5 p' S. e
  353.     }
    ; X8 V! Q5 w) t; |  g
  354.     UpdateFile2.clear();
    $ f) p' H! s& v/ E; k
  355.     UpdateList2.clear();4 e4 ~, |! q( ?: `& S0 K
  356.   }
    2 \) [1 U$ `4 ^0 x) M; K
  357.   if(UpdateFile1.size()): l. ^2 a) v1 F7 D/ H. N% [. h" p
  358.   {- i' _6 r3 K8 o; R2 W8 T
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)8 Q# F2 _( D" I6 N4 |6 Z( N
  360.     {
    3 Y3 r# F1 W- h# Y* A
  361.       file=(*p).second;7 g9 Z. R0 C! k9 K
  362.       free(file);$ x$ b8 w3 X6 `, q2 z+ F
  363.     }
    + q: ?* b8 v% R* p. X# Z
  364.     UpdateFile1.clear();
    ) _7 }( S/ _" K7 Q
  365.     UpdateList1.clear();) |; q) q3 N! G. {9 S" Y! H4 e
  366.   }
    ; I: n; C  p- B/ K, A0 L
  367. }  
    9 q, I: V, t6 K  ~
  368.   * C- {; m- I4 Z! q8 S" N) a0 m. _
  369. BOOL CRevAppApp::CheckLocalVersion(void)2 U7 {4 r, ]/ f1 p" Q) U0 M
  370. {
    ! u6 h3 Q' _& W% P5 U, z7 F+ F
  371.   int c;3 M# g, T5 b+ u' p
  372.   LPUPDATEFILE file1,file2;
    1 U  `9 {) w2 g
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , q( Z1 k, e4 G& \4 T. [
  374.   std::list<CString>::iterator l;
    9 Y4 t- n1 |4 `$ T2 J2 A
  375. - a- k9 N( ]" z% U9 q- W" n* k& j
  376.   UpdateLocal.clear();
    ' m& a" j; R4 L0 c5 }/ k
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 N( F* p1 J6 w8 ~; L/ K4 Y& Q
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    3 x! X$ ]1 D2 b  \9 J
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);" W& }9 l. x9 i/ C! a/ o6 O4 w5 n
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    6 t% {( d6 j9 N' a! D
  381.   if(UpdateFile3.size())
    ! Y% I9 Z/ g6 _. V0 @
  382.   {
    2 t) J5 k( q/ O8 ?. g) n( C: p. O
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    $ l( `" D% O' E1 |9 M* A! n
  384.     {+ R- E" X% m( U1 ]' F0 U/ C' @
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( D5 v; X1 U% N) W
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 q7 \3 V9 i1 x1 d" S: `$ u7 ?% c
  387.       {
    * Q7 X* e& u% ^8 P) z
  388.         file1=(LPUPDATEFILE)(*p).second;
    - g( M" E8 c. c* s- O& T
  389.         file1->vers=file2->vers;# `5 X3 O1 U/ t
  390.       }
    0 S( Q. R4 E, u6 A
  391.       else9 ~# ^) `0 m. Q7 n: e
  392.       {
    & L/ X' d* q6 e, ^
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 |! p& o/ f0 T8 J" T" k) I
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! o+ S+ v: F  i% x. D
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    7 W  G, Y4 {/ t3 ]9 B3 W
  396.       }
    & `: J) l7 W+ T7 e0 @. e- n7 c! O" ]
  397.     }& [- ~) L& p+ {( S
  398.   }3 K- P! z9 G  n: x' h
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)' W0 p% X5 T) [- m/ `
  400.   {% }4 z2 A3 K6 ]( `
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    $ I, ^: B( W; j8 ?* c/ X
  402.     {
    6 p' ^2 D. S5 \3 m
  403.       file2=(LPUPDATEFILE)(*i).second;1 T# h/ J9 z- i, N# \1 `
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())- r- `7 q$ O! e" A
  405.       {
    ) a% w) P6 G5 s) K
  406.         file1=(LPUPDATEFILE)(*p).second;# i1 P  V. M+ d
  407.         if(file1->vers!=file2->vers)7 Z7 U' O- x4 F9 N& T" _1 V
  408.         {2 m9 N. h+ z" N; i0 {
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! l- p1 M2 a4 r% f6 _( O: ~
  410.           c++;
    9 @1 K% D. e% Y  b
  411.         }
    ) z, K8 g$ `( c9 Y9 X2 Y( D
  412.       }+ n' q* _, X  u9 g2 A+ w
  413.       else+ v; ]; Q. L/ H3 M2 [
  414.       {
    1 }3 o( ]  o0 s" B  k. R, u0 H
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 K- ~- P' ^( D# g' F, T* f
  416.         c++;
    ' K7 d/ J/ \4 e, C- z
  417.       }4 n0 F& i  b: X$ S. m$ T
  418.     }. J3 P; }* w0 }9 q5 |
  419.   }* i" C! _2 a& j0 c: \" p) y
  420.   unlink(".\\DownLoad\\update.txt");$ ]. W' i8 ^+ m, W
  421.   if(UpdateLocal.size()) return TRUE;/ v; B7 \" A- _% y! s3 A
  422.   else                   return FALSE;
    / W5 O/ {) }9 H- n. o5 R
  423. }" ~* Y2 t$ g* V# M
  424. . O% J! A- F6 T' {( H7 o
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    + t( T5 e& o; m( ]  \; N2 Q- Z; ]
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    . k8 I, }6 ]7 Z

  427. ' w* t) `9 R/ @: M$ j% b
  428. 3 H0 i# `4 `: x: n, e/ n+ q4 @: m

  429. / ~# u) f. a6 {" q2 P
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    1 C! C8 M" Z& n
  431. {5 Z1 M) c; Z4 G( ~* B
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    0 }& a' |$ u# f8 S5 P; v/ J& t4 P! m
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    + B8 g9 n/ Z* C4 z8 N
  434.   {% F. S2 `5 d* f+ h0 l5 V7 D
  435.     char szLanguage[50];
    ; Y$ |/ g7 ^/ h, e
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    0 F: Y$ {& u& t5 j$ @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : T( j7 [4 M2 I, ^6 r! L" G, m
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ _8 E8 m+ J$ U; O
  439.     else                                   m_iLanguage=ENGLISH;0 q* e$ Q  Q( n( B( Q5 o6 e6 s" B
  440.     char szRegister[100];
    + a, A- h, O( p- @; t/ x! Y" c" G
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 ~+ y! V" {9 d
  442.     strRegsName=szRegister;
    ( H* d6 @* j/ E4 P* S% y
  443.     char szPatchURL[100];
    + D: `8 R+ v- r
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. m. h5 [+ {$ J
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) m2 Y3 |% @1 K' w# {+ Y' d5 t$ |
  446.   }! Z  G$ e% D- p/ }2 W2 x% k
  447.   else
    4 N$ q' c8 Q" o
  448.   {- g. h! L: F: H, }$ W, K3 x
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 B% ]5 H) b8 ~
  450.     strRegsName=DEFAULT_REG_URL;9 B1 e; ~% q$ o# N7 C* S
  451.   }9 w1 l/ P4 i  \, i. [  O. {
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 e6 U/ H8 ]. d% L4 U! {8 {
  453.   {. _, M5 O" |; X! D2 e, ]9 j. P
  454.     char szIP[50];8 l6 x* u3 F, S# G8 |- W7 K
  455.     char szDIR[300];
    2 Y, e: m; l# w( ~
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    * b' _, P3 u: @1 x
  457.     {0 t- ^; o, k6 h# k  Y+ T% [) X. z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");4 }( d) T7 K' f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");* u4 u: R7 T) @( n  |- e
  460.       strHostName=szIP;, v  s/ D( }! p. i3 z
  461.       strHostPath.Format("/%s",szDIR);
    4 _3 r/ q$ a' M8 N7 A
  462.     }
    , s) i6 M, ~) ?+ ~/ \
  463.     else
    4 H1 o' E' `- }* A  T1 V1 x2 \- B
  464.     {
    9 W$ j5 J4 P# u# Z9 S- G  h
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 m% X% w+ C+ C5 ^& z+ e- {8 V' B
  466.       {2 ]0 W: j4 n4 J+ j
  467.         char szLanguage[50];+ V( Q2 P7 B% i( n% L. S8 U
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* {- i' h4 h4 J1 P# R
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- T) ^8 f+ z8 A$ _- G% w
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 T; s2 b% q$ h9 N) a1 Z
  471.         else                                   m_iLanguage=ENGLISH;# m5 d2 Z  S# n# |
  472.         char szRegister[100];
    6 W. n0 i7 `8 T+ C: R
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. l. K% r& a. T. G0 y/ g
  474.         strRegsName=szRegister;8 o4 ?3 X, x8 k5 g5 E
  475.         char szPatchURL[100];! w7 ^  v( \+ W0 x# l% n
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ U5 X& F+ z' w" C- K0 R
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - ?1 _3 F2 W8 x8 A6 ^
  478.       }
    $ H4 F* H) _' Y- O! \
  479.       else% L, d/ y, S- O3 ]' D* [
  480.       {
    + V( t) d# X  m
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 q& n: Y, Y& L; i  j# Y7 L0 D/ @
  482.         strRegsName=DEFAULT_REG_URL;! B% ]  Z9 b, u& }. R8 K) r  m
  483.       }1 D8 i7 P' p. z3 L2 B: `# T7 Y
  484.     }% b+ ?9 j  b% G* Q
  485.   }
    # q# E3 M% a7 Y5 ^$ T* m( ]
  486.   return true;
    4 U9 r9 d, J! J6 e, g
  487. }
    3 k/ s7 J, v5 H2 }

  488. 6 \- ?" [! B. ~  z
  489. #include ".\ZLib\unzip.h"
    + J' V5 A# Q' Y) h4 L$ `
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);$ Z; c' d0 H& F6 g1 R- u( h8 W
  491. /////////////////////////////////////////////////////////////////////////////0 N/ M  ?; c2 `
  492. // CRevAppApp initialization
    # @& u+ t8 ]+ ]2 q0 @$ b
  493. 4 y* ^* R% e3 L  T
  494. BOOL CRevAppApp::InitInstance()9 d. o' N! e5 {; R- a8 H
  495. {
    $ ~- }% @% o; u
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    " l2 F8 H0 A- \+ k

  497. # T' H- [/ H4 V. L* I* ?
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    " [3 u: }$ ]0 ?
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    : q' Z; n0 f( H& Y3 p- w
  500.   {8 \7 I) d% }: O9 q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    0 C5 _+ u" X1 z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);% p; {0 q4 }9 p8 u
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    : m4 z8 b9 T1 A! a
  504.     {
    & ^' U3 _: N4 h: @4 T! L
  505.       strcpy(szPath,szPathTarget);
    8 |* H+ U& ~8 a) ~
  506.       SetCurrentDirectory(szPath);! f) C% Q  v, G' O* E& F2 K/ h
  507.     }
    7 n5 E: M; S( O' V
  508.   }
    ( ?. ^5 r) z! o; j* V
  509. #ifdef _DEBUG
    $ H9 _; R) s1 C3 l, s# H  M5 U/ |
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)): L  Q$ P' j! P6 \( i
  511. #else
    ! M. v# H7 ^- ]% }) [
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; I1 H$ b( {* F$ B! R9 W* ^. ]2 ^, x
  513. #endif$ |  u( }/ L1 G* b; R; \
  514.   {
    * s; X4 L/ w0 @* l8 w8 ~# b) ^
  515.     char tempFileName[MAX_PATH];; Y7 b& ^% {' ?1 z  ]/ R
  516.     strcpy(tempFileName,szPathSource);4 j; B! a; c6 v3 ^( Y
  517.     tempFileName[strlen(szPathSource)-12]=0;
    . e1 A6 o0 A3 X1 r5 c+ I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    8 h# \, v: m4 }4 x8 I
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    / R# w- U+ n0 ^
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ; _& ]: p% u$ \% K' c9 z! h6 q
  521.     return TRUE;! `+ F' E( g' }0 p# ]& V: k* ?
  522.   }7 K3 u1 t; C  C3 v- ^: W6 r( x
  523.   // Nuke 0118: Delete run.exe0 M  \5 M/ i3 d# E5 H
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 t  f' z8 [5 c' j
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    # g2 ?/ t' s3 A
  526.   if(!ReadCfgFile("Config.ini"))! m  ^/ Z' J4 n1 e! s
  527.   {
    5 x5 u! D. O" ]( u( _- `
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    % V$ {- Z# C' c" _" n8 j' F
  529.     return TRUE;, I4 W" i! d! u+ z
  530.   }
    ! _( g* c$ d8 g' `
  531.   HANDLE mutex;
    . [9 t: P/ R9 V% L! Y
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))& ]/ V& {' a  ]+ R  _2 [/ S
  533.   {" ~9 V0 u& B6 K1 X4 W  C
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ' _' N: s1 F& T9 g7 w$ j. k
  535.     {' g% m' ]8 r. d, m! x- f6 J8 a
  536.       CloseHandle(mutex);
    3 q; O/ O; @% W+ v8 f- t
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);+ I3 m, z6 G+ G- e
  538.       return TRUE;% }, u( {! A6 W0 [7 F. E3 g
  539.     }
    / R6 s. W, D% N/ ^5 ]6 k/ d+ a
  540.   }  - k% a# ]- _% g2 t
  541.   CloseHandle(mutex);
    4 i8 Y! c( z' l7 S, N
  542. $ X, [, f6 a; r* H- v- I) B% ^; E
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);$ C6 Y- r$ b. i

  544.   K; V! r7 g! {' F0 W& u* j8 N
  545.         AfxEnableControlContainer();
    7 q) |. S! O9 k* \* Y* x
  546. 3 s3 r( Y1 ]  O3 V
  547.   bCanUpdate=FALSE;! T7 J" ~  I2 g& i2 d
  548.   dwStartUpSteps=1;
    . I2 L0 m- u7 r7 i( _) b# q
  549.   dwProgramState=AP_NOTHING;
    8 `$ s; Y* l' h
  550. ' J2 `+ Y4 O6 R$ h, ]/ L
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    $ @6 `" s. `2 Z( X: P1 N

  552. $ w: e2 U% P. L4 i7 Q2 w; ?/ a, A% [
  553.         // Standard initialization) @3 M3 O1 W/ t; F$ z+ J9 ?
  554.         // If you are not using these features and wish to reduce the size
    : M% V( x& r( K, a+ M
  555.         //  of your final executable, you should remove from the following0 X8 }4 I: G0 G, R' c6 X: h# U
  556.         //  the specific initialization routines you do not need.
    0 K; u. h& u: [* m

  557. " Q  D) X5 |4 n! r
  558. #ifdef _AFXDLL: j+ _* j6 [8 c( |$ j2 U
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    & x, \1 P& X. N" O# u+ ~. e
  560. #else
    - n4 Y! a! |* y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    8 d% _% r$ k0 c0 t- O& t. V+ d" f
  562. #endif5 x) M! R; q' p3 |) r6 p1 O
  563. . G) E; X$ K" g# ]
  564.   dlg=new CRevAppDlg;' Z# j/ ]# `! V& h# i
  565.   dlg->Create(IDD_REVAPP_DIALOG);- @" `3 T$ d. M% R! C6 G9 u
  566.   dlg->ShowWindow(SW_SHOWNORMAL);8 Q: h: `9 z2 U) u" b: m
  567.   m_pMainWnd=dlg;
    1 m$ W  o5 m. @8 T
  568.   p0 ^! ]- C0 l/ B
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);4 E8 `8 i9 @# D% R/ a1 X
  570. 0 Q5 o6 Z  B2 F
  571. //  GdiplusStartupInput gdiplusStartupInput;
    & M8 V+ G' J  I7 ~' e) P" }
  572. //  ULONG_PTR gdiplusToken;' j. B. Y2 _  o, |% y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    + e9 T5 V) h( |0 w' ^
  574. 8 v3 w: {7 l4 g6 L
  575. //        CRevAppDlg dlg;' n8 g% p2 }. d; q( Z* d
  576. //        int nResponse = dlg.DoModal();* D) y: _8 t7 \- g
  577. //        if (nResponse == IDOK)! e7 X' k# h9 \/ R. L* R: p1 h0 e
  578. //        {
    $ V: d  {& f; G' K- L
  579. //                // TODO: Place code here to handle when the dialog is
    0 U; `/ Y( I: J3 ~4 l# C  {; Y' |
  580. //                //  dismissed with OK
    % e# P* Y) q" [/ o1 q( V- I" p8 X
  581. //        }: `0 R% ^- G5 Z: X( f) {5 b
  582. //        else if (nResponse == IDCANCEL), T/ O. U& E/ X* L  L0 ^
  583. //        {
    4 d" E4 ^' [% d) O
  584. //                // TODO: Place code here to handle when the dialog is- z1 O# D! k+ F# S8 Q
  585. //                //  dismissed with Cancel" H% V) z5 s/ k9 E1 @
  586. //        }& a: M( x) ]4 |

  587. : }& {7 @/ Z* d5 c' I
  588.         // Since the dialog has been closed, return FALSE so that we exit the
      q5 g/ M% h7 N8 x" w
  589.         //  application, rather than start the application's message pump.4 V6 z0 Y% E6 j8 S
  590.         return TRUE;
    / b9 g2 n6 R4 y* n  E5 q, B) q; c
  591. }
    4 Q0 u: a( R8 Z
  592. : s/ P% {; X8 j9 h
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    $ M" r+ f3 z' o# u% B% U1 |, D
  594. {
    ( R: U! ?* T. I
  595.   int i;% Z3 n" U2 k: ]% |3 K  H
  596.   char *szRet;
    4 _* {, x$ x- s& s  p+ f# I

  597. - L* F. i# X! p" v1 g8 @
  598.   if(pSource) { itoken=0; sztoken=pSource; }) D7 Z4 q6 u% x, R6 X4 u
  599.   if(sztoken)
    - c6 A- n% ^  B% m% ]
  600.   {
    , g7 w6 p& C% l6 V8 U6 P
  601.     szRet=&sztoken[itoken];2 j  A6 H  ^3 d/ S. M! _9 I
  602.     while(sztoken[itoken])
    7 k3 b; e5 f1 u- S9 j5 U1 U5 J
  603.     {
    1 T! \$ J: G5 u3 I; r2 l) H
  604.       for(i=0;i<(int)strlen(token);i++)
    * `  m4 y7 Q$ c, k# z
  605.       {
    9 A: B& G, n* g7 j% H7 ~/ ?
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])7 @* W7 B2 n1 U5 s  a$ O" w, ?0 F
  607.         {
    0 C  }% F' d# A) H; j6 v
  608.           sztoken[itoken++]=0;' ?8 L" ?$ X+ }: P) D" @
  609.           sztoken[itoken++]=0;
      |% g' g4 b' {- W! o% h
  610.           return szRet;7 u3 x7 B4 c, n: I, N7 I9 g# W. h
  611.         }& \" o9 B3 i2 ~% Z, Z5 z& j; n1 F( Y
  612.       }' m3 G- V+ F( A  d' P
  613.       itoken++;
    . {& d+ d$ _" g/ J' o! c
  614.     }
    8 j) b$ z  W. k6 X
  615.   }
    , z6 Q, G6 @7 w$ V& V4 _6 f/ l
  616.   return NULL;
    2 M5 |8 K& u/ j* y; Y
  617. }3 J) S% U+ s  ^8 f8 S' b  [& k

  618. ! X) w: L  m, U
  619. void ProcessProc(long Total,long Current)5 b4 b. Y2 m; I% s; f! J0 ]
  620. {" x/ r  q( Y% `/ A+ S
  621.         MSG msg;
    4 o; ^8 x% y- k5 R" B. V7 m
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    . i. q8 k& I4 P, z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
      m% x4 j- l4 N* F# N
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))7 p( m& k/ Y/ p( l. _8 _$ Q0 {. j! N
  625.         {
    ( i" s! X6 }* T# B1 B
  626.                 if(!GetMessage(&msg,NULL,0,0))" ~% V% G! U8 T( u
  627.                 {
    ) `" ~8 y6 ]2 h1 H* Z; e: R
  628.                         return;
    ! `: `8 a$ [" z' |# M6 x3 B/ s
  629.                 }2 D2 p$ @: l$ X, I* _# b
  630.                 TranslateMessage(&msg);
    . F" v7 A0 p9 ]( t
  631.                 DispatchMessage(&msg);
    4 {+ D" I; O8 r" v& ~& z0 J& |* g
  632.         }        ; Y; T+ i$ b; r8 D
  633. }
    7 w0 R% p) I, A! ?, [. k
  634. 8 ]/ f& s6 g. F2 I8 Y
  635. BOOL bFirstChar=TRUE;4 u3 H" U+ _5 {; A9 K

  636. ) r- c; m9 p- k3 y& ~6 I
  637. BOOL CRevAppApp::OnIdle(LONG lCount)2 m0 l& _/ k! f1 y; a4 f
  638. {! |$ L: j" u( E$ f1 ]* a' ?
  639.         // TODO: Add your specialized code here and/or call the base class, d+ E; t% z+ A, U' @! j
  640.   switch(dwProgramState)
    ' A8 J9 E& B: ]6 \# v( T- c
  641.   {# l# J7 b3 \8 b0 B( @
  642.   case AP_NOTHING:1 t' y9 _. y+ f8 Z- w% p5 W- U
  643.     switch(dwStartUpSteps)
    ! H1 d5 }6 p$ E5 f7 w. |7 o
  644.     {, ?2 t5 s1 @5 g2 @3 [. @" g
  645.     case 1:
    " B5 y: T5 |" ?
  646.       {
    ) F; g; v/ P& M/ o- m+ ~
  647.         int i;
    0 p0 J2 \( \$ a+ q/ y' h
  648.         CDC *pCDC=dlg->GetDC();
    ! s' \5 f, X- |. n+ c3 Y
  649.         HDC hdcwnd=pCDC->m_hDC;
    $ @/ B8 g' Y, A6 ?& k. d
  650. //        Graphics graphics(hdcwnd);+ b$ F* x. g% D  Z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & B$ G9 M% H& r# z. l+ a! i; u
  652. //        INT iWidth=bitmap.GetWidth();& \: j3 c  n  f: p7 e. s( e( Y4 g$ K
  653. //        INT iHeight=bitmap.GetHeight();
    * [; {4 O0 V0 s( p% _
  654. //        Color color,colorTemp;
      z& l4 V9 M" \3 E6 d, Y. h
  655. //        for(INT iRow=0;iRow<iHeight;iRow++). a5 e1 f9 m/ E+ Y' E2 j- H
  656. //        {0 ^( ?8 A$ `- t/ q) Y4 [5 p8 j4 P
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( _3 f8 H; ?& B% \4 K
  658. //          {
      i  I* z8 ~3 q
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    4 ^- x* G) Z; h/ m- Y: Y
  660. //            colorTemp.SetValue(color.MakeARGB(& F* O. H3 b/ B
  661. //              (BYTE)(255*iColumn/iWidth),
    + S2 z" D8 p5 A3 H$ e/ n; B3 ?% W
  662. //              color.GetRed(),% D4 f0 R1 y5 V5 @& H
  663. //              color.GetGreen(),5 p, B, A* d; t6 q9 g6 Y
  664. //              color.GetBlue()));4 F$ C7 ~+ s) A! W( k+ v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);% z6 W# y; _; u' i! x7 |, e4 @
  666. //          }/ K/ v1 ~9 c/ G+ r! ?6 m% a6 s
  667. //        }7 Z5 F$ P' X. r% R
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);6 C3 [- q4 s# g6 T( e8 u/ d
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! r& H1 p4 M4 u6 H1 o* z* d7 S
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    0 ^$ X$ y4 b+ Q1 N8 k
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");4 x- U5 j' y- A% r
  672.         for(i=0;i<240;i+=8)
    3 ?6 N' [. |; V! r3 @+ Q
  673.         {/ K- r- T/ T# b2 L4 q) M6 c
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( t" y* |# A& e* S# l1 D
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 r) `, p7 s; G* s  I" k* V
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + w0 H$ d  U; Y0 F5 N- {5 X3 d
  677.           Sleep(33);
    # {. S5 @- j6 j- |) M: Z9 O
  678.         }
    * M- r5 B" @$ x! @
  679.         Sleep(1000);2 O$ N4 Y% a1 V2 W9 d, H( k* i/ ~
  680.         for(i=240;i>0;i-=8)% ?* H8 {+ T9 z1 m
  681.         {" V/ q% p7 R1 P" b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / n6 b% t" I. Y
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 \* E# v: A5 B  u9 X4 L, a
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 l  W( Q4 |' `
  685.           Sleep(33);# w! r( T2 h8 B3 J! Y' w
  686.         }+ t9 Q1 K7 j9 C
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    9 V6 k7 P" l4 p2 x* t0 x
  688.         dlg->ReleaseDC(pCDC);* a) N# E% t. D9 R3 V1 y
  689.         DeleteDC(hdctar);+ M) m4 `0 J- S
  690.         DeleteDC(hdcsrc);6 G: L! G: a4 E
  691.         DeleteDC(hdcorg);2 M  s0 y+ z0 |8 O  i7 z6 Z5 X) Q
  692.       }$ n( G* y$ E) R5 j. v$ z. \
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 _  T; O& H5 o( q0 ]/ R8 D
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' z  W" _$ r3 m9 c8 Z& p1 C9 R; c5 H
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, a/ ]! s) N' G8 H5 Z) Y9 Q4 O) a& R
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    # m% R' v+ |& G! ~7 ^  Y8 _
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 W! T6 Z5 Q1 R) x  P; N6 M
  698.       if(!Dn.Connected())6 ?& d' x( g# V/ O
  699.       {: w; d9 k6 S* z6 C2 ?. y# Y
  700.         dwTotalFiles=1;% @( f4 r2 r% @& o
  701.         dwDownLoaded=0;! v9 c* J' a" k; e' D/ `9 \/ u$ x
  702.         bSilentStep=TRUE;
    / V! `& l. X: P  j9 u
  703.         bCompressed=FALSE;
      _& i- }7 L: Z2 v9 p8 |
  704.         strExtLocal.Empty();2 J6 n. p  U4 G6 E" Z! w6 N
  705.         strFullName="readme.txt";
    ( b3 v, D3 @  W! A
  706.         dwProgramState=AP_CONNECT;
    6 p$ L! L1 h. M. X0 ^6 v# f* L& F
  707.       }+ e) i# P2 J3 D) X
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();8 Z: D) h# g& F) W
  709.       dwStartUpSteps=2;
    ( e; b; C' a, j- U. `  b
  710.       break;
    7 `' Y) W4 U) ]/ d3 p+ O
  711.     case 2:
    ( |- t; }" j$ c
  712.       {  D3 S9 |/ w" ~: ~' w& u
  713.         int iEOF;2 |7 W$ d& `0 C1 H7 F, e
  714.         FILE *fp;; D+ {: d( |, @7 t5 v  [
  715.         char szString[512];
      i$ b2 Y% _' R& k1 z& b
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");- W& R' g0 d( ~3 s
  717.         if(fp)3 H- `( V+ X9 Y4 v# ^# O3 U
  718.         {
    3 J" P9 U+ e- _6 W7 N5 ~) I9 R1 d. h# n
  719.           do; O; C7 k( [+ b8 c  V4 L
  720.           {
    9 }, W' S. J1 t/ y" ~" y( [3 E/ A# U5 ?8 |
  721.             iEOF=fscanf(fp,"%s",szString);* Q- t" G  J/ b9 a" S) A
  722.             if(strlen(szString))
    ( e2 g8 a( ?8 e# C# Q8 A
  723.             {
    ( h( P" u2 C  |
  724.               if(bFirstChar)
    / Q- v9 @) a' }5 B5 S5 U
  725.               {3 R% ^6 Y* u6 b  ^9 v% v, H
  726.                 bFirstChar=FALSE;
    1 d6 Z9 p3 ~) z. _
  727.                 bConnectIsBig5=FALSE;
    2 t$ G% q( y) f% E6 \
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    1 h% M4 B2 D! `& P- r8 a% U
  729.               }
    2 @3 q/ P5 I8 S. E0 r- }
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . x" j( ^- g% F* Y5 [
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));7 L- @, Y7 n$ e9 a# o* u
  732.               dlg->m_ListText.AddString(szString);
    . A, Z4 @8 R+ T& W9 `; U4 P6 S, U
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 |! Z% C  h# a  J
  734.               *szString=0;. Y6 y$ z0 C0 D
  735.             }7 T" W' g' H6 H" Q
  736.           } while(iEOF!=EOF);! W$ |7 l* L# ?4 \& u: S8 ~3 Q# D
  737.           fclose(fp);8 ?2 m4 O6 a  B
  738.           unlink(".\\DownLoad\\readme.txt");, M+ p/ S* c, [$ R5 x- [( j
  739.           dwStartUpSteps=3;, T0 L0 ~' i" }1 w
  740.         }
    9 i6 Q* i, v2 H5 ^
  741.       }4 Y1 c( i9 Q8 o& h6 K" Q
  742.       break;
    1 z8 j4 a0 H# q
  743.     case 3:. v8 a1 \; |+ u
  744.       if(!Dn.Connected())6 n! d3 j1 I! [% x8 Y1 `
  745.       {
      @+ ^. F9 @( r" A
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);- i9 _, q( {( l. g
  747.         dwTotalFiles=1;( g, J; c6 R# Y3 O  Z
  748.         dwDownLoaded=0;
    % j% b* x9 |7 a7 O. X
  749.         bSilentStep=TRUE;* p. g; x: ~+ ]% [: m
  750.         bCompressed=FALSE;+ R' I# n9 {6 C+ n
  751.         strExtLocal.Empty();/ s+ W/ H' f) S% z: m
  752.         strFullName="checkversion.txt";
    6 H6 R& L+ X  }# J
  753.         dwProgramState=AP_CONNECT;
    ; F7 }8 \# K7 x4 @4 J
  754.       }
    & T8 }% S7 O+ z$ o# O2 K
  755.       dwStartUpSteps=4;
    ) m- p: i/ R7 ~. ?+ Z9 V- f
  756.       break;
    4 D; [2 B. k7 ?1 f( w3 E, l
  757.     case 4:
    3 a6 p  R6 M6 u
  758.       {
    6 g( U" @' M5 U7 f! h
  759.         FILE *fp;
    9 B7 v, g! Y. T( ^& d/ ^/ f" S
  760.         char szString1[128];) `1 F# f. b8 D4 p+ l7 B- ?* Y9 Q6 @
  761.         char szString2[128];
    + m0 l, W6 ]2 F: a, }
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ( J- {1 `- i) K. t
  763.         if(fp)
    " w( W( ~$ k5 [
  764.         {' o: D. s& z: P
  765.           fscanf(fp,"%s",szString1);3 ]) }3 e4 a9 ?) H, j
  766.           fclose(fp);
    $ ]$ g3 W, g( {5 r% u6 R
  767.           fCheckVersion=atof(szString1);
    * j4 p) p+ ?4 N( }2 J
  768.           fp=fopen(".\\checkversion.dat","r");
    " K: E+ f3 ]  ]: V# t* L7 E
  769.           if(fp)9 _7 y# e5 z9 }; ]8 a2 n% t1 m
  770.           {) S+ S- }" P3 e$ `
  771.             fscanf(fp,"%s",szString2);
    ' y2 }0 Q4 i2 b! |3 y7 p- @9 b
  772.             fclose(fp);, d8 r. @# E6 s
  773.             if(atof(szString1)!=atof(szString2))% t' h/ z6 Z7 K
  774.             {
    ( l9 K; |9 _- W% T+ B* P. F
  775.               if(!Dn.Connected())
    " K) Y; k3 p( p7 q  |% ^6 r/ S% F, d
  776.               {
    ! D9 u( c* G& A& ^
  777.                 bFirstUpdate=TRUE;5 j# M5 e9 d% n3 K8 u6 c
  778.                 dwTotalFiles=1;
    7 ]) d" t7 ^, z9 G" [
  779.                 dwDownLoaded=0;
    : p- v1 _5 @/ k$ @; m% a; b
  780.                 bSilentStep=FALSE;- L/ v; P% W( l; d% m$ }4 p
  781.                 bCompressed=TRUE;! w2 x+ t0 P- O3 u) F
  782.                 strExtLocal=".\\DownLoad\";+ t2 O8 ~0 H( I
  783.                 strFullName="update.txt";
    ; S: M& l+ C* A# d1 O9 k- |
  784.                 dwProgramState=AP_CONNECT;( u8 N3 T( G/ e
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( ?5 r5 ~2 m% _/ l# c
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' J4 Z" T+ X' L8 w8 k
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 X" M2 d$ P9 e. D! k  F1 b

  788. # V0 i' I7 `$ S+ ~" ^
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      e6 W8 S; q; u, b) D
  790.                 unlink(".\\DownLoad\\checkversion.txt");* R# s" i% m/ P) e) m
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)9 Z- y8 }1 i: E5 o1 X$ ?2 |
  792.                 {6 f& ^% o. I2 U4 z' ^+ X/ F* F
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");7 G2 p$ |7 x! ^) Z- X& O( U
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    2 i% ]) }$ b; X& B' y, S0 L
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");- D% p' r* n, n9 [% D) G- X
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) T* |. }/ F# e

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

4 ~$ w" m* q* ~. N' q+ v0 @& ]: Z7 h' ]& J  {  p

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-7 21:02

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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