找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
, O+ ^( M/ Q+ r- m) i
  1. / RevApp.cpp : Defines the class behaviors for the application.
    $ f8 p% z7 J! n( i- L7 Q
  2. //8 d3 S, R% s/ C' d  }6 i# N  y

  3. : r  O6 s# w; ~  P( ?
  4. #include "stdafx.h"
    & w8 @; M! D: u" Q2 R1 `8 O7 l

  5. 3 R; ~4 o9 u. p: M4 q& s
  6. //#define UNICODE$ q$ \0 K9 S: C" ?5 i! b% v" o
  7. //#include <gdiplus.h>. N$ A$ B# m9 g- C
  8. //using namespace Gdiplus;
    ; \8 y" s& k( V8 Q7 _: ]  p/ b1 L3 H

  9. 7 o7 w6 ]) D% O+ ?1 W7 w: G
  10. #include "RevApp.h"; t$ c  b2 ?3 t# G3 u. ]( z
  11. #include "RevAppDlg.h"
    ' E+ y2 f; M: G6 g
  12. + C2 Z  D& C, R& d; j; f# V
  13. #pragma warning(disable:4786)7 C# e8 @. B8 V. @+ c* v
  14. #include <map>
    & F0 ]( l. e2 Y1 ^: J) S
  15. #include <list>; o8 q5 {+ A' p, u5 T9 w3 q  c
  16. #include <direct.h>
    $ _. y, M  G2 r: J' Q7 c0 O

  17. ; @& F& ]( [, N* \1 Q
  18. #ifdef _DEBUG* e5 F4 |3 i. `
  19. #define new DEBUG_NEW
    # @7 I! ?2 @9 h
  20. #undef THIS_FILE
    9 s4 t4 j  j7 e; y+ F3 o& T7 N% l
  21. static char THIS_FILE[] = __FILE__;
    + }+ k" J' P" ^1 B) [% P4 {
  22. #endif
    5 c( e( i! D, [  R
  23. #include "SkinResDef.h"
    ) E( Y* X5 |# F" ~% j# D1 `: w3 Y
  24. #include "ChangeBG.h"
    6 S5 P! v2 f2 b* u
  25. #include "AFXINET.H"7 W* ?: b! F" ?" L0 ]

  26. ( z. B/ u; `/ R3 A
  27. #define TRADITIONAL_CHINESE 0
    8 y7 b. ]7 [; {  i) H2 f0 j
  28. #define SIMPLIFY_CHINESE 1$ d: _/ n- K  f5 r  l8 i" b
  29. #define ENGLISH 2) v. H. x1 y# g3 q7 t' T! O& @
  30. int m_iLanguage = ENGLISH;% [8 @  \5 i% ?
  31. /////////////////////////////////////////////////////////////////////////////
    ( `. _1 j; k) j8 \. r! Z8 l8 s' c$ D! c
  32. // CRevAppApp
    5 d) j0 a; D3 R: T
  33.   F( U1 t4 z; m+ e# v
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ; |6 y" t! X6 ^' e  k
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) j9 p  V6 M' [! B% o1 J
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 ^: @) y1 j7 Y
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!  J0 \2 K3 @- z( Y" p7 d& C
  38.         //}}AFX_MSG
    6 B8 @- L( a8 x$ o
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)! l) w( L3 Z2 P- o
  40. END_MESSAGE_MAP()
    6 B* F% y# X3 L5 I4 X4 ?; \
  41. ) ?) F2 y+ L* C& Y. X1 ?9 R
  42. /////////////////////////////////////////////////////////////////////////////$ V( n& T. i; R! u. r( h; a
  43. // CRevAppApp construction
    7 p) i0 a. r( q- `9 a
  44. - b0 w* {& I* H
  45. CRevAppApp::CRevAppApp()/ T* U8 {: ~1 c% M* [
  46. {$ \% M0 Q7 r6 b7 s; h* c6 `: h
  47.         // TODO: add construction code here,$ P: R3 }7 ~" a0 s7 [$ r
  48.         // Place all significant initialization in InitInstance1 F9 Y( q% b! ?/ K
  49.   bDisplayIsBig5=FALSE;
    # S( x3 d: _5 A3 |
  50.   bRestartUpdater=FALSE;
    1 ^2 U* C1 J1 \5 N; s" \$ B
  51.   bFinishUpdated=FALSE;6 M" _: e7 x9 Q7 l/ ]
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ z6 `: D6 h) D9 h  @
  53.   InitChangeDataBig52GBKS();% {- t) f1 u, Q$ L" T
  54.   InitChangeDataGBKS2Big5();% ]4 b- J4 \, a& j
  55.         //
    9 S  @$ d% N! J$ o: X0 M' d* f8 w
  56.         bClickRunExe = FALSE;
    * \0 E9 I. s8 Z7 g2 ^- }/ s
  57.         //8 m9 L8 {$ C5 g* n
  58. }
    5 h" d, z, {8 e
  59. ! Q. d$ l% d) Q  x+ I9 E
  60. CRevAppApp::~CRevAppApp()
    + ^2 F$ M( X; L6 i! V/ P
  61. {
    & \& F- {4 ~- i+ Y4 \6 j  }; u; H
  62.         // TODO: add construction code here,2 M( }. R! s8 {. e; b0 e0 P
  63.         // Place all significant initialization in InitInstance
    9 o2 u8 d* c5 E( l7 J: \6 W
  64.   EndChangeData();
    " ]9 r  i2 q3 M9 t4 c  s
  65. }( E9 ?7 ]( E0 W8 `+ [* A2 V

  66. : T8 T* }: f/ ?$ c; h  f6 P3 x
  67. /////////////////////////////////////////////////////////////////////////////& \9 O; Q5 E. H1 T% _
  68. // The one and only CRevAppApp object# Z: ~, C! n% ~2 V. c/ U  a

  69. ; B+ @0 d+ w1 n% Y8 N  |& V
  70. CRevAppApp theApp;
    # D8 D0 D/ J' F% [2 E: X) S

  71. % U! G6 v- g, ?% t, c
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : A+ E3 g6 s3 m% F( q
  73. {1 k) _5 b0 s; Y, O$ Y( C& P& u+ b
  74.   int iEOF=0;8 S; q2 e  I+ C1 l: B8 [
  75.   char szTempName[MAX_PATH];2 ]) Y# h" {1 P: q- e9 {* A9 @
  76.   *szFileName=0;
    4 O/ Z! M7 H7 O) j
  77.   iEOF=fscanf(fp,"%s",szTempName);0 P1 X* Q* z6 }3 p
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('); k, j& L( w# Z9 B4 v* A1 [4 c
  79.   {
    ) b9 a  y* O( s- d7 @+ ~, m
  80.     strcpy(szFileName,&szTempName[1]);' x$ L; |& p# Q1 p1 \) b
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)1 o! D0 L+ e1 [, W
  82.     {
    9 r# T8 l3 m2 G" x" V& \
  83.       iEOF=fscanf(fp,"%s",szTempName);+ P/ h+ F* Z+ O- v8 z6 Q
  84.       strcat(szFileName," ");
    * x. q0 O+ W; y
  85.       strcat(szFileName,szTempName);
    ! P  e8 S1 \7 T& x) {% d
  86.     }  u' A4 q+ @( P) _
  87.     if(strlen(szFileName)>=1): I$ Y4 R6 v1 i( C" f9 T
  88.     {
    4 Z2 B7 W  f; l$ J% b+ n
  89.       szFileName[strlen(szFileName)-1]=0;
    $ j& s- W! t1 o
  90.     }: Z4 N# O( T. t7 d8 ]1 G
  91.   }. U( E7 k1 g/ D8 @  l
  92.   return szFileName;
    # w+ X- |3 d  v6 L- c4 c' N9 H% b# @
  93. }+ e- K3 l2 P5 f/ g2 c, i
  94. / ~# _) F; I' V' \, z5 Y; W
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ; U0 j3 P7 q" |# O# u" f
  96. {
    & j& |4 B" h' H
  97.   FILE *fp;! t7 b! R" V4 U2 x3 ]
  98.   char *key=NULL;
    1 X: E; J, g  U( w6 Y, }
  99.   char version[MAX_PATH];
    5 T1 R4 c* Y$ m# x: I
  100.   LPUPDATEFILE file,olds;1 ^' t" m! }, ~
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & Y- g0 x$ a5 `5 O" h
  102. ' |$ Y; A, R( w
  103.   UpdateList.clear();8 W( E: X0 J& @5 F( `5 F! m
  104.   UpdateFile.clear();4 l! K# J) }  o) @. M6 {
  105.   if(GetFileAttributes(filename)==-1) return false;
    8 G1 h# z" P" @/ J& m# Y
  106.   if(!(fp=fopen(filename,"r"))) return false;0 i) ]$ L3 i  y9 ?9 \4 q; I/ C! R
  107.   fscanf(fp,"%s",version);6 q/ o9 V7 l+ {
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- G: [; m# R8 v. A+ B
  109.   while(fscanf(fp,"%s",version)!=EOF)
    8 U& R# w2 J4 z, Y
  110.   {
    8 j; ?5 K4 C6 H9 X: Z/ I3 I
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & ^& x& I/ n6 y  c) p
  112.     fscanf(fp,"%s",file->path);
    . |6 w; u5 F' k$ ^
  113.     ReadFileNames(fp,file->file);
    % \' Y4 V# H. q$ N$ e
  114.     strcpy(file->full,".");
    % J: j9 q9 W' O) W8 d( `% A
  115.     strcat(file->full,file->path);, K( y5 W9 F7 n5 `/ U
  116.     strcat(file->full,file->file);
    + Y- E6 @2 r! o' X- O, b' v
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
      Y' D3 {" J% Y7 e1 u  c
  118.     {) A6 V: c& @: }- O
  119.       file->vers=(float)atof(version);5 ]; h2 F. h6 k9 G' Y( l: n
  120.       UpdateList.push_back(file->full);
    ' E+ v/ |8 U2 I  t. A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    7 V0 L( D/ r' u, a
  122.     }
    ' J% k8 i  n& ~4 h
  123.     else
      y+ X: L/ B  ]+ o& p
  124.     {
    & {: U+ {% |/ f2 X. x$ B) ]! |) d" `
  125.       olds=(*p).second;# u% T# h. N& T1 D& Q
  126.       if(olds->vers<(float)atof(version))8 X) }1 L3 C# a2 q# f
  127.       {
    ) g; j" d3 W, y$ @! E- Q8 W
  128.         olds->vers=(float)atof(version);+ A4 o% `/ ]# k6 s4 R( v
  129.       }
    ) ^8 F! d8 H9 C9 X$ Z4 j& u# w
  130.       free(file);
    5 ?$ \8 ]1 f- H$ R
  131.     }) o% c4 }* @: |- u% \$ x
  132.   }
    * c, R: W$ J0 S5 r$ g& A4 f
  133.   fclose(fp);
    1 Q6 O3 X- ^- M/ `
  134.   return true;
    / I- ^0 [2 X: H% z; n
  135. }' M0 |9 ^9 K1 b

  136. 7 r, A: r2 n1 t8 ]6 U# f
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)- A1 a; c2 S6 S
  138. {
    4 A7 g3 ]9 p0 j: [# |* n" w
  139.   TCHAR  szFull[MAX_PATH];
    6 p$ A3 G3 F4 Y; V" ~) s( ]
  140.   TCHAR *token,*inter;
    . x  k' F0 r1 w% i: }* |. K5 }( D  L
  141.   *szPath=0;
    $ l1 _8 z; ^9 h# @/ E
  142.   strcpy(szFull,szFullPath);
    4 R0 U; `6 d5 e9 T
  143.   token=strtok(szFull,"\\/");
    ' U4 y" [2 D# f2 j( ~
  144.   inter=token;
    2 m6 E( m* w- @
  145.   while(token=strtok(NULL,"\\/"))
    & t# d! Z6 H$ C
  146.   {: w5 H3 ~% U% O: }% k1 C. a
  147.     strcat(szPath,inter);
    - o% n2 N0 f# C+ @/ b* C
  148.     strcat(szPath,"\");$ d& g' s& E4 t" i+ B
  149.     inter=token;
    + U; V0 {( y; I( c
  150.   }, T: A, j! H! y* o6 B
  151.   return strlen(szPath);
    ! k: F9 d) ?+ t3 y# g
  152. }
    % C1 [9 B# a' U- X5 |
  153. ! U4 Z! l: B, ~8 a( w4 m1 Y5 e
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    / \8 }/ A! ~9 o1 @9 b1 }- K
  155. {
    # P% ?  W- P. t
  156.   DWORD attrib=GetFileAttributes(Target);
    9 {  [" q/ F- z5 b; w! c
  157.   if(attrib!=-1)2 p% {5 Q% s" ~: b# |. k- M
  158.   {
    & B' w2 F; g; x7 g4 |8 b: S4 A
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))2 l# B) u& N8 c% I! ^# Q0 R) k
  160.     {
    % n! R8 g# N7 ?" l
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ( O# o7 q% J% A0 T5 C. f
  162.       SetFileAttributes(Target,attrib);
    $ j3 z7 c3 [' Y( E' h* F* Y
  163.     }# ~8 S5 E3 z- }5 g
  164.   }0 \9 x0 R6 z. H/ s
  165.   CopyFile(Source,Target,Erase);
    ) j) f/ S0 a2 v- Y( q  P$ L
  166. }
    7 b  l  W7 g. M. G# l% n
  167. 5 h5 U0 ~9 T5 O
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    6 i3 x# ?  z/ `9 Y; G
  169. {
    3 N1 {+ ]( v2 L2 |
  170.      FILE *fp;
      ]7 ~# x* ^% F3 ~: m; j
  171.      char  szBuffer[8192];
    5 K5 Q! q1 t2 v) F
  172.   va_list  argptr;3 F% ^$ A4 H! Z0 Q+ q0 d- p9 N
  173. & v$ a2 I6 O/ y9 Y
  174.         va_start(argptr,message);
    7 F" J% \; s! b5 s
  175.         vsprintf(szBuffer,message,argptr);0 d0 W% G2 V6 t
  176.         va_end(argptr);
    + L& v9 q, m/ A4 |
  177.   fp=fopen(FileName,"a");6 p* z+ A% P& m/ g
  178.   if(fp)! m3 ^9 O" D& L. t
  179.   {+ X2 p$ v" V- i6 z' ^
  180.     fprintf(fp,szBuffer);+ I! Y4 S) I8 {" z
  181.     fclose(fp);7 ]. n( U6 e2 @# E! v
  182.           _flushall();
    2 C% i" W' w" M3 O  m
  183.   }1 y- E7 V* D- C
  184. }
    0 B! m& g# I% h5 n# z

  185. ! v6 Y: ^3 L0 U( Y8 G. h/ r) u! F
  186. BOOL CRevAppApp::Fclearf(char *FileName). f+ [/ e5 {) @6 m3 q7 X2 W
  187. {
    ( u. X3 U/ s% X6 K) k& ]4 B6 [
  188.      FILE *fp;
    8 l/ b) S$ S- [  Y* g. ^. i4 c, N, G
  189.     DWORD  attrib;- v% u  f- W) H+ Q7 k' |
  190.   attrib=GetFileAttributes(FileName);9 C0 ]) @- F# {& |9 S1 A
  191.   if(attrib!=-1)) c# ]) z% o0 A8 p
  192.   {
    3 q1 l9 L& n9 E' @$ [
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);. r, |' T3 ]) D, {( e
  194.     if(!SetFileAttributes(FileName,attrib))
    ; f5 E3 n3 r$ b) A9 b. e1 c
  195.     {
    . q0 J) S" H2 Q9 x( b
  196.       return FALSE;& c/ u" E' n( F4 q9 `* U0 r- @2 {
  197.     }% F+ e! f$ d) `# x1 ~
  198.   }
    3 L1 U7 g; q; S
  199.   fp=fopen(FileName,"wb");
    4 A2 y' ^1 {& |+ L7 o
  200.   if(fp)
    ) L/ i  p3 E0 {! q
  201.   {
    2 L7 a" q1 \5 K, ~. r
  202.     fclose(fp);
    ; w& n( g* a( c0 t7 e* B. j
  203.   }
    0 ]: N, e2 L1 o, n
  204.   return TRUE;
    $ y7 h0 P( m* |: c
  205. }
    7 H! T! \7 r( o8 q+ G

  206. ( y$ a8 J2 r8 ~$ {0 R, U  \4 W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 ?$ J' X7 h4 w0 ~. w' w# l3 Y' w: N- l% E
  208. {# Q) g( _, S& ~! L1 X2 v: C) A( J6 U
  209.   char filename[MAX_PATH];
    , R7 J, O* D, M) |# F5 L
  210.   LPUPDATEFILE file,olds;
    ' e) ^# m* D7 |6 x" q
  211.   std::map<int,CString>::iterator i;' _4 ?# J: W- |; X
  212.   std::map<CString,LPUPDATEFILE>::iterator p;# N3 K6 p! J5 o2 ]2 R! @
  213.   std::list<CString>::iterator l;' P3 ~3 M) w# V
  214. 3 m( t0 q) z! F: n; N) y, d6 u. o
  215.   if(bFirstUpdate)' s( p5 \5 X) Y  a5 @% W: W4 _
  216.   {0 i1 s. t/ V: U  B5 [& {% J
  217.     dwCurrFile=0;2 F! c, h) L! K7 h5 }* k  }8 b
  218.     bFirstUpdate=FALSE;
    % M5 r6 K) V+ [9 k8 `+ I, S/ z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* T/ f! J& c* ^
  220.     {
    ( I$ o1 H' j: H. I1 C
  221.       dwTotalFiles=UpdateLocal.size();& n' y) c9 N  s
  222.       dwDownLoaded=0;/ I$ I% H& O2 {) O, x
  223.       bSilentStep=FALSE;
    ) V9 d) q1 ^7 K' r. s
  224.       bCompressed=TRUE;
    ! Z3 E6 P! Y5 e& p
  225.       strExtLocal.Empty();6 k* ?+ B! a; G; A: ~" F
  226.       strFullName=(*i).second;
    : C9 e5 D4 O' _+ t* q+ C
  227.       dwProgramState=AP_CONNECT;0 @5 y( S1 L' d$ b5 c
  228.       return TRUE;
    * X( S, l" ^( y; _1 w8 S. N% V
  229.     }
    2 }# @7 ^- G: u: U- W8 [
  230.   }$ R1 i6 y2 a4 ?. Q* `2 ?6 L  d
  231.   else if(bRestartUpdater==FALSE)
    # B/ j  }. z0 w( c
  232.   {6 I* b5 Q) t. D
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    6 n, f6 I% `2 y  F+ B
  234.     {) e" G8 P' j) s# x
  235.       file=(*p).second;
    " W+ J4 H; p; c0 t
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()), s. O7 T) h9 f  X; I
  237.       {
    ' O# ?9 z5 C3 Z. W2 y% c
  238.         olds=(*p).second;
    7 M7 P/ a0 R6 m1 R$ t: @
  239.         olds->vers=file->vers;5 N% z- }/ u8 M
  240.       }
    % Z' ~1 g3 H/ p- U( _
  241.       else
    % K+ ~+ b! ?( t. K7 g" q6 P
  242.       {
    ' W6 @, T) C4 w( O0 `8 u
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 o; N5 H8 [" Q' r, E+ b
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    : ^2 b# J% j' A6 b
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));' C* L* R$ m' j4 h! X% {
  246.       }( @4 c2 U8 v! f' T# U
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- O4 a. p3 S  i$ J
  248.       sprintf(filename,"(%s)",file->file);
    ! O6 u% ^* m9 ^; m
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 }) u, i# q- Y6 F5 Z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    , P% y' T# t. {5 L8 v
  251.     }4 g6 U* C  \1 E5 x( y4 O
  252.     dwCurrFile++;
    * e" H) e. F; {3 l" Q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 n$ f' j. A/ [; g* L* [! J5 I5 V
  254.     {
    8 J9 T5 g7 `( X* ~  h
  255.       bSilentStep=FALSE;- `: s, w1 \6 W9 i' O% R+ n
  256.       bCompressed=TRUE;( R( Z8 n# ]/ ]5 o9 }. X0 n' f" |
  257.       strExtLocal.Empty();
    - D1 @& x+ c' r# N, O& [) M: c( J
  258.       strFullName=(*i).second;4 K8 N1 Q3 N$ Y5 @; C% W- h
  259.       dwProgramState=AP_CONNECT;( q0 p* \1 K" _+ E6 O: |; O) c
  260.       return TRUE;6 @5 G6 ~; O$ |0 @& \
  261.     }
    3 k/ F& b7 W/ u
  262.     if(!bRestartUpdater)
    4 T. r* o8 }  H; B8 k
  263.     {
    6 P% k* q# z3 d5 {/ Y% c
  264.       int iCurrSize,iFileSize;, T& z: t- H, w9 z0 M) o& u/ e8 M$ N
  265.       iCurrSize=0;
    2 [; o( ]8 J  z  Z9 }3 \4 k  Y
  266.       iFileSize=UpdateList2.size();
      Y' G& J( U3 U% V8 ^
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % \9 h. T. f1 }3 }& ^
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");5 ?" y4 i0 z' ~  P$ G
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");1 x6 U+ t! h6 @! z) Y: k1 z  ^
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: Z; s' s) U5 _4 Z* h
  271.       Fclearf(".\\update.dat");$ G# |' G- d2 c% l! S. F; ?
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    2 K/ F9 B" y- W! ^
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / Z1 F- I# i" S) T, n
  274.       {
    9 H7 S  D1 T1 ?) P8 k( n
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    7 |7 q) ?, S4 `! T/ Z$ v
  276.         {
    - m" f7 ~7 v$ p, Q! K- W% g( H& A
  277.           file=(*p).second;6 Y; [& l2 D7 d2 c  q' q) T
  278.           sprintf(filename,"(%s)",file->file);
    ' e2 j* h. Z' o& s6 I2 m
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 c+ J* }: R6 M- I$ N% m7 ?
  280.           iCurrSize++;) N* m4 J' }2 r) L/ K( S. G
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    : y% s  V6 k; l9 V+ i( `4 c2 S
  282.         }2 y5 Q7 p. R) e4 G
  283.       }# j& c/ L0 [' j# o
  284.       unlink(".\\update.txt");7 z; H3 c2 D& \# u1 I  g8 x$ K% M
  285.       unlink(".\\update.tmp");
    ) u' N1 B4 B7 f: ?: w- R! W
  286.       Fclearf(".\\checkversion.dat");
    . b5 I& `7 y: K/ C3 N
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    4 _9 f4 R8 L  I" r7 ~. V; m5 \
  288.       if(UpdateLocal.size())
    + J$ |' {. b6 w
  289.       {
    # M& S1 E$ a( F9 f) Z! ^  Y6 |
  290.         UpdateLocal.clear();
    4 l$ r3 X& B/ y( _1 X2 ^; T& v. q( {
  291.       }
    ( z- Y# {9 n# o; l
  292.       if(UpdateFile3.size())
    / W/ i6 U9 s1 P( f" i2 ~7 Z6 K' ~( |4 k
  293.       {
    : {# T; u9 T9 p  ]3 f9 ?
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); q. r* N6 ~$ S- h; ^; k9 I
  295.         {/ W0 ^0 }: |/ G2 o8 s
  296.           file=(*p).second;; g5 S  z' A& e
  297.           free(file);
    8 _& u# T4 s, P% y+ E! G$ N5 f
  298.         }. q* ~* A, F3 g+ Q0 D
  299.         UpdateFile3.clear();
    ) G7 M! c4 Z4 n- O( R) s% b* t2 t
  300.         UpdateList3.clear();  Q4 ]  {9 k3 v# q: V! W
  301.       }" t5 x- M& v; D" R# V4 l7 D& f
  302.       if(UpdateFile2.size())5 f( X' V; c" M2 n2 V) @
  303.       {0 U& {9 ~) b5 t7 W; {5 F
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). M# Y; v4 E" R7 `( p* W
  305.         {$ ~$ S: f- U; S( l! e) Z
  306.           file=(*p).second;
    ( _4 l0 t, e8 W: B8 b- s
  307.           free(file);
    ; k, g% d1 z" _1 g
  308.         }) o* e" Z0 L' f& Y* m
  309.         UpdateFile2.clear();
    - i1 T8 z* m/ H( N8 Z; `1 n; `5 [1 ^
  310.         UpdateList2.clear();! ]& {; g# B; i$ A5 V, A( w" Z4 b
  311.       }/ ^3 B( a; {! ?
  312.       if(UpdateFile1.size())
    ; K9 b9 a) Y# V- O" l
  313.       {
    , d6 H, f0 b! }' k1 N) J6 Y- v
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 y* T/ \+ a3 n: Q
  315.         {9 }8 [2 T' m4 _
  316.           file=(*p).second;1 ]9 |: X7 D$ Y; p
  317.           free(file);; e+ t( L$ a/ v: }. {: [
  318.         }4 W. I$ z! U5 g6 ~: ~
  319.         UpdateFile1.clear();
      O% x1 s- n1 C0 W$ j
  320.         UpdateList1.clear();
    " p5 j# ]6 n# p' W
  321.       }4 ~  |+ x: h3 f, Y! T& L, A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    4 X& v: z' g) a8 P! t+ m1 A9 `
  323.     }; r6 y) S( a4 W
  324.   }
    4 h4 m( m2 h2 z6 L( q) Z  ?
  325.   return FALSE;
    3 {' j7 b, Y: y7 M. P2 V8 R
  326. }
    / G! c+ q$ h7 @% h" j
  327. " P3 T: w! F. D" H/ G, K
  328. void CRevAppApp::ClearAll(void); h0 v6 F( l4 m% l( t2 O8 [
  329. {, L3 X4 ^% Z+ w/ E7 p
  330.   LPUPDATEFILE file;
    & z1 L/ d0 ]1 `& m, g' w; O
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    / m( F% f5 s& n, P3 Y# \
  332. 4 C/ |4 [9 N+ ?: C
  333.   if(UpdateLocal.size())) g5 \" Z  C9 @9 f! n/ u
  334.   {
    2 j; ?7 v& h. t
  335.     UpdateLocal.clear();
    " o2 U3 i5 _) R4 J* [
  336.   }% Q+ {, v/ s; N' C
  337.   if(UpdateFile3.size())4 O) X9 F# v2 M% E6 p- }
  338.   {, u* a, a$ a1 Q0 C
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 w2 z3 n+ Z, Q: W, A& N1 @
  340.     {
    # Y3 H0 J+ t# q2 F
  341.       file=(*p).second;, U2 O+ H- O( W$ A
  342.       free(file);
    3 K: p0 M/ B0 U. r9 U
  343.     }6 \5 b+ [2 a$ k% }% x: g3 Y- z8 @  z
  344.     UpdateFile3.clear();6 Q8 @# j3 h( _) e0 f5 H1 R7 |
  345.     UpdateList3.clear();7 }0 E7 C  A2 C  ]: S6 w6 s6 Z
  346.   }: u/ ?% R5 d* M' J. \0 a
  347.   if(UpdateFile2.size())3 j2 {& {8 z0 S: E: }
  348.   {  }% l! x) G# Y) c
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ; h; c& k# R4 Q+ g6 p/ b' \$ F
  350.     {. W! G0 n3 g% W7 G
  351.       file=(*p).second;8 N( U( O* K+ v! L
  352.       free(file);
    6 d, i3 E( T8 O( ?6 g2 Y
  353.     }# z" I6 l  L5 a) t
  354.     UpdateFile2.clear();
    # ^0 L5 U6 g+ v2 f. l- W$ I
  355.     UpdateList2.clear();
    ' e8 X% L! L( S, Q) v
  356.   }& d  s7 g- z& f. a
  357.   if(UpdateFile1.size())
    6 [- A8 M0 Q7 o- G1 \1 z2 G, Y
  358.   {; x; M0 P" q0 K0 ^$ M1 X& J8 [1 L+ \' }
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' d9 w# L$ P( U& ?0 y: ?
  360.     {  W+ C$ B2 h! ^, `% U0 E- l( H3 M* X
  361.       file=(*p).second;% W1 X, k) }3 |# m1 P7 b
  362.       free(file);
    . c) g4 I9 [  X! B" n( y7 j  ~% _9 B) e
  363.     }; z3 d. ^2 F; j* y6 U
  364.     UpdateFile1.clear();
    + N. |% }' L8 j4 s$ Q
  365.     UpdateList1.clear();$ G* `% C( d$ P- i3 M. o5 a$ Y4 Q
  366.   }
    2 P  L) k7 d( M
  367. }  & r1 A/ X+ k/ k
  368.   
    1 |8 J* Y- s) R$ K$ G  H" E" M
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    " [8 ?* o$ U) V" u& g
  370. {. e- V5 I8 T- q0 s
  371.   int c;% W* t- W: M" E9 l: E+ u/ g
  372.   LPUPDATEFILE file1,file2;
    " y/ ^7 e- x/ O
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    1 z9 O; x* r1 {' n. ?$ O
  374.   std::list<CString>::iterator l;9 t( B) ^& \- W* E
  375. ; @6 M! {6 R  g* v0 T, ?
  376.   UpdateLocal.clear();
    ! p8 N- I+ m/ p* Z: S* o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    / d, D- g. I8 `# b
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . x2 r6 y5 i/ g, g
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);/ n; u/ x$ n4 x! f" N
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);; O3 k, l2 \0 d$ v7 O& s# h7 x
  381.   if(UpdateFile3.size())
    5 @7 K" t! x9 J9 }7 X
  382.   {
    $ B6 z% o: O( f. J) X, H. d2 F
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)4 n9 s3 v4 T: I9 q( Q' _9 d
  384.     {" C( B) x  ?6 p0 x0 A
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! s& f( ?6 |5 k7 P* a9 i2 {. B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - T1 s2 b( j+ b+ `& h
  387.       {
    1 t" P8 k* X0 d. }# t
  388.         file1=(LPUPDATEFILE)(*p).second;" ?+ T2 d( o0 r, U
  389.         file1->vers=file2->vers;- A& H7 B& e6 X8 F; f
  390.       }
    . P6 ~# `+ C: F* k8 D
  391.       else1 |7 ?5 K: n+ }! _+ r
  392.       {- s! H: ?7 c5 `: U% a& @. O/ b$ _
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- E/ N7 w" T2 l5 f$ X: G
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ' G) s! I8 D$ d% X6 n
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    5 X! z6 u& u( L8 H/ M
  396.       }
    3 a4 g* B$ I/ |/ }
  397.     }% L: M. |3 |- {* E& e3 G, ?; _: Y. d1 i
  398.   }
    3 S# x2 i. f7 O% W9 B4 N
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & @* J* G1 V2 k* j
  400.   {
    3 X5 N9 T, e: Z0 v9 E" p6 s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())1 i, ~: d3 X6 J! W8 E
  402.     {  _  Y9 W* ^$ |4 }
  403.       file2=(LPUPDATEFILE)(*i).second;7 Q2 S( B6 J% ?  H) C( c
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); p( `7 V4 p8 E& v# C- M
  405.       {/ O; e7 A2 a$ t) l' h4 p& Y3 v
  406.         file1=(LPUPDATEFILE)(*p).second;, A* j( V) X+ J3 K
  407.         if(file1->vers!=file2->vers)  N( {& j4 x2 j, R$ j! M
  408.         {. S% L# Z2 y& j
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, G6 \# G* c# W" M7 Z. B
  410.           c++;
    0 t  b$ A5 l6 u. i: B
  411.         }
    2 A5 v, Z9 {! D8 T6 i, T
  412.       }, ?% h+ W& `) M! l
  413.       else6 n$ f( p3 e( k$ k  E: l7 b
  414.       {
    + O1 P0 t. R# ^, b. f+ D0 c# j
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + s; l# o# U9 J- T
  416.         c++;3 n6 T/ N; W7 C% j! a
  417.       }
    ' a! Y' l* o2 I# @$ e
  418.     }
    ! a% \! W9 S0 u! M
  419.   }# x1 H7 P) E7 z8 \
  420.   unlink(".\\DownLoad\\update.txt");* `% z8 q# ], Z
  421.   if(UpdateLocal.size()) return TRUE;
    + w- l3 x$ q& E* b
  422.   else                   return FALSE;1 q/ [8 E7 i8 n
  423. }
    6 `0 ~4 y: p* L8 L8 M+ F- f

  424. # F, B4 U( {% ^: c. h" n
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    $ v* g9 b0 E0 Z' z/ u5 Q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"' ~" V! U: q( ~- X" E9 f% @
  427. & Y! `3 c& ~: f8 Q- l# f

  428. , j9 e0 T8 Z3 R+ N# M( i
  429. % ^4 g* B% e. [/ M  i1 m5 k$ e! m5 \
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)6 J1 a& E: |  p+ K* X# F6 K
  431. {( Z9 a( D. q, m. U( i: O$ N
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    0 [8 X; X* X# H+ U
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% q( D' x: ^- a
  434.   {4 ^; Z6 z& k+ d7 @1 N/ n
  435.     char szLanguage[50];, x! X  A4 q& ?# k
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * H! {3 l* X' ?8 ^0 Z9 l, q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    1 R; L3 L" L9 Y, k. {, o/ t
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 p6 h. P/ a4 F3 L
  439.     else                                   m_iLanguage=ENGLISH;
    ) |3 R+ n( X2 |! I
  440.     char szRegister[100];+ E6 u4 ?; D& |
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- S8 c% G& `# f3 U) m
  442.     strRegsName=szRegister;; L; |, \0 K& p5 A& q1 m' s
  443.     char szPatchURL[100];) x, F/ b* w! {
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 S5 G- [6 N% q# e# z# Z3 y7 V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 x  U& I7 W: q& W& V" _- _& c
  446.   }
    8 g6 R! s# K8 E) z: b' M2 \
  447.   else1 O$ f8 {; ~- R, a# h
  448.   {2 Y# P' \8 t+ y9 E0 a: l
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 E  {9 B' a2 H2 K, Q3 e! p
  450.     strRegsName=DEFAULT_REG_URL;4 o! E! K9 N% Z+ z
  451.   }
    4 l( y% [" a2 }& i( c
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 J8 M- H) F, t) f+ O3 p6 f
  453.   {1 {1 O0 m; ?! E: v9 X- c
  454.     char szIP[50];
    + }6 z! v9 v3 a  m" u8 S
  455.     char szDIR[300];# D8 u6 ]/ D* T5 t) C' n
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))$ E8 ~9 L1 l8 j/ U6 b+ _) e
  457.     {/ f$ @" o  ?/ _% \0 `4 f
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");7 A1 R* W7 E8 b% r, e; z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: F; U# W1 I4 p
  460.       strHostName=szIP;
    2 q1 \4 s  v% [1 j/ H
  461.       strHostPath.Format("/%s",szDIR);! @9 Z, _( P5 M, d* [1 Q
  462.     }
    & x2 z/ p! L1 [* A% `
  463.     else
    $ w! K% F; c* K. Q% M
  464.     {
    8 M5 g2 t7 h! }- D5 I" `. j
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& d& s/ Y1 A+ g9 H1 W3 `- K4 |. H
  466.       {
      [' t; P( s9 o5 v; [1 `
  467.         char szLanguage[50];7 u6 B9 ]* T- f
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ V% ~% R/ L8 p/ A9 x# N% ~% `
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    6 i+ H" ~4 o$ }; k' J: H: S
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 p0 j1 j* t: Z9 g, q. ]
  471.         else                                   m_iLanguage=ENGLISH;) \; V1 I) w- {* |$ }6 I  H+ X
  472.         char szRegister[100];! \. y. z7 w! X3 l
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 P  m8 E4 }0 ]5 N9 j
  474.         strRegsName=szRegister;) j* k. c$ ^1 o. k
  475.         char szPatchURL[100];/ s, ^! E! P3 E
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : o) q& C4 b! h+ l! s3 o, z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , O7 a- o4 r) k. T, k! m6 l
  478.       }
    6 k& c, D5 k$ w. m* [
  479.       else. A$ Z4 a1 U) C5 d& g( [
  480.       {, V9 ?0 A6 N9 C* _; K8 U: m! f4 ]
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 |% _+ w+ ^3 a
  482.         strRegsName=DEFAULT_REG_URL;
    : l; E. E  S. J6 G6 x) g2 U
  483.       }
    $ m4 D4 _* x2 n/ A' {9 W# @5 O7 v
  484.     }
    * U: D( Q# Z* l1 c
  485.   }* k% f8 a; K" d1 t0 z! a# g& T( h
  486.   return true;
    7 g5 S' C8 W1 M. q1 a
  487. }- N# Y2 E- Y2 t* j
  488. 6 o) y# F8 |" t
  489. #include ".\ZLib\unzip.h"
    - ?3 b5 W) C7 e4 [
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
      n7 X% i0 U+ S- y9 n
  491. /////////////////////////////////////////////////////////////////////////////
    ) B' D0 {! ^) D0 r( h& {
  492. // CRevAppApp initialization
    3 J8 I3 ?1 R6 i& \* i# N& I

  493. 0 N' N) o4 U( C; q4 h- q
  494. BOOL CRevAppApp::InitInstance()
    8 \7 e; l9 H$ |1 C
  495. {
    # O. J& t$ E6 F8 @5 W( K" d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    2 z: A8 T" l# K' Z/ Z! C

  497. 5 {! K& n7 U/ X9 D9 t$ x& g8 M
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);( N1 V2 W, c6 {, W
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
      @" T9 F) A- _
  500.   {$ b: u7 r) r& p( k4 D2 W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    $ y0 V* M, B7 K, h. _1 L: h1 Y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! n* |$ V& y6 s
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))): b  l. G2 Y( j; \3 {- f, n: N' `
  504.     {. `* t. U5 K$ ?, O1 f
  505.       strcpy(szPath,szPathTarget);1 K" o% @2 G& S0 M/ P/ [
  506.       SetCurrentDirectory(szPath);: @# L+ k) N4 N! ^
  507.     }
      p3 r8 _9 O  r+ K/ q; t
  508.   }
    ( P9 a6 D" h2 v2 W/ Z
  509. #ifdef _DEBUG
    " o/ R+ `) N  Y9 i8 _
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # |. g* N* D% c+ P
  511. #else
    3 K& \, r1 U& D0 R
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 ~2 d( C! v# x$ Y2 @
  513. #endif
    ! S" l5 `9 m5 c; d. }
  514.   {
    ; A6 L  [4 e2 I( V; j  }2 r
  515.     char tempFileName[MAX_PATH];
    4 d  h# a. k  Z& J% V
  516.     strcpy(tempFileName,szPathSource);& H# S( J3 u6 ^' C! P1 M/ \
  517.     tempFileName[strlen(szPathSource)-12]=0;
    # p7 O- t3 b8 f' t4 c% G
  518.     strcat(tempFileName,"\\$CSUpdate.exe");) ?3 K( e) _9 z- z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);7 d5 q7 e7 }  x/ F
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    * |8 c: V1 a% C; W
  521.     return TRUE;
    # p/ E' x1 w! J! ?) n; h
  522.   }8 s  p0 m+ E( v. q) `6 o, d
  523.   // Nuke 0118: Delete run.exe
    ) ^9 n$ |$ k* u- d# K% ~
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    7 `' L1 A9 @1 u0 r
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    3 S& I/ d# V: Q8 Q2 J
  526.   if(!ReadCfgFile("Config.ini"))' v) U+ I' P6 u, [- n
  527.   {" I5 K" ?9 n6 m( w) O; r
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    0 H2 b1 N. L4 G2 E% K& K
  529.     return TRUE;
    1 R6 F# i" \0 s9 l* y* J
  530.   }% U# ~# A1 c+ O" E. ~$ a6 H, K
  531.   HANDLE mutex;
    3 d' n  B# O- |6 G  d5 A3 o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    - U# b: f9 U5 c% ?
  533.   {
    " `1 C4 f. o# F/ W$ S% J! \( F
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS), w8 v4 e6 u& m) i; m
  535.     {
    ( p- i# D1 O- _9 b/ _# @
  536.       CloseHandle(mutex);0 g: u3 [. c! T( N
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);4 Y. Q* [% B% I
  538.       return TRUE;! K6 t( J  K1 M7 K8 H- r& Z
  539.     }% _" n( n* c7 ?+ K
  540.   }  
    1 F% c' S0 h& S, c3 d7 T- i% z
  541.   CloseHandle(mutex);4 q3 N- i$ F3 r3 _* e

  542. 1 Z0 x3 p$ `2 d6 B- F
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);5 A4 [( `# ?$ n  ]( X7 T1 ]4 T
  544. 0 y3 i8 o+ ?$ h0 X/ g" d3 L& l4 j$ [
  545.         AfxEnableControlContainer();6 F3 j  y7 L$ Q7 H- Q
  546. + H( S4 b" [3 a9 T
  547.   bCanUpdate=FALSE;$ t0 q* t3 c% b& G5 O, F' X
  548.   dwStartUpSteps=1;, J: L' H6 {& y9 U( `
  549.   dwProgramState=AP_NOTHING;
    3 L( Y. k0 C# ]# s0 E

  550. 5 X" @; B( t( S  R. j5 s
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);# E0 }3 w' B8 P

  552. ) X2 S/ D6 e3 ?5 ~/ c0 R- k8 f2 ~
  553.         // Standard initialization$ K6 p; y- b9 r4 f! ~
  554.         // If you are not using these features and wish to reduce the size
    / p8 d8 ~' f+ l" y4 h" r- x+ F
  555.         //  of your final executable, you should remove from the following
    8 r- \! J8 g  T' k+ U/ ^$ v7 y8 C
  556.         //  the specific initialization routines you do not need.' o1 P, d$ e* B, `4 K" Z+ P! m( I
  557. # l( L0 \, R. l' d/ C
  558. #ifdef _AFXDLL0 A. |, w+ X# I4 q' U2 W' b+ A
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL& P4 t5 _& x3 n
  560. #else
    9 b/ A+ i/ [7 _1 j6 M
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically6 @0 e0 k) p+ o" ^6 S4 A
  562. #endif5 m, Z- k8 X: F' b4 U

  563. ! Z0 q; ^& R1 L
  564.   dlg=new CRevAppDlg;+ h' m& m/ S& n* o, f
  565.   dlg->Create(IDD_REVAPP_DIALOG);; h' P+ |' V, i8 @, y/ l
  566.   dlg->ShowWindow(SW_SHOWNORMAL);6 ]1 F* a6 Q  z3 P* g5 Z. i8 s9 I
  567.   m_pMainWnd=dlg;' U4 D' T+ @. Y" V. i
  568. 8 ~6 ]- e4 J8 j, K
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ; B% K$ _. c( b( P( z
  570. ) M! v& P; w, b) z" H
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ' ^1 W8 Y9 r+ U
  572. //  ULONG_PTR gdiplusToken;
    9 M" N/ P4 `) y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);) _5 r. D3 _  \2 U
  574. - ]! Q4 U% n) m* ^7 {7 q! t4 {
  575. //        CRevAppDlg dlg;
    ; D- R6 q' Q! M9 X" R1 s
  576. //        int nResponse = dlg.DoModal();
    * Z3 I" `" _4 H( K5 p% Q; S
  577. //        if (nResponse == IDOK)
    ( o4 g$ t! F8 H" t0 d
  578. //        {/ ?/ R9 M& \: r( C
  579. //                // TODO: Place code here to handle when the dialog is
    $ ~3 }, ?- J$ v, v& k
  580. //                //  dismissed with OK
      Z4 e8 z; F6 p
  581. //        }" u! M% O7 l# w' M' s' }% l7 Z
  582. //        else if (nResponse == IDCANCEL)
    / z& ?; E5 B; C3 J4 C$ }/ c% f! P
  583. //        {8 w$ _/ H& u9 R+ ~$ F5 Z
  584. //                // TODO: Place code here to handle when the dialog is
    7 Y! M) l: p! c7 V% f4 x
  585. //                //  dismissed with Cancel7 s$ `3 g- w1 U' Z* }
  586. //        }
    - U* k2 I, @, n# g/ {( I8 }
  587. . `( \  A0 F9 C+ K$ i
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    $ _+ v9 U- J. D7 i8 R2 N6 n
  589.         //  application, rather than start the application's message pump.3 F3 K( d# ~/ h* Y9 F4 O  t" \
  590.         return TRUE;, ]2 t9 T( ^* l
  591. }. Y7 m9 `) @) i! f" Y/ L
  592. 0 r) ?% \" I3 Z
  593. char *CRevAppApp::strtok3(char *pSource,char *token)) h7 h' V3 P( Q# A
  594. {
    5 e+ o" z3 p' {! k7 [: B, S# H# F
  595.   int i;, e4 h4 V' L# B% ?5 @" k* U
  596.   char *szRet;
    ) o- m- I* u4 P1 K7 U

  597. 5 e+ n, z* Z# c
  598.   if(pSource) { itoken=0; sztoken=pSource; }+ j4 B, U# I. q  [% J% r/ A
  599.   if(sztoken)1 k0 c: `. b& T' \  i# y
  600.   {4 }4 `. m+ N, ?( Q2 t& ]
  601.     szRet=&sztoken[itoken];3 P- f& x; N" l+ K4 g
  602.     while(sztoken[itoken])" ~8 K. v6 x' G+ D
  603.     {! i1 o) J: q1 I( X& J7 _" b3 N  W/ S
  604.       for(i=0;i<(int)strlen(token);i++)" `/ Y1 _' p) E
  605.       {: {+ k' K3 I& S& ~
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])" c/ ?- _  r6 x; {/ N7 X4 r
  607.         {; J4 H0 c8 M! L8 w8 H
  608.           sztoken[itoken++]=0;/ _6 U/ E0 o, x% F7 [
  609.           sztoken[itoken++]=0;
    * c+ O1 p: H6 |1 T8 v5 j
  610.           return szRet;9 \( H2 a5 P7 l. M4 ?8 u
  611.         }
    5 G5 X. Y- b5 b  t: N
  612.       }8 w" T0 P# l3 x3 V5 r5 q
  613.       itoken++;
    9 n% W6 B3 X& u+ W8 O5 n! b6 I/ `& `
  614.     }* L' }* \, [1 C8 D8 O4 g# X
  615.   }
    . t( O# ^. ]. B. u
  616.   return NULL;
      M5 q4 l1 l# M* a
  617. }  L* {) `7 ~0 U4 V9 L
  618.   u. n# L; r3 z  R2 i" T- n! J( H  h
  619. void ProcessProc(long Total,long Current)4 B7 S) ]$ {! I; j2 @# i. K( A3 m
  620. {- M) I* l/ I* s& v# W5 ~' O6 w
  621.         MSG msg;7 i4 E; {* Z; x, k: e
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    5 C4 k6 r5 \  _) W
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    8 @0 N, U6 h( M. J! B- Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    # A0 X& [: K# `0 \4 @. F3 l" a
  625.         {
    * x5 x4 l2 o1 a2 L+ q
  626.                 if(!GetMessage(&msg,NULL,0,0))# V% m+ ^, v5 x
  627.                 {
    2 D' g8 ~1 Q/ W! B
  628.                         return;* a- a2 ]2 A8 _8 {2 x
  629.                 }
    % _1 @) R$ x# l
  630.                 TranslateMessage(&msg);
    $ s% n6 o3 F. N1 q9 p$ A
  631.                 DispatchMessage(&msg);
    . ~, P% r2 y3 @! }4 b
  632.         }       
    & C6 I: J' X5 a, |1 w) P% p
  633. }6 p9 \  ?/ H7 o5 J0 g) P" `
  634. 4 P' i  w3 p" _& _
  635. BOOL bFirstChar=TRUE;
    6 [4 e# x/ H* b, q
  636. 9 L2 l$ E1 v: S1 D+ t( W
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ! \/ ~9 H# U3 S/ F; A1 P' V3 J+ K6 S
  638. {
    # N3 O- q* `7 E/ |
  639.         // TODO: Add your specialized code here and/or call the base class7 u: I/ \/ p( E# O! a  F! T
  640.   switch(dwProgramState)
    . S6 @8 C- c! x5 {; P
  641.   {
    2 S* J+ c/ P( B4 u  y
  642.   case AP_NOTHING:
    / h1 z5 O( v: Y" s0 m& J
  643.     switch(dwStartUpSteps)
    & A2 u& ?# ]+ I! b
  644.     {, a: b2 z5 [3 ?# C3 _$ P) }% k
  645.     case 1:) d% M$ r: ]8 @4 [1 k  O0 h: h% p
  646.       {
    % w! F, a6 `- M  g. T$ D; Y4 @1 l
  647.         int i;: X+ @0 v" R2 G
  648.         CDC *pCDC=dlg->GetDC();- X4 M% h8 V6 U: f/ P
  649.         HDC hdcwnd=pCDC->m_hDC;/ H! Q2 \6 F% B
  650. //        Graphics graphics(hdcwnd);
    ( ~/ K0 P+ e+ }' m! }3 K( b) n) z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & y6 l5 Z& W$ n" J
  652. //        INT iWidth=bitmap.GetWidth();) }6 B' c% F4 A
  653. //        INT iHeight=bitmap.GetHeight();# D+ ^! q  z  |
  654. //        Color color,colorTemp;9 B; B' J6 Q# s8 ~, y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)1 h- D% a) s* O: Q6 U* k) ]* f
  656. //        {
    * K+ M: X  O( n* C( ^
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)/ j! B( E8 r3 s1 g
  658. //          {; ]4 C* i$ ?4 o, T8 J
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ( x% @( O5 n. b4 @
  660. //            colorTemp.SetValue(color.MakeARGB(3 d  h( e8 V4 T- G
  661. //              (BYTE)(255*iColumn/iWidth),, [& s4 I  c. m* D" A0 Z1 _
  662. //              color.GetRed(),
    4 \9 L5 _1 X( C( D
  663. //              color.GetGreen(),
    + X* M, Y2 }0 _- w: ^) A
  664. //              color.GetBlue()));
    4 k- v' R! \$ \! y1 v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    6 n5 m# Q8 U3 ~5 v' N
  666. //          }3 c  _- Z  U& e1 b
  667. //        }, @5 s( x7 p* j& z, k# n  T& }6 l
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 n, _7 T- t4 Y% q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 g: p1 g. y$ n4 d
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( r3 s+ ^( ?+ y) D: W1 }
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % w& V4 [: c& ^7 l2 r
  672.         for(i=0;i<240;i+=8)
    ' P9 e0 G) k" s: I3 n
  673.         {7 A6 x2 O% r0 R% P+ Z% R0 i/ s$ k  P
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' f8 Z& K( X7 T) J' s4 c* T
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , E7 Z; {5 b* k! Z/ C
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 u! q6 ?& l1 U% s5 J2 V+ }, Y
  677.           Sleep(33);( j( b  T) w$ B# K9 ^0 j
  678.         }
    7 G1 R7 P9 E: {. n
  679.         Sleep(1000);  u# E2 S3 }2 Y
  680.         for(i=240;i>0;i-=8)# z6 \4 n/ B5 V, @; B' B" a
  681.         {
    3 b: s+ O5 j9 k5 O. x
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' s6 k  I9 u. ^7 d
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . L: G% i) @- X: _* q+ p/ ~- h' c! W0 ^
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . ]2 M, Y& ~1 L0 L, F
  685.           Sleep(33);
    ; X, p+ q& i& g& X% F- L! |- ^2 T% J
  686.         }. x) j0 b0 y0 O
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
      M# S! n& P3 s$ q0 B9 E
  688.         dlg->ReleaseDC(pCDC);4 X5 u$ P8 d0 f
  689.         DeleteDC(hdctar);- I1 v: Z$ R$ \* A) G/ p
  690.         DeleteDC(hdcsrc);0 B% S9 L2 Z  M4 j
  691.         DeleteDC(hdcorg);
    - G+ Z5 {1 T( z) n$ @( n5 V& _
  692.       }2 e0 G- d7 n- e( c1 @# H! N
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);# d$ x$ E% c; n9 Q. P
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    + I- C2 S4 w2 g, S4 {! c. [- t% Q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    , j" g$ Z" G; v2 W( G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    5 j$ q" j' c) R2 x) g2 M3 q, D' j( L7 `
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 ?! j. y9 P/ W+ Q
  698.       if(!Dn.Connected())
    0 i+ N( {) C  J+ t
  699.       {% H! E3 C+ J8 v, t! Y
  700.         dwTotalFiles=1;
    % D1 }  _9 ?4 s
  701.         dwDownLoaded=0;
    $ {4 g: k( W; Y3 v+ s% i8 Y2 _
  702.         bSilentStep=TRUE;
    ; s# j3 G1 N- b. I
  703.         bCompressed=FALSE;; ?) ^! i& o2 }* E% M4 n& J
  704.         strExtLocal.Empty();* p- p9 F) b3 M# L
  705.         strFullName="readme.txt";( ^/ }0 A; ]) G
  706.         dwProgramState=AP_CONNECT;8 T7 I* z2 }, b- z0 |
  707.       }
    * h% K/ ~" H; }$ ]' _' t
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    4 e. c" h5 V, k' H
  709.       dwStartUpSteps=2;
    ( H0 X" ~1 P& W/ Y0 G$ l
  710.       break;' F: p4 Z3 w. X# X1 m5 H! w4 p! d
  711.     case 2:
    $ \! E; l. q. U, O
  712.       {) R" I) I# U, A" [% j: D/ M
  713.         int iEOF;! l0 M4 c% l1 B  H7 R
  714.         FILE *fp;
    ; l/ z: ]  c5 r
  715.         char szString[512];
      R6 s$ p2 a3 g- s4 s9 s  X& j
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    0 f$ ]% g) x! w3 }8 k# O
  717.         if(fp)( @: d. V- q0 E# C5 R1 h' H) P# Q4 e
  718.         {
    & g, c! }7 \3 |- ~# V5 g8 \, T; r
  719.           do
      Q0 ~4 u' z5 C' F4 U8 b+ I; v
  720.           {
    + H9 z: s1 Q: X: c* h6 F
  721.             iEOF=fscanf(fp,"%s",szString);8 a6 r2 j7 ^+ n7 k% n. ~
  722.             if(strlen(szString))
    5 {+ a9 ]! r/ |) j/ M
  723.             {
    / P. D. m: C  M
  724.               if(bFirstChar)& y9 o2 H  F8 e- g
  725.               {: ~" s. Z8 W: ?2 M
  726.                 bFirstChar=FALSE;
    . j  O3 v& x% ]) L: X: x% W
  727.                 bConnectIsBig5=FALSE;
    8 c3 K1 ?- @$ n" h4 M2 b  i. {
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;0 ~" b4 t- d: I7 f# z
  729.               }
    ; g( {' u3 O8 }$ r  C
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    + i7 Y  H: o/ }+ x* S1 L
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));# W* \  K5 ?" ]1 k: }
  732.               dlg->m_ListText.AddString(szString);- Q8 O$ u4 s" e  \! Y& S1 S( F' R
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 e7 n- O0 y, d; d  P% h  I/ c6 z
  734.               *szString=0;/ C, m) `1 c  v; D  A
  735.             }: ~: d! j2 ?% k1 X0 Y
  736.           } while(iEOF!=EOF);
    ( h, p7 F# V3 L* A
  737.           fclose(fp);9 o% g; p4 C# X4 w- e) G0 U
  738.           unlink(".\\DownLoad\\readme.txt");
    - j' e6 N* P6 p% H4 n+ U: E; r, E
  739.           dwStartUpSteps=3;
    ! D# x; X. o& M6 v
  740.         }
    % j: a$ N( K& R- P1 C) u  f
  741.       }# p# w3 l/ Y: Z' J: b) S' j
  742.       break;
    , u8 o& J6 G( i0 d. \
  743.     case 3:
    : u5 f) W( }" ?5 K2 v4 \' m4 k9 r4 z
  744.       if(!Dn.Connected())5 |% W$ u0 A# g# A* _
  745.       {6 v8 {2 D/ `' o$ \; w
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  z: ?7 Q+ ^1 c' z3 J
  747.         dwTotalFiles=1;0 A; X& M1 i% `9 b! k9 p
  748.         dwDownLoaded=0;
    : T6 A' L3 g. Z/ a5 F
  749.         bSilentStep=TRUE;$ ^! z4 q: e& |
  750.         bCompressed=FALSE;
      J9 V8 `7 W7 L" t8 t
  751.         strExtLocal.Empty();. G$ o: A/ H' m# j
  752.         strFullName="checkversion.txt";
    7 d& a$ z5 G+ j2 @% u% r# ?
  753.         dwProgramState=AP_CONNECT;
    4 o! \) ?2 h8 D, O# p
  754.       }9 ~( w5 K( E. Z. Z# F
  755.       dwStartUpSteps=4;
    4 q- q- S5 f: Z0 U# c9 q5 W
  756.       break;
    8 [. G4 i: A' ~* ^) ~) u: _1 S
  757.     case 4:- P  M( }) C: _, |5 L* x) b$ Z
  758.       {4 P, O2 K2 S/ W! l) J# V  v4 l
  759.         FILE *fp;3 N/ J7 Z# g3 I6 p5 s
  760.         char szString1[128];9 |2 f7 r9 d6 B: H6 ?* V
  761.         char szString2[128];2 l' C% P3 X; v' C
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' @2 l; C4 @4 x5 Z- u. X; q0 H
  763.         if(fp)4 _, S9 v& L3 u& E4 ~+ w
  764.         {
    9 j( {% l1 h7 m7 x6 w, b
  765.           fscanf(fp,"%s",szString1);
    - Y+ H% S/ K3 U7 L8 f. T! w* W
  766.           fclose(fp);
    % r+ M3 G2 E9 H# D5 W
  767.           fCheckVersion=atof(szString1);
    ( b+ W( k$ Q5 B: w; \" a
  768.           fp=fopen(".\\checkversion.dat","r");
    7 T. x4 L: M# v+ N
  769.           if(fp)
    ; f2 B; E7 X  ?' @
  770.           {* j$ O1 p3 m! `3 i
  771.             fscanf(fp,"%s",szString2);/ m/ t  s" R8 a  C9 c5 |
  772.             fclose(fp);# X1 ?! V( ]: s" H
  773.             if(atof(szString1)!=atof(szString2))0 K9 P9 q% f% m2 H
  774.             {
    6 `2 |: F# ^7 }8 D0 r9 R
  775.               if(!Dn.Connected())6 |: ~+ u5 w1 d; d2 R# L
  776.               {( Q1 s& B- S" N4 C  ~
  777.                 bFirstUpdate=TRUE;( |; }! o$ q7 w$ w! F# V" f9 O
  778.                 dwTotalFiles=1;
    4 t3 s, C" K* e) _5 X# J
  779.                 dwDownLoaded=0;" o: ]) I. R/ I6 T# N: S
  780.                 bSilentStep=FALSE;
    / S1 p8 A; W) u4 c
  781.                 bCompressed=TRUE;7 e: [7 g" q, T9 @* B
  782.                 strExtLocal=".\\DownLoad\";
    % g6 I# E( ]: N- m* g1 `6 {" z
  783.                 strFullName="update.txt";
    : |7 v  \) Q6 I# A& b
  784.                 dwProgramState=AP_CONNECT;
    " A& H3 D7 g  z% L9 d- d" B
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 j; z5 F, p9 ~( w9 o/ `, F
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, |  F: Z: b9 q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");' p0 c- t  V- K4 R
  788. 3 D1 j8 t  j" s" J0 C' t) G/ t
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 h( m; y& |3 ?6 Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");% ]# K* ^. H/ M$ E: N" P( ~
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)2 N% G9 `( p1 B4 v7 s
  792.                 {
    : q' j& P8 T* g0 y0 @
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    . q: k4 h. E) O: g* [
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");/ g! V" W9 ?' i6 T7 o
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");2 k: B* m0 l, ~# y# |/ Q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ f+ c+ W# t: j8 M& r
  797. $ n% q- a! w* S. }
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 c/ }0 J& c. S% }0 l3 y7 j
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 C( m+ X! ~) F' c. T+ \
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    # m  r4 [" `- \* Y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 h/ c1 p/ q6 J! T" }  m$ o
  802.                 }
    # s$ P% T  q; b) v
  803.                 dwStartUpSteps=5;
    $ q" y+ q9 U) a3 N# F6 u
  804.               }
    ; B5 }. K6 W$ G! C; w+ V% u9 b
  805.             }
    # B% D5 [9 @* S* t% m
  806.             else; n8 X1 e& o8 A
  807.             {& U$ W0 g: X3 \$ P! M* \
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ; }# D0 h1 Y) k1 O* [" W
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");6 C0 d- [' l4 M: g; Q3 V& |( |( W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ Q, |8 C. J* J! A, J; s% O
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    : A" U7 y0 x8 v4 K! S; r& H# b) r

  812. ! i/ Y6 s4 ^4 c9 e
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , ~% L( W/ g6 |/ O
  814.               dwStartUpSteps=99;$ Z! _+ ?' ~' e: @2 k
  815.               bFinishUpdated=TRUE;( }% a! [/ o* c& e
  816.               bCanUpdate=TRUE;
    5 E# \1 a* w% i9 |* \4 H
  817.             }# x! j( g8 J0 `8 M& ^$ i
  818.           }
    5 B0 w5 y) k3 m& a" J0 `8 W
  819.           else) A9 Z" q- Z9 w$ m3 ]! f
  820.           {7 o/ W1 T  W9 g+ C
  821.             if(!Dn.Connected())
    . P: j# V8 n9 t( X
  822.             {
    6 x# v  L2 x. p9 W$ I3 n3 z, y
  823.               bFirstUpdate=TRUE;
    0 j- b4 S3 g/ i0 }( F9 x
  824.               dwTotalFiles=1;
    & v9 k, j0 N5 F* v% X8 W% P
  825.               dwDownLoaded=0;
    8 z, ]$ H6 X4 j8 ]4 ?
  826.               bSilentStep=FALSE;& y, r& P+ Q; _) ^8 y) x. `8 l) R* h
  827.               bCompressed=TRUE;
    ) T! E) h) d/ t5 e
  828.               strExtLocal=".\\DownLoad\";
    + Q, F8 ~8 X1 z. @& Q6 Q  f% x) e. n
  829.               strFullName="update.txt";7 T* I. c  V' T0 {3 z2 m7 f
  830.               dwProgramState=AP_CONNECT;
    0 L/ |. H! Q1 y% b9 R) F" W& [/ h
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 l5 I, |+ i/ B! O
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & v& P! F* i& u7 V9 p
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");: n& G- z) s; ?6 H
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 P+ W+ G; v! C3 V* K0 e' z3 G
  835.               unlink(".\\DownLoad\\checkversion.txt");
    " F  u# U. G' q. R) W4 c% ]% t4 _# C
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)2 ?% F/ i, T- r5 K  h* C* ]+ D4 K
  837.               {
    6 N3 {. ~; t' w8 y2 g' D& f3 Q  d# _
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");1 t0 ]$ O) Y$ h( q3 ^
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");/ v* p8 {& z$ Z$ f1 ?! S
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");9 B; J. X5 d% q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 Q- B$ ?* b6 K7 D
  842.                 3 ]6 b  h  f& B% |9 k
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");4 j1 u- i; y% K
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # g: ]; d) F* S- }) N
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");8 B4 P. i) U0 h. A7 h
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # D" g3 i  h" x4 A  {
  847.               }4 c6 v. ^* U& \4 V* c# o
  848.               dwStartUpSteps=5;
    - G! K8 |% G( w" G' s
  849.             }
    " q: L$ g3 G" t  A
  850.           }
      u, T( R+ W8 U" v/ l# N$ u" q
  851.         }1 E: M4 K1 M7 K& q' C* |3 n
  852.         else1 H3 X1 ^" r$ `* @" x* d  \& P
  853.         {
    6 z/ Y9 G. o* B5 i
  854.           dwStartUpSteps=3;
    ) T/ A& h8 y7 a7 Y& H+ Y
  855.         }
    : Q5 \1 M: j$ q5 T& _! f
  856.       }
    ( X8 y3 E) ^. }' W; B& Z; N
  857.       break;2 H% {( @1 S' x8 u5 g2 o
  858.     case 5:6 g4 e; J* ~6 m" y4 }" U6 H
  859.       {5 l* m! y& p& b# J# Z' ^+ Y
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)9 n; R9 L# Z$ k( P! d" L) c" k
  861.         {
    6 \: ]5 C7 b6 ?
  862.           int opt_overwrite=1;
    ! H5 ?/ O% d% G" Z
  863.           int opt_do_extract_withoutpath=0;: \9 \% O% w$ \; d4 r7 A
  864.           unzFile uf=NULL;
    ) O4 n4 f' _' |* p1 a

  865. ( [8 \, M2 t, p- m" @
  866.           uf=unzOpen("Wsa.zip");
    % m, ~: Z# |* Q7 h1 B/ N8 e
  867.           if(uf)% ~0 R& n! e2 \1 v
  868.           {
    , W$ F" o; F* l6 h$ v0 y5 f& H
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ! o) L; M1 D4 Z( q/ \' o( @
  870.             unzClose(uf);
    $ V/ I: |8 G& L& x! O8 C4 m
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");) c& |1 A+ T; {; y
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
      m6 H3 C" R2 p  L5 Y" V9 ?
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    & s6 V9 n5 J2 S+ Z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 F5 q8 A! D9 W( Q, j; Y- @( h
  875.           }$ @$ C! C# {$ G" `6 K6 F. T- `% w& c
  876.           DeleteFile("Wsa.zip" );
    $ C# \/ {( G7 ?0 m# b7 @" n. v
  877.         }' o* f  T+ v0 y! F
  878.   `! V: t- c7 u
  879.         if(CheckLocalVersion())
    % d0 u7 j, u8 A8 F6 F
  880.         {. @$ |5 ^4 b5 D
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ; W# k' H* I$ J; w9 J4 ?+ a
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");+ k7 ?) T! I0 v' }
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");% U: k/ ]6 q6 |6 e
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ n3 X6 r5 ^* z' W0 S: j" v/ a
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    * N2 C! E, Y) |/ J9 H# p
  886.           dwStartUpSteps=99;$ ?7 r# ]9 ?6 j8 B0 {2 F0 V
  887.         }
    5 t  S& b5 S% W0 L+ C
  888.         else1 c0 p$ ^- w5 m0 H9 z) S- q
  889.         {1 ], ^) y' y$ V# d: h) \
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 C) @7 b5 B9 m
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 J% w5 s9 b# M0 s  w
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    5 o( `& n) d: j4 ]: v6 i

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

: D2 h* q5 u6 e6 I5 \$ D9 s2 @- H
$ r6 L# V  e4 I( I2 S8 H

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-15 07:02

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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