找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
- R# H) h9 O0 e5 r
  1. / RevApp.cpp : Defines the class behaviors for the application.
    : b. D- z/ r3 G; X2 n- v5 J8 r
  2. //2 m4 ?+ O) K- t- y
  3. 8 h4 K6 z3 s( y- h* S% Y
  4. #include "stdafx.h"$ \0 [( U4 ~7 E3 B8 q5 T& {2 t
  5. 2 i( @7 M: x3 l
  6. //#define UNICODE
    4 ]' v$ [% v8 G* x. K( B
  7. //#include <gdiplus.h>
    ; `/ e& W2 w- y( e8 h
  8. //using namespace Gdiplus;
    - V7 u1 m; M2 s1 W' E* M0 R

  9. 9 j3 X4 s# _; A- H, f7 c
  10. #include "RevApp.h"  |  w' G1 A* n
  11. #include "RevAppDlg.h"5 e, k* |5 N! i+ n; K
  12. . B" T* S0 Y  Q% v7 B7 R
  13. #pragma warning(disable:4786)5 u# }8 W$ w  m) m  I4 ~- @% R
  14. #include <map>/ }* R7 ~9 I* q4 N! p& g
  15. #include <list>1 C. n% m! y  l1 T! ~$ ?
  16. #include <direct.h>8 W2 |, B7 x6 \, |
  17. 2 T+ E9 W) T6 A) C  A, z, x
  18. #ifdef _DEBUG& m2 G1 V1 @9 M: V
  19. #define new DEBUG_NEW0 a  j( |: O7 L4 U6 I
  20. #undef THIS_FILE7 l" G  C# {. c* u
  21. static char THIS_FILE[] = __FILE__;4 ]3 Q  Q- K" j; k0 s* T# J+ C
  22. #endif3 n/ x+ e3 \% A1 {; J% w
  23. #include "SkinResDef.h"
    + H. N4 T; t' }$ }
  24. #include "ChangeBG.h"* {) D. W+ w7 q# b" z. p
  25. #include "AFXINET.H"
    & p3 B: |% c8 [* K! G
  26. * a- m# V0 j9 ^: }: s+ j4 ]
  27. #define TRADITIONAL_CHINESE 08 @  E% W. W* P: [
  28. #define SIMPLIFY_CHINESE 1
    6 o3 H! r( o( w4 J2 p' s
  29. #define ENGLISH 2
    1 J) \' k* q' c0 y1 F- h/ X, h4 x! x8 D
  30. int m_iLanguage = ENGLISH;1 W! H; V! K6 o" x4 F; ~- }
  31. /////////////////////////////////////////////////////////////////////////////+ `8 t: y8 t; A# {8 \: v* o0 N" i
  32. // CRevAppApp
    + \6 A0 B6 {& @7 e  t: a

  33. 9 w( e# S& R( p; \
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    0 L& _6 |7 P) v% w
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    - F8 ~1 |, l( `7 R& |+ \0 d3 D
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. w/ P) {" }! K  v* q% a2 p1 u
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    9 H7 V8 L5 |& ^. j! n' J! {
  38.         //}}AFX_MSG8 T6 V3 Q& o1 e/ P- h- l0 q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    : p1 [& F( q" L6 r1 m: W
  40. END_MESSAGE_MAP()3 r8 l8 j2 M5 l3 f! f
  41. / N5 Q. F1 z( ]2 e' V. C
  42. /////////////////////////////////////////////////////////////////////////////
    # l1 V' o$ Q: y3 _+ v- U
  43. // CRevAppApp construction
    / U, P2 T" L4 Y
  44. 1 |' ~4 Q2 A- ^- X. W/ p
  45. CRevAppApp::CRevAppApp()7 D, X, Q" j) f
  46. {0 g; j9 H( d- j
  47.         // TODO: add construction code here,
    4 _( U5 ^0 w% \2 C8 N7 A0 L- B
  48.         // Place all significant initialization in InitInstance" U) B9 \/ D5 {
  49.   bDisplayIsBig5=FALSE;
    " v: ~/ J: N* |- ?
  50.   bRestartUpdater=FALSE;+ x; ?6 i) i. M$ R! d  e/ d2 I
  51.   bFinishUpdated=FALSE;$ D% }, y  F( t# x4 x" B
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;3 o4 y5 t, }, b7 D: c( k( s" g
  53.   InitChangeDataBig52GBKS();; T) G0 Z$ B: C& q5 `$ b# A
  54.   InitChangeDataGBKS2Big5();* l" b# O9 L, N. L
  55.         //, h' f- l# \. i$ }9 R  l
  56.         bClickRunExe = FALSE;+ o% \# h# B8 g! |9 k  @
  57.         //- @5 z0 X  W- {* d
  58. }
    ' {: C! o4 m9 ~  E) a" k
  59. , Z5 E* @2 r* L8 B* A$ t. |
  60. CRevAppApp::~CRevAppApp()" p0 o! U$ S( F! D2 Q% u6 J) p( f' }: T
  61. {/ L5 n3 i/ N, M
  62.         // TODO: add construction code here,
    $ i* Z: W# @# _: z5 t1 ]* w
  63.         // Place all significant initialization in InitInstance5 p! k  F# ?& u: F
  64.   EndChangeData();
    ) v0 }$ K' r/ [/ K' B3 ~( c1 z
  65. }
    5 {9 c$ i, U7 Z

  66. 1 }# n# ]$ N3 b1 r  L" o
  67. /////////////////////////////////////////////////////////////////////////////
    , j5 N9 @, y/ p9 t! n
  68. // The one and only CRevAppApp object5 C% j3 X) y9 S! d

  69. : i: L5 D, [& P+ Z+ ^
  70. CRevAppApp theApp;# e) t$ k" @$ d
  71. & T; ~" N7 ^8 m2 \) b9 w# o$ J
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)) v" A% o) H1 ~9 Z* Z
  73. {. w; I+ _& |+ M
  74.   int iEOF=0;% e) K% S) M8 W& T( z$ x1 x! j
  75.   char szTempName[MAX_PATH];# t0 R2 @% a5 `' ^2 E0 b8 o
  76.   *szFileName=0;
    8 b" v, q! B0 W2 q( W% D' ?
  77.   iEOF=fscanf(fp,"%s",szTempName);
    , \& r+ `/ \4 }) {- z( E* F
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')+ ?2 G2 ~; t0 r7 T) c2 V1 k1 O3 |3 r
  79.   {# T! c! \/ z5 {1 X  Q; Q" t
  80.     strcpy(szFileName,&szTempName[1]);" o% T& d3 p+ Z& k: {# q. ~  X
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) A, t1 \/ d, Y7 p, v7 ~- N
  82.     {
    * t) f* x1 _9 R% B0 r5 N0 ]. @
  83.       iEOF=fscanf(fp,"%s",szTempName);# s; c/ |, E! _
  84.       strcat(szFileName," ");0 K; w' S2 m& ~5 Q
  85.       strcat(szFileName,szTempName);/ n( Q3 L) F' s6 |5 T4 N
  86.     }
    / k7 H6 r  B6 `' m# ~) C, c
  87.     if(strlen(szFileName)>=1)8 _8 K) x% _% L9 \8 S7 q
  88.     {$ t% a( b8 F0 m6 z0 J% _& a/ Q# s
  89.       szFileName[strlen(szFileName)-1]=0;
    , E/ p( n6 ]) m. k9 D0 k& ^
  90.     }
    9 y3 F, x$ U" H3 |) ^# f8 }3 }
  91.   }
    7 n3 T3 j% L" E( b
  92.   return szFileName;$ X/ x6 w5 H& v" \
  93. }' k4 D& j# o; U: }

  94. ( S  S; G& H" |: R6 b2 m" y  O" `
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)+ K- y  {% ?- v3 c7 Z" R+ _
  96. {
    : b! E* A% \& }; |$ k
  97.   FILE *fp;
    ' N0 a' d$ ?( n
  98.   char *key=NULL;
    6 [6 M0 Y  `% g
  99.   char version[MAX_PATH];
    6 V# v2 X% Y) \: M( u( g0 E
  100.   LPUPDATEFILE file,olds;% d6 P" N* ~; H
  101.   std::map<CString,LPUPDATEFILE>::iterator p;. W" G$ B8 H4 Q: F0 v/ V5 j7 V
  102. # }6 W1 |3 T. y  Z2 L9 K
  103.   UpdateList.clear();' U! f9 a  H7 f
  104.   UpdateFile.clear();: {% l- p. b2 ^) ]3 s
  105.   if(GetFileAttributes(filename)==-1) return false;: y3 s2 g: d' W& i) K3 r9 Y
  106.   if(!(fp=fopen(filename,"r"))) return false;- p9 ?5 d0 ~4 b/ l  \1 ~
  107.   fscanf(fp,"%s",version);
    / r7 \: ~; O0 K% z3 A8 m3 @& @
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }5 S% z9 X2 l" s: |9 w/ ?  P
  109.   while(fscanf(fp,"%s",version)!=EOF)4 i, Z! P9 h5 }) i, A! t4 b6 d& S
  110.   {
    1 `/ q- @7 S4 e; {  n$ f$ u5 z; j
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 [/ b# a( \0 ^8 S
  112.     fscanf(fp,"%s",file->path);2 K) e6 Y3 ~( r: W
  113.     ReadFileNames(fp,file->file);/ a# G, _  C. F" t  O( |/ n. N
  114.     strcpy(file->full,".");8 U2 s8 ]  Z& M9 J2 b
  115.     strcat(file->full,file->path);0 c" t. F! ]8 S! k3 l1 N! R9 W
  116.     strcat(file->full,file->file);
    5 a8 i" U+ W5 k8 h4 ~  g
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())8 m8 v6 B- c; I! S
  118.     {
    $ r1 U* o' J& T4 ?% u+ n+ ?1 I
  119.       file->vers=(float)atof(version);% V( k8 d  m: @$ y# [. f
  120.       UpdateList.push_back(file->full);* |4 m+ ~% y. ?: H, w5 P
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));& d) }+ x3 X" J0 D: A+ Z
  122.     }# q0 C, v7 d  j& n
  123.     else. p# [6 y  d- f3 D$ E
  124.     {5 |8 T( o, _4 ~' c, d+ M" e
  125.       olds=(*p).second;
    . z+ S0 V3 R2 A' \
  126.       if(olds->vers<(float)atof(version))9 x6 r8 ?* U  K9 d% |) f2 }
  127.       {
    2 `0 Y7 N( m6 l: W  U9 t
  128.         olds->vers=(float)atof(version);1 r3 e3 S& M" Y6 v* ^: ]1 O, `
  129.       }
    ; x; a7 U3 F/ E( c1 e
  130.       free(file);
    4 H/ R4 r% ~. u: i; r4 a; X
  131.     }* Q4 U. d  ]3 }/ C
  132.   }
    , R; Z* R7 A( P' s% K; B
  133.   fclose(fp);( @$ d$ O0 B7 G/ A& M& s$ |
  134.   return true;5 N8 E* B5 h! }: a. w
  135. }
    / _. N1 W! ~, T/ @8 U

  136. ) ~, _. M5 F/ u9 O9 i- N4 S
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)+ l+ b4 B$ P) F) o5 o6 e* p
  138. {" y; W4 I% y: i6 u
  139.   TCHAR  szFull[MAX_PATH];6 t0 S6 b9 W  L6 X
  140.   TCHAR *token,*inter;/ A+ W. N0 b8 r
  141.   *szPath=0;
    4 g6 a: B  [( A
  142.   strcpy(szFull,szFullPath);
    2 T! K6 F- k# v1 B* r* ?1 o1 @
  143.   token=strtok(szFull,"\\/");0 I' `; M( [" v: ]- J8 ]5 s9 ]$ K
  144.   inter=token;
    0 w; F! J( F7 y, |7 ?. l6 Q
  145.   while(token=strtok(NULL,"\\/")): B( m+ P* }- e! o! u, c
  146.   {
    ) `2 g8 p% i3 O" {8 A" G
  147.     strcat(szPath,inter);, S& b+ F) v, \  f3 s$ R
  148.     strcat(szPath,"\");
    * ?' H- ^* E8 C9 i: Q5 H
  149.     inter=token;: ^) E% P2 |" V
  150.   }
    ( `4 R) a0 O3 }( D4 R
  151.   return strlen(szPath);
    8 G, {& b. `8 \' S1 S9 u& t* C: [
  152. }* u' }! }/ _# Y, ?  B
  153. ( C8 d8 E/ t& b9 G
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ; d3 M3 H! _3 W: s5 J# T) ~
  155. {1 x9 I% e7 q/ f$ s# v3 ]
  156.   DWORD attrib=GetFileAttributes(Target);
    8 p" D# e! l- v# _/ H. V
  157.   if(attrib!=-1)1 K! ~/ u; I, {
  158.   {
    ) }! M* y: e3 ?! l4 O
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)): S8 w# ^) Q9 J! H
  160.     {4 R2 H6 r+ ]$ {
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);9 Z3 p# F0 X. V% h- Q
  162.       SetFileAttributes(Target,attrib);
    " `3 q- P' M4 ?: B) {
  163.     }
    ! Q. ^4 ^3 M' w; m# n1 _& B6 p
  164.   }
    # u3 y8 D! @/ }
  165.   CopyFile(Source,Target,Erase);
    6 u- v4 R) f+ N- u( d
  166. }
    % L. _' P. a' o, ]  T
  167. 2 o4 R1 B3 `! t
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)& X# B0 c$ T8 X" l- Z3 B0 v
  169. {0 ~5 M1 C9 @: J% R* `% y0 u
  170.      FILE *fp;& ^1 |5 V  Z% c* J: Y7 p; f  M( x+ P
  171.      char  szBuffer[8192];7 N" c  F6 O* r( S! u# w
  172.   va_list  argptr;
    8 }- R, F) V0 Z; G3 S2 I

  173. 4 b0 A6 b2 T5 v8 E  [7 M
  174.         va_start(argptr,message);3 t, x/ `6 t  M
  175.         vsprintf(szBuffer,message,argptr);
    7 V9 j& k- E1 P9 T4 {
  176.         va_end(argptr);0 k' |& \: x: B- I  A( k4 M- t0 `0 ]
  177.   fp=fopen(FileName,"a");( ?0 `- x" Y  @9 y7 Z! B
  178.   if(fp)
    1 f, Z- ?9 d5 f- N* T: b
  179.   {
    1 `; N+ Q, S( X/ f# o  H3 k, w
  180.     fprintf(fp,szBuffer);- {5 F# ]7 T* I( f
  181.     fclose(fp);
    ( X  F4 l# s+ B. P* ^4 ]' f
  182.           _flushall();: u7 \) L+ f" ^' P9 Z+ A
  183.   }
    9 `, C5 V( y$ t& C
  184. }
    1 Z% l% l6 w9 u1 w& a
  185. . O8 e5 O3 R; U4 Z- t
  186. BOOL CRevAppApp::Fclearf(char *FileName). N" S  y; e# i
  187. {6 [- d1 J. l( B% h: L2 p
  188.      FILE *fp;# b4 c5 q2 @4 }: X( d& _
  189.     DWORD  attrib;4 a0 n3 S& u0 @% W1 z( c& E
  190.   attrib=GetFileAttributes(FileName);
    - y2 \2 M+ X; I. o$ C) {# }
  191.   if(attrib!=-1)2 G/ r% n5 y4 X- s) k: ^
  192.   {
      d8 |6 C) R4 f4 D7 f7 S% l- Q  E
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    % o5 o. F3 a9 v/ ~4 c1 O
  194.     if(!SetFileAttributes(FileName,attrib))
    ) c# u- @& |* Z3 a; I
  195.     {' i' p& k4 X; O9 H. W
  196.       return FALSE;
    . D+ I4 Z6 A1 h2 P
  197.     }
    . @# }3 Z4 S( x7 h1 e! h: m" B. ^
  198.   }2 ~; X- \$ T0 C. a5 M+ e* r. w) s# w
  199.   fp=fopen(FileName,"wb");
    8 M/ G2 x( a5 r
  200.   if(fp)
    & _- n. F! B9 X7 f# l
  201.   {* ]/ L8 ~7 F3 i1 E: C3 e+ B: W
  202.     fclose(fp);0 w/ b* z, F* A. o  V. v9 |
  203.   }
    . a6 _; j2 D+ d" R# B
  204.   return TRUE;3 _5 d$ y$ K3 s# `% T% X! Y
  205. }
    2 {* X7 n" E- X9 e9 w9 @

  206. + ~& j; I$ }+ O) t4 S1 k4 W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    5 w9 r7 r5 t3 v: U
  208. {
    ) e, f  v+ b3 v* \4 J. D0 B
  209.   char filename[MAX_PATH];
    $ j2 E3 f* `% s) Z: I  b; `* c
  210.   LPUPDATEFILE file,olds;( X6 v* T* P3 S+ M2 a% d6 C9 C' y
  211.   std::map<int,CString>::iterator i;5 ~; y7 a- M1 M( s) U
  212.   std::map<CString,LPUPDATEFILE>::iterator p;: ]7 I# u3 `8 H- a' J  w* Y
  213.   std::list<CString>::iterator l;
    0 J4 r8 t2 A" h: D

  214. , H% c+ u9 I  W+ c
  215.   if(bFirstUpdate)' @4 Q1 ~4 ~1 f) s* y
  216.   {
    ; @, a8 J8 }% s. v
  217.     dwCurrFile=0;
    7 l% o) H! q1 a6 J$ L
  218.     bFirstUpdate=FALSE;5 p% t  q8 A% M  E. M/ e
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 [& `5 M' h* E4 [: n6 l. P( d
  220.     {
    3 H  |. x, T  @6 u$ g
  221.       dwTotalFiles=UpdateLocal.size();
    ' n) M0 b! ?! H6 \
  222.       dwDownLoaded=0;
    0 x/ q3 {" U) T" b% m; J) d
  223.       bSilentStep=FALSE;# D  ]% {) K. S+ j( j
  224.       bCompressed=TRUE;
    " ~8 F; S2 h% J" P0 T- E3 P& g# T
  225.       strExtLocal.Empty();
    1 s/ c; I/ K0 h/ Q9 h
  226.       strFullName=(*i).second;" F1 j! U  N# K3 ^' j0 ~1 P# j
  227.       dwProgramState=AP_CONNECT;4 ^6 C% T7 ^  _! H" V
  228.       return TRUE;
    ' u7 N$ T2 E$ b5 b
  229.     }
    ' |  _& ?% v4 ^) K3 R
  230.   }
    0 D+ ^  I3 L& N) D
  231.   else if(bRestartUpdater==FALSE)4 M" T) Q. o9 x& N" p! R
  232.   {
    , W% n6 K, J+ \1 W$ g
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    # p( s- t6 W5 e5 Y
  234.     {
    0 Q8 a( e( t" J' {
  235.       file=(*p).second;
    ' [% V9 e* M" s2 i
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    1 w1 H2 T8 K6 c+ e8 l0 j7 {( A
  237.       {
    7 J9 q; e& B! e3 ^
  238.         olds=(*p).second;# i, [- g2 \, v& s
  239.         olds->vers=file->vers;
      S2 g5 \- C8 |6 B- f+ |
  240.       }
    , |* q& G; J' u7 I4 M
  241.       else
    9 ^" e! F( q2 T8 _8 S8 `
  242.       {  j& i. j0 Z! J/ ?
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 R( \' s$ G6 ^- @
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) _0 ?- F8 Y. y( p( v4 ]
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    # K: p8 f" f7 k
  246.       }/ U$ j; z' G6 @) c
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    6 e( O8 A5 D9 S" H8 L
  248.       sprintf(filename,"(%s)",file->file);7 |0 p; i4 ^3 C8 F
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ O( g" R% |# u4 M+ V# R1 t
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }$ }7 T0 @$ h, b" M- r# g
  251.     }
    6 w' X: Z) h: i2 Y; {1 o
  252.     dwCurrFile++;2 ]+ r. ?6 n0 \; ~. k. V
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - H, S4 l/ v" X* d4 n3 ]& S
  254.     {9 `4 `) {6 m8 G' K% U: B* {
  255.       bSilentStep=FALSE;. ]; n$ n# }/ k! }- A# X4 z, |. U
  256.       bCompressed=TRUE;
    6 L' b- `  o2 H
  257.       strExtLocal.Empty();
    * T0 }4 `5 \- Y4 c
  258.       strFullName=(*i).second;
    2 Y% [' H* _6 H( ]; U6 |1 y+ C
  259.       dwProgramState=AP_CONNECT;4 I; H, g( _6 @- L
  260.       return TRUE;
    $ v  V6 H, l' N7 a3 w( ]% j3 B4 N
  261.     }
    : u. ^- i! @  }
  262.     if(!bRestartUpdater)
    . V8 _+ x9 I7 f" C" I/ `
  263.     {
    3 b5 }$ R- R6 ?2 B5 |" w
  264.       int iCurrSize,iFileSize;2 Q+ x5 ^+ n( i4 C' a7 G' v* F
  265.       iCurrSize=0;
    / p. m% I9 E* a
  266.       iFileSize=UpdateList2.size();
    - P& H+ o' _2 I9 ^4 k
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    4 f3 ]. N2 E% d2 f3 \- a
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    , q$ R" f* A1 X" f! ?" z
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 R" {5 ?/ F4 j! @
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , n2 Y- B8 E5 a" w! N# y& `' u/ I
  271.       Fclearf(".\\update.dat");' e' K' G; @* `
  272.       Fprintf(".\\update.dat","Bloodyf\n");  A/ h  @3 F3 N1 r' Z
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++); h* @9 o: N- g1 I9 y
  274.       {
    9 P/ Z6 z$ q/ y6 O
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())1 ?' h3 k3 D- ^- s0 i% v% G' W# X
  276.         {) R$ U+ N: R) P4 h
  277.           file=(*p).second;
    ' q7 f4 I* H! X
  278.           sprintf(filename,"(%s)",file->file);& j$ D4 n# P( t7 c+ e" A
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 p9 k. I3 ^2 w
  280.           iCurrSize++;, z' i4 c4 U( h# N4 x& o5 s
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));/ @" J6 V; B! L0 M7 B. ~
  282.         }  M9 E( \. G" M
  283.       }! `' W' \& n% s/ n& J1 h% A
  284.       unlink(".\\update.txt");9 n1 f2 a& \# ~  W. _# v1 G* M
  285.       unlink(".\\update.tmp");
    " \! s* P/ m, C& x# G2 m& C/ J
  286.       Fclearf(".\\checkversion.dat");' q1 e* z9 I8 V* F7 j/ r
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    " l4 h: O' P: k( b' b" `
  288.       if(UpdateLocal.size())3 |: d% n# Y# G" E/ d" g6 D3 E
  289.       {
    # D; O6 o3 P; R5 c& M8 T) O! y* `9 O
  290.         UpdateLocal.clear();0 [2 i0 I9 d3 Z6 l" M! Q
  291.       }
    ( I# u, p1 ^4 d
  292.       if(UpdateFile3.size())
    ' }6 {# @+ o- B
  293.       {, z0 v& V! E6 Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ z1 j/ h1 n3 V, m
  295.         {* A$ t1 j, ?8 b9 W- ]  P4 e) ?6 U
  296.           file=(*p).second;
    - u+ U4 d9 y6 ^' F. V/ ]1 l
  297.           free(file);
    6 h  g' Z/ |4 C, |
  298.         }8 ]2 e4 L: v' k) ~
  299.         UpdateFile3.clear();
    % m5 N3 V8 v0 E- q& J" w8 A; c+ l
  300.         UpdateList3.clear();
    ) m; F2 W; d4 N% E+ F
  301.       }) h9 a* L0 y. ?; b
  302.       if(UpdateFile2.size())
    ) S6 A8 P  i; @; J) ~7 `3 n
  303.       {! X" }' {/ O1 F$ z
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 e' a. N1 T8 _3 k* c" f
  305.         {1 Q; x/ Q2 a" g
  306.           file=(*p).second;& R! P0 V, D% M0 G* b
  307.           free(file);: |4 {* ]1 ?* _; J
  308.         }
    ) q% }* h+ T/ o; N. Z' x
  309.         UpdateFile2.clear();) c$ }7 I* S( D# J
  310.         UpdateList2.clear();3 C; r+ a7 _( a! d6 W5 f
  311.       }
    - }" ~( X# L0 b6 e$ ^- T' ?9 O$ x
  312.       if(UpdateFile1.size())
    9 Y4 b$ n9 j( i, D1 H5 p( T+ r" p
  313.       {7 O& O/ ^  g( `( ]2 f; z+ _- b+ E  U
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); Y% y4 A/ w0 z& k4 a
  315.         {- h$ z/ {+ H2 n& A/ P, x9 Y
  316.           file=(*p).second;1 `! s8 {% U/ z3 Z3 b( N
  317.           free(file);
    & M, d  e+ t4 o: [
  318.         }
    5 E9 D* M) @# y' f  m! G; C
  319.         UpdateFile1.clear();" k/ v: @0 B; E7 F5 W; r9 H5 R
  320.         UpdateList1.clear();
    # ]5 A! R) I" f
  321.       }- z8 @8 k6 f. Q/ Z6 w/ a; ^
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));$ X, z( n$ n; d0 m/ h
  323.     }
    8 Z: A& ], s" T9 h; G
  324.   }4 ~! g. H! v: b1 s0 Z% Y
  325.   return FALSE;$ b- y8 Z( i7 ]0 }  d1 q. r
  326. }2 F$ [6 x6 \) A5 E( t% C

  327. , m$ g. F7 y! B. T! i4 U  i
  328. void CRevAppApp::ClearAll(void)
    * F; O+ L4 ^+ y" S
  329. {
    6 Z+ [* ^: i. X0 Y( Q% |9 `
  330.   LPUPDATEFILE file;2 H, f8 E$ C- W# p0 {
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) O+ P3 b( W! U, r+ x
  332. 5 N. q  X  B+ ]+ U9 a, V. u/ {
  333.   if(UpdateLocal.size())8 O) n# G9 U" \6 R2 [/ f
  334.   {
    4 ^% a6 C. j: x+ X4 {
  335.     UpdateLocal.clear();
    . y9 h4 O) k7 d9 d
  336.   }
    2 M" y0 Q% O2 q
  337.   if(UpdateFile3.size())
      A3 x" {& }( W8 v7 B# N
  338.   {1 Q2 P2 y8 R/ j  h1 o3 U
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) X# M1 F3 k2 n$ P
  340.     {9 x( @& _" e' [
  341.       file=(*p).second;1 H8 q# t0 }; N/ C
  342.       free(file);; M" ]6 a( p" I- `1 E9 t
  343.     }4 R" w5 R3 g$ i5 T+ o
  344.     UpdateFile3.clear();
    2 b( S3 |# a7 f6 i& l! y
  345.     UpdateList3.clear();
    . g6 U( f; R* Q- t- }( v7 u" ~$ u, |
  346.   }( ]& z& b" S' ?! z/ N" B+ v
  347.   if(UpdateFile2.size())" P) {& U% p2 X6 {
  348.   {
    9 |# R  k$ q$ q0 s4 a
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & c% P7 U; ^  w) r
  350.     {
    7 P: o, s, D! m$ e4 d
  351.       file=(*p).second;/ N  K4 K/ \$ h4 F9 @" {% ^" N
  352.       free(file);
    3 b3 F6 s5 F+ Y: R- o
  353.     }
    5 ?3 a% N9 ^/ g$ ^! F* G
  354.     UpdateFile2.clear();
    9 L0 D+ i: T# W( x
  355.     UpdateList2.clear();! r8 n4 q; W. Q
  356.   }
    ! s3 w4 Q2 @. j% U
  357.   if(UpdateFile1.size())
      v3 D9 q! e% b  `4 @4 V
  358.   {
    $ h" q3 q; x* J- [
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ! t! o) c" V3 ^% M3 k0 A  U7 Z1 m3 c, f
  360.     {
    6 l8 r- U8 t5 L8 m' Z6 u
  361.       file=(*p).second;8 A( M2 M! z0 |5 g
  362.       free(file);
      Y9 C1 }  B: Y( W$ Y2 Y: D) C% q+ L
  363.     }
    0 D1 E; ]5 j9 e
  364.     UpdateFile1.clear();
    % N- j. I# r9 B3 u: V1 F, J6 K
  365.     UpdateList1.clear();, B7 R3 n  b4 F
  366.   }
      l1 r4 t# P$ K& a* X+ v; l
  367. }  9 O3 Z# h: a* j* L( ?0 A1 [
  368.   
    ' F7 G0 E% p" ~) J
  369. BOOL CRevAppApp::CheckLocalVersion(void)6 e. T* N- v% @4 y( G* u& R) |: N
  370. {9 X0 j. J& u0 \# X2 X% N
  371.   int c;# B& p. J7 n9 s
  372.   LPUPDATEFILE file1,file2;: _7 O  P: f, A) e2 q. i
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    $ V% y: L, r; I- y
  374.   std::list<CString>::iterator l;
    " U, t' g: b" B

  375. ; Z0 ]# d3 O) T6 q
  376.   UpdateLocal.clear();
    ( t2 w% e, u" K4 @
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);/ K: V2 `2 |- Y8 g
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);3 }5 A* S/ q, H4 `4 G
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
      H9 P6 k: @3 i
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);; J; s# [/ h1 @' z& ]4 [: y: z" M
  381.   if(UpdateFile3.size())# X+ s% n' ~5 v) R
  382.   {
    ! f2 g# N$ d( o/ H
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); A7 h5 B8 @# s. P  y5 G: A
  384.     {$ S- T4 ~0 z' M; J% Q# o
  385.       file2=(LPUPDATEFILE)(*i).second;
    7 y1 F, \) ^* k/ `7 i9 @  O
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 G" b. [8 h4 ~2 {  u
  387.       {
    - l5 w8 ^0 w8 v) z( ?
  388.         file1=(LPUPDATEFILE)(*p).second;$ ^/ ^; t8 |4 W. C/ d
  389.         file1->vers=file2->vers;
    8 m7 a4 H! O/ N" M1 z* `
  390.       }! O: @9 Q; d& Q/ |# v
  391.       else( X& T. ^: a1 ?5 ?; E) T, `
  392.       {' `: X( o/ ], `: o* G" W0 v5 H% W8 M
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " Z& E3 g0 }/ E7 ^# Z% p2 Y# |, F
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' {8 p7 y- w* T9 v- \7 x" n
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% \/ H/ W! i% _- ~7 T2 s9 c
  396.       }
    2 W  t6 U: Q- U+ ^: L  }$ a
  397.     }$ n, |. F% [, e6 ]/ {5 Q& [
  398.   }3 t, Y: J- K0 |# z* N7 d$ Y, Y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)* ]  J! k( X, z. Z
  400.   {
    ; J' j0 @- N0 f! n0 y8 @. s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())* r. K, `+ F2 [+ v. q: s
  402.     {
    5 f0 G& ~1 [1 K; ?4 l0 u
  403.       file2=(LPUPDATEFILE)(*i).second;
    9 K, Y' F% i$ V4 h  {$ w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 i! i8 a# N4 _  G0 o4 y
  405.       {
    + G7 A4 Z1 S/ a$ a. ]! _
  406.         file1=(LPUPDATEFILE)(*p).second;/ ^. p6 l3 D1 b" v% j
  407.         if(file1->vers!=file2->vers)( i2 f, M% p6 A* w8 W: q
  408.         {
    4 q( L" ]: l$ W8 N* T; P
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 ]8 E: W7 s- o, h" m7 m% a% F& }7 ?
  410.           c++;; N' g9 @4 W. e* W. P
  411.         }
    , u/ N9 J$ J2 D6 _! H6 T1 w
  412.       }
    : I0 ~# M' X- _+ O, T
  413.       else
    0 }* ]3 d/ q9 K
  414.       {
    , r- h2 T- v& y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 t/ j1 g% C- ?  L
  416.         c++;5 J" A, Y& l/ i' Y6 o
  417.       }
    : {1 h- @$ g( E1 u1 [) e) M: V
  418.     }9 x0 }5 s6 F2 O0 \9 y
  419.   }( J: e% ~/ @- C' K% c* T
  420.   unlink(".\\DownLoad\\update.txt");; s: U# \7 f% q. C
  421.   if(UpdateLocal.size()) return TRUE;+ _- J* i" Y) M! c! D
  422.   else                   return FALSE;
    ' u) e% U& ]/ n  V
  423. }: F$ e% g; {$ Z4 I( ~" P: n
  424. + V5 U+ O) m' A9 U8 y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"% i" Z: w* P( D$ m' P
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    4 p' W( n: D& U6 F
  427. 9 s9 i( D$ |1 K* B, Z
  428. + v( \3 p" r  N5 z# f7 H# T
  429. 3 X& T# ~+ j1 T, G+ N
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)2 R- ~" m. f, P- ^% L* {, i
  431. {6 _* I! w& O, A" B! r) t- d0 k
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ! z- _$ A3 r' b  S0 N; H
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" |2 f  d! J& B" R
  434.   {5 P- }/ @7 K: V
  435.     char szLanguage[50];
    5 Y- \9 e) U) `! W7 k  W- A
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 U- e+ i2 M5 I- O& Y. l  Q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 Z- @# {6 W8 a9 T9 J
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. y8 H, j3 `/ L& W: f" }7 Q
  439.     else                                   m_iLanguage=ENGLISH;
    - V9 U+ I7 ]# b+ L) }/ D
  440.     char szRegister[100];& ]! z2 B# e7 w+ b( z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 k% x4 x- u9 l# L/ S
  442.     strRegsName=szRegister;
    - B7 g+ e+ U# Z5 K% p- l$ I  `
  443.     char szPatchURL[100];2 a, m& j9 L% i2 J
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , E: N9 f7 B( V7 G& o" r  V5 X
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. A7 Y$ N( ?: X
  446.   }
    * x3 Q$ H! n, n, \1 I! e+ C" M( {0 D: r
  447.   else9 Y% ]; k% N. ~1 \4 [6 T! S) @5 M
  448.   {
    % m* Q1 F2 `8 v" A/ o
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / k( y7 d" C8 _7 k& o
  450.     strRegsName=DEFAULT_REG_URL;  P) U6 i. K# |5 h5 i% j: |  j
  451.   }
    : m" v" F& Z8 L) T3 J4 b* F
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    9 d) k/ g5 T5 B5 Z( d) L
  453.   {
    1 v6 i" a& m) I6 G: s6 h* O
  454.     char szIP[50];
    ' S# s' P6 f2 m
  455.     char szDIR[300];2 q$ d; \4 s* u) f5 ]
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))/ I2 `, y: ~% a% l% l) M4 b
  457.     {$ w6 q  G" C% W" D0 q8 C  O# N
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");$ x" b8 U, R1 x5 E) W
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    5 L2 D2 C4 \. N$ ~% g
  460.       strHostName=szIP;
    / r- {1 f: ?, _; u2 {, O
  461.       strHostPath.Format("/%s",szDIR);
    & w  x& o9 W8 R* H
  462.     }
    & ]! L2 J& _8 \! c3 p
  463.     else7 L1 \7 F- R. ?5 O( ]7 b  j
  464.     {3 ]8 r- Y8 m4 ^6 a& e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 x' F! `: R& I; ~4 J% E. s$ p3 ~7 c/ r
  466.       {
    3 ?4 [3 [, ?/ W' h
  467.         char szLanguage[50];
    1 l+ h! s; M$ A/ l+ x, R6 s  J" m
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 z5 W1 M, u6 h+ C$ i" I
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;$ D' z; N7 `$ q3 r- s3 q& i
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  Z: F* @+ I6 t
  471.         else                                   m_iLanguage=ENGLISH;. b2 h3 u/ V3 B% B/ V: L
  472.         char szRegister[100];
    & ~/ s$ f; I& p3 ]6 k& X
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 v. D! `) K# c! o0 f
  474.         strRegsName=szRegister;7 ~2 {2 `+ M4 B9 o5 O) `
  475.         char szPatchURL[100];
    & p/ ?9 n' p- w& M& P
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( f$ S1 C, r; f+ M4 x5 C" f+ f
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: o7 L. }  P4 p& O' d7 O1 m* y* W0 w
  478.       }
    + d' I6 S9 b9 u; l- T
  479.       else
    0 }& i- o7 ]; u! D% {# h
  480.       {; z7 r6 R2 q* ]
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 b) [5 S% F- j9 ~. p7 d6 o* t
  482.         strRegsName=DEFAULT_REG_URL;' k' f: |/ s2 z! [: z3 C
  483.       }% {- H3 e1 ^* }& ?
  484.     }2 u3 w% }1 W  S" C' n; n
  485.   }
    0 x6 S8 c2 b$ s
  486.   return true;  _# l6 T& m+ X
  487. }
    . ]2 [" E' X4 y$ {

  488. 1 Y5 G8 L1 i" E8 w  @0 ]  `
  489. #include ".\ZLib\unzip.h"1 [, U; z& ]: o; {5 ?/ w
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);5 E. h2 f; N( L8 G: |# ?
  491. /////////////////////////////////////////////////////////////////////////////1 [  ]! a1 f) s& G
  492. // CRevAppApp initialization
    $ ~! p, Z: E. e0 w+ S

  493. ; w- D- j! k( }' K* T
  494. BOOL CRevAppApp::InitInstance(). ^3 Q% t1 \# r- }( d
  495. {3 y5 A) E/ d* I/ P
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , _: l; L/ i8 a- ~

  497. 1 z7 Z4 u& P/ x! M# r$ U0 Y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);, H8 U; m) ~' k+ V/ k# s" I; @8 U
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    % a( P6 d* c; L
  500.   {( x  {4 G3 r6 q% u: \
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ( s! Q, I7 V) j$ N# z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);8 g) u1 Z  J0 A# I- V9 E8 ?: Z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))* o+ F2 a' F, }
  504.     {
    5 X: p) Y) E2 W, Y% n/ t1 p5 K
  505.       strcpy(szPath,szPathTarget);
    ; B2 P6 m. r) @9 u- s& k
  506.       SetCurrentDirectory(szPath);# I; d" U+ f$ Q; W( S
  507.     }7 C8 p2 Z/ E: W; @; f: O4 r7 s
  508.   }+ r; v* F( X1 N3 A/ L. o0 H( r) |) M
  509. #ifdef _DEBUG8 _7 r+ J( C+ w0 Q5 Q9 W7 p2 e, q3 [
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 B; @/ f( t0 \4 \
  511. #else" N- N5 I& T% k7 |4 `1 W
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " m: X1 T4 Z7 T8 N6 l
  513. #endif
    2 M5 u, ?' W0 B+ J8 C3 A0 L
  514.   {* z- N% @1 c2 U% _
  515.     char tempFileName[MAX_PATH];
    5 m/ M3 S- S. X
  516.     strcpy(tempFileName,szPathSource);: b4 O' P; t1 f) r/ ^5 i% b0 @
  517.     tempFileName[strlen(szPathSource)-12]=0;
    7 @% x, D& z! ]4 f; \
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ; A- o2 M( |2 E8 d
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);$ y4 K* b4 t" P  F" e5 }+ k
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);, f8 f% |- u2 J: L  i% ~) c
  521.     return TRUE;
    9 }7 [% m/ S5 i: H+ N1 l9 W
  522.   }0 t9 c4 |2 V0 O6 o8 _: {
  523.   // Nuke 0118: Delete run.exe4 `7 f$ R* l/ ^
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    1 ^$ Q. R# o# o& m2 |
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    . x1 o) G8 x; r8 f7 E; Q1 w
  526.   if(!ReadCfgFile("Config.ini"))0 Z1 E' ~- D. p, `: x9 }  Q0 C; j
  527.   {
    5 e) I* z! o3 W6 f* d0 f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ; U% E% b9 Z4 s4 u5 t
  529.     return TRUE;
    * s5 K4 I* p2 p3 X7 b: M0 z
  530.   }' `6 a) A: R$ q7 J1 H/ J( b
  531.   HANDLE mutex;+ `) @/ z$ B% x* d" Q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))" J0 m& d4 S6 n" z% \
  533.   {
    ; \0 g, L+ _: C/ d$ n( g
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)( [6 y" [% b- A2 s
  535.     {
    . n' b4 ?1 ]8 _) l2 @, E
  536.       CloseHandle(mutex);
    ( |$ h! v% ^# o% ?0 D
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    # k) m6 W2 y4 |
  538.       return TRUE;
    / `) Z- i# |7 c0 T
  539.     }
    " \2 F" ?' i  [. b6 j
  540.   }  " E! b  j% N6 w+ V* R
  541.   CloseHandle(mutex);
    / G7 _$ J9 i- ^8 p! H3 t
  542. 7 Z5 \' D% |" [& S% M8 X" b
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);9 J: _* u* ], L" k
  544. 7 g. a8 r( S& N. e' \
  545.         AfxEnableControlContainer();
    5 l9 q+ s9 h$ b# Z$ m- D: }6 N4 b8 r6 p
  546. ; c) n' [& @  K
  547.   bCanUpdate=FALSE;- s9 ^; X6 L$ R- r% \/ {1 J- h; K7 f
  548.   dwStartUpSteps=1;, E+ R  a" I. ~
  549.   dwProgramState=AP_NOTHING;
    5 d; i* W/ o7 g

  550. # J/ G( c' x# P0 i6 F
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    4 [0 O- d% x. t

  552. 5 Y2 k% M5 Y( Q
  553.         // Standard initialization6 {4 n+ [) k0 u# X8 f% R
  554.         // If you are not using these features and wish to reduce the size
    % p7 u. e' d2 W0 s5 ?
  555.         //  of your final executable, you should remove from the following8 S$ \) h/ d- ~; u. j
  556.         //  the specific initialization routines you do not need.
    9 K3 t! d) D( M  Q0 S
  557. 7 ~# D4 p" W3 V. C, H0 @7 z4 B) \
  558. #ifdef _AFXDLL
    & t2 s6 |: ^# \8 ^* a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    : }) n+ B9 v8 i8 v
  560. #else
    4 t$ ^  s9 S+ ?1 }. l
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically9 }' ^( j: _& [+ [  L# l
  562. #endif, _- T! a( B3 I8 d2 C' i/ p+ L

  563. # V& G; ~: f: d5 g8 c, h5 V* s1 {# c
  564.   dlg=new CRevAppDlg;% |8 `' y' j' p! X& R
  565.   dlg->Create(IDD_REVAPP_DIALOG);$ H% Y4 C: c: V' I$ S0 _( D
  566.   dlg->ShowWindow(SW_SHOWNORMAL);4 [( u: r2 N1 v: E
  567.   m_pMainWnd=dlg;
    , z7 ?8 z3 a+ E# V8 c2 M# Y
  568. 4 v- T' G: L1 _' i4 k4 l; c
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 r7 A/ A& I6 B$ p$ u
  570. ! \2 u5 [, p7 D. b
  571. //  GdiplusStartupInput gdiplusStartupInput;: `. N+ r# Y2 e8 [8 Y. B' U
  572. //  ULONG_PTR gdiplusToken;/ Z+ [# X. o! }' D. q7 y! J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);" _5 S2 T' g" w2 ]
  574. - i9 P5 t' B# M' a4 p- T8 }& W
  575. //        CRevAppDlg dlg;
    8 ~- \: \3 v) O: T3 I# |
  576. //        int nResponse = dlg.DoModal();5 U/ E& t  ^# Y1 X
  577. //        if (nResponse == IDOK)& c- j3 p4 U! ^3 Z
  578. //        {
    ; \6 C& i; V/ X' ?; i% h. o
  579. //                // TODO: Place code here to handle when the dialog is
    0 G8 K2 o0 X3 r% v* x0 q7 Y. Y
  580. //                //  dismissed with OK
    5 }2 A- S3 o6 H4 @" A' Y
  581. //        }+ F  a( k4 [3 [& c7 U. d
  582. //        else if (nResponse == IDCANCEL): Z( ~3 M% X# A) T8 Q2 @8 {  }: g+ y/ X
  583. //        {
    ! T# z' }& `- S7 n; q
  584. //                // TODO: Place code here to handle when the dialog is
      A4 s7 D; H3 T, n$ F  m  ~
  585. //                //  dismissed with Cancel
    & @; F+ x- q7 ]. G( m1 k7 `
  586. //        }8 z0 L; P0 k0 W! K8 o& ?; q

  587. ( s5 q* {% N, n/ F3 i7 F
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    " Q* m3 Q, z5 ^( m1 m; S# n
  589.         //  application, rather than start the application's message pump.4 R& a/ [$ _" J# I2 y: E
  590.         return TRUE;6 R! B  y" T1 t
  591. }% g5 w1 E1 E. D: m* p% `2 o$ g

  592. 9 k! C5 R- t9 c
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ! u) a, K( r; h" v. R- i' N
  594. {
    # G$ Q( J1 e2 Y2 C
  595.   int i;4 B" k, k3 l+ M3 K) C: X. E
  596.   char *szRet;4 y8 q9 ?5 i* D4 w* V; j
  597. ! v, p. Y$ ^! {; i4 f% w
  598.   if(pSource) { itoken=0; sztoken=pSource; }& S& V7 F1 f3 M+ Z+ U: Z
  599.   if(sztoken)
    9 s" Z0 N5 V7 F8 D% `
  600.   {
    7 M; [; g3 Q4 Z5 r
  601.     szRet=&sztoken[itoken];
    - \2 p& K/ W+ n1 g. }3 V9 x
  602.     while(sztoken[itoken])
      `8 G, H# H" ]) e/ p+ A; B
  603.     {7 p% [( N" H. ]# G8 A+ N' v
  604.       for(i=0;i<(int)strlen(token);i++)+ J7 L# H! C/ R9 d) R' r
  605.       {
    " J* o5 D1 [+ }* e; e/ U
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])' F1 ]" K5 R$ O- g. F
  607.         {2 T0 ?% U4 o5 s# C
  608.           sztoken[itoken++]=0;
    + e/ s1 a, ]1 N1 b# d0 S1 E8 L7 n% u1 _
  609.           sztoken[itoken++]=0;
    # X/ y: G9 @$ f/ \; e' ~1 o
  610.           return szRet;$ c* E: n9 V  p) D. D1 Q( E3 X: m
  611.         }
    8 l+ ~" b; u8 f/ @! I2 r
  612.       }' ~; P% X$ j$ l; O2 T
  613.       itoken++;7 P6 ^6 Q) j/ o0 [7 \1 ]! D+ ]; P
  614.     }
    + V8 M6 C* g# a% |9 o; s# e, H- e
  615.   }
    , P# C% D8 Y0 J5 h3 E" i
  616.   return NULL;
    ! q( j9 U- T1 k( ]) H
  617. }( I& N' v" r' A" ?
  618. 3 f% c' O8 V  t, ]; B0 e1 @" `
  619. void ProcessProc(long Total,long Current)
    ( J6 V) P2 A* d/ _6 g
  620. {" j6 Q! b9 h+ A: _
  621.         MSG msg;
    7 v/ a9 r" b* \4 W  l% ]/ w; r
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " v' d& {" {% G5 C6 ^7 s
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    0 p9 c# B2 Z  p8 B% w! e' X
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))( x& J, G, g  W" E) L
  625.         {
    ' ^6 b/ b- F/ @% B1 T( H. X
  626.                 if(!GetMessage(&msg,NULL,0,0))
    . F. N' ]$ a8 d% ~, z
  627.                 {
    - Q8 C5 z+ \7 x/ U0 \) [+ l
  628.                         return;
    2 g/ a7 T2 R9 B# v* X3 H
  629.                 }
    9 D) p2 K( v* l6 }
  630.                 TranslateMessage(&msg);8 I& u+ X" {/ |- R" |2 ~
  631.                 DispatchMessage(&msg);
    % l( b, s4 N& y0 |0 ]8 e
  632.         }       
    ) C* q9 O9 U, x5 n. L% O3 M
  633. }
    7 v8 b6 u4 w6 |/ `3 D& N8 |$ b

  634. + k8 V% }; I& M3 f2 H
  635. BOOL bFirstChar=TRUE;6 M1 C  T# Y$ {6 G3 t# J- y
  636. 3 G2 D% E7 y5 N* `5 v
  637. BOOL CRevAppApp::OnIdle(LONG lCount)  y/ w4 @4 Z( [( _
  638. {& a2 p4 p( P2 B$ D6 Z; u
  639.         // TODO: Add your specialized code here and/or call the base class, t6 @# q: ~" C/ ?$ p
  640.   switch(dwProgramState)
    ' C: w2 o1 i# \" s
  641.   {
    2 r. a0 l- s( M& O1 ], K, a8 u
  642.   case AP_NOTHING:. |% N+ u1 D% z! }3 _
  643.     switch(dwStartUpSteps)
    ! N3 y- D+ y- z" J6 V
  644.     {
    6 Z! L+ {& ~8 `* N- u/ Z$ Q
  645.     case 1:
    9 K8 b9 K9 a' y; N6 V
  646.       {
    $ {  |6 F" C) p
  647.         int i;. `$ H5 D. {! J4 Y( ?2 M
  648.         CDC *pCDC=dlg->GetDC();
    3 i# k7 a, C/ E- g2 F7 x  {4 q
  649.         HDC hdcwnd=pCDC->m_hDC;0 `0 M$ {  D8 Q' j. k/ e
  650. //        Graphics graphics(hdcwnd);
    ; Z7 a1 T% d% U. Y- r
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    3 t9 [+ d- a2 w3 e
  652. //        INT iWidth=bitmap.GetWidth();
    3 `; D1 p1 V# k9 B
  653. //        INT iHeight=bitmap.GetHeight();4 f6 e9 W8 H2 i1 L' n
  654. //        Color color,colorTemp;1 K/ C. y9 y* O3 D) y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
      l! Y3 b& ?  p: i) W
  656. //        {4 L4 h3 c8 r& D" z3 t; r5 z4 o. k
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)  C. {8 m; h. ?. U: f8 _, e! Y
  658. //          {/ y3 ]  P% ?7 r) K3 H% o, x+ u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);7 u9 P/ Z0 E6 i4 I
  660. //            colorTemp.SetValue(color.MakeARGB(
    0 |5 W0 ]1 W( F0 \# l
  661. //              (BYTE)(255*iColumn/iWidth),: |3 [4 E* B  O0 c& m6 {0 e9 l7 p
  662. //              color.GetRed(),; V: j7 R+ }/ T% z, N1 i
  663. //              color.GetGreen(),, K8 i; Y7 X. H6 C3 W+ f
  664. //              color.GetBlue()));
    $ K1 U3 p$ e9 u$ ~+ R4 m
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    8 d8 Q8 W' u! Y+ r+ l' z
  666. //          }
    7 H- a  p8 q3 [5 }0 P. C) O
  667. //        }
    6 T( L3 B& a% N. ?. s6 u- W
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);' L- f# l3 ]) ?5 h" z5 g
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 _6 i& @/ T; E. m# b. `/ Y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    6 j+ V0 j6 q, v+ K1 p' f# d
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ K) _; X* k! I' T
  672.         for(i=0;i<240;i+=8)
    3 c: S, e5 ~3 b6 t/ @# m2 i
  673.         {' A; B$ T5 {  _4 d  w/ N" w
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 [- `( ^" a( E8 }* d3 @
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; X" N  |! O/ A, V- m
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 H) f% G, {  i
  677.           Sleep(33);. R, ?' d( p2 V4 L6 o7 c% ?2 R
  678.         }
    6 f8 }! A8 s" n, \1 E7 ^
  679.         Sleep(1000);+ @1 t$ j- j+ F
  680.         for(i=240;i>0;i-=8)
    * [/ r% Y& ^- D5 A2 `! ^
  681.         {( `6 Z5 O5 L4 d' d+ y9 Y7 E# M
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( A! L5 g( ?9 r; a/ H0 t1 l# N- l
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 K! A3 w/ b  h; l# [, c
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 \- k3 O2 r! z* }3 ?7 P
  685.           Sleep(33);
    5 f% P# l$ r6 e! N7 T  h
  686.         }" H) T5 S, N: l
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    " @' v, \, E$ u/ m: C
  688.         dlg->ReleaseDC(pCDC);
    8 {# l( ]8 m' r* @, o
  689.         DeleteDC(hdctar);- z- G% _# x) p; y8 S
  690.         DeleteDC(hdcsrc);9 ^* Z3 J. \) \- h0 `
  691.         DeleteDC(hdcorg);
    4 l. p# \8 z! j' y
  692.       }
    ; n) U/ ~; q% j- d" X
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    : l/ k( ^2 ]+ S! ~( d4 b; l
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");# }" N! k' K2 C6 h; L
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");  E& q5 d/ k% `
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    0 ?- m# j1 ~) X
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. A9 S5 y& r* s. h  M# ~
  698.       if(!Dn.Connected())8 Y0 H: D* s) p( Q7 Q
  699.       {+ ~( {; b  g7 u" Z0 x
  700.         dwTotalFiles=1;0 S& X, \! K  B4 h9 o
  701.         dwDownLoaded=0;/ u8 |  p) o- a% D% ^- j4 P
  702.         bSilentStep=TRUE;
    % c+ d7 ?3 c2 P; ~, o4 j" j' i
  703.         bCompressed=FALSE;5 x# p" p! D; O8 ]6 h& v
  704.         strExtLocal.Empty();2 f& U5 Q# t; P+ h1 ~: j
  705.         strFullName="readme.txt";
    $ z( {' v: V( r) b& K. Q) r2 T+ x
  706.         dwProgramState=AP_CONNECT;
    + H" ^; _! ~& \
  707.       }
    5 U* D9 ~/ a9 Q! x* i. r" @
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    / l8 J* o& z0 Y8 [3 o
  709.       dwStartUpSteps=2;* T8 [; I' W  F, l' Z7 U2 M+ ~% G- D
  710.       break;
    - W+ C# h; w( c; L3 r
  711.     case 2:' i) L; T) V! L8 F1 ]+ J4 v# \
  712.       {9 X, ?, }# u3 O1 L7 q
  713.         int iEOF;! a$ ?1 M0 z1 X% l
  714.         FILE *fp;
    . u! a# ?9 Z' c  n% ]1 Q0 L$ E
  715.         char szString[512];
    3 v/ r5 W1 \. I3 p( l- k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");- ~# o4 Q  B" [) _* |) a
  717.         if(fp)( A) z1 @& H0 S  d* F
  718.         {9 o2 [( x% _# i
  719.           do
    # A+ P$ R: h% q: x
  720.           {# o1 g  z# s8 t/ Z. u. Q
  721.             iEOF=fscanf(fp,"%s",szString);
    + u% r4 N, J$ O- `) V8 ~2 R& b
  722.             if(strlen(szString))
    $ ]" K' k9 `0 o4 a4 Y
  723.             {$ C5 d6 ^% Z8 w3 z5 }+ A
  724.               if(bFirstChar)
      K% q) o+ J6 z
  725.               {4 z9 ~; K' f* ]7 H% P; @, f
  726.                 bFirstChar=FALSE;4 P' r9 ^/ B' x3 [
  727.                 bConnectIsBig5=FALSE;' |/ ]( |! ~1 J3 W- V
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    0 g, D8 S0 s3 R
  729.               }
    9 |' I8 z! K7 V6 }) ~* G$ I" c8 k
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    $ J" h3 S4 R5 \3 b1 R3 G/ x4 i
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    0 c% H' K' B2 l1 d
  732.               dlg->m_ListText.AddString(szString);
    , t1 J9 G* g( p# g0 E
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; a4 p( Q3 m" l0 P6 Y" n7 `& P# Q
  734.               *szString=0;
    ! a; Y0 }! u+ w
  735.             }! V6 T: z; [$ H3 [* a4 s
  736.           } while(iEOF!=EOF);
    2 z& I0 L( U8 Z: Z0 G' n
  737.           fclose(fp);9 S2 H/ t3 I. f' S7 [
  738.           unlink(".\\DownLoad\\readme.txt");
    * M9 a$ T# {3 j) D
  739.           dwStartUpSteps=3;) A2 R: o' g4 R9 }
  740.         }2 u. I! R$ p' t3 F
  741.       }
    2 ]& O$ x9 Q: y" J: e; o
  742.       break;
    $ @: w8 k' W9 {1 a' J
  743.     case 3:7 {6 v- L1 s6 ^% N) g; [3 v6 y
  744.       if(!Dn.Connected())
    4 _8 S6 a- i  z
  745.       {
    * q2 L6 H' t) U& o. h, B4 ]
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    - e( Y- l7 v1 ^" i" o8 P" V
  747.         dwTotalFiles=1;( Z% S, v: j  ]9 k
  748.         dwDownLoaded=0;
    % Y, a3 h8 ]1 s) q
  749.         bSilentStep=TRUE;* U  @; B. b/ N% S# A% D0 q
  750.         bCompressed=FALSE;
    + J; L4 V1 M9 N- C) O! v
  751.         strExtLocal.Empty();% ]8 R7 [# F5 L# `
  752.         strFullName="checkversion.txt";6 t+ ?6 q6 g' X' i! S
  753.         dwProgramState=AP_CONNECT;
    , Y( J! {+ `, f! O8 G( v
  754.       }
    5 q. [0 d7 E. t# i/ M
  755.       dwStartUpSteps=4;
    # I9 t3 g/ l. r6 q8 r5 L. o" r
  756.       break;
    # K) D7 H" d8 ~) V: k4 `
  757.     case 4:# h  y, ]# @4 _2 @" D
  758.       {' `( ?& D7 `7 _8 g/ H; {6 w, }
  759.         FILE *fp;$ D1 _0 V0 m3 m
  760.         char szString1[128];' o$ [+ [! R9 L! q; |2 a
  761.         char szString2[128];
    / _7 N* h3 p, ~/ C
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    / x0 I3 X1 @7 a
  763.         if(fp)
    / a) ~. s# V! \" r7 T
  764.         {$ G9 |/ g7 i1 }( t
  765.           fscanf(fp,"%s",szString1);! t$ |) K' s& y- e3 c
  766.           fclose(fp);4 Y4 k2 p/ R$ x: M& f& n5 \# D
  767.           fCheckVersion=atof(szString1);6 [$ g- T" p$ V8 m
  768.           fp=fopen(".\\checkversion.dat","r");2 N$ a# l. Y9 Y* `6 A
  769.           if(fp)- ~( O9 P# H8 j) A5 m
  770.           {4 v- q) i) [% u0 n  h! ?; c
  771.             fscanf(fp,"%s",szString2);9 A8 T* l" ?' x
  772.             fclose(fp);, d. D6 e! M) ~! I
  773.             if(atof(szString1)!=atof(szString2))
    1 b+ C( d, L; b$ v
  774.             {
    5 x0 ?) _( e% x5 g* u2 }
  775.               if(!Dn.Connected())
    1 I; J7 ?) E' u
  776.               {
    % o0 f: ?, I3 {' }# |4 G% E
  777.                 bFirstUpdate=TRUE;
    / n# Y* v( ?. }* m  j
  778.                 dwTotalFiles=1;
    * p9 L2 ]9 d" S" }/ d4 v
  779.                 dwDownLoaded=0;* }8 q: F! @# v
  780.                 bSilentStep=FALSE;
    ! |! C% U  K3 @$ D: }
  781.                 bCompressed=TRUE;) g9 ^2 G1 u5 `% e7 K* m
  782.                 strExtLocal=".\\DownLoad\";
    . O) T  S% o% W6 `# `
  783.                 strFullName="update.txt";3 v5 w- y6 e* U! U
  784.                 dwProgramState=AP_CONNECT;& B9 ]5 p$ h+ O
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 v3 y, G) \0 m4 d: a4 N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & r8 }$ J4 F5 h0 C
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) @# p9 A6 Q  k" H6 Y

  788. 2 }- u, h; c$ F4 v& z" ~4 A2 a; C( t
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + g3 i! v' }& s# {
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    " o3 R$ C1 U6 _, N/ A% i
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)% `# t+ Z0 B& O- W9 E( C
  792.                 {' Z. w6 a1 M7 I& R7 Y- m( t: Z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
      t  N2 {! ~# P# i& z/ N
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 `9 M* Z% [- V) F5 C3 U% N& t/ l
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    1 G/ F) U8 o5 G, f7 G4 W# v7 J
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  D2 w% T" _7 K

  797. / V+ C( I4 h0 G  n( `9 |7 Q+ X
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");* s9 H' _9 D' ~+ f
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 K* r. u6 @8 d
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! R7 d- Z7 }' z( H/ }
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 N% Z! a2 _- O, O" A, H- k6 H
  802.                 }
    . n0 W5 G$ b8 ]  U4 r
  803.                 dwStartUpSteps=5;0 F# a! T9 f9 s: p$ z
  804.               }. o( \7 S, M' V$ h" B# c1 t
  805.             }$ K1 N6 ]6 ~* Z. R2 k
  806.             else
    ( ^: @" K9 s- J0 h5 P. Y( l4 ?
  807.             {
    & T( Z7 A" w' t
  808.               unlink(".\\DownLoad\\checkversion.txt");4 u- d7 F  z% Q9 e
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");. ~" h; k' R6 g" x4 R
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");: k& M- a% K- U: {8 L! a: _
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");& j8 R1 }1 i, H0 [) L0 o! Z

  812. % m; B: x- I4 v0 I; h: n' y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 C( g% s5 m; ?* _2 K, b
  814.               dwStartUpSteps=99;
    / r; U* e# V- \- {" j9 }
  815.               bFinishUpdated=TRUE;
    , G, ]& y# l# I1 t8 y
  816.               bCanUpdate=TRUE;
    % k3 D* L+ D5 `. o8 _
  817.             }' |5 Y+ z" s  W9 I
  818.           }
    & U6 Y. H5 V" Q4 J; t* Y
  819.           else% q; `* q6 B5 u. Z& W* T: K/ f
  820.           {% p" u2 e/ f3 Z' d
  821.             if(!Dn.Connected())
    & _# v) k; Z' @% d2 p. m7 r
  822.             {
    ( Z; W' g# {, @! r8 r4 U
  823.               bFirstUpdate=TRUE;
    4 s! q* D. D7 R
  824.               dwTotalFiles=1;2 g: F% {; B( d/ Y1 I; k
  825.               dwDownLoaded=0;( [; |/ q+ @7 P4 u! h' K9 J
  826.               bSilentStep=FALSE;
    8 g2 Z1 c' u& U8 Z5 |" I1 c
  827.               bCompressed=TRUE;' v% w. ]8 P, V9 D2 P
  828.               strExtLocal=".\\DownLoad\";8 A5 p1 q3 C0 C7 }2 O
  829.               strFullName="update.txt";
    ) f+ L5 H2 n* S5 l8 v
  830.               dwProgramState=AP_CONNECT;8 a& T% a: Y" E" h
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) e; d' y5 p/ e( a3 M* q; A
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 `6 H* r: q0 O) G9 s* {) H
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");$ f+ q' R0 [* P3 l# I% C* _" S
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 Z' F" q, Z, N$ B
  835.               unlink(".\\DownLoad\\checkversion.txt");! w% ]( K7 a9 D, Z& R
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)+ p: w) y- b, @( w
  837.               {
    , u# [. q4 E- b  M' ?& f7 G
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    # \$ W3 d$ L2 i' A+ u* h6 I% [
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ! V: B" a" j/ A3 C) S
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    9 t- S6 k9 C1 N" N, I: g6 [
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 B( w; @+ R! ~0 N3 d# B4 E8 N. z
  842.                 : t6 n1 [7 q6 c& v& M/ q% J) U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + h* S" x- ?& r: D
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 c' f- u3 X; J3 u( a3 `$ j
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");* l% m! O- I$ M6 {6 y
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- @( C! F9 o7 _5 G/ ]
  847.               }
    , N" G* ~- {4 h8 F. f
  848.               dwStartUpSteps=5;
    $ z$ b6 B# F7 [' M7 J4 c
  849.             }
    6 t4 b# P. F+ s* G3 f
  850.           }% K% c0 j1 d. t6 Z: L
  851.         }2 K1 Y, @0 x( w  A
  852.         else5 L1 ~% S% A2 T4 ?# l/ v" R
  853.         {
      _% E6 e; `: L8 a% o( k1 r) j
  854.           dwStartUpSteps=3;
    5 C: x( |' |5 H% R7 u
  855.         }
    & t; T  o, Y) k8 m
  856.       }& V3 x, t% w' C1 \
  857.       break;
    ! g0 R# c! d) z# R" K2 r; _
  858.     case 5:
    $ b: l$ i6 i5 u$ _% ~
  859.       {
    ' D; J' B8 E' E4 W+ A: ^$ Z+ t
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    / U" b5 h. c  S  z  N7 f
  861.         {
    * j+ U0 f6 J* m; b2 D  s- I3 y
  862.           int opt_overwrite=1;
    ; o- I# C3 \& A
  863.           int opt_do_extract_withoutpath=0;
    9 j& t" R( k1 w# |
  864.           unzFile uf=NULL;/ t  F# V! @7 u7 T( ?

  865. 7 c8 y$ D2 \- @' K) G& }
  866.           uf=unzOpen("Wsa.zip");, C8 i: e# m2 u# b/ o6 ^: J% f' M$ L
  867.           if(uf)
    ' K) n# k  b5 I
  868.           {
      a6 K% F5 p( \* ^$ ?
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ) z# j% w% y7 d# \/ v
  870.             unzClose(uf);9 q9 G0 Y8 H2 p6 L$ M  n. ]; e9 \7 R" s
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");" R% ^& @6 u& N$ l* b
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    5 T$ j7 G6 b" h) q
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ' b& N% @  ~3 H/ C) d# ]2 W
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 _. I: q1 s+ x! b
  875.           }
    , l6 p: X6 a5 T: A; ^6 O
  876.           DeleteFile("Wsa.zip" );
    % J% M" V1 R- X3 N
  877.         }
    1 e1 {! @) P3 H7 g4 M3 ]2 ]5 x
  878. . V. \% R) v! |( V9 {% M
  879.         if(CheckLocalVersion())
    : |+ ~8 i+ C9 m2 V. i
  880.         {; `" T' n1 x# n5 r
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ; _) w% l5 N) q6 ~- r- `2 o
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    5 g, D5 {$ w" s6 S& X* t' C" m
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");8 g: z6 y) ?  @- Y. ?9 v( k/ F
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ k5 x0 u& Y( z( y! k, Q+ I( H- H6 T! n
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ! C. l/ h7 Z: S: r4 t2 ?2 w) p
  886.           dwStartUpSteps=99;
    / T& u/ f# p# O" ?- B! n
  887.         }
    1 c: \$ c! G, z% I
  888.         else
    / b  @) V, r8 W; r
  889.         {
    9 i) D- d  ]  Z- G3 p" B$ a6 F- x2 S
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 ?8 p: g* Q8 y9 N; |
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ( O. J* A% e! b6 \4 Y5 c
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");% R& E- O# y$ v

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

評分

參與人數 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-2-15 14:18

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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