CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
$ ]* V) V: C4 R- k& g
  1. / RevApp.cpp : Defines the class behaviors for the application.
    " \$ U3 P: \& c
  2. //& l5 ?& Y' d, b, S, t
  3. * {$ x+ @1 Z; W, Q: @
  4. #include "stdafx.h"; B( w1 j5 c1 ]! a0 O1 |
  5. 1 X5 m2 B2 n( b" P; V
  6. //#define UNICODE
    : |& ^- x7 ?' s8 B
  7. //#include <gdiplus.h>
    . t$ ?  S+ X7 m( o5 e: h; \6 k
  8. //using namespace Gdiplus;
    & D& z1 ]  \% Z# S

  9. ; i2 C+ y- v. V$ `" G) Y/ ~
  10. #include "RevApp.h"0 S0 U- |/ `, N4 N; G) _2 d
  11. #include "RevAppDlg.h": W. Q8 Y. j' A

  12. 1 A$ g$ i% b% `6 j5 f, l7 T3 O
  13. #pragma warning(disable:4786)
    - g5 j2 Q0 ^2 U0 d' i7 N
  14. #include <map>
    0 n% j. P" ?: @' B1 ?) `! @8 M
  15. #include <list>2 {6 O! e$ P( X+ n; b( Q( i8 c4 M
  16. #include <direct.h>
    2 d6 S2 M4 d7 V  K; J/ X: D

  17. + h& N8 q8 ]$ c* U# E
  18. #ifdef _DEBUG
    # E1 f. J- ^, `' O, w
  19. #define new DEBUG_NEW
    6 m7 X4 t" i6 d% g. r3 T3 |
  20. #undef THIS_FILE
    # `& o+ b, m: E7 l' h3 L
  21. static char THIS_FILE[] = __FILE__;  R# @) j! A1 O  u4 y
  22. #endif
    ' q# B: W. @$ t6 G( F8 \
  23. #include "SkinResDef.h"
    , B% _6 n. P1 H, a
  24. #include "ChangeBG.h") D$ [0 ^) u9 {1 s7 E
  25. #include "AFXINET.H"
    ! I% X1 m& W: c1 k$ z! N

  26. : d4 d( c- J* L
  27. #define TRADITIONAL_CHINESE 0% y  E; z9 b5 P# L- P
  28. #define SIMPLIFY_CHINESE 1; E/ Q  @, j5 r8 q% ~- \* C% ^# Y
  29. #define ENGLISH 2
    " u' A0 ?& O" x
  30. int m_iLanguage = ENGLISH;
    ' C7 b/ a% n$ e' S3 z% N9 n+ N
  31. /////////////////////////////////////////////////////////////////////////////
    - `4 m) a/ M. Q) X' }
  32. // CRevAppApp7 L4 ~/ Z* E+ X
  33. 0 X7 ~+ r" D& k6 @# j- t
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    0 H( Q- Y# x: \) p. Z- x
  35.         //{{AFX_MSG_MAP(CRevAppApp)9 c7 a" A( P- d; R* W) [
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    * y) ?, D2 u8 U; X0 a$ t# \
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!4 v/ D6 v. U  {8 ^9 T) T
  38.         //}}AFX_MSG8 ^8 c5 w, G0 ^9 U& E2 c4 {
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)9 M  M: y& F" o" t; e
  40. END_MESSAGE_MAP()
    3 |/ f3 h4 z' ]+ r8 h: i

  41. * F7 x8 l$ d- U
  42. /////////////////////////////////////////////////////////////////////////////( {# U% N' k" @3 l" O
  43. // CRevAppApp construction" F/ h: h; T! {/ ^2 X& X

  44. 2 d& s6 y! S, F/ C5 j4 U, }
  45. CRevAppApp::CRevAppApp()5 ^" G6 l- q- ]( r, X4 t6 W, P
  46. {
    ) I' F6 R) t* y5 W1 G. S
  47.         // TODO: add construction code here,
    " |5 [: g4 j- ?: x1 w8 F
  48.         // Place all significant initialization in InitInstance- v/ E2 O' J: d5 P; Y4 }8 y0 O4 C4 s
  49.   bDisplayIsBig5=FALSE;
    5 [+ O# z9 C9 r  R/ ]1 u+ R7 ]( h
  50.   bRestartUpdater=FALSE;
    9 c3 C. g3 T7 m; `' e
  51.   bFinishUpdated=FALSE;  a, _  X4 g* l. Q' A
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;% ]& b9 l- Q" r
  53.   InitChangeDataBig52GBKS();
    0 h# Q& a% A: ?& L
  54.   InitChangeDataGBKS2Big5();
    ) ^% j6 p  E6 W' @! F3 L# ~
  55.         //
    # w0 H3 A2 f5 @# v
  56.         bClickRunExe = FALSE;* v, G+ [4 n9 q" w& R- f
  57.         //- n- Q4 U' O1 r+ T$ x5 z) a
  58. }$ N4 j6 E$ N2 G9 E  \& O8 m2 P
  59. 2 z0 d/ ]* [! }5 c' P
  60. CRevAppApp::~CRevAppApp()1 h% k& M8 |( j0 D7 S0 d+ P
  61. {7 M% O2 x9 H0 B% ^) F
  62.         // TODO: add construction code here," a5 p- o- X7 e3 n% r* Y0 C
  63.         // Place all significant initialization in InitInstance
    # c$ \0 M# v0 G; E0 w+ V
  64.   EndChangeData();
    $ ~" _- B% |+ U1 P
  65. }8 \, M- Z- S' c  K8 Z7 X. O6 b
  66. ' K: S/ J9 J7 P3 k
  67. /////////////////////////////////////////////////////////////////////////////$ S# L& V  |) p) d1 n8 U
  68. // The one and only CRevAppApp object
    " A8 R( S; s" w

  69. 2 z6 h3 Y) ]6 q5 T! w) A
  70. CRevAppApp theApp;! |1 `" A% o+ U! _

  71. 3 x" J" }4 c2 G9 ?$ |: M& Y# J& i
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)8 w  v% e6 T) u8 T5 ?& i8 y
  73. {  P! {. W3 V" K8 O% y$ s
  74.   int iEOF=0;, ^% v$ d, U( X! ~+ x6 C
  75.   char szTempName[MAX_PATH];4 \; \0 v- D: k9 v) ~
  76.   *szFileName=0;
    . x( @/ `! d5 a' I- t9 `9 I
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! c- N7 W$ j1 t9 g+ g
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')' E* \9 r+ a# F
  79.   {" X3 t: i7 G- Y/ ]2 J. r  s
  80.     strcpy(szFileName,&szTempName[1]);
    6 T% }! x0 Z0 I: b7 j. D
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    * g# K5 \' F* K# x
  82.     {: E& S9 m2 o- B  c' X6 q( a$ ?% j
  83.       iEOF=fscanf(fp,"%s",szTempName);+ ^6 C. V$ ~% m1 g
  84.       strcat(szFileName," ");1 y9 ?$ M  M' _; ?; |
  85.       strcat(szFileName,szTempName);, `2 ^$ q- w! b4 y% a
  86.     }! f5 [$ Q6 e4 v9 q
  87.     if(strlen(szFileName)>=1)' O: R0 A9 Z( N
  88.     {1 |  g  \: W" h9 d) b
  89.       szFileName[strlen(szFileName)-1]=0;
    + x  v0 e( i* n1 S- j9 r
  90.     }; \& W) L+ t2 k. h
  91.   }
    % j) `/ P8 i9 |- h5 h8 y% }
  92.   return szFileName;
    2 a# a4 X# a3 G: @$ g; B3 ]
  93. }
    9 H& z+ o+ l1 k- O
  94. ! A; y3 `+ {9 |8 L
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)2 ]2 u; W: V" @$ C
  96. {
    * L8 C" P4 l1 T/ @! E
  97.   FILE *fp;# I* Y% m/ Q- S" X' C8 G
  98.   char *key=NULL;
    * l; T+ i- X1 E% s% @9 v1 u
  99.   char version[MAX_PATH];
    + w& v9 |$ Z* A( X2 s
  100.   LPUPDATEFILE file,olds;
    , S0 J$ d6 u& Y8 ?5 H
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    * M- E: v9 r+ h% G! V6 Y
  102.   @/ [0 e. L, `$ O& x- k2 E9 k- `
  103.   UpdateList.clear();
    - z3 `& T5 o, \3 d! F2 T
  104.   UpdateFile.clear();
    . y: d3 Z( W6 P( d+ _4 D0 n
  105.   if(GetFileAttributes(filename)==-1) return false;
    ! ~& L% j- n- n9 {( q5 @- ?
  106.   if(!(fp=fopen(filename,"r"))) return false;- o. |" z0 {2 m! V
  107.   fscanf(fp,"%s",version);6 J5 ?  m! h' F7 P
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }7 z/ X4 ~, A+ l5 h
  109.   while(fscanf(fp,"%s",version)!=EOF)' h% E  a' s& c/ i. \
  110.   {$ j# s5 K# s. H1 P( E3 u. q+ t
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 Y) [; A* i$ d5 a8 T
  112.     fscanf(fp,"%s",file->path);
    , p0 O# x$ m2 h" U
  113.     ReadFileNames(fp,file->file);$ v: O8 T* A" @  e! p3 d0 C) V
  114.     strcpy(file->full,".");
    3 k: n1 M/ `2 P2 v! ]; |
  115.     strcat(file->full,file->path);
    9 S6 y. _' K6 A
  116.     strcat(file->full,file->file);
    1 ]2 }/ R7 I; p6 `( M
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())( N! b* c' C+ c. `9 J" S! C; g
  118.     {- D7 E  c. {: k! f' c: {7 _
  119.       file->vers=(float)atof(version);8 X$ I" ?$ M" L+ D6 [
  120.       UpdateList.push_back(file->full);
    # @: S/ {9 M: ~6 }' E0 A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));- l) c2 a$ _! y' |, x; @
  122.     }
    ' V" g" v/ m8 P* ?8 x
  123.     else( o2 c! q/ q- C  r
  124.     {$ N" N' u! H9 X7 T; c1 C. g8 T# R( q
  125.       olds=(*p).second;
    * F/ h& N. {' G+ q6 D
  126.       if(olds->vers<(float)atof(version))  P% P$ B) V( L" W9 x- G
  127.       {- n( ^: y! Q: y  X7 U
  128.         olds->vers=(float)atof(version);6 |. o' s& W) v$ R$ K
  129.       }
    , y" B9 Z! K# ]% ]/ ]( a
  130.       free(file);9 ?* L) V) s) `
  131.     }
    % _' ^. O2 _& L1 X- |. g5 `' u9 U; v, K
  132.   }
    . V! Y2 O. e! s+ u1 l
  133.   fclose(fp);- R% Q7 q$ C. c6 A% X
  134.   return true;* m. p- M2 \* p/ M" D  q9 p
  135. }  B  l- e% K! l- W) h  }

  136.   {* @8 G' e6 @, N2 z& v
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    * U- `0 m/ e1 o$ p; o4 f$ R
  138. {: M. b8 s& d+ {0 R2 J1 X
  139.   TCHAR  szFull[MAX_PATH];. i; P1 h4 q& w/ [' Q. Z# V
  140.   TCHAR *token,*inter;) @+ V" @  T7 V8 S! r- @
  141.   *szPath=0;0 B; U6 O+ {4 Y0 m
  142.   strcpy(szFull,szFullPath);: a$ S% M$ \4 C
  143.   token=strtok(szFull,"\\/");6 [2 b1 t# R5 `8 \5 [5 B' ^1 t
  144.   inter=token;1 q2 O$ B/ f3 q) U! W+ g
  145.   while(token=strtok(NULL,"\\/"))# G  x3 r  G2 f# {% D: W& m
  146.   {
    " w: ~  k* Z, M2 ~+ O% w% a2 ]/ Z
  147.     strcat(szPath,inter);  {' I8 V2 G/ ?$ J: F* }
  148.     strcat(szPath,"\");
    - z4 J6 |0 ~9 U) ]9 N4 [
  149.     inter=token;1 K2 C* Q# z8 ]8 l2 y" x
  150.   }3 o$ K- y# o0 Q& s( v* \
  151.   return strlen(szPath);
    - m% ?# `! Q4 Y  z' k, r, n% |7 ?
  152. }0 t' s2 ], y( H! _1 {: u

  153. ( |3 Y7 ^, T9 v3 p0 e$ L* O
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)0 w! ^& \" C0 W, L/ A
  155. {5 i8 j" J& R% `: h' G7 y
  156.   DWORD attrib=GetFileAttributes(Target);$ |+ h/ [5 N. T# X7 L. r
  157.   if(attrib!=-1)* a' [: F& @! L* I' k: }
  158.   {. I8 \9 D8 U1 @( _$ u
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))9 q+ B7 a. A# Z0 S
  160.     {
      D; F( r+ c; _
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    . n, W( k2 C7 C
  162.       SetFileAttributes(Target,attrib);
    / @4 k; K( ~& C3 ]) E; k0 \
  163.     }6 I( L; C0 U0 D( H% g% r
  164.   }8 v' M3 ?0 D* C8 m; n6 D3 ^, N
  165.   CopyFile(Source,Target,Erase);
    . ^9 M3 C! u  n: f1 u
  166. }
    ) P! R  i8 o) Z( g% ?- v* m* o5 d
  167. & I; q% ^3 ^7 H  n, u/ \, p3 Z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    7 W" I6 ?- v( U, f- R8 k3 [
  169. {3 o+ Z) ]) O! ?& D' P2 y
  170.      FILE *fp;
    8 E* m0 x5 R4 B, Y2 Z  j' E) e( M8 }' C
  171.      char  szBuffer[8192];
    % S( G1 B7 `9 C9 R
  172.   va_list  argptr;) U3 A; N/ W" s% ~6 S
  173. 0 U, h* l- ]" p( ~' v! ~% d! R
  174.         va_start(argptr,message);
    3 R6 F( d$ x: U0 E- V+ {
  175.         vsprintf(szBuffer,message,argptr);
    : f. ^! n' B7 R. o% D) F
  176.         va_end(argptr);9 A# ]+ b. E  V
  177.   fp=fopen(FileName,"a");
    ) d5 W* \# x: c8 W/ ]' H/ c3 {
  178.   if(fp)
    2 @' H9 I) l5 {0 X* r3 @3 \4 l
  179.   {
    ; ]2 k- {9 [9 Z7 h) F1 G
  180.     fprintf(fp,szBuffer);9 F2 g, |& P( M5 v
  181.     fclose(fp);. f9 L8 S( R5 \. k( D0 t
  182.           _flushall();# o- }% Y0 }7 ~. p# k
  183.   }3 E3 }1 z) {2 x' ?: c
  184. }$ v& Y) e" R1 s2 Q

  185. + H) \8 r. d. A; }, h5 c, e9 s; c
  186. BOOL CRevAppApp::Fclearf(char *FileName)' Q( |- k7 F( _0 @9 ?
  187. {
    4 N6 a  c$ W% ]4 |
  188.      FILE *fp;
    , ]/ @' A1 Q# n: G3 [5 b. e
  189.     DWORD  attrib;
    7 h5 R8 @' y3 T  B$ s
  190.   attrib=GetFileAttributes(FileName);& R8 J3 X1 [. u. R7 a: M1 R) p
  191.   if(attrib!=-1)
    7 w( K7 a. k0 z0 K& |: U
  192.   {8 g) B; L2 \1 ^: M1 p+ N
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    " ]% M/ `7 ~: k% j0 S" }
  194.     if(!SetFileAttributes(FileName,attrib))
    ! q/ n5 t! m4 [. l* y
  195.     {
    % Y% ?0 M: g9 L3 ?) J8 }" w; ]1 G( c
  196.       return FALSE;
    - @# ?! Q# G3 r3 g) T: D7 E
  197.     }* e5 Y; m  d) G8 o  q8 s$ @
  198.   }
    # H5 C( D# m/ l+ r
  199.   fp=fopen(FileName,"wb");7 @! s' {" [0 y  z5 s$ k: }5 g) \' _
  200.   if(fp)& \' Q, y, y% V) _
  201.   {
      }) q- M: `) ^7 O( ?, r
  202.     fclose(fp);
    " E5 H2 q) y- k* I3 O- Q
  203.   }1 L8 R+ z; T! e& p
  204.   return TRUE;) h5 M2 J, @0 U- t4 M4 A
  205. }4 `$ _# t* v# ~6 k+ k3 J; H

  206. , {$ ?0 h8 T; o* x; Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ( A' {0 v1 `7 v8 d
  208. {, \7 Y8 F5 `& n
  209.   char filename[MAX_PATH];! M+ i" e# k& S- W1 O/ I0 [
  210.   LPUPDATEFILE file,olds;8 e( x7 L' d: ?6 e  [+ p5 _
  211.   std::map<int,CString>::iterator i;/ n( D0 T4 h5 m
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    , ^/ k/ T  r4 ^3 j5 H: j, h2 [
  213.   std::list<CString>::iterator l;* X3 ]+ f! |' ]( s$ ^4 _9 d

  214. / t% |7 z4 C0 X
  215.   if(bFirstUpdate)) O4 F6 V! M) r3 A0 r. v' |9 O
  216.   {6 V# C' M3 q2 a
  217.     dwCurrFile=0;& E2 l7 g4 C1 q% P
  218.     bFirstUpdate=FALSE;
    1 J3 f. L2 F* l
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 ]5 b. g/ r& P3 H% }  s' h
  220.     {. ^7 p9 |: v+ {" {# b) ?/ {
  221.       dwTotalFiles=UpdateLocal.size();
    ; b7 I8 N& k3 ?- k5 ]5 \
  222.       dwDownLoaded=0;
    " n# d, J8 Z, y  [1 _- b
  223.       bSilentStep=FALSE;6 T$ q: j6 c& I1 n. p; |8 J% t
  224.       bCompressed=TRUE;
    , ^% T1 B" e7 I$ u2 ?4 N
  225.       strExtLocal.Empty();
    . P, B  q/ n( i2 Z) N/ z* @# g% n
  226.       strFullName=(*i).second;+ o/ Q; t- B9 o2 @  W; k+ T
  227.       dwProgramState=AP_CONNECT;5 y% f" L2 H1 `* M9 p! L1 |7 g) \& l
  228.       return TRUE;# Y% [6 V4 h# l+ d+ a
  229.     }
    8 f% ^5 G' {8 P6 d  i% Y
  230.   }
    * G$ O7 O# Y' @$ X) J1 g
  231.   else if(bRestartUpdater==FALSE)3 E( G6 W2 l; J. k& T
  232.   {
    # W4 q9 D2 {- E! s  R  x- y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())9 |0 O& O/ d. Z8 t5 ~' q
  234.     {" _& ]; B  r& G- v% t
  235.       file=(*p).second;8 k& P6 w# I# z0 t
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())8 \: L- y! B* e" {
  237.       {
    ! t# ~. X# q" g
  238.         olds=(*p).second;" g8 }# x- j  {" \
  239.         olds->vers=file->vers;
    & |5 |6 n0 e& g5 c
  240.       }  i& z8 J- z( {& o( }1 I# w0 E3 [
  241.       else
    ' a) X: a. t+ c# H
  242.       {- G9 ]& s! h: F# ]# z: ?. q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 U. i  i  Q& e4 ^
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ' {1 |+ J" P  W& E+ Z1 O
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
      l- c# i' }: ^. O* K  E1 H
  246.       }
    / h/ X6 }6 k: _, a+ [, h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");% B8 u% {3 ^( Y% L2 D$ |& J" [
  248.       sprintf(filename,"(%s)",file->file);
    . ?4 T! k7 d* @
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 Y$ _0 [* g. E; G- b8 W
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }8 w4 n6 j) E7 ?
  251.     }' T$ |( }4 u5 V9 n9 q4 i/ A
  252.     dwCurrFile++;
    % `6 U9 ?/ c, l5 C3 c
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * D8 z8 F  }2 d2 ]
  254.     {: @- v' H  B9 j% j
  255.       bSilentStep=FALSE;
    ( p2 Z2 B! v0 {* B
  256.       bCompressed=TRUE;
    9 [; U2 D- W# \) `2 p' O, G
  257.       strExtLocal.Empty();: J! Z" w& e9 s# X, d* R4 g
  258.       strFullName=(*i).second;/ Q$ t& @" C, W
  259.       dwProgramState=AP_CONNECT;2 J, c/ u: a& V" S( w; T& [  a
  260.       return TRUE;- `9 t0 u3 Y  U; U: Z
  261.     }% z) }' R3 L) a7 B) K* P
  262.     if(!bRestartUpdater): G3 j4 [: ?" c) z# m. e1 h
  263.     {
    % c+ B0 h& P6 o7 \& M5 a4 V
  264.       int iCurrSize,iFileSize;4 P* r: K0 ~3 |
  265.       iCurrSize=0;! L% n) ~$ \$ ~+ B3 H2 ]2 c
  266.       iFileSize=UpdateList2.size();; ~) G9 |  x+ Q6 Z8 G. u
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");1 D  q- ^) j" b3 g
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");. h! [3 k. V$ l) D
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ) x- p) }1 `* V
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' p# D/ U- S2 ~! L6 C4 l
  271.       Fclearf(".\\update.dat");9 E6 [# ?8 ~# j
  272.       Fprintf(".\\update.dat","Bloodyf\n");
      @+ G. d6 D4 \( q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) B. o% v9 r7 V2 I0 R; F$ b
  274.       {
    + X# \' n2 T0 A* e5 ]- ^8 \" W
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    - w1 B" U. v; h: z
  276.         {  R0 @* D/ \6 C7 z' f% ^4 u9 L- _
  277.           file=(*p).second;8 C5 ?$ }, v" X" m4 ^/ G
  278.           sprintf(filename,"(%s)",file->file);+ j1 x( j! s3 |% E# m; `3 M: T# `; }
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! m% X6 [/ k+ B' U3 S
  280.           iCurrSize++;6 K3 i9 h3 M8 F! h$ R7 s1 V& E
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    - c  F% P. D1 o2 u8 g/ y, o) G
  282.         }
    6 T( R$ o1 |* P- C+ n. F9 n
  283.       }
    - v7 Y, g5 L% A% w$ B9 m
  284.       unlink(".\\update.txt");4 r  ?3 b- w+ v5 C
  285.       unlink(".\\update.tmp");
    ( p' A; ]- q! H( j: G5 V! t
  286.       Fclearf(".\\checkversion.dat");) R1 w* l% R, D4 u: s1 `( Y
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    / p: R% p" U1 b2 A, X- L: B, o
  288.       if(UpdateLocal.size())
    * o/ D/ \+ P. B
  289.       {4 y2 j* p  e5 G
  290.         UpdateLocal.clear();, s$ L/ D; h$ N& y* ^; Z' e
  291.       }
    3 d$ k3 ^) g+ @/ B* u6 m: U- a
  292.       if(UpdateFile3.size())
    : m2 Y5 |8 K+ `; Y2 [) n" Z0 M) ]
  293.       {
    . Z2 C/ `. i3 _/ n( H8 z8 y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 t# |, ?4 K$ H6 A# @
  295.         {* U1 C, B- |9 w! ?4 y' l
  296.           file=(*p).second;
    3 x( \7 H. M7 U& A1 m5 F
  297.           free(file);4 Z, v& U* l  x' u$ }- |5 h/ E4 c
  298.         }
    4 E; Q; \" i) t3 L; O
  299.         UpdateFile3.clear();
    & ^! W/ f, _# H( G9 z6 ^# w
  300.         UpdateList3.clear();
    " H' g6 S& U5 A4 P# f+ t
  301.       }# \. }) g* ~7 U. ~' ?
  302.       if(UpdateFile2.size())
    & p$ `" {* y0 n5 k. d* P
  303.       {( v2 l9 v& @8 D& t; o, Q) a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ e( Z$ a6 R4 l5 }, k
  305.         {
    9 ^1 H9 G. h3 {5 p9 ]& h
  306.           file=(*p).second;
    : X+ G( Q0 {! I1 m
  307.           free(file);% a$ Q1 M& ?9 c9 F$ _  J" Z
  308.         }! Y9 x! D) a8 [" Y7 Y8 f
  309.         UpdateFile2.clear();3 t# E3 V  u  m! T8 |0 G
  310.         UpdateList2.clear();
    2 P) r0 I, Y. i# P! M  j
  311.       }* Q& p! g3 t3 b) k0 A
  312.       if(UpdateFile1.size())3 m# |3 N- ]! t& E- ?: U, z
  313.       {* l0 |6 m5 u. k1 Y$ A
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ A. v9 ?5 t( B- ^% \
  315.         {4 o9 G+ ?3 Z1 V1 o9 t  I0 w0 O6 P% r
  316.           file=(*p).second;2 d- Q9 _9 P3 ^' Y7 r* c+ ?0 ]
  317.           free(file);5 f/ `. }) s* r
  318.         }
    1 L( n+ j! L' S  c
  319.         UpdateFile1.clear();
    , S  Y" t6 D  P: `
  320.         UpdateList1.clear();
    ; d8 R* w/ \5 }9 M0 F9 v
  321.       }9 D2 S4 ^2 _0 p3 i: {
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! N+ e" j$ n, x* _% @
  323.     }
    / H0 q2 D% V- K: X7 m/ I+ j1 p7 ]. y
  324.   }: o& n& |/ l4 f8 m6 \
  325.   return FALSE;
    9 a) m+ e7 p0 y% W0 x& \# H8 O4 _
  326. }+ B6 g$ w9 a- T

  327. * t" I% K. q# a& @
  328. void CRevAppApp::ClearAll(void)
    + G% F" ~4 L$ {5 D) `! G$ e' t
  329. {8 c! S4 j5 l7 }3 u3 a8 U" r# x3 d
  330.   LPUPDATEFILE file;; j/ B3 D  n) p5 u* v3 n. f
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 c# D4 h+ s0 h% E0 ]  |% E$ ^
  332. : L- L$ }: g! j2 y/ O
  333.   if(UpdateLocal.size())
    . A) D' A0 Q! V% l7 t* a
  334.   {: j3 v( ^& |! V. W- l% `$ N
  335.     UpdateLocal.clear();$ [$ Q7 x# k5 g, m; p: d$ s
  336.   }
      ?8 r0 {: M2 z, U/ b
  337.   if(UpdateFile3.size()), x% C( a6 Y1 X& G
  338.   {
    6 V% V; C- z" [+ i& B  o' S
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , j6 S* A0 G/ \- V
  340.     {
    ) p) g0 P) }- o/ A! _+ t
  341.       file=(*p).second;
    " i4 F. H' {6 x% H& e, g
  342.       free(file);8 \5 V5 z* U' G. G4 m6 _9 ?
  343.     }
    5 {" M+ d4 D. Q2 [0 B5 @
  344.     UpdateFile3.clear();0 M& z3 J, b$ y3 o! G2 N
  345.     UpdateList3.clear();
    - Q1 A! ^3 K- t8 q
  346.   }
    ( A) u1 F! S: ?8 I) n' ]3 b
  347.   if(UpdateFile2.size())
    1 |% d3 y: G0 U5 y
  348.   {
    : a6 o9 z3 N; K) I
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 n; P; a% ?. Q
  350.     {9 E% ?3 B1 B% e/ X6 O
  351.       file=(*p).second;3 x/ c5 I, m$ g8 d& k
  352.       free(file);8 V4 `5 Q6 Z3 B% k
  353.     }
    * {! r! y. Z" s5 a! N, {
  354.     UpdateFile2.clear();% p7 t6 W/ W. M" u! T8 {
  355.     UpdateList2.clear();
    , @6 b# u- @# c  p& {1 K
  356.   }" e7 k' D3 e  Z( `4 ^) Y* _
  357.   if(UpdateFile1.size())
    # s" a! T, Z: _, Z: e' ]( B+ t8 R
  358.   {
    # a0 S6 T4 O) F9 \  [
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & M$ E/ t  X/ [0 e, r* Z
  360.     {& J  i3 T5 v8 A9 U
  361.       file=(*p).second;; ^6 T2 t# W) W9 V- E1 A
  362.       free(file);( J/ h2 b2 @; S- }
  363.     }$ p  E  x1 I5 ]
  364.     UpdateFile1.clear();
    * J$ e4 J" G( U; u
  365.     UpdateList1.clear();
    / G5 z- q2 @- J! n8 M
  366.   }
    1 I1 e* x2 ]  T$ u* K6 p
  367. }  
    / ?5 L& t( U$ A- d1 W
  368.   
    / z9 }* q" H: z. \# l2 f
  369. BOOL CRevAppApp::CheckLocalVersion(void); N0 o1 p6 z+ S: X$ j
  370. {
    0 |6 p( ?& l, H, x
  371.   int c;
    5 n% @+ h/ T  @7 T" y
  372.   LPUPDATEFILE file1,file2;. ~! ^# M3 e0 X0 O. g" e; P2 K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;& i1 ^; [8 i7 U$ o
  374.   std::list<CString>::iterator l;
    : T/ b$ R! y$ z
  375. 6 Q6 n: V1 v: H. M# K" ?, N
  376.   UpdateLocal.clear();
    ( s0 K% D' S$ m/ M& G% {7 R
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);6 h! z/ k) z! k: e
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ e2 w# G* \" @
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);- a' y  L, e$ S; C+ h0 P% z( \* z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);* u* n' x9 J: s3 @+ a- {
  381.   if(UpdateFile3.size())9 L6 a) [7 ~% t- j- f+ {( k
  382.   {: p5 n3 y; V) b! K; w
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)7 n; P# ?# u: I9 S4 s0 f* ^
  384.     {
    9 Z  u- v$ l# g; t
  385.       file2=(LPUPDATEFILE)(*i).second;& u# U( w" u; l# q  g' U
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). j. e  ?6 A% @0 _. \0 A
  387.       {
    3 |) |- E# h7 ?& d. j
  388.         file1=(LPUPDATEFILE)(*p).second;
    $ D+ P/ C8 ~4 X# h( _) B4 O
  389.         file1->vers=file2->vers;$ l9 a$ {) O$ @7 a3 J1 o0 O/ U
  390.       }# e2 S( G. C+ G* r6 X
  391.       else1 u$ `7 J4 V( n$ N3 q% [
  392.       {
    ) i; i% Z4 m% Q) t
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 k5 j. Z3 f! j) V  M. Y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));) |% D& y, F3 f4 e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    + A  J! o$ p, x8 v8 D8 s4 U
  396.       }
    ' Q- b: c; ?; f% H" ~% g
  397.     }
    7 K$ a3 I. Z  m) O" D! Q7 f& v
  398.   }
    % a0 V, l$ H; F7 c
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++), y) p, e. K  M2 z! |- ^
  400.   {
    / \& f. |* h5 S  b) B
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 V" }' q; k' z7 |- O
  402.     {
    1 ?0 v2 F# J/ V& L3 C6 Z
  403.       file2=(LPUPDATEFILE)(*i).second;
    9 e8 [  @: V. P4 P+ N) X* P
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 z( ?" P- g0 }0 A( b4 c0 d
  405.       {
    " @: z) O* y8 Z& }1 r
  406.         file1=(LPUPDATEFILE)(*p).second;  ~. W; a! j/ u
  407.         if(file1->vers!=file2->vers)
    ; R5 H5 {0 |3 ?. A
  408.         {
    . x; y$ G' i% D
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ l. b% O2 U1 {0 n0 F) H" M
  410.           c++;
    2 |* s7 g. ~( j! V
  411.         }
    6 A0 o3 [! b3 N: i
  412.       }. ~; B$ E. |1 o5 `! `- y
  413.       else
    7 M! b) y! U: J* |/ t0 Z
  414.       {
    8 Q1 k6 }4 j1 i- y; ^! M
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* A" H: F) m6 n
  416.         c++;
    ' y2 t/ R& L4 E* s) s$ @" q
  417.       }
    - l, O  {7 f9 P& e8 I
  418.     }1 ~6 c3 D$ n) `$ y4 m* x5 y
  419.   }
      ^$ z6 ]4 ^: w" S
  420.   unlink(".\\DownLoad\\update.txt");
    ' \# f- B+ H& q- `1 G0 I$ y1 L! k$ Y% Y
  421.   if(UpdateLocal.size()) return TRUE;  z& z' {$ i( A" f: B$ J' i. A8 s% s
  422.   else                   return FALSE;
    8 E% _$ s' r; Y7 e$ ]' ^4 S3 a
  423. }' H' |( v; w2 D0 q; }! O
  424. 2 K, K- b5 t: G
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"" E% e5 B; c5 m) a% Q/ T9 z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    " Y+ T: U' v& \5 ]1 U0 v. d, M

  427. " Q2 e2 p2 C: d
  428. + E% n$ j, J6 w1 X; b

  429. $ T# F( ~3 [& t: l& ~( f6 U
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)3 g/ I6 D5 m1 ?* w$ J, }$ ~
  431. {0 Y0 C- L$ ~0 t# o& {8 K# \
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    , r5 {: F$ f4 A( Y2 R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)/ l7 V: v0 D5 a/ _4 Q3 D
  434.   {+ q/ P  j! E2 I; N4 b
  435.     char szLanguage[50];
    " i% `" i8 N. X- j. W
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- N- e, W1 W. g  E* K" G4 b
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 J9 P! X' L9 p! g7 p. y- o3 [
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - x; C1 k  v- ~
  439.     else                                   m_iLanguage=ENGLISH;
      k5 N$ a& N5 n& n; m; n
  440.     char szRegister[100];! h' e- V! e$ m! j2 w/ _( R, x
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ J6 t9 g' Z4 m
  442.     strRegsName=szRegister;6 I& R" ^1 [5 M; }0 I
  443.     char szPatchURL[100];# X) _8 i/ h0 t& M4 n/ \
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* P4 C# W" v  b8 I& d( B
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 D) U7 s: y+ Y0 [* S5 i% j
  446.   }
    7 S; o1 x9 M+ j& \$ |
  447.   else% v! w! ~  s+ Y+ N! v% F$ @
  448.   {
    ( r% p4 J* M3 N9 }
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 d! |8 \9 _2 i) k: y' b% f6 M$ P# L* r
  450.     strRegsName=DEFAULT_REG_URL;3 O2 Q7 |- U* X- B4 u
  451.   }
    ) E. O6 k- ]# o! ~7 y5 g, K" H
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    : A- `/ x# N1 D% s
  453.   {( _' C3 R8 q3 J, b- o8 ~( A2 J
  454.     char szIP[50];. z- @' t5 o/ ?2 S$ E6 K) C
  455.     char szDIR[300];7 `- j4 y( b0 C3 `  d4 G4 o8 I
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))5 B, p- s, R/ ]* U
  457.     {6 G, d% N) T* u2 T
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    3 z0 D  ~6 s. \) t  m
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    4 X$ [5 }5 i6 B! r
  460.       strHostName=szIP;
    ( B3 }; F- L( s
  461.       strHostPath.Format("/%s",szDIR);
    7 J: U- H9 H* t6 X3 V+ |4 R
  462.     }1 }' b& U' y  @( [0 G
  463.     else
    / Z* j4 `2 ^5 t9 j+ U8 A
  464.     {
    ! b1 q8 }( t! |, N$ {# k
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! D1 @( k& ?* K4 O1 d
  466.       {
    1 w7 |9 G( P% d: Y
  467.         char szLanguage[50];1 F3 u* p6 y& ~; I% q6 M& N1 a
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / }6 B8 g' x  I& W6 a) h
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 A' }; Q1 S" }7 j' d
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. K* v9 g- @8 b0 [3 W
  471.         else                                   m_iLanguage=ENGLISH;
    2 O# X6 m0 s+ H2 ?. q& R, @6 L
  472.         char szRegister[100];
    0 j8 M; S' M  @* F' ]0 l9 |
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: a- J/ h" [+ g* F
  474.         strRegsName=szRegister;
    * k/ U+ G6 _8 b7 I% P7 h7 H3 z& B) `
  475.         char szPatchURL[100];' ^6 n* ^! j5 c1 U
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# Z8 q" n( G9 ^5 k) N) P8 K
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# S: q, q" p6 u1 _% b
  478.       }
    8 l0 b9 |2 ~* p) v& B4 X! {$ n
  479.       else! m8 @" V6 G& d8 R' L7 |
  480.       {& K! j( M+ h& M
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 z9 G& c, F: n$ x$ q) Q# F
  482.         strRegsName=DEFAULT_REG_URL;
    : l1 c9 Z5 a  x4 {3 n: _8 N
  483.       }2 m# M, z3 \9 d: {
  484.     }
    0 l, u; Z0 Y2 Q8 b
  485.   }
    / P, n) @( Q* d+ O6 l) n. G
  486.   return true;6 T, x. e$ O# W  a: g
  487. }* _  f9 @, d& y$ B; j$ b

  488. $ V* {8 P  R/ I3 i
  489. #include ".\ZLib\unzip.h"
    - o0 z( Q4 m4 @4 U  x
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    # ]" H) J% Z+ g5 V: B( A
  491. /////////////////////////////////////////////////////////////////////////////
    " f( Z$ x; \5 J2 \9 ^, h
  492. // CRevAppApp initialization$ b3 J% {* ~$ ~: F
  493. 2 t1 Q" _) l+ P
  494. BOOL CRevAppApp::InitInstance()
    3 W$ K0 g6 \: a( X
  495. {
    $ p5 R' s, i. l$ R0 {0 p/ [1 M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];0 G' N% U+ H% {/ Y" R& ?
  497. ) J/ p) {" R' N; K, j
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);$ ~: N5 f  }! j* a5 Z6 A) A
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))( }) @! [5 i( Y3 N
  500.   {3 g/ T- b  N; h7 r7 t
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");  X' a" g$ M( N5 ?6 _2 K7 z1 C
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % j5 d, a" _, H
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    " I8 l4 y' I4 e
  504.     {
    - Z4 c/ |( y+ l" B: p. B5 w/ r
  505.       strcpy(szPath,szPathTarget);
    8 Q* \8 ?. i5 Q  u$ O/ E
  506.       SetCurrentDirectory(szPath);
    4 N. x! p7 W6 x' |
  507.     }4 k8 V" F7 G6 c/ X) O
  508.   }$ P* ?. P- ]6 }6 F. u4 d
  509. #ifdef _DEBUG' W; w! l; d* `7 w2 p( v' b! e
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), {6 P8 v. s& t4 ?0 s4 {
  511. #else
    ! ]5 w& [/ j( O7 u( a
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    1 P* n; y; l+ I/ w5 F, \
  513. #endif
    3 o& _9 t+ E: T2 V# w* W9 F
  514.   {
    ) e' q3 a0 W2 `4 ^- d$ v
  515.     char tempFileName[MAX_PATH];
    " |9 |( |  y0 t& w; R+ F- k7 N4 n
  516.     strcpy(tempFileName,szPathSource);
    9 q) r- A- B+ X6 I) K% }
  517.     tempFileName[strlen(szPathSource)-12]=0;
    - X9 W- f, a* l& G0 F  J/ B! k
  518.     strcat(tempFileName,"\\$CSUpdate.exe");( J$ Z0 R4 K* n7 o' v& z/ ^; O
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);! O7 W2 v7 G& ]$ w
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    0 H2 V% i" r# S1 v7 P* [. v
  521.     return TRUE;
    6 R0 k4 }# \- t$ M( D. K
  522.   }
    $ F7 b. m5 [2 s
  523.   // Nuke 0118: Delete run.exe4 T% s, H0 J1 S* w
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    6 X) Q) B7 E0 U$ q
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    7 z. |0 K! z8 J
  526.   if(!ReadCfgFile("Config.ini"))6 v$ l$ ^* d  A9 u9 j
  527.   {
    : G  Q, R/ C0 d; z8 q$ ^" _
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    $ k$ l2 n- M) i/ P" U8 J
  529.     return TRUE;
    7 k( |: O6 M# \" a4 H1 s% _4 r
  530.   }
    - v, j3 _, N% [3 m3 U
  531.   HANDLE mutex;
    2 _) s6 n* N, k) l
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    8 X2 B4 _- h" k6 u" K: f4 a
  533.   {
    : s' M# z- I) o2 b
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS). Q9 v7 |& y% r, p  T
  535.     {) a- d; Z6 i0 N: i2 }& K+ o
  536.       CloseHandle(mutex);. o  D" ~# ~4 o0 @2 |- D% n
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    + ]' O+ w: [, g9 j8 L
  538.       return TRUE;
    0 S5 _3 P2 K: S, A3 L! i
  539.     }& s$ n1 D" W; c4 ~4 b6 R# l
  540.   }  * p5 y- D! i9 ]# [$ ?
  541.   CloseHandle(mutex);4 V. ^+ v1 Q" j% |) s
  542. 8 `$ a* m& O; O5 z. _
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    : o+ X& E. j$ n  X" W# w( ^

  544. # ?+ M: h2 ^+ E* S$ m% |
  545.         AfxEnableControlContainer();
    2 W( M! I' T) |/ U* H

  546. ( z7 \  D. C  _+ A9 X* f. ~
  547.   bCanUpdate=FALSE;# I) f( @4 ~) A) D7 Z+ c
  548.   dwStartUpSteps=1;
    ; b9 H" F# [- A# B
  549.   dwProgramState=AP_NOTHING;! _- x) X9 h3 q; I2 k9 C# ]
  550. 6 c. [* ?# f5 z  i6 d# b' o- i
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);# q6 [4 _; B* g" V  ]: J0 \/ a3 f
  552. . o+ ?. y- g! b2 `- T
  553.         // Standard initialization4 ?' y* {  Z+ }  \. A7 ^; w; f+ ~
  554.         // If you are not using these features and wish to reduce the size
    9 U! ?4 T" l, u0 z. y
  555.         //  of your final executable, you should remove from the following/ W& A0 `8 T1 P/ l3 j1 u
  556.         //  the specific initialization routines you do not need.
    * [: i* b1 x0 w% Q, n
  557. 5 g8 u8 M0 |0 ^/ y- y2 ^
  558. #ifdef _AFXDLL
    ! K! c- A9 t, k" V8 I8 n/ h
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL& M4 H" i- D' `* J. z
  560. #else% d1 h# w/ b7 R' w
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    , E. t1 X& k0 X) Q7 c/ d
  562. #endif
    1 d2 @/ b7 }4 B: k7 h" ~
  563. ) R- B+ i: ]$ E( [) w& m" {
  564.   dlg=new CRevAppDlg;
    & G1 O6 d1 n; y! ^3 [9 O
  565.   dlg->Create(IDD_REVAPP_DIALOG);) v% p, q7 [) E
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    . b! z  _4 @. A
  567.   m_pMainWnd=dlg;
    ' }: R. Y5 L& q, ~8 B

  568. 5 p; U$ A. f3 B# ^" ]3 q& o
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ) K4 n1 H+ V: f! N; K9 N4 q0 d2 o8 V/ K
  570. 2 {! ]. n# O/ o* @; g" D/ W# w" e; z
  571. //  GdiplusStartupInput gdiplusStartupInput;
    / T4 `* V' P& m2 C  d: z
  572. //  ULONG_PTR gdiplusToken;
    2 j) G0 _  S3 b0 q' d1 V; t- J, e
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 O' M. b3 _1 [9 n" v# u

  574. & `/ s6 E: ~# z4 h, u
  575. //        CRevAppDlg dlg;
    0 ]% x* K2 w+ n! p* s: l
  576. //        int nResponse = dlg.DoModal();
    * L" l& r& t/ o8 T; k6 n3 R. u) G
  577. //        if (nResponse == IDOK)
    ' P- ^8 k; I: |. R
  578. //        {; G5 K! s) l. v  n9 _
  579. //                // TODO: Place code here to handle when the dialog is$ l5 V. e6 ~: H% h* ?/ }; C
  580. //                //  dismissed with OK
    8 ^; w. s; x( S3 Y. [
  581. //        }
    3 `7 w: F0 e; Q0 W( S
  582. //        else if (nResponse == IDCANCEL)7 |- z  i/ N4 W0 V/ f
  583. //        {
    1 M6 i0 ~' Q0 f: B' S/ [# U5 l0 V
  584. //                // TODO: Place code here to handle when the dialog is& q7 t9 [: J! T% m, D/ E+ t$ P# a
  585. //                //  dismissed with Cancel
    3 ~+ c/ X: R# J9 _3 }6 m
  586. //        }! W2 q2 [# H  T
  587. " u; X1 W3 q5 P0 t/ K- d' H! d
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ( t7 a3 {: q9 R2 x0 ]8 O) w
  589.         //  application, rather than start the application's message pump.
    7 Q3 J* _7 t8 d% y+ x9 I
  590.         return TRUE;
    3 w$ A" ]" P1 M( E, ]6 E8 q+ b2 d/ t
  591. }+ v# `* o0 l# V. x7 _6 s! p: x- W. w

  592. / I# N/ A3 w3 I% V$ `  b1 b9 E1 D
  593. char *CRevAppApp::strtok3(char *pSource,char *token)) O* h5 V0 P7 X! r" K- ]$ Z. B  I# O
  594. {
    " L& F8 U8 w( a7 M2 }+ U1 ?
  595.   int i;% k0 L- ~& G+ m1 S4 h* {
  596.   char *szRet;
    : w/ c% @* D( F$ @, i

  597. & z% R; x  O* B/ F- c! w
  598.   if(pSource) { itoken=0; sztoken=pSource; }& Q3 o/ K3 y1 B  p# V4 m/ x- r1 d
  599.   if(sztoken)
      Z$ a- f2 B: q) {  }/ W+ p
  600.   {
    % q* l1 }2 v5 v* d4 k6 Z% I4 [
  601.     szRet=&sztoken[itoken];
    $ E  d6 K4 s  T
  602.     while(sztoken[itoken])
    + S% d4 i5 Z$ p
  603.     {
      I. N1 m5 e4 _# c. l3 L
  604.       for(i=0;i<(int)strlen(token);i++)
    $ A5 k- s1 }, A, J- S" b8 F, ]* c
  605.       {$ r' e; g* }7 l& a# _
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]); p# s% n0 L7 v% H* w6 F6 F4 r
  607.         {0 h0 x0 K; l+ [/ x
  608.           sztoken[itoken++]=0;8 }/ b# ?+ D! a9 G9 V4 x6 e
  609.           sztoken[itoken++]=0;
    . _& l  e, O( w9 I/ }
  610.           return szRet;
    , B8 b; |6 \' v7 W
  611.         }& Y6 `) }- v& T" q
  612.       }& a. k5 q  a0 J( g: j# w1 Z
  613.       itoken++;
      N9 z- q# \1 O1 d; ]% Z4 P, s
  614.     }% D7 {8 f8 [9 P/ K/ x8 K
  615.   }
    $ S: n6 T( v( C/ Z
  616.   return NULL;
    2 q' R7 b" ]; |2 ?% G
  617. }
    . G" c" K. ^* t
  618. + Q6 p7 {7 t0 l% i' v1 v  N1 J7 ^
  619. void ProcessProc(long Total,long Current)9 @# t3 F4 ~1 n4 p7 |
  620. {
    & ?) P7 T1 }7 Q' h
  621.         MSG msg;) r1 z5 U  G# s( j
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);  E9 V+ G# ~' l# x4 K! I
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " `1 U5 w6 @/ b, _# X8 O
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 X7 j1 @5 ]6 t( `# D
  625.         {8 ?6 n2 D  f, O8 f
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! K4 W6 I7 S4 x! c( P$ v" g1 Q
  627.                 {
    4 A; l5 v4 C0 q3 O( w6 F
  628.                         return;* p7 p* W; l" c5 q+ t) Q! {0 ^, J9 |0 K
  629.                 }( S1 I, S5 a/ z  a" u
  630.                 TranslateMessage(&msg);
    3 @, J1 v( U+ a4 s
  631.                 DispatchMessage(&msg);" Y" r8 \3 G, d" {
  632.         }        + g/ ]: h* w, H  r) y/ m
  633. }: V3 \5 ^. f& c" P+ s6 o! S7 i
  634. , F' y, F2 c& G+ h# s
  635. BOOL bFirstChar=TRUE;) u( R2 P# w! {" ~) K, |; k

  636. 0 K# l, \5 W0 h) D" R
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # E0 @' [: B/ S. r' l% Y; O5 e
  638. {" u0 H) g  T7 c$ p5 I
  639.         // TODO: Add your specialized code here and/or call the base class3 F( P. n5 e/ N. F, [
  640.   switch(dwProgramState)
    . Q4 n+ v. G* L4 b. O
  641.   {
    ) b# z3 f+ Q$ }% N2 a
  642.   case AP_NOTHING:
    % ?8 f1 J$ ~% Q! X% r2 W: D0 T
  643.     switch(dwStartUpSteps)& q& P$ v/ ^  {/ x" t) p) o9 F% c
  644.     {
    $ Y5 a1 k6 i0 G2 M
  645.     case 1:6 I7 s/ f7 r/ E: I) V- f% b
  646.       {( b6 j3 a# A. a/ Q/ C
  647.         int i;
    1 u" v2 f4 F3 M6 [" m  z
  648.         CDC *pCDC=dlg->GetDC();
    ! Q% [7 s; R9 D, r; A
  649.         HDC hdcwnd=pCDC->m_hDC;: F0 o* y) e8 i3 K+ V, K& v% v
  650. //        Graphics graphics(hdcwnd);. b9 l7 Q* Q  y9 N
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    9 i# n. L- L* c6 a2 J+ ]
  652. //        INT iWidth=bitmap.GetWidth();
    2 M- R, u- `3 Z9 h0 N8 f8 @" T
  653. //        INT iHeight=bitmap.GetHeight();2 j" V' N% A0 G9 \, A  U( V
  654. //        Color color,colorTemp;+ D2 O! J6 V3 |/ h1 i( Z6 Z; B
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    5 t+ x. ]/ i5 ^( K7 B- Q/ J2 d4 _! S
  656. //        {+ N$ y9 L. v+ Z  n9 T" s
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)9 C- e6 C( s  b
  658. //          {
      Z4 c& B) s+ y% r
  659. //            bitmap.GetPixel(iColumn,iRow,&color);* g- `: P6 A+ _" N0 ^
  660. //            colorTemp.SetValue(color.MakeARGB(5 T; b3 s: H) J4 n
  661. //              (BYTE)(255*iColumn/iWidth),
    , u2 q  H3 ?3 ^2 ~  y
  662. //              color.GetRed(),% ^+ L  R% a: ?
  663. //              color.GetGreen(),
    * ?$ `. x: P' U0 Y3 A; g6 I8 A
  664. //              color.GetBlue()));
    8 Q$ o! ]6 }% Z4 F, t6 |
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);7 r8 F, o4 `4 G; C
  666. //          }
    5 Y9 ]( \6 ]( F. L+ K
  667. //        }5 w/ b, P8 k4 N6 D: a8 f+ ~
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + r" K, O# d, U+ |
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & h. n% g# j3 x% W$ D- L& I% t/ s
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");2 ]0 p# W' f. Y9 h) j
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 H" `) n6 _& ]
  672.         for(i=0;i<240;i+=8)
    ' b- N$ R  C5 {) a2 u- X5 j; T
  673.         {
    / |0 T. ~: r" P4 m8 P3 E
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; m# i$ w% X5 U$ U
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & O6 C. m( B# {
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 O5 J+ R9 O# R- _7 ?
  677.           Sleep(33);
    8 R% K. e, O& k$ T7 S3 m
  678.         }  l% r( G5 N. b1 P( r4 M
  679.         Sleep(1000);" u5 q+ Z4 I& ?. e7 F0 P- I2 x
  680.         for(i=240;i>0;i-=8)
    6 {9 R6 P+ C$ L1 G0 x! s
  681.         {
    1 J# X- m3 z! t4 k# h
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 g, N8 e. X  A* E1 m7 f# V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , q( x. M$ r+ ]5 {2 E
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ R# E- j6 Z. w
  685.           Sleep(33);
    + S* o9 G( B2 M' F0 `6 u6 Y
  686.         }
    / K( P$ q  `% ?. I, z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    # m# ]" p8 R4 b; H1 {7 B
  688.         dlg->ReleaseDC(pCDC);
    6 h+ D4 m) x) {) D
  689.         DeleteDC(hdctar);
      T! t* s/ j) e+ `  X
  690.         DeleteDC(hdcsrc);# p9 H& I2 ]  K: q- F9 P
  691.         DeleteDC(hdcorg);
    3 N0 W1 n3 Y* \- C. O1 ?
  692.       }
    8 }& ?* Q- n" Q% m- J  H" p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);7 J5 A+ e1 O7 v, {; i0 a
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 x4 a4 U# ~) A: |* r
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    : p. }) d# a5 I; i2 R0 c% [
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");, ]( d; K* c: q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / W0 F* n) d! \/ o* z' M
  698.       if(!Dn.Connected())9 ^5 K! G* T- |2 \$ t; ?
  699.       {9 u6 A8 t. l+ i6 j
  700.         dwTotalFiles=1;
    7 @& y) j- |1 m9 v& [6 A! ~
  701.         dwDownLoaded=0;& u; N: T" w0 Z9 @
  702.         bSilentStep=TRUE;7 f  g) w, {$ w5 P! c. A
  703.         bCompressed=FALSE;
    4 G# q& `4 g# A  t; R2 H
  704.         strExtLocal.Empty();/ z- }5 [9 f/ A& ~/ u
  705.         strFullName="readme.txt";
    2 ~/ W; v+ q9 u6 L+ `, K
  706.         dwProgramState=AP_CONNECT;
    / @2 M$ \; ^3 l1 I, \( b, a3 ]
  707.       }4 W+ |, M. _) P* `
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();: J3 S! S( }- m& E, u
  709.       dwStartUpSteps=2;
    ! X9 x& T3 H. M2 _0 G$ e( s
  710.       break;# `; ], N0 O- h0 L' B8 r
  711.     case 2:
    / [: A: u, q, N. n# r, E; ]
  712.       {
    4 @4 o- l, T* E- E! J/ \0 Q; o( l" R
  713.         int iEOF;
    7 ?+ e+ b/ G) z3 v' }7 [* k1 T
  714.         FILE *fp;
    0 |" i9 w+ A" U  w, j8 R
  715.         char szString[512];' y. @! u& o0 x; M( r
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ) C9 }# x1 H0 N+ `$ K
  717.         if(fp)$ ^" `4 m$ r9 ]5 f  r
  718.         {6 G$ w2 R' R6 _2 l* {  Q
  719.           do
    7 `. q: F" x) ?7 A5 C: h$ W2 w
  720.           {# ~0 Q; A( B, {7 G' `! b
  721.             iEOF=fscanf(fp,"%s",szString);
    ) ]; f: o( x: h9 x/ k* _
  722.             if(strlen(szString)). r9 R( [, J; J$ J4 X- i
  723.             {6 N0 P% u1 t" z
  724.               if(bFirstChar)0 d4 |4 O+ f4 O# N4 T5 u4 {
  725.               {/ j9 G  ^. r! g+ c* H
  726.                 bFirstChar=FALSE;9 ^! T4 {- }8 A+ f# Y$ j# J8 M
  727.                 bConnectIsBig5=FALSE;
    / ]( L" i- o' y9 _+ O- b! R- x
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! ~" p6 b+ K" b% z+ G6 h9 b
  729.               }5 h& G- U+ h3 p$ q5 R  Z. _0 r
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 M; r" f1 Q: I( o* f
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    : \/ ~. w* t+ ?, `- Z
  732.               dlg->m_ListText.AddString(szString);. f) l+ Q( v2 c
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : H! F* B4 T0 Q
  734.               *szString=0;% R0 z# e; E" @  R
  735.             }
    : t& K- S2 j  \  F1 p7 S( g9 y
  736.           } while(iEOF!=EOF);
    8 f( W" k" O7 j9 E* j9 a
  737.           fclose(fp);
    8 H7 S- H' [3 X5 ^8 d. h" J& _
  738.           unlink(".\\DownLoad\\readme.txt");9 j  y; V6 Y# w7 i" N0 j
  739.           dwStartUpSteps=3;- B! B, B  h5 M# _
  740.         }
    , V- ]+ x' _6 G; f7 p
  741.       }
    + S* b; D  Z  o  S$ K5 p
  742.       break;
    3 t3 y/ w: {2 l! i5 e
  743.     case 3:
    " S+ E: t8 _! p5 m8 ^
  744.       if(!Dn.Connected())! z' s7 l, i# s: i# }# T
  745.       {
    ( I4 h4 W5 L& G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 {! q  |! f# ^6 M  v
  747.         dwTotalFiles=1;0 z& c; _5 K6 ^, Y0 D' s, j# y
  748.         dwDownLoaded=0;, U3 |9 X5 F% W
  749.         bSilentStep=TRUE;* h& B/ y' u0 H5 k9 Z' {4 e. t
  750.         bCompressed=FALSE;  H3 u2 K/ e9 ^' n
  751.         strExtLocal.Empty();6 x& C2 J5 S. q2 s9 a* `
  752.         strFullName="checkversion.txt";
    $ r! C" \% B, x
  753.         dwProgramState=AP_CONNECT;0 C% ?8 @' z/ c' z) C; O+ U+ R
  754.       }5 F' g5 m4 Y5 f) k. `; ^
  755.       dwStartUpSteps=4;+ w% R1 v( V' z. Q5 M% M: M$ \
  756.       break;
      t4 u5 F! B, H
  757.     case 4:
    3 j' D3 c1 w$ M# z& J* D/ l6 a
  758.       {' x1 d3 @& X2 m( U% n: P( Q7 X
  759.         FILE *fp;
    ( R. G* }  j$ p+ Z
  760.         char szString1[128];- p+ q, Q, ?& C9 c" c+ C4 {) C
  761.         char szString2[128];
    8 l/ I3 \* ~5 J# p0 H
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    8 o7 E. S5 t& s& U
  763.         if(fp): T7 Y+ |- E) m* s
  764.         {+ G+ C; d. Y# \' B" r& h. i% C9 r2 L' \
  765.           fscanf(fp,"%s",szString1);9 r- F. p# ^3 z! W( @$ r5 e. P
  766.           fclose(fp);
    9 T4 L8 r+ n1 s; E
  767.           fCheckVersion=atof(szString1);
    - |/ X2 \: V5 ~2 `+ O
  768.           fp=fopen(".\\checkversion.dat","r");# K% s! P2 E$ Y% o
  769.           if(fp)
    2 I! n* H2 ~3 j$ h' v: |7 Z
  770.           {! E# y: h3 N+ _8 ?% ~: n$ {; }
  771.             fscanf(fp,"%s",szString2);
    9 J7 I: A! _1 p$ k% Q
  772.             fclose(fp);
    / F5 t6 R/ s: R4 d1 q
  773.             if(atof(szString1)!=atof(szString2))! V0 C$ r8 c- g6 o9 M9 A. r" M
  774.             {
    : p  |) P/ P$ a" |: O2 t- q
  775.               if(!Dn.Connected())
    ( ?4 Q$ I$ C  T2 b4 U
  776.               {* c# v. _7 Q. X0 w  @8 Y
  777.                 bFirstUpdate=TRUE;
    - F/ h( K/ B1 ]/ a' n' G' T/ l! p
  778.                 dwTotalFiles=1;
    + r1 `- S+ r" R- ]) f
  779.                 dwDownLoaded=0;
    0 D& s$ I. _1 L8 i+ T  g
  780.                 bSilentStep=FALSE;
    7 F% d5 y% a0 l% S+ g
  781.                 bCompressed=TRUE;
    : s) T( ]% i* W; @3 V: j6 j3 u6 ?
  782.                 strExtLocal=".\\DownLoad\";6 q- R) f' K" W: l/ k/ I- {8 |
  783.                 strFullName="update.txt";% S  n0 C) d/ E9 o8 J( ]
  784.                 dwProgramState=AP_CONNECT;! w) W, _" G! `+ _. C
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . Y/ ]  F5 D" _2 L) z( E
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # h7 p" Q/ N' I* o$ ]9 |
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");5 h+ g% \. T+ a/ ]
  788. . ]% H$ j  K# ]$ M6 B  [
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* j7 v7 h6 v$ O; K% ^* O1 q' w
  790.                 unlink(".\\DownLoad\\checkversion.txt");9 i1 @- M4 Q* C- h& g) i9 s
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)7 _  p( Q: U! T! |( f* o
  792.                 {: m: H( l: i9 D# l/ Y, g
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 p. o5 c6 p5 m" ^8 L" B
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");4 q# \" u: t; N3 G. ^  A, ?8 K
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % Y' w: k; u; ?# k. L
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 `& }3 {+ Z8 r4 l) b

  797. 9 _) u8 f: }. M9 D. U8 {- B
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! L+ I: q7 {% t+ y7 y8 k8 ]" |
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 r% b" z2 Y: e0 H( ^
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    / F, L! A; U( v2 Q" c) k
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 \) V* Z* _( v* Q- K) j
  802.                 }$ k1 y5 E; V9 u* ]# K4 d
  803.                 dwStartUpSteps=5;+ g9 ?+ \4 z/ j, N8 o" j* c
  804.               }
    8 J8 d! Z) X, h. e% g) [
  805.             }3 p0 `6 B7 Q2 J( o  z6 U7 y5 X
  806.             else
    & q6 L8 f8 e3 K8 s7 f4 D5 Q
  807.             {
    % L7 x1 X; [# D, W
  808.               unlink(".\\DownLoad\\checkversion.txt");
    2 D$ r9 N, m' q1 q& V1 x" q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / k# m4 Q$ c' p' n: V9 v
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    , F' ?+ u( l7 L' g4 m" W; A5 z, M
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    5 M7 f: m. n0 b% b$ A/ L

  812. . [" A0 u5 ^- J! u
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " e& c9 s/ }" l+ i2 g
  814.               dwStartUpSteps=99;0 B8 W3 x6 }: k+ ~
  815.               bFinishUpdated=TRUE;( H3 v1 G' S* B2 o' [5 I
  816.               bCanUpdate=TRUE;
    2 V3 n5 \9 J7 v3 j: x  e. L
  817.             }
    # {' T- X. C* R9 L- A+ H. B7 F
  818.           }
    ! n" I& H6 K7 t% I" m" d8 G
  819.           else7 g- G" r% G# E6 D
  820.           {
    . V* y3 c# q% y9 b# a) E$ Q
  821.             if(!Dn.Connected())
    2 A9 c0 ?" M$ F) A' G0 b
  822.             {' ~: }: N' J7 O% ~
  823.               bFirstUpdate=TRUE;' @$ L3 r$ B7 m  L  p$ ]8 q
  824.               dwTotalFiles=1;0 S: L/ u3 _% T
  825.               dwDownLoaded=0;
    & L; N8 I9 X0 C* h' F4 g
  826.               bSilentStep=FALSE;7 s* i$ H& r, w, v" P* {# _
  827.               bCompressed=TRUE;
    ! z9 @+ v% x, ?: i) B* q; z
  828.               strExtLocal=".\\DownLoad\";
    ! t4 h# R+ J. o8 R# ]
  829.               strFullName="update.txt";8 x/ h6 X- Y1 g( x, h) ~, ]3 _2 `
  830.               dwProgramState=AP_CONNECT;" d, k' K1 {6 O7 f7 p  T: j+ q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 x" o0 {0 t7 l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / T$ L, k% g+ a' j
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");+ b0 ^' w4 o" V1 C: [: Y; P6 n
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 u5 `$ S8 [' ~4 X0 p' ]
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ) P6 H* @! X/ M3 g; W
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    6 e) A$ _: g5 F" a% a2 E
  837.               {8 m$ `# i  V% o7 `6 j! X
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ! R! e  n0 c( P
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    5 Q( K: w- \5 O- {6 v1 O3 Q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    6 }6 C1 i4 b! [4 ?
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% f7 `( q+ m  b# N; h
  842.                 & q. n5 j8 p& E2 I/ q
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * p, j2 N" k2 U2 {2 x+ F; A9 R
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 {2 u/ f/ [1 e
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");& n2 L" G& Y+ `7 `" ]$ R2 C
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 I5 c0 [  x6 g0 V) `" e' D
  847.               }# @% b; S% M! y4 i1 i. [; W
  848.               dwStartUpSteps=5;
    ' E3 v- ~' z% v: K; K) S. m8 V
  849.             }4 v- ?) W$ |0 `& h- e9 Y
  850.           }
    0 O* ^  F4 z& v7 B( T4 i
  851.         }
    $ O1 R; Z! l0 m! r' c
  852.         else! d; L3 N, i9 o1 h8 K7 |4 [
  853.         {
    $ k% L' @* s. i: X( n" m: d
  854.           dwStartUpSteps=3;& Y5 K7 w& d5 J, n
  855.         }& @! |$ l4 f" B
  856.       }, d2 ^2 B. i- {; _/ b) X2 _
  857.       break;
    : F% k' P8 y- \$ j, V; e. x  l
  858.     case 5:2 A* d( k& R$ _9 |, `: Z) x7 L
  859.       {
    0 {( }7 q2 E# f5 b$ ?. S
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    " z2 j! i  e+ h
  861.         {; l9 {6 l2 C4 y% l5 L  c2 ~1 @" Q
  862.           int opt_overwrite=1;- y- S' t; e3 w- l/ t4 F5 H- J# H) S
  863.           int opt_do_extract_withoutpath=0;" f3 W6 ?8 ^  e3 P& }, F5 `" M
  864.           unzFile uf=NULL;
    6 u* g. d7 W8 |2 B2 N4 B
  865. , z5 ?1 r/ x% ^6 e6 t- `
  866.           uf=unzOpen("Wsa.zip");
    ' W* \) I& J" ~/ a
  867.           if(uf)$ y7 Z. W( \# j3 j
  868.           {
    9 x* ?$ t" c; g+ Z8 G
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ' ?7 z% t5 Y/ E: q0 f; M+ n- O
  870.             unzClose(uf);$ G* i' o; L  d5 i
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");$ |7 P5 U+ S) S* }, x: n# J; W
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    7 I8 \# g8 u3 C: U4 i
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    / A, Q' ^- t7 j- c, m! A) {, o
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% ]4 ~" @  J: ~
  875.           }; L6 \* b+ l2 }, r& B
  876.           DeleteFile("Wsa.zip" );
    6 O% p* @0 M# {/ }
  877.         }
    & c6 T: t' V! u2 _

  878. ; ?1 |7 J( g' v1 D2 N# X
  879.         if(CheckLocalVersion())
    ; J* W) x; j2 C2 h) `
  880.         {: o: Z! h# i2 h. w$ T
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");3 M. t- q2 u1 ~, @* j
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    7 p) S1 U" |  \3 \( `) I* i7 H
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    / D* }( ^/ p% |# A3 [# L
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 J6 P* X9 V: d* M7 [) H# s: U9 A
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    . Q) Y, J/ n: T7 j
  886.           dwStartUpSteps=99;5 `4 x4 h( G2 L. d5 k! ?
  887.         }
    ' I7 z  u, s; S5 c- n$ X1 a
  888.         else
      M- h, j- A) o8 f% O
  889.         {6 w4 n* l( f% M8 y0 K: H, V
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 ?6 U( G- E: u5 Q/ w/ a2 u* m
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");; h# P7 b6 N" o! H# K- |
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");1 O/ l" ~- z2 g' D; J- V( W

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

3 R+ z2 s8 n$ V1 l- P
8 x& K# E+ K' g

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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