CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
' i5 _8 A# Y2 w! ~: v
  1. / RevApp.cpp : Defines the class behaviors for the application.
    6 q; T; n0 n4 K3 M& u2 g2 V
  2. //" s, S6 W/ x9 w9 |+ c

  3. 5 D4 e: P7 [5 y! K5 ~: d
  4. #include "stdafx.h"
    7 r, d1 m8 h/ x/ \$ N2 J, E2 C
  5. ( |- g# b, ]* }5 s2 c
  6. //#define UNICODE0 ^. K4 T  p; a3 T1 |# D8 c  Y
  7. //#include <gdiplus.h>
    " x) _5 ^+ ^8 a* W" N
  8. //using namespace Gdiplus;+ ^+ W8 v8 s6 m7 T
  9. % v% z* B9 f- X! a+ m
  10. #include "RevApp.h"
    ; R. K' p/ b+ i* i3 M2 \
  11. #include "RevAppDlg.h"9 W7 U; z" z4 j4 K

  12. , i1 ?; i+ X5 Z* L* W
  13. #pragma warning(disable:4786)
    8 g( Y: T, j8 s
  14. #include <map>
    & J2 g8 }$ A& e! z, }
  15. #include <list>$ r- Q" U" N; h) z: f
  16. #include <direct.h>4 \6 b4 v- t: Y( Q  H- R0 r+ U8 E* I
  17. " D( Z, y4 L. m4 ?4 G! L) m: h4 k; x
  18. #ifdef _DEBUG8 m0 W& A8 F$ R* o$ }3 N2 u% B) Q
  19. #define new DEBUG_NEW
    1 g4 T( }. ~4 B7 Z5 A
  20. #undef THIS_FILE  E# y# g" J! a6 [: Y  e3 Q" y6 @
  21. static char THIS_FILE[] = __FILE__;! g- m: Y% q3 ^' M" K! r
  22. #endif) T; p; X# `9 Q3 K; `& `9 V# f
  23. #include "SkinResDef.h"
    $ q" z7 T" X0 M) s
  24. #include "ChangeBG.h"
    . Y6 h) J' ]2 w; o
  25. #include "AFXINET.H"
    1 r/ }! ~: K- L
  26. 8 X9 j- B8 c3 f) f) P
  27. #define TRADITIONAL_CHINESE 0
    . W9 i3 ]+ u8 h0 u8 X
  28. #define SIMPLIFY_CHINESE 14 q. u# f3 _, R; w* K
  29. #define ENGLISH 2
    : S: }# i4 G9 p
  30. int m_iLanguage = ENGLISH;
    3 w% r) M; _( [2 \% ^, r4 z* w, ]
  31. /////////////////////////////////////////////////////////////////////////////
    1 y3 s2 A* ^4 f$ R8 [- Z( K
  32. // CRevAppApp
    ; ]  r; j8 n( a
  33. 0 ~7 O! s- g0 |* X  [3 W5 n1 ~
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 t; a; b3 d4 }' o$ l
  35.         //{{AFX_MSG_MAP(CRevAppApp), X$ Y. G; S/ L! T) \
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 }: ]5 X6 @$ N# [9 I7 W3 a  U: s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!! j0 d+ g+ s' O" N5 y4 e
  38.         //}}AFX_MSG
    0 J$ j$ a: T8 z0 i
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)7 q1 o8 r/ d, _( H8 v, A6 o% b5 C
  40. END_MESSAGE_MAP()
    - w! P) x$ r2 n/ o  M
  41. ! H6 n2 O6 b% p1 S9 l
  42. /////////////////////////////////////////////////////////////////////////////
    6 Q' t2 p1 E% d
  43. // CRevAppApp construction
    + }/ u* U  H6 g( |1 c) Q/ Q
  44. ) t. T6 [& e% c
  45. CRevAppApp::CRevAppApp()
    0 A, ]; N7 X6 Q
  46. {/ u% A* ?  ]) s
  47.         // TODO: add construction code here,
    , a. {! M1 n* c9 I
  48.         // Place all significant initialization in InitInstance
    7 C; u- V9 U7 a) h4 I1 ]
  49.   bDisplayIsBig5=FALSE;
    % J( q! W8 [% X8 ?/ X! ^$ ?2 c
  50.   bRestartUpdater=FALSE;$ r5 e( K* C+ G& z& K, D6 f  j, h
  51.   bFinishUpdated=FALSE;: E8 ~7 L) g- ~# o/ \! o
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;; i* j" ], b6 I& a4 q
  53.   InitChangeDataBig52GBKS();
    - J5 ?2 a0 W+ s5 @+ }
  54.   InitChangeDataGBKS2Big5();
    # a. l3 v- U2 E0 t
  55.         //
    $ U4 C2 z8 I. m7 n. R; ^& I1 `" v9 g! |2 c
  56.         bClickRunExe = FALSE;6 n, q& G& ?5 Y( H5 ?8 X
  57.         //
    1 ^0 B5 o. J* i; d/ U
  58. }. B4 H4 D% T$ K, r6 s$ P

  59. * p! c" O$ T- e- @% w6 \% d( Z+ b
  60. CRevAppApp::~CRevAppApp()
    , x$ e' e# J- e7 O
  61. {& H! ~$ n3 j$ Q3 f, _" _
  62.         // TODO: add construction code here,4 `  D$ i  u: ]6 y; v. B
  63.         // Place all significant initialization in InitInstance
    ' Y8 `3 G4 w, E
  64.   EndChangeData();
    6 M0 y1 d' U9 o6 I* l! ?
  65. }
    ) q/ ^6 m; j" Y1 O; D6 t8 ~
  66. 8 Z1 h' G6 H4 p* K6 ^! W
  67. /////////////////////////////////////////////////////////////////////////////
    ' H0 h( U' ]8 \3 B/ b
  68. // The one and only CRevAppApp object3 z* |0 B$ ~( ^
  69. 6 E" W  P8 r& T- P" a
  70. CRevAppApp theApp;3 z8 T* s9 c2 }+ q$ `7 ]: Q

  71. $ O( o) c# e* E3 _+ ?" S' A
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ' A% T7 T( W+ v% j, t
  73. {
    # b9 K; s# X7 E0 I6 M2 t
  74.   int iEOF=0;8 X- ^" u" h$ t6 U# K" w# l8 R
  75.   char szTempName[MAX_PATH];
    2 p) ^) \  U8 G1 k( q
  76.   *szFileName=0;2 V3 Q, u; b. S2 E9 ~% ]/ i5 k( p
  77.   iEOF=fscanf(fp,"%s",szTempName);
    , c& {7 _% O3 s/ d! z- {) M
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')4 _9 {! G% _+ J  e
  79.   {
    : ^; x4 _- `9 g
  80.     strcpy(szFileName,&szTempName[1]);- s; {' W, B/ D' L- Q1 {
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 X( |( }9 C3 s- f1 {6 h, F
  82.     {+ ^2 y9 R4 `6 L  L) W' A
  83.       iEOF=fscanf(fp,"%s",szTempName);
    # t8 x4 B% P; J' X
  84.       strcat(szFileName," ");
    & P' D; k4 H3 Y4 N
  85.       strcat(szFileName,szTempName);8 g; O# z; r, l( w, f6 [2 z, Z
  86.     }% c: S8 @: j& ?
  87.     if(strlen(szFileName)>=1)' B* X0 q% `3 o" ?" [  ?1 h3 ?
  88.     {- w4 u' V2 j) v6 x* d% y
  89.       szFileName[strlen(szFileName)-1]=0;  B3 V/ @- F4 h$ n& D  l
  90.     }" o: l% \' M( R( q: F0 ?
  91.   }
    / `6 n9 x0 D7 ^8 b3 A+ ~* @4 U
  92.   return szFileName;- |: s' ^2 ^* j- D' H1 E. S
  93. }% D& @, }) I! {" j+ x
  94. * c" G! C' n7 e& `- e
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    2 b- E: T. `$ E8 b, r+ x) n: M
  96. {
    5 h3 J# d6 }' I" K. s: R
  97.   FILE *fp;" C- E# }: Q2 [1 O
  98.   char *key=NULL;9 O; V9 u1 b% o- S7 J, h8 O
  99.   char version[MAX_PATH];
    ' ?, p/ @* p9 z. d- m
  100.   LPUPDATEFILE file,olds;
    , d+ x  u' y. |1 T
  101.   std::map<CString,LPUPDATEFILE>::iterator p;5 c2 }2 ]  @. A0 A% h

  102. ( \, t! _4 ?, B3 R/ d2 }7 p
  103.   UpdateList.clear();% j/ F. _' }. @; k
  104.   UpdateFile.clear();
    2 t9 j8 @/ W4 V* N1 s; E) h4 Q
  105.   if(GetFileAttributes(filename)==-1) return false;
    4 }( D: ~) u: e$ K
  106.   if(!(fp=fopen(filename,"r"))) return false;
    % a2 k+ d7 w2 c% \8 ~
  107.   fscanf(fp,"%s",version);
    " s3 @' ^/ z; h. Y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }, _$ Q+ u( P0 `' o( y6 L
  109.   while(fscanf(fp,"%s",version)!=EOF)$ |1 k3 S$ @6 ~7 N" U
  110.   {, ?4 e$ n7 Z& d/ s) u
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: {7 E& {% H5 u. M8 C
  112.     fscanf(fp,"%s",file->path);* v! T- b6 p6 `- H% t  X; P; s
  113.     ReadFileNames(fp,file->file);* _! @7 Z/ a  K
  114.     strcpy(file->full,".");
    6 G7 z8 F- e+ w5 ~
  115.     strcat(file->full,file->path);, |/ F5 t0 J* z3 v, B
  116.     strcat(file->full,file->file);
      f7 }, h; Z2 o
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())5 D/ q: p8 X, {4 n4 Z$ t
  118.     {
    ' ^7 h7 j, u% y
  119.       file->vers=(float)atof(version);3 \; Z% A# G, g
  120.       UpdateList.push_back(file->full);
    , ^: I, ?7 T& i5 ?3 F+ `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    2 b1 C- I6 ~8 V: r" L9 H
  122.     }
    6 U8 o9 t8 X7 G& k0 T/ R
  123.     else. e, ?6 m8 j; ?
  124.     {
    ' [2 c  j; J& ^$ j* Y# Q$ g
  125.       olds=(*p).second;
    6 C8 n7 A- Q; E" V6 I
  126.       if(olds->vers<(float)atof(version))
    1 e  K+ a1 h# I9 @/ I: U
  127.       {
    + j6 b* G4 D2 R3 H0 R9 j
  128.         olds->vers=(float)atof(version);& z' z2 ~" i. q  z3 J4 K! P
  129.       }9 F  i, t9 N) A0 g' }. J# d
  130.       free(file);" ]+ I( y  L7 ]+ ], ^
  131.     }' ]8 j" I4 \% Z( @5 n0 g, ~
  132.   }5 b7 E  j8 R- i1 N2 O6 m  A
  133.   fclose(fp);6 a& a' e( T& e( R
  134.   return true;
    + ]) z7 Z8 v2 ~8 N" G/ u% Q
  135. }. _5 S* C0 M' G& `! q8 R3 b) j5 u3 {" s
  136. 7 S7 {8 d1 j5 u3 y3 B& ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)9 R8 v6 g% N  `8 B4 B5 ~
  138. {' t: Q. e  S% p# d  N9 R7 O# W
  139.   TCHAR  szFull[MAX_PATH];
    ; F. V8 z$ O$ e+ b6 f6 [
  140.   TCHAR *token,*inter;
    , u& k, t+ m  G
  141.   *szPath=0;
    5 ?* ^. f8 H4 B0 f
  142.   strcpy(szFull,szFullPath);
    ) L+ D; Z; C. ?5 X9 F
  143.   token=strtok(szFull,"\\/");
    / u% y9 R& M; ]" d% I3 \6 P# Y1 O
  144.   inter=token;
    6 Z5 [+ y7 a& K& C' U0 J1 L
  145.   while(token=strtok(NULL,"\\/"))0 @9 L" |/ Y9 w
  146.   {1 H4 o+ o4 t) K
  147.     strcat(szPath,inter);
    ; k! v5 S0 E+ ]4 V8 [4 k, x
  148.     strcat(szPath,"\");
    & _( ~8 c/ P2 u! Y& E) x
  149.     inter=token;' ~0 O6 q7 N& l; l
  150.   }! |/ }1 G6 c$ a. \
  151.   return strlen(szPath);
    6 i6 Q7 Q0 ^' e7 Q/ k) J
  152. }: ]' j) O, m& X/ ]2 [, g
  153. " q% K2 {8 z/ {$ p
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    " p. K) s4 B+ u6 j9 B( s3 U+ Z
  155. {
    7 K8 B' H; M# p( w6 q4 X
  156.   DWORD attrib=GetFileAttributes(Target);
    ' Z3 {  @" w! N
  157.   if(attrib!=-1)
    3 K" [/ @! E+ z* |- d
  158.   {
    + M4 R2 E5 T, V3 j4 s- G2 x
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' L% i' ]. v- O9 |: j$ e9 N" S
  160.     {
    6 ?$ d  E" ?, l4 K0 o$ P" h9 S
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ) o( m$ @" V5 R. f' g
  162.       SetFileAttributes(Target,attrib);
    * n- d! j- P  W9 o9 F( u/ T
  163.     }
    7 b5 D- A1 H. B
  164.   }+ H8 q# b, I+ }) x+ c
  165.   CopyFile(Source,Target,Erase);" u6 a3 A* E" b- J4 x0 l2 U
  166. }! A/ _# s2 S3 i) T0 J4 {4 A, P2 ?

  167. - u: N# W. {+ F/ V0 `( Z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)! F+ s9 _$ D0 e9 ]% i' F! i* b
  169. {
    : T# s: z  a9 \" x
  170.      FILE *fp;
    9 l9 K! p/ x- ?& S  G; m
  171.      char  szBuffer[8192];. ]! {; e2 S  `' E4 ~
  172.   va_list  argptr;9 ~9 R$ H+ R+ O

  173. 6 B. O' r' X4 |4 Z: Z; x- b/ p
  174.         va_start(argptr,message);* d, u" R6 Y5 Q+ e/ Q: P
  175.         vsprintf(szBuffer,message,argptr);
    4 B. L3 y: ?7 {+ W! Y
  176.         va_end(argptr);
    7 `0 ~% t$ c. ]$ M( `
  177.   fp=fopen(FileName,"a");
    7 L8 i9 W3 D, _' K
  178.   if(fp)
    & N( h  Q& w5 F6 x0 I# p$ f
  179.   {* o" s' }! S( |% k) P% S& x& l0 y
  180.     fprintf(fp,szBuffer);
    3 `1 [7 i, @! c- [* T  H! b: R
  181.     fclose(fp);
    + ]$ j' z/ W: h2 X8 A/ [
  182.           _flushall();
      t: q; v* c3 q& ^) O
  183.   }
    & q1 f* H% }. ^8 O" e
  184. }$ ]9 V$ V7 `7 M4 m) v
  185. 7 q! s3 o7 p( [% j7 i. q" W. w$ o9 ^
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    + X+ A0 y, h% A
  187. {
    # C( F( e7 V: a8 G$ N
  188.      FILE *fp;
    1 v/ q5 e7 B9 t4 g4 W
  189.     DWORD  attrib;+ g! _# c# H- e/ _
  190.   attrib=GetFileAttributes(FileName);
    / P! w& P. m9 Q' P
  191.   if(attrib!=-1)4 r- Y. t& T0 K: H+ G: @: i
  192.   {* _, W8 ]; x* g7 g+ `
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    . W0 L% {9 }1 \7 L% a& i
  194.     if(!SetFileAttributes(FileName,attrib))
    % l8 i3 s% R- d4 e7 t; D
  195.     {
    % T/ p: k! j# I, b
  196.       return FALSE;
    4 B" Q7 D- z" O6 U) e% ^* p( N
  197.     }
    - t; \- ^- h$ v: D; P2 B
  198.   }
    4 V+ J3 B8 V. q5 r+ h; ]) S
  199.   fp=fopen(FileName,"wb");9 L3 ?- b) Z5 P# O0 i7 h* b9 ~
  200.   if(fp)( L5 L* r/ ]/ w! g' L
  201.   {' a8 O2 w( G9 _& b, k3 Z& m1 x# }
  202.     fclose(fp);
    7 k+ @# j# s* S, |) x) b  f' s4 ?
  203.   }, u+ g$ B7 ~5 t! f5 X
  204.   return TRUE;
    4 _' ^: x+ Z$ l: \
  205. }1 u( c* r0 r8 @: C) [
  206. ! ^4 `6 u* v6 R: z/ Q# x1 F, C
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    3 X( ~! t; g4 N1 [1 X$ ?
  208. {
    - Y2 {/ o) {' P2 {
  209.   char filename[MAX_PATH];+ v  v. i8 M& K: m% y3 q- `7 o) e- X% G
  210.   LPUPDATEFILE file,olds;3 B8 h8 m% ?( ~) [/ l9 U
  211.   std::map<int,CString>::iterator i;
    . U# @7 J9 N5 i) m. H8 Y  b6 T; H
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) s2 _2 f. L( [7 H, T
  213.   std::list<CString>::iterator l;
    3 @# t" ~, l2 s& {

  214. 9 K7 c$ c# x$ @6 \0 d
  215.   if(bFirstUpdate)
    - b. s, p- a* z) Z! t# s
  216.   {
    / ?( s8 X* G0 i1 W$ I- w
  217.     dwCurrFile=0;, v% R" U+ X% ]4 J9 T0 k. j& f
  218.     bFirstUpdate=FALSE;
    & U1 u' v/ g3 A  ]& B
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 T: c' f5 ~; v: A. Q
  220.     {
    / b0 G( I+ o# d+ N5 M/ r: J. I6 q
  221.       dwTotalFiles=UpdateLocal.size();4 c. m$ f  j. P: @8 s
  222.       dwDownLoaded=0;4 i0 f% d2 m# m5 d6 e
  223.       bSilentStep=FALSE;) e. p" ^5 F6 k
  224.       bCompressed=TRUE;! }+ Q2 {8 V2 D: L
  225.       strExtLocal.Empty();
    : V% F3 U( z" ~2 a6 ?
  226.       strFullName=(*i).second;& Q; Q' R) d6 Q4 ]' i9 D  U4 [$ l
  227.       dwProgramState=AP_CONNECT;# {7 Q4 t  F; s; d1 c& z
  228.       return TRUE;7 j& k' t6 @# _4 |
  229.     }
    ( u4 A5 k+ s9 i$ x7 ~+ b
  230.   }! X3 W& v3 H0 w
  231.   else if(bRestartUpdater==FALSE)8 e$ a$ o$ S" U) P
  232.   {" \* b! T3 q4 K& K1 ]1 G
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())6 L8 p6 H+ \+ i" ?: o' E
  234.     {
    ' S3 e$ _' P8 ^) O
  235.       file=(*p).second;2 y6 H" b5 Z; y, u2 ]8 F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()), ]9 C* z. I& ?
  237.       {6 C6 J; M  Y: J- ?. A( r% j3 f
  238.         olds=(*p).second;% h$ }. \+ ~  H* A; d/ f( g- A# m& _
  239.         olds->vers=file->vers;7 D5 V8 ^, k0 u8 }: q- Q% {
  240.       }
    2 B$ A! }5 |7 o* x1 B
  241.       else3 ^% z1 g9 I3 {+ m9 m8 F
  242.       {
      U* p. D2 Z+ B" a6 k3 P3 H4 u3 @* M1 j
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& A& I- P6 |2 j. h
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    # `7 W' [" r/ x8 d- Z4 m- `6 L  k
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));. N8 x# H+ v4 s( j* s
  246.       }
    : R* x+ i( z( X% D
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ' Z( {1 i2 ^, m4 h, Q9 X
  248.       sprintf(filename,"(%s)",file->file);; P6 T3 v: i$ h) @0 b2 X+ G4 a8 P
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' [5 T: v2 J) G' e% `! T9 _5 f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }( k: R2 x9 f& Z6 }$ R! ]
  251.     }% Y/ \  q( `: N4 E# T
  252.     dwCurrFile++;/ F2 M6 j% U0 ?* Z" y7 {
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , c6 p  @& U- ~: o- f! O
  254.     {" ~. q1 T. g( y2 Y
  255.       bSilentStep=FALSE;
    & I: [- Q! H9 V9 P
  256.       bCompressed=TRUE;9 X! G4 ?- p4 z$ _8 f& @
  257.       strExtLocal.Empty();
    ) _% P. X) N4 f6 U  W
  258.       strFullName=(*i).second;4 b# o6 ^, M$ B% }+ W
  259.       dwProgramState=AP_CONNECT;
    ) S6 ~8 t7 P" x& }
  260.       return TRUE;0 _* q/ N, N' A7 G- T# l6 b# @
  261.     }
    * {8 A+ u8 C& S7 N+ V* d
  262.     if(!bRestartUpdater)" |8 H! ^0 D6 }
  263.     {
    ( B+ S. a# d/ I/ n6 U
  264.       int iCurrSize,iFileSize;3 k$ a2 }( I8 r8 ^
  265.       iCurrSize=0;
    3 N9 q" _6 M  ]0 S& i7 U0 ?
  266.       iFileSize=UpdateList2.size();1 u/ b) A8 {, ~$ ^
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");: w7 v; t8 I, H& P- R  M7 J5 S' C4 _
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");+ @" K' w4 @, Z# C6 n
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");( P" {' S( z6 I& n8 L: Y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 J: d, j) d" {! h3 j" l
  271.       Fclearf(".\\update.dat");
    9 P/ ?* r2 I4 }# r' v4 B/ ~5 \
  272.       Fprintf(".\\update.dat","Bloodyf\n");: I" N% R$ M  n5 c# }- |7 L4 I
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . [4 B# W' ^# t8 r
  274.       {' q# \- W3 D# F; F& ~* i  }5 `& ~
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    9 [  _- ^# w& `2 C/ V- |! o
  276.         {5 w9 x$ f2 M* w  d8 N
  277.           file=(*p).second;+ H6 _9 ~0 f1 s
  278.           sprintf(filename,"(%s)",file->file);
    % i% P* I& n! u& `& \6 C* m1 ~' i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - U3 E# Z; S4 r
  280.           iCurrSize++;
    4 Q. K2 A+ i0 W7 c& r
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));3 o: ~2 K4 o) ~) I, J. g
  282.         }
    1 b$ m8 n: F; X) D5 p; }! x
  283.       }
    : j$ F  u1 h* D
  284.       unlink(".\\update.txt");
    6 T- F% c3 X/ R' j$ B
  285.       unlink(".\\update.tmp");
      s( m( U7 B. @" l
  286.       Fclearf(".\\checkversion.dat");) w: e/ E& k  X# S: [
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    4 d8 ^, c, b0 t6 k+ O
  288.       if(UpdateLocal.size())
    : L1 a% P1 p, c; [& z- R3 E$ }
  289.       {5 ]' |, ~  K& `0 F! Z* m
  290.         UpdateLocal.clear();3 |/ E- Y* l& `7 A
  291.       }' F/ j9 J" |0 P! l, A
  292.       if(UpdateFile3.size())6 W+ H1 W/ c8 j3 e) ?! I
  293.       {
    7 S5 O2 B) {$ M2 P: _; N
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 A1 E* a( U% u* I
  295.         {
    7 j6 `" x& @2 t9 q# C# S
  296.           file=(*p).second;
    - C" j. {: S( y! L+ j
  297.           free(file);
    - P, F2 }/ {8 L, X5 \% c% m
  298.         }* d" b! q# z( \, k: p& Q
  299.         UpdateFile3.clear();; o- J" Q6 C# p5 a0 u2 ~' u
  300.         UpdateList3.clear();
    . h8 ?. B3 G6 t( z5 e
  301.       }! ^4 h, U) j* o* Y7 r( |
  302.       if(UpdateFile2.size())
    # v. W; U! q" X! O0 q0 N, A& i( `  D
  303.       {
    ) B0 L: I- r9 D5 j! s" A3 q, t
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  B. }, R# H' n' q
  305.         {& E/ @. t6 J$ |& A+ d% c- y8 v  t
  306.           file=(*p).second;
    % P, U' d. H* N# S' V! J: d/ B5 ]
  307.           free(file);
    ! u# Q8 b+ m( Y9 ~+ V) {4 _4 N
  308.         }
    ! M7 c' w$ X! F+ n. z, _' N: E; a
  309.         UpdateFile2.clear();
    " z8 j) T- g8 I: F
  310.         UpdateList2.clear();% s  v' e, q0 Z% F
  311.       }9 h4 N6 i9 R; d9 b
  312.       if(UpdateFile1.size())' `0 U, G' H; i" a; f* {& `. J5 V
  313.       {8 x; j$ V3 ~/ J
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + ~. T; m, q, p( T$ F- f
  315.         {$ p; G4 a; l& b( j$ |8 C# w, m5 k
  316.           file=(*p).second;
    $ h: W. W4 {/ ~" f6 ^' J
  317.           free(file);4 a( B$ p( k  g& ?1 |* p- H
  318.         }
    . y# N' |8 T1 z% ^8 |
  319.         UpdateFile1.clear();# W( b) n* }& [. U6 {' h" P
  320.         UpdateList1.clear();
    % c) H% i. @, n; V/ e: I
  321.       }
    2 o5 Y& N0 n" y, ]* z
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));' o' U4 j) B" S
  323.     }
    ! I8 X9 [5 I/ e  G$ W* U
  324.   }7 M- j3 n6 M& i
  325.   return FALSE;
    + C7 o8 l( X) a: G* o
  326. }% v! ]  Q' T3 ?/ p8 [' U' i3 R# @

  327. ; b# J9 T. Y# a5 V' @
  328. void CRevAppApp::ClearAll(void)
    ' _* ^. I  a! \% o
  329. {: O" n/ R% D6 M! C: b$ p0 l1 F
  330.   LPUPDATEFILE file;
    % D, I% Z- f2 f0 x# j7 }
  331.   std::map<CString,LPUPDATEFILE>::iterator p;# ]3 z2 V! C; P/ y
  332. 0 Z5 a& Q. D4 c! T  v. ^* W  u7 F
  333.   if(UpdateLocal.size())
    ' }$ x2 q, e+ L; Y* V# h7 c9 `4 w
  334.   {6 z  p, L5 M" p/ ]1 y' F
  335.     UpdateLocal.clear();7 `* P3 d' m: r; X
  336.   }
    5 }* j# w' ?% J+ Z' T1 w1 Y# @/ P8 h% s9 A
  337.   if(UpdateFile3.size())  g% A9 o1 x/ [5 |6 C
  338.   {( W8 }; p2 k) Y& O/ l
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). T8 y4 y: z, L) s( a- D4 t# C; E
  340.     {2 J# }3 M2 Z/ p+ D0 K6 _$ J
  341.       file=(*p).second;
    7 N" p6 X" M5 a8 a$ G# H: n
  342.       free(file);. T. H# L0 }7 p4 Z) p/ B* o3 x
  343.     }
    7 S9 m6 z5 X; t0 a1 H6 i- t8 v
  344.     UpdateFile3.clear();
    - x1 c5 `6 i* x; S3 z0 t9 v  Y  ]+ [
  345.     UpdateList3.clear();
    : Y# t2 S4 E% G8 d% R6 @
  346.   }, ~+ \7 d, p8 X! \" y: @* q
  347.   if(UpdateFile2.size())
    + W3 }( ~3 e6 i+ \$ `4 I  F7 D- u
  348.   {2 D: v) c" u7 m  ^
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( }" D! q/ g3 {) ~
  350.     {
    5 C( L: p7 `6 N/ x, I
  351.       file=(*p).second;
    ( x0 h! A& V% `, q$ I2 i% h- {, Y
  352.       free(file);
      ]# R! y9 d. t  ~7 ]/ q( r  W7 l& v
  353.     }
    & a3 q. |% V$ T" F  N; w( t
  354.     UpdateFile2.clear();2 K! P( Y, ]" f: H+ Q& P
  355.     UpdateList2.clear();% S7 Z: O; C5 g
  356.   }# B) b/ G0 O8 s9 M6 N1 ~8 O
  357.   if(UpdateFile1.size())
    1 X  X, n4 D' L) h: B) h: Y1 Z
  358.   {: V# t1 p6 u5 P
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 z  S% `$ S8 k/ [7 n2 e
  360.     {
    ; P- |% c7 m$ _* I$ k
  361.       file=(*p).second;
    6 P1 Y8 h" ]3 F$ ?& x
  362.       free(file);( r9 Y# f) `2 i. x( b% Y1 Y
  363.     }
    * K2 e2 J% c4 |  Y2 Q1 ~, @
  364.     UpdateFile1.clear();
    2 v8 I4 y9 T* ^5 g% z9 c$ z5 Z& w" K
  365.     UpdateList1.clear();
    4 x  j5 ^, O; Q- q
  366.   }& l1 ~9 l" p( L+ x! H. ]8 d4 }
  367. }  # K' O( T6 D" `  u) j
  368.   
    9 J# {0 _# _$ l( l
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    % W4 L- ]( Y+ i& H5 Z
  370. {: P6 F- }, M; P' o, A+ b
  371.   int c;
    : w6 A+ R! ?: z" P  Q) S! Q
  372.   LPUPDATEFILE file1,file2;( l. _4 u* E! B, p* j
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;! A" ~5 d- i, f2 P/ H' \  ^
  374.   std::list<CString>::iterator l;; E6 _$ n. Q, P
  375. 9 ~" u( z4 B- s! C& P4 [
  376.   UpdateLocal.clear();
    ( O! L1 O0 h- j3 G7 }) k7 [; j$ i
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    . `, {- }# C/ q6 \0 E
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    5 k8 K8 V) P9 S, t3 e
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    1 T$ U$ M  P% p$ l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ! I' K, O0 G$ i% X( l2 H5 v& ?# K; I
  381.   if(UpdateFile3.size())
    # j) h. z% K. K4 n: G% a* m
  382.   {: K- L2 l/ j* |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++), D% C/ V) a1 m" o) M/ Y% H! k
  384.     {
    9 n* W# K; {+ U/ f$ l' I3 ]
  385.       file2=(LPUPDATEFILE)(*i).second;$ [; \! r6 m. y2 n! @
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): ]; U$ w/ K5 u
  387.       {
    & Q. Q& q9 j, m  Q$ q
  388.         file1=(LPUPDATEFILE)(*p).second;( K+ p- ?2 ^1 M4 k( ^0 \
  389.         file1->vers=file2->vers;
    3 ]4 g2 [& \2 g2 V2 I* H: B& G) J
  390.       }
    + m5 r* N$ b. z' z
  391.       else8 X* u9 V+ f3 m! ]: F6 @0 z$ b3 q
  392.       {
      ^' y' q6 H. Z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 x  [5 |* d- X8 U
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));* r0 O" |: o6 i9 y) h$ T
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    / ?  k: g3 N* b% P3 N0 n
  396.       }
    + o! q( K! |9 A$ ^( x6 S8 o
  397.     }5 O2 A2 M. V& Y
  398.   }
    0 w2 ~9 ~4 a% `5 Z8 |1 ~4 l
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # e, M% q4 ]$ O7 N" h
  400.   {
    * M' p) k5 Y8 ^3 o3 M& g. i
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    1 e7 G! p0 r6 y# G$ `5 }
  402.     {3 v1 P) Q6 m6 J, M7 `, S! |
  403.       file2=(LPUPDATEFILE)(*i).second;
    1 Y% e+ J- k+ N0 E
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" p3 [" X1 K1 L" A% Y2 _( U
  405.       {
    3 Q2 a- y/ t0 x9 g8 B% J& W( J+ M
  406.         file1=(LPUPDATEFILE)(*p).second;  {) O/ R( |5 k3 }) g
  407.         if(file1->vers!=file2->vers)6 t1 X& O6 w# m! m) [
  408.         {  e& A# f; E& \' a& P
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; B* G' o% g; F4 M
  410.           c++;
    " L) l9 e  z1 Z+ u. v
  411.         }# {2 C, i! _; }
  412.       }6 m2 y& h7 [& o; V! f  @. Z
  413.       else; Z. q8 W- w! R! s
  414.       {
    : m! e. {8 g8 r6 E
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 M6 D1 p+ C1 l3 E! T9 D8 E+ g
  416.         c++;
    - `6 W2 U! w0 G; i. {2 Q4 E
  417.       }) j8 {! E1 ]' n
  418.     }9 |% r! H, I$ Z0 }0 W2 K  D
  419.   }
    9 h7 X$ U  U3 Z2 o
  420.   unlink(".\\DownLoad\\update.txt");
    ! |: h9 P2 k7 o; Q# i  V
  421.   if(UpdateLocal.size()) return TRUE;
    ; \2 t; D& K  Z$ z: a- f& }9 @; _
  422.   else                   return FALSE;
    ! \( P; W/ T: [/ n: e) @; W
  423. }
    ! U& p0 S( l4 E
  424. + ^3 x- y$ R. h% N; {
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , C3 I- `1 I! E# u- s
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    8 z7 {" ], h, a% |0 S$ {
  427. $ W" f0 G$ Y0 e! [0 j+ X

  428. 8 s+ w( d$ b! u9 o4 L0 B7 d1 g
  429. ! N) T) \0 H" `; ~% f( _, l" U& c3 m
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)+ Q, L/ x8 `, Q, M( D
  431. {( i/ @1 \: f. ~
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    2 B6 v/ x4 q% @3 h$ L
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 Z" r+ t0 R5 Y
  434.   {
    4 `' [8 T& a- f7 y7 H% ?+ N: w
  435.     char szLanguage[50];
    " R: J3 N( X+ S) O
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 A& z# H( G" E& U: u8 l
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 w; {( f( Q1 a# m  F4 ?! [
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 d' ~' {. m9 {5 ^( {
  439.     else                                   m_iLanguage=ENGLISH;
    $ Z8 g/ Z$ Y8 b6 P: r
  440.     char szRegister[100];
    ! o# m9 P: m$ M8 u6 z0 \
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: G, E5 t, ]' k4 R" d5 \% _  S, g% o" `
  442.     strRegsName=szRegister;
    9 C- z! ~7 {! U! U; K( Y
  443.     char szPatchURL[100];
    / O, l1 X8 z+ }0 Y* H
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ; a: @! B- U  a% n0 @- ]
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - a+ R! a, C, f" z9 o* Y$ ^8 u4 o
  446.   }. f# s" b. \3 E
  447.   else
      o( P0 \2 e, R. r8 j
  448.   {2 ^! g5 Z, H. c  G4 Q$ _9 n
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % i- W  k1 ?: {5 B/ R
  450.     strRegsName=DEFAULT_REG_URL;
    9 t. _( h' c2 v/ b8 C6 z
  451.   }
    ! T  L! L) m4 x4 u+ a7 H
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 T* N4 N" B% F8 k
  453.   {, l! C$ @* f) o& ?8 U/ U1 h
  454.     char szIP[50];
    6 t$ b: ^$ t; b" j% T
  455.     char szDIR[300];
    ) j9 j( ^2 \! B7 Z1 r* w
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    , _2 x* w" F( w) G- i0 i8 ?
  457.     {' u0 L- |: ~- n
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");  P6 a8 C" M4 y+ }/ n
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");" b' J" a3 h. Z4 r& g
  460.       strHostName=szIP;
    ! D' y! A1 {. Q3 J, Q$ E$ @# v6 G
  461.       strHostPath.Format("/%s",szDIR);
    1 q$ f% l9 F1 w1 y% Y8 }1 V
  462.     }
    3 W) E1 O# j: U5 U0 n3 _
  463.     else9 i# g; s) l! a% j3 w) e% Q
  464.     {
    , [% o: K# @" m) y" e- ~! t
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      z$ O; h1 F: c
  466.       {
    2 P9 k" w5 e& ]% r) y
  467.         char szLanguage[50];1 |" ?' ]0 V9 ~( E5 T! Q  w8 }/ |
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 K' ~7 e! O. c
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + p& S2 R& j+ i8 L- t
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  F# W' ~7 b! g. B
  471.         else                                   m_iLanguage=ENGLISH;2 A0 L% r" _# g+ O! e6 X
  472.         char szRegister[100];. s) ^2 ?' d0 H& v5 d
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; h8 r/ D  B8 F8 i5 W) o
  474.         strRegsName=szRegister;
    - H$ Q- _* k, e# f1 o! u  q! b
  475.         char szPatchURL[100];! c7 }! y) J: N- K; R" U- f$ o- f! I/ _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");0 u/ ~- n. c% ?& L  `
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 }, o- g! F4 Z' F, m
  478.       }/ }% v+ _9 h: c, c
  479.       else" P. u/ D: X, x; F8 M+ _
  480.       {* a, O  Y& `1 I3 C: F% c
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" {3 y# F7 G( m0 ~. @$ C, |
  482.         strRegsName=DEFAULT_REG_URL;0 E/ Q0 F3 V# e
  483.       }( ?& W0 d) A$ ~2 a2 |) V6 @
  484.     }
    1 m2 G: _  s. z' A, R$ r. C! U
  485.   }9 ~. u8 g: t; t5 n
  486.   return true;
    4 A4 J" ~! ^! g: k" E. P* K
  487. }2 W$ e2 i2 w+ u. [& I# R# }
  488. 5 \$ W8 n6 q; R, z! B/ ^' ~% {
  489. #include ".\ZLib\unzip.h"* C% A4 Z: f3 o
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 U- v$ A( |, g6 w
  491. /////////////////////////////////////////////////////////////////////////////, e0 S4 Y+ `2 J% l
  492. // CRevAppApp initialization6 P5 f. ~# W, \8 O+ l
  493. 0 I( ?# o# P4 P) t/ j
  494. BOOL CRevAppApp::InitInstance()- e8 l0 ^7 }- ^8 Z! z
  495. {
    " ?( C0 r* i  g/ T
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    % ^+ F3 S2 x5 F) L1 P
  497. 1 ]9 k0 S& b7 F' h" r
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);0 a2 |) R! x, M1 g- _# g
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ( T$ K3 ]* L, U9 A; J
  500.   {; O- V3 |2 Q5 d$ {
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ) y8 D2 D- R8 ^5 A# B+ i
  502.     GetPathFromFullPath(szPathTarget,szPathSource);8 M2 k' W9 I% G6 H$ p: E& B- [5 C, E
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))$ h" m& w$ Z( ]5 L9 I( Y
  504.     {) Y6 p2 @7 r1 {' n) X
  505.       strcpy(szPath,szPathTarget);9 O& P( k1 x/ \7 S  w7 ~; i
  506.       SetCurrentDirectory(szPath);% {0 @0 S7 g: F% S+ f' E
  507.     }' r+ W4 o* D" K5 G
  508.   }( K% w( V) Z% [# M* {$ {0 p
  509. #ifdef _DEBUG1 b; p# o  z4 d3 r
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 Z3 T! h+ A1 u2 W5 ^# U
  511. #else# a" V3 f, |3 d
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) z1 p' Q* A& b% m6 b3 U$ c
  513. #endif
    ' Z# ^/ h( Q$ U! g$ ^
  514.   {4 O0 J" \" @' ~  c" x
  515.     char tempFileName[MAX_PATH];
    * i/ F# h/ Z& x) e" o  f
  516.     strcpy(tempFileName,szPathSource);
    . {* r2 g# k- }" W0 s  _
  517.     tempFileName[strlen(szPathSource)-12]=0;+ r6 C) n" ?' z. ]2 K
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    . _& M' j! p1 p# {
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 o7 t" F$ A" K, {8 x
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);8 f9 ?/ ~. h( ^
  521.     return TRUE;
    & s; n% ^8 ]' F3 e) j7 {: q6 L
  522.   }
    2 t% @9 }" Q( o- r
  523.   // Nuke 0118: Delete run.exe. A# Z/ Z" f9 O" a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ) |" j: h9 _/ B1 x& [) G! s  W" ^
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");, K: b$ S# D4 Q6 ^! J+ ?3 ~. q5 ~; f
  526.   if(!ReadCfgFile("Config.ini"))3 E' |' T' U9 t8 B: `( P
  527.   {
    2 @, W' Y+ W2 ~& T
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);+ p8 F& j/ L8 H
  529.     return TRUE;
    5 @2 x! ^* Z8 Y1 w  @! L+ _
  530.   }
    5 @. i1 n" Z; P
  531.   HANDLE mutex;8 b& x* N$ c5 B  U1 C- ?, W" ?. X
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))' y, W+ n* P2 q$ V1 Q
  533.   {
    + F* ]& Z, S+ ]7 C$ _9 m! T, `
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)# I; Z" m- @8 \' j; D0 j4 ?# q
  535.     {
    , n3 r$ X+ p& S+ Z) i, O( \
  536.       CloseHandle(mutex);
    & G* X$ m+ B; S/ X. T6 J
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    % l4 ^! p: N  \! a! v4 x
  538.       return TRUE;% O* T. s* s7 ?- e6 _
  539.     }+ D, w* V  ~) R
  540.   }  
    & P- k3 Q  ^* s; ~* u! \: |! q
  541.   CloseHandle(mutex);
    2 y* m5 p' C  ~9 M9 y! ]" Y& H
  542. ( N3 h& Q: c: e2 `+ {: x
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);! z" B& D( }2 V8 ]: M1 ^

  544. 5 a7 q) M3 a1 W0 V
  545.         AfxEnableControlContainer();
    0 r5 v9 l/ F7 A/ J, X# W
  546. ! M. `. H( S+ i$ Y
  547.   bCanUpdate=FALSE;
    & S5 N' Q* B+ b5 {4 j. f% @( [
  548.   dwStartUpSteps=1;( L7 ^# U8 W' k( ^
  549.   dwProgramState=AP_NOTHING;% G6 _  r' X; _# r( r
  550. $ G. m  S4 a' E2 c
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);- @! J7 K; c" Q0 ~

  552. & t$ s- Y" Y/ }2 G
  553.         // Standard initialization7 w4 l5 U& R* [
  554.         // If you are not using these features and wish to reduce the size0 A6 M  N9 x3 {2 S7 X* p$ f, Z
  555.         //  of your final executable, you should remove from the following
    9 ], i5 L  V& \9 m
  556.         //  the specific initialization routines you do not need.: E  w7 `; T. [! C3 D! s8 k# d
  557. 0 ]6 w; r# E. X, Y
  558. #ifdef _AFXDLL8 P# F/ |' ]" s, U
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 W9 l% X" T" U/ _
  560. #else
    2 R$ p' A1 R! ]2 p4 k
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically8 _' {/ {4 G7 L, _: Y# V. Q
  562. #endif
    : o, e4 P; _" H$ ~" n7 V

  563. ( z( [3 w( {4 c$ B! ]! M
  564.   dlg=new CRevAppDlg;- W  _2 M- \2 L4 C( M  ?# w
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 P8 i0 q! W) h- k; g$ \+ B
  566.   dlg->ShowWindow(SW_SHOWNORMAL);8 r# j' w  t4 D6 Z$ [! `
  567.   m_pMainWnd=dlg;
    1 W+ d& a/ t; B- v6 e& Y5 j

  568. . r1 W- M% d4 Y& _5 Q- [' w
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    5 b' W3 g% D. B1 Y

  570. 5 a2 v# o6 H3 B. Z
  571. //  GdiplusStartupInput gdiplusStartupInput;% d+ Q) U! U: P+ G  W
  572. //  ULONG_PTR gdiplusToken;
    ( T) e) S$ {- y. j5 C# H/ A! o) _. c
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    $ c- w9 C" y' `

  574. . d& r5 q+ \6 i4 _$ R  y$ x) r
  575. //        CRevAppDlg dlg;
    * I: G/ v; M; M! P
  576. //        int nResponse = dlg.DoModal();
    ; \; t2 J; v+ h
  577. //        if (nResponse == IDOK)
    ( u* T& r& O+ k4 w4 f: A( v7 Y
  578. //        {
    - p. x7 U7 v% `! w# @
  579. //                // TODO: Place code here to handle when the dialog is
    ) z  L9 T' y3 p6 D/ ?8 {6 Y
  580. //                //  dismissed with OK
    / H5 U7 G* X9 X/ b% Q' W3 K1 ]
  581. //        }
    2 o+ L& \* X, c- _! L0 g$ c" K
  582. //        else if (nResponse == IDCANCEL)
    ! w& @# }# _- R7 B0 h
  583. //        {
    , [8 E5 F) ]* v
  584. //                // TODO: Place code here to handle when the dialog is4 A  d$ N/ F7 ?' O7 E& Q
  585. //                //  dismissed with Cancel
    ; Z" C) U8 F' r; ~
  586. //        }5 M5 K  k* ~# ~2 _$ i9 M6 H
  587. # M* ?& P6 m! A) V) p8 W
  588.         // Since the dialog has been closed, return FALSE so that we exit the% x# z. J: Y9 A$ ^
  589.         //  application, rather than start the application's message pump.
    ) P8 [2 O( j6 j6 S( D- u0 K
  590.         return TRUE;
    ; F+ ~) Q0 R! U0 |2 `" G
  591. }  M! j2 o3 J" {
  592. # A  M0 n, J& d; P
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * ^1 e( m! T( |& B* z; B
  594. {
    . h3 }9 X# f5 O; r, `# x
  595.   int i;
    : J- k3 L* n0 I: F  W$ \# j/ h
  596.   char *szRet;# d  y+ }( C" Q. P: x( Q! P" {. ^
  597. ; a# R; u; e2 @7 P% T8 U
  598.   if(pSource) { itoken=0; sztoken=pSource; }
      @# n. m$ `) G' L: E6 `5 J
  599.   if(sztoken)
    7 E/ a2 ]  _- M3 b' \% u0 h3 z  w/ v
  600.   {6 x9 i2 [$ v/ T8 R8 ?) G
  601.     szRet=&sztoken[itoken];8 \: R# T$ v& _3 [
  602.     while(sztoken[itoken])
    % ?( n' q' m) t  o* @  P' w
  603.     {% h; t8 Z) W) N' i% A( f
  604.       for(i=0;i<(int)strlen(token);i++)
    ; p" q8 @, U% ]2 X# a' B  ?7 H( v) F" W
  605.       {* D& o5 z/ Q( i# ]3 K1 E# }
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    4 i/ g, W7 o5 U: |7 f& \6 r
  607.         {2 H/ L" i$ H2 u/ v- R
  608.           sztoken[itoken++]=0;- Z. Q3 H: S9 l7 x) ?5 I
  609.           sztoken[itoken++]=0;" F! e. d# D  V& A9 P- `: n  C
  610.           return szRet;& a" N* v1 ?2 W+ q. C, c# q5 f! X
  611.         }
    ) E/ Z1 l& ]: X3 ^- d$ O
  612.       }
    - c8 W7 _/ X  E( p# R: C  k
  613.       itoken++;
    8 [/ L; J8 H: E: [; L
  614.     }" q& W& g& r' z& u6 s+ D1 L
  615.   }
    ) ^) f+ e# ~' Y: M
  616.   return NULL;; d' a. @0 f, h6 {; P  q+ |( `
  617. }8 T1 P, i8 h. N9 \* k. q

  618. & W1 _$ \0 K# w  c
  619. void ProcessProc(long Total,long Current)
    : |3 p6 D8 t- X- O8 p+ [
  620. {
    ' h. I2 B# b! C3 s& n* t
  621.         MSG msg;- [5 M0 u0 l6 T  P
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);# N) F8 y7 Y- b1 A8 z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    9 Z& D, a; B, k1 R1 v1 [8 F) W+ ]
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ m: Z: T- S0 f
  625.         {
      Z8 e, s( r/ z# W
  626.                 if(!GetMessage(&msg,NULL,0,0))( B) g# ^" K; {* E3 g9 l2 t
  627.                 {5 X  ]# a! D6 e9 E
  628.                         return;# |; ^0 b5 i  S+ M# g
  629.                 }; k  x) N) O, m& S
  630.                 TranslateMessage(&msg);
    1 Z/ A5 v) h( E7 o# y
  631.                 DispatchMessage(&msg);1 E+ T' T- {7 G4 q. O5 L4 n+ {6 a, m
  632.         }       
    # m8 z+ r4 Y1 C2 l1 V4 O/ c
  633. }+ H( v  f9 ~9 L1 [, A3 c

  634. 0 x/ L* h( ^* H" K6 v, g& [. q
  635. BOOL bFirstChar=TRUE;! s3 h3 Y% X3 F( R5 D9 u8 C
  636. $ x; D( z: m% Y- M* z3 Q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    9 S& {  M" K6 ]5 a5 G
  638. {
    & e1 c1 S% v2 M5 Q$ }
  639.         // TODO: Add your specialized code here and/or call the base class! f* O/ p8 a9 W
  640.   switch(dwProgramState)+ {6 Z2 M1 O( W# w! f; Z  E
  641.   {
    ) ?# ]1 R$ o3 F  O5 b
  642.   case AP_NOTHING:
    1 n4 F1 w8 }# ]+ `
  643.     switch(dwStartUpSteps)- m; @  O) ]0 Z0 \/ F6 X" \
  644.     {
    ! L* W: L# [2 P+ t# F
  645.     case 1:) R: I0 ]# U, D- o! T. a0 U9 G
  646.       {! `" T4 ~, J4 }7 {% D
  647.         int i;
    4 Q, \% ~9 _1 r! a
  648.         CDC *pCDC=dlg->GetDC();4 [( L. Z5 p; W6 \
  649.         HDC hdcwnd=pCDC->m_hDC;
    , H! J7 d2 M8 y5 F8 W
  650. //        Graphics graphics(hdcwnd);
      Y$ ~% B# R+ s  \' H, D
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    % P$ p, q3 a. C* X
  652. //        INT iWidth=bitmap.GetWidth();
    # ?6 Q" L, Y  }+ w' c) h# w6 g
  653. //        INT iHeight=bitmap.GetHeight();! `# U. j; h4 ?% v+ ~' v
  654. //        Color color,colorTemp;! v6 {6 t$ ^# B+ P. w# F) u
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)9 y2 x9 S& ~$ n- H
  656. //        {
    8 B. C" v; Y' ]9 ^4 A, l. S
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    0 l+ X) k0 Q9 v- S
  658. //          {
    / I2 z+ p! K! o# Y  O
  659. //            bitmap.GetPixel(iColumn,iRow,&color);8 K6 C( b) ^. `: ~
  660. //            colorTemp.SetValue(color.MakeARGB(
    : M' W/ l" R2 O- h9 O2 V  j% Q3 _
  661. //              (BYTE)(255*iColumn/iWidth),
    ' ]% L8 H4 ?. U
  662. //              color.GetRed()," L+ c) N% D% a. }: A% m# S) \# y* ~
  663. //              color.GetGreen(),6 v" z1 \- g$ \; [5 x
  664. //              color.GetBlue()));
    ( D0 l# }, b4 k; G0 S1 x" m& n
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);; ?) A! Y4 S5 ]8 A1 X
  666. //          }
    * \* C4 k% o- H1 P3 `
  667. //        }
    / E7 ~% A5 q" y1 Q  W
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ! U0 l& p- c+ J* T: H2 C' R: n% {
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 l8 |" o+ M9 O8 l+ y6 h
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");/ z6 J8 p3 X% f: \. F- a& i3 I
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" O2 H1 B% g  h3 x/ g% o: I
  672.         for(i=0;i<240;i+=8); h, R4 L& @0 z: w4 G3 l
  673.         {) |: W. F& w7 v3 t6 C6 u4 E/ M
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 V& Z* D7 W# W! t7 W" {( m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 u4 L0 K# ^$ Q. l& U
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : ^" j# y( q# o4 [: O
  677.           Sleep(33);' s$ Z9 N3 P8 Z, \
  678.         }' \3 A8 G3 H0 Y/ E8 W4 d" J' }: [& n
  679.         Sleep(1000);
    * o4 L, r( s: k+ X* E$ Y
  680.         for(i=240;i>0;i-=8)6 P2 N, A$ ]% R1 g$ n
  681.         {5 z; ]$ Y7 {" s* ?" Q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : J; E6 _) z# q6 F- j0 B4 p
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & z9 T/ X2 O; F
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 ~+ `/ {( V* m' g
  685.           Sleep(33);
    . a/ Z7 P, o7 p. V
  686.         }% S+ e  i: Y8 @$ {% U3 o" P& h
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    6 B' o. N6 O; R/ [+ w7 \5 k
  688.         dlg->ReleaseDC(pCDC);
    ) A3 }8 i7 ^9 Q
  689.         DeleteDC(hdctar);' I& N* k& O1 V; X# @5 a
  690.         DeleteDC(hdcsrc);
    3 k  S& c0 _1 Z
  691.         DeleteDC(hdcorg);) ]: Y" \/ z- S) `
  692.       }
    1 D" ^% x! f$ j3 G8 k
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);& i- k3 o( j$ R2 m" K' {7 F% x% A
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    3 Z7 r7 ]+ C9 E
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");  [1 [3 g- l! \' e0 n
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");; Y* @0 c- J7 _3 _: {4 I' r" s! ]: W
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 M5 D! c% b$ N/ |2 `& f
  698.       if(!Dn.Connected()), R; v  V8 F. F/ O
  699.       {
    7 G% z# z. d/ e9 r9 o6 }! K' d
  700.         dwTotalFiles=1;- w  t- w& Y. L# F2 ?" W
  701.         dwDownLoaded=0;
    , N/ P' s  V4 S# u3 R- Q$ o9 M
  702.         bSilentStep=TRUE;
    ; L! N" T6 A4 h0 ^3 q4 _8 _7 q
  703.         bCompressed=FALSE;  F6 ~0 a% m; j; a- Y
  704.         strExtLocal.Empty();
    1 x' T8 d3 x; Q3 f$ r* B( o8 d
  705.         strFullName="readme.txt";
    0 T$ @' N' n7 `. Z
  706.         dwProgramState=AP_CONNECT;* _8 _  [" ~) I7 ~
  707.       }
    ! v: ?! v, I- L) N* m1 }
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();  C0 J2 c/ E2 y' W8 C5 R; s% f
  709.       dwStartUpSteps=2;8 J2 z3 O. i8 Q. w
  710.       break;( L/ T  q) Q: H7 O3 f0 U! n" |( w
  711.     case 2:
    9 ~' Z3 c0 g* G; Q! F
  712.       {
    4 O% F1 M+ x; Y6 X5 ^' i  J
  713.         int iEOF;
    5 R$ A* K$ a& N! n
  714.         FILE *fp;% b) w  I& H4 `& H8 A7 g6 I
  715.         char szString[512];
    ( O/ o1 d+ ]; J1 Y0 t# n
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    # ~8 @2 @  b( Z1 d& B4 ^
  717.         if(fp)! n1 Y0 _. @" E: v
  718.         {! [( \4 A* P- O! ]
  719.           do: n- x' c7 M6 H  o( n2 W
  720.           {3 p* I/ W- ^2 ~$ c  N. u' y* O
  721.             iEOF=fscanf(fp,"%s",szString);, _6 D; D, K( J) R2 g
  722.             if(strlen(szString))
    6 B( h0 ]- [6 `; w, u. j* a
  723.             {
    1 z  |$ ]' R! r! s8 S; b
  724.               if(bFirstChar)
    8 U! n. q& \& z% F" s. p
  725.               {
    . k# Z, t' R0 ]6 A4 b. J
  726.                 bFirstChar=FALSE;2 N, R5 P+ S7 z0 `" W6 L: I
  727.                 bConnectIsBig5=FALSE;
    % f! ~# k3 r4 ^5 \" w
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    2 K4 g$ N; @4 Z# }, {# u' f
  729.               }( P: j, M& u5 ]6 u. Q4 |
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    % }" z% b2 d$ l5 {5 g- o6 P0 G6 R- F
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - }% ?4 p. E% D1 r1 j% F, R. T
  732.               dlg->m_ListText.AddString(szString);- a! a0 G) A5 V! a% l# ^! Q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' {0 ~: i( O/ {4 q2 L2 A" \! K
  734.               *szString=0;' Y7 o& U0 A0 q4 t( ^: m, _4 ~; f  I
  735.             }) _& W  f5 }1 c+ ]3 i) {9 Z
  736.           } while(iEOF!=EOF);
    ' `! [+ b$ o0 ^
  737.           fclose(fp);
    + }! c' O- _# k2 _
  738.           unlink(".\\DownLoad\\readme.txt");4 w) A* ^8 O2 }
  739.           dwStartUpSteps=3;
    4 T1 {; ?4 I; _( F8 g1 o
  740.         }/ F# Z8 v! ?: P" ~1 n! F  k
  741.       }
    1 m& n) U2 B* J, v
  742.       break;/ Q+ `% k" v& L2 n1 F! b& i
  743.     case 3:
    2 i' y' ^% ]( R$ J& L
  744.       if(!Dn.Connected())
    + m, f8 p1 G. p* f
  745.       {
    & N/ O/ t' {' X" ]
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    1 B1 ~; M* ?5 p+ D% W  W9 F+ Y' z
  747.         dwTotalFiles=1;
    , W' p1 [' S7 e* [- {4 Q0 h
  748.         dwDownLoaded=0;
      i# R  S  p+ `
  749.         bSilentStep=TRUE;% ~9 ]$ [! c$ M( \5 d
  750.         bCompressed=FALSE;
    6 [  K/ ~* ]) K  ~3 n, W
  751.         strExtLocal.Empty();
    - B4 ~; b- u& L! U& [1 e6 S
  752.         strFullName="checkversion.txt";2 |1 s. Q+ W; V/ g/ @
  753.         dwProgramState=AP_CONNECT;
    : d6 u, o+ d0 x( c1 Q
  754.       }
    $ b1 M  ?4 s8 q3 f8 N1 O6 l: @
  755.       dwStartUpSteps=4;& Q. \# x" d& }( S4 Z$ E
  756.       break;
    ; M9 O8 {8 R8 |* P; v& n1 k8 b2 B
  757.     case 4:" _: z' O6 z+ C7 }
  758.       {
      R' ?$ P- v/ [! g; v
  759.         FILE *fp;! y: z% a6 x1 d. R$ J. g! L3 D* A
  760.         char szString1[128];  }! R/ L5 l  q5 |; q
  761.         char szString2[128];$ o- [% k& u& y/ L2 J6 ?/ e. N
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' L3 W  g; e2 c6 o9 d$ k
  763.         if(fp)
    4 {! }5 C4 l6 ]! A
  764.         {
    $ o% W2 K6 h7 k
  765.           fscanf(fp,"%s",szString1);* V, c. A; E$ j+ p) j' B
  766.           fclose(fp);) Y( A6 Y; r' @
  767.           fCheckVersion=atof(szString1);/ t: O/ l* y" ^2 G
  768.           fp=fopen(".\\checkversion.dat","r");( e6 D' l5 w( X7 N; j& k6 y: P
  769.           if(fp); [5 ^- P$ z* l* y
  770.           {
    $ i2 H8 ^9 r2 D8 R% O
  771.             fscanf(fp,"%s",szString2);
    / Q! m  f+ G! b6 H6 s
  772.             fclose(fp);
    + O( l9 }3 S( O
  773.             if(atof(szString1)!=atof(szString2))
    7 B9 c8 B' Z* M
  774.             {$ y0 v7 v5 A, l) @7 J* F
  775.               if(!Dn.Connected())
    - [! T+ p5 a0 j+ I" d6 f0 s
  776.               {- \6 W% g3 @. n* v# Q
  777.                 bFirstUpdate=TRUE;
    6 D- n9 ^; g2 D0 |- j
  778.                 dwTotalFiles=1;
    ; K' U+ U3 E; B+ y+ d1 M, ?6 X
  779.                 dwDownLoaded=0;3 T1 `1 l- \# l, @( a# N! a  L  S3 M
  780.                 bSilentStep=FALSE;
    " [) j2 U; h& A4 k+ d+ r7 C
  781.                 bCompressed=TRUE;& K( N1 c# E5 z+ L6 k0 F9 k
  782.                 strExtLocal=".\\DownLoad\";2 r5 m& y4 u* @: n- T- @
  783.                 strFullName="update.txt";8 b' k. H' d8 M2 c' a' C% ~
  784.                 dwProgramState=AP_CONNECT;! o- s! ?( H9 x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 b# l# n5 h8 u& P- K* w3 }+ v
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 @8 ^5 N/ ?8 a4 j
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * @' s7 h$ z0 g+ I' T

  788. : k" `- s3 {- z9 a, u+ @* {  Y
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 r6 O* d0 W  t6 u
  790.                 unlink(".\\DownLoad\\checkversion.txt");9 h" U$ c2 m6 r2 r
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    % t, s: o  S" r: m& F9 v- \
  792.                 {* B! x; _9 U) t9 x" _- Y" l
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " ?$ X* d: J/ @. T
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");3 j2 S7 q) d, E- i" \9 _
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    , p" y- m: x+ M! w! E" T
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 C* ^0 G! F+ r' j

  797. . c. s( f; S: b6 H. Z5 j
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, }- ?, I6 m/ C  L3 z
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 r7 s0 g* I) }1 w+ h+ M
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    : d9 P  |: m' E, [
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) a/ ^; b( K4 w" b% S% \
  802.                 }
    # e$ C7 Y1 E. S- F- q( A! g" B$ R
  803.                 dwStartUpSteps=5;
    . X4 g; F* ]/ r4 q, L8 ?% L* P4 S) ]
  804.               }
    2 c$ ^  T) n1 {+ c1 Z  T
  805.             }5 O: X- l' |$ w& h$ @9 ?
  806.             else
    # ?5 z3 F  {. X5 m8 T
  807.             {
      z  N5 h, v7 U5 q% D
  808.               unlink(".\\DownLoad\\checkversion.txt");, E* X& B$ e) h% g4 |7 Z; x2 H, n
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: x9 ^: T, d6 Q- J
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    * y+ ~  x. X9 E0 g9 s
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    + S7 [$ F0 k, ?9 @/ p

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

' S: d: r1 r7 Z8 u5 S2 k" ?& r% m6 J- C+ X* ^' R7 L

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

寂寞在_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客服返回頂部