CSUpdate.exe源代码

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

% I+ m& j" O% f% ?& H
  1. / RevApp.cpp : Defines the class behaviors for the application.1 s3 ~" a6 @5 F
  2. //$ ?* m, O$ d8 v4 B

  3. 0 P& G1 N5 U7 h- ^9 q0 R
  4. #include "stdafx.h"% ?, ]- K$ X: `% H
  5. , `) p# U7 S7 }; j- I
  6. //#define UNICODE
    # C6 o5 E* H2 \
  7. //#include <gdiplus.h>
    4 ]+ h/ t7 H, {3 i0 \. m+ G
  8. //using namespace Gdiplus;$ P/ x/ [5 d0 H6 S7 s
  9. 8 `2 v: D8 v/ u/ N( p
  10. #include "RevApp.h"0 W6 g3 [( z  ^5 K+ z5 n8 N
  11. #include "RevAppDlg.h"
    . d3 n3 g* |* `, h4 y9 I( ^1 ?* F

  12. % w2 Y/ v" `* u. F" z& k( J: M
  13. #pragma warning(disable:4786)
    - y1 w( a0 k1 I" Y
  14. #include <map>/ @8 P  i! l" h5 C# m
  15. #include <list>$ Y7 I$ K) g: e6 J$ A) ]# g. w
  16. #include <direct.h>
    9 |1 C" g$ s% K, R6 G

  17. " W/ |6 p( h! ?* P2 e& B
  18. #ifdef _DEBUG/ U& D; Z/ @: j+ f6 C
  19. #define new DEBUG_NEW
    ) x) t; K- \* U  x. x
  20. #undef THIS_FILE
    , j; M7 X7 ?6 [# v* |* P
  21. static char THIS_FILE[] = __FILE__;* z" A, p  n1 e- o" p
  22. #endif
    1 _5 l& H4 [" `, F
  23. #include "SkinResDef.h"
    8 R, R; [! y; w6 V
  24. #include "ChangeBG.h"$ e% U0 z2 K: h( e, ~% v
  25. #include "AFXINET.H"
    * F( t0 o1 Q; ]

  26. 0 v. h4 ^; y7 e$ y3 h9 M! q
  27. #define TRADITIONAL_CHINESE 07 n) ^: w# L. b6 E- n* z" M$ z
  28. #define SIMPLIFY_CHINESE 16 Q0 y& v# |+ f6 o8 {! m8 p
  29. #define ENGLISH 2
      L1 \; S8 z3 i: L# ^3 R0 N) J
  30. int m_iLanguage = ENGLISH;
    8 B: P& J- Z! ~4 y: K
  31. /////////////////////////////////////////////////////////////////////////////
    % d: G3 o/ I; J& U
  32. // CRevAppApp' d7 Q, b6 M2 [. _5 w

  33. , y0 b( ^' \) N
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)2 Y2 W2 ]" b1 _
  35.         //{{AFX_MSG_MAP(CRevAppApp)' R2 C; w! A# G4 R4 H4 B1 k: c3 N
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    , R& {5 v% |. \2 O
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!, n3 G0 w; a# `
  38.         //}}AFX_MSG* C( J3 s# U) F% q1 U
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% ~$ M. x0 T* p6 F0 Q& l! ]
  40. END_MESSAGE_MAP()5 o/ G. u& i0 ?7 ~# T) c7 G# {

  41. 7 G7 p; ^- |1 v1 _0 g8 w
  42. /////////////////////////////////////////////////////////////////////////////
    * f7 A! H& N/ k9 g
  43. // CRevAppApp construction
    2 h, u" X6 B, |* q* W* }

  44. : \. j% F9 d+ K7 b) A% W9 C
  45. CRevAppApp::CRevAppApp()
    ! G# G4 E7 i$ b5 A8 }
  46. {# g6 F6 ^; |8 F# ^8 V
  47.         // TODO: add construction code here,7 ]; F) q0 t# m$ b8 E  a8 H
  48.         // Place all significant initialization in InitInstance5 o" f2 G" p) L5 Q' t3 O! x+ c
  49.   bDisplayIsBig5=FALSE;
    4 ^6 A& D3 k& g1 v
  50.   bRestartUpdater=FALSE;+ a9 b9 F4 j( d5 g
  51.   bFinishUpdated=FALSE;
    , b! y9 X! j$ W3 S5 i
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 b2 ^5 \. B9 ]; [( K; Q0 _
  53.   InitChangeDataBig52GBKS();' v) ^3 |# p: s$ [+ J8 k4 [
  54.   InitChangeDataGBKS2Big5();
    # p3 K0 t1 k/ H
  55.         //8 {0 j) g, s/ w, Y' J9 z% z/ L
  56.         bClickRunExe = FALSE;
    . {: g0 N8 L( k% d( Z
  57.         //
    0 S, e: X# ]2 E8 o: k6 @
  58. }8 x# [" H) a2 {# |. o! S
  59. 0 ]/ M  J0 Q9 H2 r! @- {
  60. CRevAppApp::~CRevAppApp()
    1 f  s' h( K' R0 ^; R5 z; n: k
  61. {
    5 O+ k3 M7 e* W+ J3 p, _# n
  62.         // TODO: add construction code here,( P! ?+ h) R( q
  63.         // Place all significant initialization in InitInstance
    0 w2 V3 v2 l& E4 N9 G# T
  64.   EndChangeData();
    ) j, P" U; R# J% s7 T9 e
  65. }7 {7 {. ]2 U" W4 {: l0 N1 d0 q5 y

  66. ) h/ T/ A% a; g) F
  67. /////////////////////////////////////////////////////////////////////////////4 Y0 I0 B3 d( x! y
  68. // The one and only CRevAppApp object
    # I5 I3 K7 |6 m4 I
  69. 8 V7 L' Q" x$ g/ ]4 G& ~' @8 m
  70. CRevAppApp theApp;
    ! @2 `) X% }8 p+ V3 d

  71. 8 s: X0 K9 M1 i  g' x$ }
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)( h4 x+ m, L3 |# U0 q
  73. {
    - _4 D' A* h. ]  ~) ]
  74.   int iEOF=0;
    ) t2 C5 I5 Q( I! H) L
  75.   char szTempName[MAX_PATH];! ~: U0 J6 a0 t% P  p1 }
  76.   *szFileName=0;
    ; n( ?1 k# z; g5 N2 m% T
  77.   iEOF=fscanf(fp,"%s",szTempName);' {+ y% n) J0 q  H# `: g4 ~) B$ a
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
      ^# L$ y! a2 x" g, l. [% I6 z
  79.   {
    7 w9 i- u1 M" W# P$ K( t
  80.     strcpy(szFileName,&szTempName[1]);
    7 q8 \* q- f. u) J6 ~7 q% t( ]
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    * ]$ Q9 r- H+ y6 S; _! b4 n1 D
  82.     {! V0 N( ^5 h$ O+ d* H- j% F3 M8 }
  83.       iEOF=fscanf(fp,"%s",szTempName);
    $ r# {% G- P6 u* t* s9 k$ u0 a
  84.       strcat(szFileName," ");4 A+ M0 v# \( a: ?6 z! i
  85.       strcat(szFileName,szTempName);; D4 ~: T  |3 A8 O% J* Y/ V! i
  86.     }% C) a, T  `! U% Q! U
  87.     if(strlen(szFileName)>=1)
    $ _9 g( u" {, z) e
  88.     {
      n! g) X: C- q3 q1 Y0 R7 S2 a' O
  89.       szFileName[strlen(szFileName)-1]=0;2 z, i% x0 P) K
  90.     }% q" ~" p; q; d+ {  o. ^% u/ k1 G
  91.   }
    0 Z3 p% Q; Q& ]' B; r$ d' i! x7 b
  92.   return szFileName;
    9 W. m4 F0 _0 J( r$ j
  93. }- k3 M+ v( n# d

  94. 0 e1 C8 b. e: r/ ^
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    $ _2 _8 J+ G9 B  t( J7 N  w
  96. {  @" H* @: Y' o
  97.   FILE *fp;2 @) R% v- n. H) Q- r# E% I
  98.   char *key=NULL;1 o0 P* v+ u* k8 j0 u
  99.   char version[MAX_PATH];
    " v  u5 b9 a: e6 }$ W1 k7 ?( c' ~
  100.   LPUPDATEFILE file,olds;! H. l/ k5 [" ~: a- v. ?
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 M; }. o+ P! _& f4 r6 X+ W2 m8 Z2 l1 Q& D
  102. , v6 N- z, N( D* w
  103.   UpdateList.clear();
    / T3 w% U8 X" i) \3 O
  104.   UpdateFile.clear();: P8 b6 F$ C3 a2 b: |
  105.   if(GetFileAttributes(filename)==-1) return false;8 Q3 R! |: S1 q  S0 `! ]8 g0 \6 B8 a* W5 E
  106.   if(!(fp=fopen(filename,"r"))) return false;4 E% o$ i5 j1 l% \5 h. L5 O% ~
  107.   fscanf(fp,"%s",version);; `8 r3 d& j0 c+ b
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }7 Y; {% Z- I+ u* q( @
  109.   while(fscanf(fp,"%s",version)!=EOF)
    & X% t: \0 ~9 R; K6 u
  110.   {6 U, ], r9 \7 L7 e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 I+ v+ V# [2 `3 S
  112.     fscanf(fp,"%s",file->path);
    ) ?. ]8 I+ `  x; o
  113.     ReadFileNames(fp,file->file);. v7 v( d0 O# q6 |1 r
  114.     strcpy(file->full,".");# l9 k2 i$ h2 L$ O
  115.     strcat(file->full,file->path);5 X0 O) k* S: |( O
  116.     strcat(file->full,file->file);
    ; q0 }6 k/ ?; h! r; l
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())1 }: \' E4 L0 _8 f. L: z
  118.     {, C; `! ^$ `6 Z" G# t3 ?
  119.       file->vers=(float)atof(version);! l) j3 d3 F% f  m. y
  120.       UpdateList.push_back(file->full);" K0 G" f( A' \3 `8 l" U9 V3 @; L1 ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));( B6 P1 S/ e. T
  122.     }
    5 S( j/ d1 S" d# \) k. C: Y
  123.     else
    9 d, Y! y7 P4 [
  124.     {7 ]+ t3 r+ n1 K2 l. x% _8 D1 {
  125.       olds=(*p).second;& A& w+ Z- @4 j8 ]
  126.       if(olds->vers<(float)atof(version))
    0 w8 y, p+ x' h5 Z7 M' Q
  127.       {
    $ O6 s; \( z1 {, z% I0 O
  128.         olds->vers=(float)atof(version);
    5 e1 a7 o- N+ z# l( ^' ^5 {2 F
  129.       }
    ! F* f; `+ Y7 p/ {
  130.       free(file);; _1 l4 M: `6 x6 h2 o5 L; x" T
  131.     }! F# w2 O2 B$ l3 o0 f( R& c- G$ J5 Z" ^' Z
  132.   }
    : ]7 a7 @% D& ~- D
  133.   fclose(fp);
    6 E4 v/ a! p" K, a" V' S) M) {
  134.   return true;  j/ W- X5 V* p5 g& _, \! `
  135. }, l. p: h/ L. A1 s+ d# ?
  136. 3 R/ s1 C, ]9 I" B; @
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)3 Y( H. t, o* M: e" u
  138. {# v7 A' S# {8 l
  139.   TCHAR  szFull[MAX_PATH];
    8 l$ `, u8 U2 }3 o) q
  140.   TCHAR *token,*inter;! J8 Z$ M9 Q( _( b7 U; d9 a6 f" J
  141.   *szPath=0;4 \* y2 {: F. q+ z
  142.   strcpy(szFull,szFullPath);
    . |" b0 }3 I3 T+ z8 \/ K2 D
  143.   token=strtok(szFull,"\\/");0 x: i% }0 e  P/ |5 W4 w, \4 `
  144.   inter=token;4 j' h9 }! m) @3 h
  145.   while(token=strtok(NULL,"\\/"))
    % |: k7 \4 u' D( k
  146.   {
    % s1 M5 o  z/ Q: ~7 w
  147.     strcat(szPath,inter);
    & w, e2 c6 v# a6 f1 b
  148.     strcat(szPath,"\");; T  ?0 `! g4 \" p' |8 J$ }
  149.     inter=token;; n* N$ X9 j4 I4 U! c% I
  150.   }- o0 \9 B% h2 ~, \. A
  151.   return strlen(szPath);) \! u) d. e0 Q) p. K
  152. }
    + f- m, f7 p# B5 }* Q3 }1 U* \  f9 z

  153. 4 ]+ K+ \. @" h- m: x. J
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
      [9 ^, G4 i" L- x, r! l2 T% i( ]& P
  155. {
    4 O9 o# I( V; M' N+ S
  156.   DWORD attrib=GetFileAttributes(Target);' N! ]- k7 ~9 C' o- F
  157.   if(attrib!=-1)
    ; C8 r9 _+ J" B/ ^
  158.   {# {  i) _; l4 L# L* d4 M
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))! J2 q  Q* j/ _2 C  u+ j
  160.     {
    2 p" Y" ^. C& |
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    / |* l/ v1 g, @
  162.       SetFileAttributes(Target,attrib);4 e/ F3 s" U$ [" ]
  163.     }: f; l/ P" ~# {2 T( Z& }
  164.   }
    " M0 i8 d1 k: w- I
  165.   CopyFile(Source,Target,Erase);
    0 k9 O0 u; ?' G& S$ i: Y; E- v
  166. }
    , `& F6 l% m6 d! _

  167. * a' O( x, ]( F/ d/ \3 T# y; L
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...). R: e4 S- i6 t0 @( U; }& K4 w0 r
  169. {4 O/ X/ A5 h8 B! p  l& c
  170.      FILE *fp;
    0 W8 z1 z: L" r7 j
  171.      char  szBuffer[8192];
    8 ~8 X" g. E9 M, ]
  172.   va_list  argptr;3 F) U, s$ |  N4 O% Y6 V

  173. 6 Q9 R" @$ c' H: O  L9 Q
  174.         va_start(argptr,message);
    ! P- _7 b! k$ S7 `. t2 ?% g' D1 N0 D
  175.         vsprintf(szBuffer,message,argptr);
    2 n$ Q( g. @% v- r, o
  176.         va_end(argptr);4 @8 Z2 ?9 ^0 @& Q2 F+ c( ^. d$ E
  177.   fp=fopen(FileName,"a");3 w6 I7 w! S, g7 w: L& N% A
  178.   if(fp)7 x7 M' F" _' q
  179.   {
    ! H1 k9 e3 y4 J8 t
  180.     fprintf(fp,szBuffer);
    , Y8 {5 I- c0 H
  181.     fclose(fp);# o3 N5 N9 K* j- i6 I
  182.           _flushall();
    7 w1 w9 ~9 u  Z6 h7 W8 L
  183.   }
      k% j9 N8 b+ ^9 H4 X6 I# l- Z
  184. }- l$ _6 m! H% O2 a8 P* s

  185. . `5 P% E2 [1 ]# n4 u( ], z( Z
  186. BOOL CRevAppApp::Fclearf(char *FileName)" f9 ^/ d, v  l2 K' L3 ~* t
  187. {9 w* N7 W' H: C5 |( v9 `8 g
  188.      FILE *fp;
    , U1 G; R1 E& |% L  H. g* l
  189.     DWORD  attrib;/ f" H' N+ A1 Y$ O' `
  190.   attrib=GetFileAttributes(FileName);! M. v# e8 r" y) ]
  191.   if(attrib!=-1)
    $ m5 b+ f" F3 |! M
  192.   {
    % K' `2 \+ S5 m( _
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    & R8 D8 N) v  Y4 f( y8 W
  194.     if(!SetFileAttributes(FileName,attrib))* X$ l4 _3 O9 L: h0 U
  195.     {
    8 m( x/ c) Q# J" m
  196.       return FALSE;
    ' s! K( ?  Z* A
  197.     }0 a' u- {# j6 |- f) \( u7 K
  198.   }
    , m9 a# F4 G2 F  Z
  199.   fp=fopen(FileName,"wb");
    1 I5 d5 l. j- R* `( ~
  200.   if(fp)6 M' M, {' ~- \# I- }- F8 W
  201.   {
    ; J5 o% a7 }% f3 `$ l% k/ L& H
  202.     fclose(fp);3 u' A. c( t2 s0 @
  203.   }
    7 x* D8 d* D( A
  204.   return TRUE;
    1 X5 t! R/ c! g2 I( H3 E# \; U
  205. }1 ~3 y5 a. K2 P2 j$ Q9 E2 [. F* |

  206. 7 q7 {# B; P( n# n; G' v9 {
  207. BOOL CRevAppApp::UpdateLocalVersion(void)  Z1 {1 L) o& C0 T$ D2 H
  208. {
    ; ^/ L$ j. Z) ]
  209.   char filename[MAX_PATH];
    * [6 I' A- b9 v" O  Q
  210.   LPUPDATEFILE file,olds;  F! }: z; F) `9 k: `
  211.   std::map<int,CString>::iterator i;# T: H5 ^1 q$ v+ g/ R5 g
  212.   std::map<CString,LPUPDATEFILE>::iterator p;/ X9 X8 {; |  M8 `: b" N- h% H
  213.   std::list<CString>::iterator l;
    + I+ N' J7 D. W$ r5 }( W
  214. " b1 Y$ h' _6 R: j/ @
  215.   if(bFirstUpdate)
    6 C: B( j3 M" P  s9 v0 O" Y% [, [
  216.   {; z/ m4 G) u2 i9 x( g/ m: {6 \6 d
  217.     dwCurrFile=0;
    9 v7 A, f( L! V7 u6 ~5 C
  218.     bFirstUpdate=FALSE;
    1 @, |- j4 Z- P, `7 H0 b# p/ b9 [
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , B# B1 I) W. w6 `; v1 r8 q
  220.     {2 j% `& C, X3 o" w& Q
  221.       dwTotalFiles=UpdateLocal.size();/ V2 Z3 n9 E& i4 c% _) @) o
  222.       dwDownLoaded=0;; Q0 m6 k9 v" r; }6 b$ ^
  223.       bSilentStep=FALSE;4 U; D% t. r% k" P5 C
  224.       bCompressed=TRUE;* A9 E, Q4 `  L0 |
  225.       strExtLocal.Empty();
    8 ~- i, [# V6 ^) n" i4 f
  226.       strFullName=(*i).second;
    7 L! {0 `' k& v% V4 v9 y, m# A
  227.       dwProgramState=AP_CONNECT;
    ! \: a: j0 D/ q( O* z4 I
  228.       return TRUE;
    * a# S- i3 c4 N5 g
  229.     }
    4 z( H" ]: z, x$ q0 T& p7 Z
  230.   }! r5 S* W9 K1 A& s& `% C* y* \
  231.   else if(bRestartUpdater==FALSE)
      U  a4 ^2 n- f
  232.   {
    . u& d5 G1 n0 S+ S" k$ {1 P* f
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    & O* R2 e. K- n3 k
  234.     {
    9 C* e" A8 q4 G
  235.       file=(*p).second;7 @/ X2 ~) N# _- N6 x
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    7 m" \( \* ^2 \% `9 {$ M2 n
  237.       {
    # U7 D& s% `9 E% e
  238.         olds=(*p).second;
    5 p1 m/ @7 m6 o* a
  239.         olds->vers=file->vers;6 q% a; B% ^5 o
  240.       }3 Z# T; B% ]( i- Q. l9 M0 }
  241.       else% B4 M* \; c- E! E3 @, g- b
  242.       {: |, V) w0 G7 ~6 h  p$ p1 z$ S
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # X/ w/ R1 ?2 M
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    - ?, x2 _$ o7 X2 r/ T- _# G
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));% H3 G. w/ l. V8 w/ L
  246.       }* z8 U( J# v1 g8 E
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");  O, N  i8 r7 a) O! p5 q9 e
  248.       sprintf(filename,"(%s)",file->file);
    6 y, ~% [  L$ s
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& b- ?/ F/ s3 h, n  x& X, }% a- k
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }5 T( ]: D6 P+ I/ Y2 R( R) l+ F' B
  251.     }
    & \! K: w! H% ~, ~9 S/ Q
  252.     dwCurrFile++;
    % o9 x, u# j6 P: k7 H
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ g- F# l, N3 [: ~- w: H" n  y
  254.     {
    " o: S% Q2 T, }) [0 d% L
  255.       bSilentStep=FALSE;
    * O' ?) ^2 J/ D' f, ]: j$ B
  256.       bCompressed=TRUE;6 _' f3 C" y" D! L5 b
  257.       strExtLocal.Empty();# r3 S& u: }( u2 F3 r7 \; |7 J
  258.       strFullName=(*i).second;: _4 [! d0 s  u& g  @+ F. c
  259.       dwProgramState=AP_CONNECT;! `4 g: ?* o/ U, t
  260.       return TRUE;
    0 S9 ?" F9 x: l( y2 k) O7 D/ j
  261.     }
    ( }2 c6 i6 l9 \2 g; s
  262.     if(!bRestartUpdater)0 S5 n9 b' U; V" i
  263.     {9 D# c/ h) t% Q+ q
  264.       int iCurrSize,iFileSize;5 s0 W4 ^( K1 e
  265.       iCurrSize=0;9 A9 P1 C3 W' M
  266.       iFileSize=UpdateList2.size();
    1 N( U* E5 H$ [2 c$ Q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ' ?9 I: d, f2 K5 ?6 H. J
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    # W  E5 o0 L6 u+ n/ e# j
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");1 n$ B% s/ {" F) m* {2 r
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; i! e! u6 B$ X" ?) M; {! a
  271.       Fclearf(".\\update.dat");. a! W) N/ ]& i7 Y  T, W3 _0 z
  272.       Fprintf(".\\update.dat","Bloodyf\n");$ k/ Q6 z, N7 \# g7 ~
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)7 E3 V. |3 V9 s  J  D# ?
  274.       {
    ' T/ u3 d2 _9 r
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())4 Z0 y6 J# x6 H3 X, I
  276.         {
    : |7 B5 p/ i9 i7 t6 T: G* {) X: k$ e
  277.           file=(*p).second;' W" M9 m2 J1 J* S- d1 f/ [& V9 K
  278.           sprintf(filename,"(%s)",file->file);
    7 Z. I8 ?3 U2 M0 Y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% C$ b; P6 s. r% e) ~# z/ |
  280.           iCurrSize++;5 h1 ?+ ]# M9 T( {0 o! `. g) k* B
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    5 E4 p( E' h  N+ [/ X. A- w
  282.         }
    $ P4 G. {/ _% {0 `: {4 {% ]; H9 a
  283.       }
    " q  T4 `* @+ F& X& o: `! z: ~
  284.       unlink(".\\update.txt");
    1 a- K0 O0 U5 X1 d
  285.       unlink(".\\update.tmp");8 H1 H. l! V6 r1 {: k
  286.       Fclearf(".\\checkversion.dat");7 ]  k/ r  t: O
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);9 z( C. ]2 `; p% N% o
  288.       if(UpdateLocal.size())
    6 R  ~6 A; ^& B: l0 X
  289.       {+ S0 m6 P! C; [: K8 B: P
  290.         UpdateLocal.clear();
    + P; c' |3 ?# V  w: y" U$ m: l) B8 |
  291.       }
    ! x9 A  F1 w2 a" ]- k* n
  292.       if(UpdateFile3.size()): V$ {; t7 f( g# O9 h( g# X8 D
  293.       {
    : p+ ?/ ?8 [3 V6 ?5 S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 T+ Y& c. P; i9 i/ _# K
  295.         {
    & p6 D4 H# e% k7 }6 |& \3 \
  296.           file=(*p).second;
    4 E5 P; ~" p! h! \' \
  297.           free(file);8 M" K9 W* D& Z3 }
  298.         }
    1 G. j5 e4 `7 o5 T  ]. C" r+ S; |
  299.         UpdateFile3.clear();
    ; P8 G6 X0 A' I# o
  300.         UpdateList3.clear();
    ' m- B; e, K% |% i' U, G
  301.       }: q% K) W  d% w- ]4 E
  302.       if(UpdateFile2.size())" c& r# }, I: x" h6 Y
  303.       {
    ; O( M4 I% G( T, `. k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ N; d0 Y2 N% d2 n. F1 z7 i
  305.         {
    0 k- j! y/ A; H& G! B0 e
  306.           file=(*p).second;
    . A' I' _# @0 M! L0 Q" N4 D# a+ |
  307.           free(file);1 Z5 g" t. f4 I( n9 X
  308.         }
    6 m% _) I6 E' i3 Q% y
  309.         UpdateFile2.clear();
    3 f8 `/ o1 W: i' s$ e
  310.         UpdateList2.clear();' w: d- X& S( w9 R
  311.       }3 c9 N  y$ D1 q7 w. P
  312.       if(UpdateFile1.size())
    6 u" Y2 l$ b& t! ?+ ^
  313.       {' w; K0 E. ]8 `9 s8 I' C
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      G% L0 Q, }6 ?7 C6 D
  315.         {* t+ l1 a! Z3 N
  316.           file=(*p).second;
    " e, |7 X1 J% F8 D+ ?
  317.           free(file);
    * L( V. ~( o% e/ T2 ?" ]3 z2 g% D
  318.         }
    , e/ ~4 _2 w/ n- \8 R" B! y
  319.         UpdateFile1.clear();
    3 h9 g3 T- ]* o5 M  N7 v# u
  320.         UpdateList1.clear();
    " N# Z1 l* V: S' j
  321.       }5 v# F' G' H& l& ?% Q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));% t& w2 K& @8 E/ `+ q8 }! ?$ b2 T
  323.     }' \7 Y/ y2 C: ]2 c8 T7 D4 p4 M- _
  324.   }# Q8 ^; K4 }0 K& _4 z* I( Y% e
  325.   return FALSE;  j* o+ F* D4 H8 i6 P4 d
  326. }0 u4 F* }: K% }' z

  327. 8 W% T& q5 C% |1 M4 t
  328. void CRevAppApp::ClearAll(void), w, _. R8 A* `0 r6 ~) \! T9 z
  329. {
    ' I% r- `! l4 M
  330.   LPUPDATEFILE file;: f; d7 b; f& ^8 \- b) k$ G3 C5 p
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    : U, w- }9 Z& X( W

  332. 0 G- d7 M4 I% }- [
  333.   if(UpdateLocal.size())
    7 c; r7 C: c+ H: D# ]9 Z
  334.   {1 m+ H8 ]$ p+ O
  335.     UpdateLocal.clear();
    - p/ V+ y- x$ \8 J& f5 X( d& }6 z
  336.   }
    9 z# S+ t" M- v. I7 X5 ^
  337.   if(UpdateFile3.size())6 O) p2 G/ ~- T0 G3 ^
  338.   {/ c( V/ {6 S6 |7 z" }1 ^
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), M7 f; h4 z& n& W
  340.     {
    % J) r( S  |( t9 J2 c' a" O* `
  341.       file=(*p).second;
    ! D2 \4 g8 @  K- r/ a3 P
  342.       free(file);
    + z6 r0 b& k, Y( d0 p5 G
  343.     }4 Q- `* s9 \8 x1 Q: |5 l' n
  344.     UpdateFile3.clear();
    ; I: Q9 l$ S8 z
  345.     UpdateList3.clear();1 U$ o7 F+ c8 ^% u$ l% z( [
  346.   }
    ! @* s8 s' z  p
  347.   if(UpdateFile2.size())
    3 X* Q$ E7 x) h% ^4 z# y7 p, D2 {
  348.   {
    - ~7 K& U- Z3 p2 Q& G$ ]8 r' e4 h
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % N" l$ _$ l, j/ `- X( n/ o
  350.     {
    ' e5 b$ ^! Y2 [. `' S; c% {5 o
  351.       file=(*p).second;* x1 M" ]2 X, r! ~
  352.       free(file);
    3 _4 e* S. W5 S; {% g
  353.     }
    2 H1 q1 o+ u2 c2 O, U
  354.     UpdateFile2.clear();
    4 D: D, p6 u( y$ @/ P
  355.     UpdateList2.clear();
    + T5 K+ }: [( h0 O& w
  356.   }" U  P6 g& \/ Z: G3 K3 r
  357.   if(UpdateFile1.size())% |9 T' m% a' h+ ~0 F* T
  358.   {  D" Z5 S( M; L$ J$ O) s
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    5 [- ?7 j! V- L/ l' G3 R  x
  360.     {
    : E# o: Q8 U% ~
  361.       file=(*p).second;
    / l% n4 E# |* m4 t
  362.       free(file);
    7 N- u0 L, z$ O- E
  363.     }( E% d% D+ Y0 K6 q
  364.     UpdateFile1.clear();
    ( e* `: O, U" h1 \# V( k9 P
  365.     UpdateList1.clear();
    4 \8 [" f2 Y# ~- d
  366.   }1 D5 t- I/ h% \- x+ C, I
  367. }  
    ! k' j6 }/ v! J8 U" Q* L4 I2 ^
  368.   
    $ Y  a& c7 j- G4 b+ h- E
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    3 j/ Y$ l2 d5 }  \$ W
  370. {
    9 N6 {7 Y1 V/ z  }* N; g1 d
  371.   int c;
    9 F  o! G, r: T4 X5 C7 s
  372.   LPUPDATEFILE file1,file2;
    0 D* [2 g0 U, z3 G5 J7 L7 v7 i9 ?
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    / g+ N: P, Z* c6 y
  374.   std::list<CString>::iterator l;
    4 U& S1 k: B. J1 T( u% O9 {0 X

  375. & b# i7 N9 \; j' g% c
  376.   UpdateLocal.clear();/ K0 x$ c5 y) a
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);3 H& V" M, G* W/ V* B4 N% n
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    & Y0 C5 j6 }7 {. N
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);8 c- D7 ]5 i/ q1 A2 b3 h
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    * ?& j. G6 p& D5 S! ^% ]
  381.   if(UpdateFile3.size())6 q0 k( ~( R; A
  382.   {" X# p0 z$ _7 C- e& E" U8 S
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    7 _6 C6 R0 V7 t7 r/ G8 a) i, Z% l
  384.     {7 `8 d2 ?* `* V2 c* A
  385.       file2=(LPUPDATEFILE)(*i).second;
    & k) |; J9 A7 s. @
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 x) O% i. ]/ E' {0 [, f
  387.       {( D" c. H1 }) b  @( U4 [
  388.         file1=(LPUPDATEFILE)(*p).second;
    5 c2 C. m% r$ Z) k+ y& ?
  389.         file1->vers=file2->vers;: M& X& [, v, ^0 l
  390.       }
    5 ^3 z* T! ]1 }5 T2 v- k$ H# }
  391.       else
    4 Q- d6 d/ G7 A2 @
  392.       {' n: H5 z5 u( A% o4 j
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& ^$ q% U- F( _9 ]3 n3 V+ b$ V
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));9 x( ?0 m5 @8 y1 a
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));, v8 `8 e$ f" r2 ]  C
  396.       }- c  K; z/ x6 a' k$ l' J
  397.     }- y- X7 n4 `5 n: i
  398.   }
    6 O7 w  ^8 B6 |6 d  K
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)1 e! Y, x2 b) O2 B3 D8 P- X
  400.   {, g) w- u/ B, h7 e/ S. I" W+ i
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())$ q# j" p3 `. a+ r% L6 i4 h
  402.     {
      N/ n) u1 S% g& J: ?$ o
  403.       file2=(LPUPDATEFILE)(*i).second;
    : s: a1 ]& Z. d* {
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 s) ^% O; H" d7 a% N$ j$ G
  405.       {
    " Z" ?) N& z! u- p) h5 y) n' }5 K
  406.         file1=(LPUPDATEFILE)(*p).second;& j# P* x8 Q* C3 ]
  407.         if(file1->vers!=file2->vers)
    " m3 ^# F$ A4 |6 i% g
  408.         {: R4 l, o% y5 e$ ?$ l9 {: t) U
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : [" B* X. X8 r; G
  410.           c++;4 s2 c2 N* K& U( ]
  411.         }
    - b: }( i3 ]1 Q
  412.       }( j/ F$ ?9 k. e0 K0 g+ f
  413.       else2 A% C$ |- u- r
  414.       {0 y5 T4 q3 o9 d# l7 O+ R5 z8 D, u
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + f7 S( O( i6 r* G
  416.         c++;
    9 P, `/ Z7 e, q; {9 l  C& s
  417.       }
    & v8 I/ e& T/ ?7 l) P6 X7 O& c" X
  418.     }
    4 z" r3 ]% I9 l& S9 n
  419.   }5 D4 l1 n5 p4 d9 A3 a! ?' V1 }
  420.   unlink(".\\DownLoad\\update.txt");
    7 P3 w1 K7 O/ q" e; m2 v  ]
  421.   if(UpdateLocal.size()) return TRUE;
    $ S# o$ K: {( l# M/ \) Q3 j
  422.   else                   return FALSE;
    ' J/ f3 N( k' |& c5 O6 j. M$ \
  423. }
    ; F; v7 X5 Z: F  F6 s# p+ i

  424. $ e7 a- s1 V8 a2 h
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    1 t" J* @( X, i2 A, {# F4 v
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ K+ p7 m5 i3 F$ E. }
  427. ( ^; z; T1 @* W+ _- F' b
  428. ) G3 W( |0 Q* f6 i0 c' F' s

  429. ; g" k" ^4 \6 ~4 z6 D
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    & \. g/ t' Q  R# I/ J8 ^! ~
  431. {
    . w/ L6 d2 L. y0 D  M) o; B2 K  r
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    , r. `4 @/ A; v( _$ w
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 o, w3 o' J3 J
  434.   {
    " j9 C( D+ T( z$ b0 C- T- v- n3 V2 |
  435.     char szLanguage[50];5 J. j8 y6 h" @* E! k: Y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 q, E# z" A3 O* u/ G$ l
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 I8 X5 U  W$ B8 O; l0 H7 \
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 D4 w% _/ J4 C" L  j
  439.     else                                   m_iLanguage=ENGLISH;
    1 H2 X' O3 n+ |& D
  440.     char szRegister[100];
    ( r) F5 f+ M- A& `; X* Y
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% q9 D* n  N2 r  r1 X9 ^# A& J
  442.     strRegsName=szRegister;
    ; `$ o8 A# ~/ w  Z1 {3 F  @
  443.     char szPatchURL[100];
    4 r- ]! H; t# Q% x( y  K
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% b, t. c5 {5 g; q$ l$ R
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ O. d5 }% x5 c( y4 ~. ]
  446.   }! Y3 F7 o& c" Q8 `, d
  447.   else
    2 P" T# ~' N4 S9 c# m) Z2 p
  448.   {
    2 G" S  s1 }" T# I3 j
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; S! G6 Q/ A) b$ N1 @2 h  S) O
  450.     strRegsName=DEFAULT_REG_URL;
    , ]* n  w5 h. N' K7 A- a2 j9 W
  451.   }
    ; n, Y  I" j9 h
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * y6 @% g) k  N) s6 p
  453.   {
    / |, Y4 o( a" }. x! S+ f
  454.     char szIP[50];4 C: }. [* E/ o2 Q  z) e
  455.     char szDIR[300];
    ( S& F' P0 P: P5 e: h, e2 u0 @$ O& O
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))$ m9 i2 u& H0 c% S
  457.     {& B- D, L2 z4 ]. g
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    5 b6 V* j: R" D
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");  t" u- P6 t1 k( ]6 E( ?  S8 I
  460.       strHostName=szIP;
    : D& L( [0 x: S% ?3 g5 r
  461.       strHostPath.Format("/%s",szDIR);* u3 I/ v. u6 g4 a
  462.     }' C2 b- Z- f8 v4 O% L7 O
  463.     else, S: p, H2 l7 _7 t( W& V' M" j
  464.     {
    : I; p4 g8 f: F4 O+ u1 V% T+ h
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 O3 }$ n; c% r
  466.       {, Q0 x1 Y8 \: @- M0 w( Z
  467.         char szLanguage[50];
    3 q8 {  _; p1 b: c9 ~7 m
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    , B0 w; x4 M% ]# E/ K9 |  H: S
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' D- ?0 z0 a5 w6 F( J7 D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) y5 M/ b  Y) ^8 t- V  E
  471.         else                                   m_iLanguage=ENGLISH;
    1 P% \$ g' g  ^* L/ }: s' h5 ]
  472.         char szRegister[100];" `* p. O4 a& K" P$ S5 W+ K9 f3 v
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' E; R: ?2 T4 {: V. V
  474.         strRegsName=szRegister;
    2 O8 n5 Y; _9 b
  475.         char szPatchURL[100];
    - d7 E- e0 c. f5 n
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - D" m. Q& J% }7 b  t5 s! Q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 F: t& [$ f) ]  {) D2 ?
  478.       }5 ^& A. _! ]7 a( K
  479.       else) E  D; g; y) c0 G
  480.       {  @( ?' H- r6 i2 K6 I4 _+ p
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 {5 g# ^8 X- n! `
  482.         strRegsName=DEFAULT_REG_URL;1 d! ~( L- q1 N# ^& l
  483.       }0 U) m: P% Z5 G* q5 K
  484.     }
    2 D2 u3 T8 ?. j! Q2 r9 P2 j
  485.   }
    0 J1 z% D5 M0 H; v& z- S
  486.   return true;
      Q# p4 [# H8 t7 z* t3 H
  487. }- N* O- P0 c, [  E! x4 K

  488. * m; I* @, z8 L/ [/ a- b# L- Y8 f: P
  489. #include ".\ZLib\unzip.h"
    3 l3 I1 U$ g. w/ i( a7 y  Z3 J/ _9 a
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    0 T/ I* c* W$ J& b! A4 W
  491. /////////////////////////////////////////////////////////////////////////////
    ; `: K9 l+ ]' l* A
  492. // CRevAppApp initialization4 v, t1 |/ X8 S' H- ]
  493. 0 I5 |0 \! ]% O, A
  494. BOOL CRevAppApp::InitInstance()
    2 D/ {0 ~7 k  F6 g! h
  495. {
    + O: `  ]/ ~  H6 G  e
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];3 [6 _4 M3 ?. `- U

  497. 9 F3 W; [( G4 G* Q! s
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    : S, v' w( l9 u, }: x! T
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))* ?4 {2 O  P; _' B3 B$ x
  500.   {7 e& N+ |/ y: \( Y1 \8 i
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ) D$ ]5 P, F, [: G8 z; S' p1 }
  502.     GetPathFromFullPath(szPathTarget,szPathSource);* I( ~+ o" j$ j2 Z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))8 W4 @6 j- I, I, J: ?
  504.     {
    . P7 w+ s( L8 l+ W4 r
  505.       strcpy(szPath,szPathTarget);
    ( }0 ~( |% R  X* \2 f
  506.       SetCurrentDirectory(szPath);
    7 e! h" ?: u: C. O& R
  507.     }+ W0 a2 w. @- B/ x3 Z
  508.   }4 H( ]" [- {/ t& n# T) U. r( L
  509. #ifdef _DEBUG0 J  J' `4 p: S: `9 }3 q8 P7 D
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 N! `$ j1 V- W3 c
  511. #else
    3 {7 P% _- u. n, U  W  s: d
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))7 {& w2 m' g8 M; B
  513. #endif# ?, B8 h! [7 @' E  O
  514.   {
    - \$ A- ~, T" Y* t  g
  515.     char tempFileName[MAX_PATH];* Z& t# n  n% v$ s- u+ X
  516.     strcpy(tempFileName,szPathSource);2 ~& R3 c4 j& p5 S* n3 C2 B
  517.     tempFileName[strlen(szPathSource)-12]=0;
    2 |# C  ^+ ?9 C, T
  518.     strcat(tempFileName,"\\$CSUpdate.exe");& A% v$ Q1 q- O' n; w9 z# K( `3 b
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    1 ^! P5 I1 F, ?. ^( r
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ! F6 x. i& @0 B& m, C  ~
  521.     return TRUE;
    : y1 k9 x! ^/ _: H% w* x9 [
  522.   }3 f* H# q! ^; h7 t. a4 T3 ^
  523.   // Nuke 0118: Delete run.exe
    0 ?2 F: i0 q/ |! l9 D  c
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    $ g! A0 O( M- a
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    - \9 b7 \1 t8 N' c
  526.   if(!ReadCfgFile("Config.ini"))+ o! n' D9 I7 N! A8 q
  527.   {
    8 H! |# Q2 A8 B* z+ y3 D
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    - Q8 ~8 M. `! E0 P
  529.     return TRUE;
    9 \+ o& F* U2 I9 c, [5 @4 F
  530.   }5 g6 S( w. S( b% }: m
  531.   HANDLE mutex;) R) K* |( A1 V& F: W
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))' g4 A' t. U" m; }& i
  533.   {5 G6 Z: R8 R" Y5 k
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    - g5 B! v9 `. G  E1 F( [6 g* k
  535.     {6 B$ {  B4 {( J. B+ E2 C, [; y
  536.       CloseHandle(mutex);: l1 A/ h0 v! `0 A' E
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 C. m, o8 G% e3 @
  538.       return TRUE;
    ) m7 t$ O8 \) r& i5 u& g/ ~8 k  d: P
  539.     }
    " c% N: ]& {) d2 p. _
  540.   }  % u' _- o- q6 U; c
  541.   CloseHandle(mutex);2 \6 m6 c' `, L9 ^  ?& t

  542. * k- b# W! i$ c* e! E0 \: k
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    . P% g: O, T+ Q. q) @. Q1 f

  544. 5 z* C1 g. @8 m2 q: l* G" _
  545.         AfxEnableControlContainer();7 F& ^2 T* S* |6 y% S2 }
  546. # h' Y( [* X* g) h( p8 @, p
  547.   bCanUpdate=FALSE;
    . v5 d/ Y1 T' [1 t, Y' V
  548.   dwStartUpSteps=1;6 Q. ?, H, b/ b+ E
  549.   dwProgramState=AP_NOTHING;
    ) G( s* L  X  F# O
  550. 1 I" ^; e1 o: i; c. E2 O0 `
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    % g5 Z7 M) s7 y/ X, h

  552.   [, n3 s/ U! ~) @4 s( i2 _" Z7 I. M# @$ s
  553.         // Standard initialization
      \# C! q" ~' k" [
  554.         // If you are not using these features and wish to reduce the size
    # A$ _" e& V/ A/ t1 O3 m
  555.         //  of your final executable, you should remove from the following- B, Q, ~. j( U" }! j" m& l' b
  556.         //  the specific initialization routines you do not need.
    ; x1 F+ S7 I% Q' [
  557. 1 i2 q) F7 E  b5 R: |# B
  558. #ifdef _AFXDLL% p: \2 f/ ^* [) w  p1 {2 p- ?" _  k
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    8 _: P# S* Y) }% G  W5 a- h. U0 e
  560. #else
    & S8 g4 x. ^  ]' v/ C/ ~8 x- ?. ^1 j& A/ c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically* I" X; E, J* p, A/ i
  562. #endif, ~5 k2 u! {- E) h$ s  T' I9 E$ |
  563. + K' G) T# k  j" T# B1 {$ p; }
  564.   dlg=new CRevAppDlg;; H. e4 b% u2 m& d
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ! P# V' k" l1 ]) B+ K; E! k
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + E' R4 O9 n* S$ n0 D) _2 R7 h
  567.   m_pMainWnd=dlg;
    5 B8 j: U  M( K5 Q( m
  568. ! n4 u  [5 \( }7 }
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ) L0 v1 i3 k) }

  570. 2 I/ ^& f) i* \  E+ ^
  571. //  GdiplusStartupInput gdiplusStartupInput;, T7 N; x4 w8 n. n
  572. //  ULONG_PTR gdiplusToken;
    9 n; x1 I( L8 {$ J5 Y) `" O
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! b* p$ O4 B5 \8 ~

  574. # ~* _9 J2 x! B/ k% ~: _2 ~4 j) `
  575. //        CRevAppDlg dlg;- \* W6 Q: g8 P  I$ n8 n
  576. //        int nResponse = dlg.DoModal();
    8 v( P5 o! ~. _! f, Y
  577. //        if (nResponse == IDOK)5 ^* [+ I, [; j2 z
  578. //        {
    # m, M" j& K6 E
  579. //                // TODO: Place code here to handle when the dialog is
    8 i6 Z, S# Z. A+ X& k" u; v
  580. //                //  dismissed with OK) e0 ?( K- Z3 p0 }$ a0 R' W1 r% w4 k! p
  581. //        }
    - W; e$ C. s7 ^+ ~( _% G* j
  582. //        else if (nResponse == IDCANCEL)
    / p! f5 A% N( V& E0 r
  583. //        {  D3 p( V' R5 G$ x# U! q7 U
  584. //                // TODO: Place code here to handle when the dialog is
    ' c' h1 q4 v! ~
  585. //                //  dismissed with Cancel
    * d8 T/ @7 b# [# P: H
  586. //        }2 V3 x4 d# i; h& w& R. g9 z* m

  587. 3 c  A& ^' n# c
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    7 ~/ e0 {, k8 I% P7 D0 d
  589.         //  application, rather than start the application's message pump., o9 W& f+ o9 W8 i' b' o
  590.         return TRUE;
    2 ^0 r: t4 A( |. j3 C# G
  591. }* e' L2 s6 x! U5 P' \8 i+ U

  592. / c1 P6 h2 U/ q* ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / T" n. D& b2 c* r0 M
  594. {
    . M( t$ T1 m- |; v, K' Z
  595.   int i;+ k. L8 s  g9 ]  L3 z; n8 A, b, ^3 y
  596.   char *szRet;* P4 @0 y& R, |- G6 L7 p

  597. 3 h* ]7 m$ @" F4 C, Z) ~
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ( s! o  I, z: |% J7 p
  599.   if(sztoken)
    5 c  Q# t# {! I( x1 F
  600.   {( A! M6 p! U( k: g4 Z& {/ |! @
  601.     szRet=&sztoken[itoken];: ]9 j) k, w+ e3 G* D5 n! Q2 m
  602.     while(sztoken[itoken]); m- v4 b2 B( A3 p  r" m
  603.     {4 a6 j$ s- j/ U# E; I/ v
  604.       for(i=0;i<(int)strlen(token);i++)  c3 J. T1 l- B& {0 p/ \, Y" ^
  605.       {' X6 Z% W( L; o* ^$ D" }
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 y7 N/ f1 d7 W4 u
  607.         {/ U  J! M( X+ e# X3 f) P
  608.           sztoken[itoken++]=0;
    7 W4 d3 n9 ^  a0 c' w
  609.           sztoken[itoken++]=0;
    ( y6 V( i) F* m8 G& f3 T
  610.           return szRet;
    7 k" G! W4 W+ U
  611.         }* G' {; l9 {; N7 N% H" D8 Z
  612.       }1 L2 v4 m5 V/ e* B- M; h* z9 G
  613.       itoken++;
    - `8 B' I* ~* b9 P: I
  614.     }
    ; o" A; |/ q; Q
  615.   }
    : i) M; c, z6 H
  616.   return NULL;
    ) ^/ H, k& `- g  p! R0 P/ F6 o
  617. }
    ( T. s/ @! O& d: y7 C+ L: l% r
  618. : J' s, g: ]8 Z) o
  619. void ProcessProc(long Total,long Current)- i$ \, ^1 c+ X& p
  620. {. Q( P0 q1 S4 F6 y, Q) A
  621.         MSG msg;
    . ^+ V; O) g) w+ B7 R. V6 _
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    7 O( ~+ M2 I8 ^% D4 E
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    9 I6 k2 W7 k9 e4 T9 n: I$ g
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    * X* h  P4 C$ ~; k. I$ R
  625.         {4 o  I/ N: ]! a) Y
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! Q* ^6 ^1 J5 f; D9 k
  627.                 {( b9 A8 U' d' c: ~& t5 n
  628.                         return;
    3 J6 Y& n3 A- _3 M$ T  C
  629.                 }
    4 c6 Z$ c# _. D  h4 V- F
  630.                 TranslateMessage(&msg);
    # F8 A/ p5 z4 S. W6 m* J) O
  631.                 DispatchMessage(&msg);6 F8 g1 {2 w: B% ~5 Q; @
  632.         }       
    6 G3 f1 Z3 p" L9 M- V" r3 S7 s% J( {
  633. }8 y; T7 O6 J* {0 M6 E

  634. % x" w$ M5 z( @
  635. BOOL bFirstChar=TRUE;
    & I- K$ P* X! H# @, r1 g& L

  636. 1 F: \; q# ~7 M3 M0 j8 b7 t
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 W( g. R( x$ h% E/ X
  638. {2 e7 L+ B/ |% G9 h! ~
  639.         // TODO: Add your specialized code here and/or call the base class
    ; q- W# a* Q6 B, m4 f) v
  640.   switch(dwProgramState)
    & S, l) R. u# F4 ]4 y* F
  641.   {2 N$ g' p- D+ a) O) Q* x% F+ Y1 b
  642.   case AP_NOTHING:
    0 _, m, ]/ A2 Z" j0 O
  643.     switch(dwStartUpSteps)
    2 W' u: u) H  \4 D. N0 `
  644.     {
    ( {) G7 }3 R, i  X( a
  645.     case 1:
    2 o+ @4 n9 _8 T
  646.       {
    8 t# R! y8 U9 j' I: g
  647.         int i;  `, Z2 m( S% r# O& D' a
  648.         CDC *pCDC=dlg->GetDC();" `( J, Y2 L6 h8 [" g5 h* o: b
  649.         HDC hdcwnd=pCDC->m_hDC;: @& s, C  ^! U! m* p6 O
  650. //        Graphics graphics(hdcwnd);5 T' v3 r2 a& J# H9 N- I
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
      n- u. j- [6 S8 z4 m9 ]$ Y
  652. //        INT iWidth=bitmap.GetWidth();5 _4 t- Z0 B- v) ~' o8 ~
  653. //        INT iHeight=bitmap.GetHeight();( `. z# c0 c4 ^. J2 W
  654. //        Color color,colorTemp;9 S% I- `. y- A
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)) e) E$ y1 B. j8 V5 {
  656. //        {
      x& d5 r% Q5 s7 p* b9 {0 B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    & |- [) v/ |6 \/ y4 j2 O
  658. //          {+ ~1 n- A) o# F8 e% @) K
  659. //            bitmap.GetPixel(iColumn,iRow,&color);4 r& F) |! J7 K4 P
  660. //            colorTemp.SetValue(color.MakeARGB(
    " S+ i7 l- V) K2 s1 O5 `$ @0 j
  661. //              (BYTE)(255*iColumn/iWidth),( ?: J9 H( v, d. D0 ?  V
  662. //              color.GetRed(),# C) x" o4 n  }# p" K) X2 ?" ?
  663. //              color.GetGreen(),1 F' b; }9 w& D9 s' A
  664. //              color.GetBlue()));
    8 V) M5 Y8 f, n; r
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ' e# Y6 ~0 q7 Q" ?' @9 a$ u: b
  666. //          }
    6 T# \8 P% g9 z* N' `0 n; v
  667. //        }! V% T( c+ o" J" [
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    9 ?/ O4 b, X8 y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) P) ^" T" y" e1 @$ [
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    7 Q) d; L4 t3 o# H# H! B3 r" ~
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ T- B( q5 r% k( g3 z1 T
  672.         for(i=0;i<240;i+=8)4 x: P% |5 ]% V+ A2 e4 `
  673.         {
    / ~" W+ d7 K5 n: ?( {+ A/ u/ t
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ E. o  Z% x0 Y1 E) q/ A6 Y5 k
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 d* W0 \2 s# m  [
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; }7 \  `: J- e' h' J
  677.           Sleep(33);: v4 B1 g0 @; Z$ [
  678.         }
    ' q9 S! D. I' r$ ^
  679.         Sleep(1000);* s) |' G  J) d& j
  680.         for(i=240;i>0;i-=8)
    8 Q: E5 Y% f1 e: K7 k! J
  681.         {
    # s* H6 B/ U5 l+ o9 d' V3 t. C' M5 {
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / T' W. }" R, g5 p! K
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! i/ R, U, W# R+ z! s( R
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - x) e$ J$ O% M  |; Z7 K' C, r  P- R  ~
  685.           Sleep(33);/ a6 q% T2 e3 R8 w9 p5 r
  686.         }: ]6 n- [+ g) q' R( l
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ! T# M6 t4 l. J4 v9 C
  688.         dlg->ReleaseDC(pCDC);
    3 }; B9 O* l# ^! V) @
  689.         DeleteDC(hdctar);/ n& [, P9 w0 a! C! _
  690.         DeleteDC(hdcsrc);9 ?$ D! X% |. Z2 E/ N4 ~
  691.         DeleteDC(hdcorg);  I* T% q9 I6 ~) E# ~& ^2 w
  692.       }, \6 T, Q6 `+ R% y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 j7 L! i, V, U: h
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    / k' t7 k  A% E# V) V4 E4 b: R
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");& S4 l4 n7 e" r0 c5 T2 R
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");# _3 p# z9 C) a* O( L
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: X/ Y* k* L# j
  698.       if(!Dn.Connected())6 C+ v3 K5 D- r' c  y/ B6 s7 c# n
  699.       {! _( F( F6 ?! O' B5 h
  700.         dwTotalFiles=1;( Z- `' x% _0 p; Z' E" e$ m5 T
  701.         dwDownLoaded=0;8 U; ]$ K( R9 {* J1 w
  702.         bSilentStep=TRUE;
    1 d$ ]) d5 _2 m1 E
  703.         bCompressed=FALSE;) t3 ?& R( i. f2 W& R) w* \
  704.         strExtLocal.Empty();- d: y* S4 Z& M2 d! l5 ?$ B
  705.         strFullName="readme.txt";9 \( s, u+ P* B
  706.         dwProgramState=AP_CONNECT;
    - F6 a4 T+ h! M9 y
  707.       }
    0 P8 L$ X4 O5 P# V7 C
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();' K- z2 h4 m1 `, d0 y( r% Y
  709.       dwStartUpSteps=2;
    6 _" f% L0 T8 Z' L9 k
  710.       break;% `3 T& L% L# j* q  j+ Q. |
  711.     case 2:" w& m1 R$ E( s$ V# p" ^
  712.       {
    . O& N& o! f( f% u6 N
  713.         int iEOF;
    4 H5 S- ?/ P- Z  m" c( I' W
  714.         FILE *fp;
    & B) c" I. `. ]0 q; _  ~
  715.         char szString[512];
    ' B8 ~5 ~) g! h2 b& L7 h
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");! |  R5 n! O% J/ H6 q" q: A0 ]
  717.         if(fp). ~- R* E3 [8 w! z* `$ J: O+ N, Z0 ]
  718.         {1 p- h/ V' M: p/ P' J+ W
  719.           do: F9 C9 @0 i  [  w6 B3 `1 D
  720.           {+ E  `& M9 M5 c; |9 l( m( W1 |! f
  721.             iEOF=fscanf(fp,"%s",szString);
    " z1 K% J$ j! E# v2 k) m( R
  722.             if(strlen(szString))
    " @9 @; P0 i; t3 {
  723.             {- K. F, U4 d/ E; M7 j8 O/ H
  724.               if(bFirstChar)* g+ U5 w1 z. Y
  725.               {
    / g/ [2 c, I. g9 C/ Z; T3 N2 {) H% ~
  726.                 bFirstChar=FALSE;
      m+ g3 \4 h7 A1 K% L% o. N' ~
  727.                 bConnectIsBig5=FALSE;$ R8 h2 |: G; G6 @& t3 O0 G8 I! D
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    - X2 ~$ q/ D% I( D% W: k- F; c2 ^) Z
  729.               }
    4 |& Z2 s' S3 e5 q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ) d4 T5 e/ t  s3 M! u2 z& u7 F3 ~+ z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));7 |7 `5 y+ \5 t& T
  732.               dlg->m_ListText.AddString(szString);8 c( S: o* \) j9 L4 V9 s
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' F1 }6 a2 j- I5 _. W4 v( H5 @, d
  734.               *szString=0;
    # u5 a. Z/ j8 ?6 j
  735.             }0 F0 q3 ?$ d4 h
  736.           } while(iEOF!=EOF);1 N4 b( T. k( g1 u2 `3 e
  737.           fclose(fp);6 o$ v" d' m4 R5 L+ q* y& C$ u
  738.           unlink(".\\DownLoad\\readme.txt");" S. u9 p/ @$ s- h+ s
  739.           dwStartUpSteps=3;
    ( Y- [9 G2 ?9 u; d9 i) p$ v* q. v. X2 d
  740.         }
    $ M3 ~6 v( `& H: T; ]6 p8 J
  741.       }
    & Y* l  r( \$ m6 Z; u
  742.       break;
    # Q# Z* O5 Y$ F  Z: _  l+ e
  743.     case 3:3 z; P" k* R7 m5 q, X
  744.       if(!Dn.Connected())
    - p$ J; q9 L  p. }; }0 l# ?& j4 }4 t
  745.       {
    8 o6 ]0 s+ d* o6 ~0 u
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);# I: P3 B: _* j1 ?! G6 `0 Y
  747.         dwTotalFiles=1;6 ^# @- H: g. s  r; ?( _
  748.         dwDownLoaded=0;/ f; l7 F- h4 Z6 `0 D
  749.         bSilentStep=TRUE;
    ) {3 b, _( F' r8 }
  750.         bCompressed=FALSE;
    + h+ A2 i3 k  t
  751.         strExtLocal.Empty();; ]4 s: G/ r! o/ n' ^
  752.         strFullName="checkversion.txt";
    : ]/ Y$ e' j( G" e
  753.         dwProgramState=AP_CONNECT;
    2 q0 p# |2 A: R* k7 D) l
  754.       }5 E# K+ n& Z, Z! @9 ~. \/ Y
  755.       dwStartUpSteps=4;
    3 U. h: l8 X; g& m
  756.       break;8 ?# H  J* c4 K- {+ k+ x* G
  757.     case 4:
    2 \$ E# r. u; `% F! S  {+ f0 y' e
  758.       {
    5 u4 l) a+ Y! l* Q
  759.         FILE *fp;. ~8 G6 V0 a: K' |1 C. }& o
  760.         char szString1[128];
    $ Q  p3 Q3 i# d% [! E
  761.         char szString2[128];4 w  W6 ?  K+ ^6 K6 [6 n6 R
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    6 E& |  S, g0 {" |, M1 `
  763.         if(fp)
    ' m- m. Y( M; L) h
  764.         {, H, g5 B$ _" n- A+ [3 ?+ F( T$ S" Z: E
  765.           fscanf(fp,"%s",szString1);1 K! K: ]2 @6 Y2 ]2 L5 k8 r
  766.           fclose(fp);
    3 o' w7 R8 m/ m
  767.           fCheckVersion=atof(szString1);
    ; Z( ~+ L- B: _/ p
  768.           fp=fopen(".\\checkversion.dat","r");  C" j% A' b4 Y
  769.           if(fp)
    5 x" G1 n3 H' {/ _/ R
  770.           {
    , c' I5 P" _8 t# y$ q. n
  771.             fscanf(fp,"%s",szString2);
    6 \  S5 S6 K# b# j
  772.             fclose(fp);: D: s& e8 u: S4 T! d9 o) `
  773.             if(atof(szString1)!=atof(szString2))0 I& u6 l" p& Z' M% B' F- }: A) q
  774.             {$ S6 S" Y/ P# e+ l2 w3 ^* q  ~
  775.               if(!Dn.Connected())
    & L9 b/ v" f4 }$ A2 C. C- M
  776.               {
    5 c# e' P6 g# s& s
  777.                 bFirstUpdate=TRUE;
    . I. ?4 t# {1 }& g& U/ V- `
  778.                 dwTotalFiles=1;& i) K% z4 m0 k% l- q) d
  779.                 dwDownLoaded=0;
    - q9 M8 _/ P- A' n% h
  780.                 bSilentStep=FALSE;
    + f/ j0 x$ M2 m) `
  781.                 bCompressed=TRUE;
    2 e3 J7 c# z7 b5 M  h8 Y# W* P" q
  782.                 strExtLocal=".\\DownLoad\";
    , U+ @9 L) I% O0 L
  783.                 strFullName="update.txt";
    + F0 c) {9 Q4 v( K2 n4 e
  784.                 dwProgramState=AP_CONNECT;
    ; i) v% K* e- {2 }
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " A- _. s! |. Q! a4 t! }6 t
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      N/ ]9 b9 I' X. p( M5 ~
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 q3 R9 x* X$ C6 ]( M
  788. ! I$ r$ b$ T+ @) m- ~
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " E* \! k. c- _7 n3 F
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    8 R; `: [. g' ?
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)/ x- f& w3 q5 J& o6 h- b' C
  792.                 {  r, C* w! i4 P- |. z4 _7 F
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");7 o) E+ q: P& d+ y2 y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");+ q6 f) F. v. P5 z8 u9 G
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    # u- Z/ H: O: `& J5 Y9 h) `9 ^
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " T8 D) t* L" `- F+ R3 V
  797.   R+ {+ y" t, O) S
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! e- Q) |4 w5 J8 x4 \* L
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");8 B2 U: O$ v4 D- X' y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");' @. l" ^: C1 [1 R4 \: l
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 y. K. N1 ^0 A" z
  802.                 }" o! P7 c* p: T& P$ f
  803.                 dwStartUpSteps=5;: o5 B4 d# t3 u% n: J; [
  804.               }
      n) y' [* n" Z- t! M. K
  805.             }! V' Z/ K+ P& i& y
  806.             else5 Q( G0 }' x0 C
  807.             {, O, i9 a6 c1 k; ~! W
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * p! W3 p, a0 g# O8 \5 f
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");1 Q+ K) @6 P- Z: u6 ]) }! {! Z+ Z' c
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 W9 ~  {9 k  e0 T
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");. e/ n& l; h, m# E; C+ V4 j9 Z
  812. + E# Y* r0 f: X: Z0 K
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' E& ^& P4 L  b: Z# F0 B( o
  814.               dwStartUpSteps=99;& \& L8 J! q( F. T! X& H
  815.               bFinishUpdated=TRUE;' {6 V" u8 y9 B# E+ }; y
  816.               bCanUpdate=TRUE;
    7 T7 o& `! w) B$ f
  817.             }
    ! m6 X4 p: W/ r2 ^1 E
  818.           }. Q3 v2 h& z+ l3 S! X8 v
  819.           else
    % X% }7 N8 m9 U7 ~# D" M
  820.           {. b  {3 h# X# H! {$ R
  821.             if(!Dn.Connected())" R* B0 r3 V* Y4 B7 r
  822.             {7 o! Q. I$ ]# G% Y, `  c
  823.               bFirstUpdate=TRUE;4 Y* F# l4 j, P1 n7 u9 {# h" P/ u
  824.               dwTotalFiles=1;
    , }. y% I, `0 ^
  825.               dwDownLoaded=0;+ z4 Z1 \5 g- N
  826.               bSilentStep=FALSE;
    + @( B# n. _6 _
  827.               bCompressed=TRUE;
    , K- `" o, r. a4 Q) V
  828.               strExtLocal=".\\DownLoad\";
    0 m  g& L( P, K/ V; e/ R
  829.               strFullName="update.txt";) G9 t$ ~& {2 w4 R/ U8 q3 E- o! X
  830.               dwProgramState=AP_CONNECT;. F: c" R, s" R/ \; \8 {" ?
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. g) B3 T  J: a# M
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - X) _% P3 S3 g( u9 }
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / [6 t4 L  F* ^$ q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 \7 q" w  l! V  Y7 J; i
  835.               unlink(".\\DownLoad\\checkversion.txt");
    2 ^1 @, ]* p) j' u5 f8 D
  836.               if(GetFileAttributes("Wsa.zip" )!=-1): G, m1 J8 ~; I0 c/ H+ x7 h
  837.               {
    - G. u  R* w+ k4 Q+ j
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");2 z4 t- r8 A# M3 ~0 |2 C6 M. i
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    6 x0 t: V! Q( h7 ]% Q7 U  W4 {# N
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    . m9 O" H6 B7 i& |9 p' ~# x
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 K/ G# P! f1 E+ `8 C& t+ o
  842.                 " W2 G8 ~, T! o7 @
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ e' a4 c+ ?3 n0 s* v4 m- g2 @" H  P
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 u- X3 p' N; k/ L7 v+ P
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 V  c" E( N7 a" [; j- T( E  R
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 w$ r( T* d: d, a/ j
  847.               }" C; ~& b. h/ ]. C! _, q
  848.               dwStartUpSteps=5;5 Z" B* ]; }. ~: y" }
  849.             }3 a! T; e5 `% s+ K2 P
  850.           }
    ! u' ~4 n, I! [0 |* ?' Z/ }8 l9 E
  851.         }1 x+ R. n4 b6 I
  852.         else
    ) ^# G5 j4 Y4 T
  853.         {
    1 h1 a1 L( G/ R
  854.           dwStartUpSteps=3;9 ?5 k& v5 P2 o+ v7 w1 O6 x% J( @
  855.         }
    7 @, V( r" c% u* c8 s
  856.       }$ |  Y) {" X+ j) \' B
  857.       break;
    ( S8 W+ b0 t8 w0 ^& p% Q9 q
  858.     case 5:
    1 d+ A0 T: j- E
  859.       {
    3 C, b+ Y, m" J$ v' N
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    2 b+ o9 I% |6 {+ C" C- ^# E8 A
  861.         {& Q1 M) Q( e* C( I; V
  862.           int opt_overwrite=1;
    4 H. ?6 U$ k/ I) D* U9 c: Y2 L3 a0 @
  863.           int opt_do_extract_withoutpath=0;
    . d, u0 e  q* Q" |6 ]
  864.           unzFile uf=NULL;
    ! P/ a& t& Q; X4 W7 `
  865. 1 ^& B& f1 o1 {- I0 b2 f6 V
  866.           uf=unzOpen("Wsa.zip");6 h& O3 c1 r' \# U  P4 H" i/ |4 g
  867.           if(uf)! D) j* ^, B1 [  ], R
  868.           {4 w; b& a6 L, N  D* c; c
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    4 v" l: p; e7 P
  870.             unzClose(uf);
    + p3 F+ U, ]9 f% [& |
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# h& L$ B1 ^) i9 o: S
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");0 n  ~; S, X7 T# ?0 h8 {: L& s6 I
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ' Z1 g0 K) y3 S
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: t1 |7 ]1 _0 K4 [! H8 Q" p
  875.           }9 U4 j! _+ L& d& f( }4 y& p
  876.           DeleteFile("Wsa.zip" );
    ' ]2 e6 s/ Y( K+ o! U, Q$ i- d- O
  877.         }; E0 z% M& A( W. X

  878. ; _/ _9 a: a6 o- Q8 D; `
  879.         if(CheckLocalVersion())8 B  w. C# `7 V3 \. ^
  880.         {
    9 c& D4 E2 h: b
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    " P% Z* Y" ?% H6 C" B0 M6 R
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");1 ~$ T# ]9 \( X% v! e# e
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");, N/ R4 I; E* d' T# d0 @
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! T2 A  Q! U% l$ }$ `
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);' ^3 G- a! X7 q4 Z2 C0 b8 f$ O5 H
  886.           dwStartUpSteps=99;8 n/ x2 e' q  Y5 k, M
  887.         }
    . _' W, M5 ^; A! U3 r
  888.         else
    4 g" v: o1 d+ u6 f
  889.         {
    0 w& m: V1 k+ O: F) |# T9 c! J
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  i' i3 X# M3 \) ^
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : G; ?- s8 D3 x$ A6 C
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 f& k4 S9 B8 T! Q! c1 F1 q

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

$ |4 I5 y: Y& B& v
' _8 g1 Z  ~- q

評分

參與人數 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客服返回頂部