找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
" z* n1 n; x& Z3 i& [1 z- m. s
  1. / RevApp.cpp : Defines the class behaviors for the application.
    * G; j7 P; J/ n0 `% Y
  2. //
    ! T2 k0 M7 w$ N- X3 V2 z/ h
  3. " R7 w  u4 c. e: W' O
  4. #include "stdafx.h"
    : B, ?+ [6 G  u, c( ~
  5. 0 o. x, {/ {( r
  6. //#define UNICODE
    - T3 }! w) W, S  f+ j
  7. //#include <gdiplus.h>) O* b" k, @: U8 C% k, T
  8. //using namespace Gdiplus;. b$ G) z' G& w4 ?1 @

  9. ' g/ s5 O+ J# V4 s
  10. #include "RevApp.h"
    * a+ z; z+ T6 _9 S% ]: {
  11. #include "RevAppDlg.h"
    3 i; m: h2 ^$ M& }. A! F$ s# W( b) |

  12. , G  q* B% L3 |
  13. #pragma warning(disable:4786)5 L( f, [7 H* j" R& I; _) P
  14. #include <map>
    2 V6 o, x4 \5 c. `8 x0 `3 e$ ?
  15. #include <list>) y$ m3 L! w: G+ {
  16. #include <direct.h>. K7 ~) K- {( U0 S! p
  17. ) h% G" Y  a9 t$ b5 t# z9 ~% m
  18. #ifdef _DEBUG
      o1 T6 b0 x! s, b; Y: f* e
  19. #define new DEBUG_NEW5 }& q" Z4 ]9 i- x5 b3 k/ [0 I
  20. #undef THIS_FILE
    9 V& J6 g" L  _6 ]( O/ p$ z9 V
  21. static char THIS_FILE[] = __FILE__;
    + l# d# }- @% F7 @* s, h( ^$ u
  22. #endif
    4 }  l- U& ?: L6 B
  23. #include "SkinResDef.h"
    & m2 o' ?4 N* e# m  ~% A& s
  24. #include "ChangeBG.h". r6 s) Z8 G/ Y) k% x/ d$ U
  25. #include "AFXINET.H"
    ; a! }2 A' m7 T- Y  f
  26. 1 P$ n! ?4 c) J& ]+ Y1 V& r
  27. #define TRADITIONAL_CHINESE 0
    5 J9 ^/ f4 V  Z! G+ Q
  28. #define SIMPLIFY_CHINESE 1
    ) ]+ `( g6 b# d; |
  29. #define ENGLISH 2
    6 K* `+ _! h0 v8 t( Q2 T
  30. int m_iLanguage = ENGLISH;. @* Y/ C& A# _9 F. k" O% A
  31. /////////////////////////////////////////////////////////////////////////////
    8 }0 z4 Y6 ?" f# q. ^  W; {3 g
  32. // CRevAppApp
    , x* R( L  p" G+ q4 E
  33. 8 Q( o3 a) q9 C7 @
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)# m( ~* Y8 L5 T* }4 U0 {
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ! v+ q# @& N# k9 B1 P- r
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 k% v* ]0 ]2 V. M  B# U, o% Y  X! }4 x% O
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!  W9 x6 U- [2 v5 v* g7 t% ?" N
  38.         //}}AFX_MSG
    ' }% [! C$ t4 O
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    3 @( H7 S0 Z5 x% W) R! m4 {
  40. END_MESSAGE_MAP()) y9 S: N- `1 a2 \

  41. ( O9 U& g$ f. k. N  q( E5 {
  42. /////////////////////////////////////////////////////////////////////////////3 R, b( e$ w: C8 c0 {
  43. // CRevAppApp construction
    8 r- f1 I3 t  h6 ~) _6 s( \( J. s
  44. 5 e, M- d8 z: w$ I) ~" P7 N
  45. CRevAppApp::CRevAppApp()* V* w' t8 a- k+ a/ _
  46. {$ N- D2 ^; v" `! q5 C6 @* j
  47.         // TODO: add construction code here,; t! C, R  D! H# S0 m, e/ x' B' Q
  48.         // Place all significant initialization in InitInstance
    7 t- O9 G" h2 [% t( g
  49.   bDisplayIsBig5=FALSE;
    ) X3 M, p& Q4 Z/ C
  50.   bRestartUpdater=FALSE;
    ! \; o4 {; W2 Q8 `7 u
  51.   bFinishUpdated=FALSE;
    2 U2 e* r/ w2 X, n2 Y) c2 y7 |3 p
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;8 D+ u  r7 W! m4 a' }
  53.   InitChangeDataBig52GBKS();
    1 \3 U& N! p5 O0 S
  54.   InitChangeDataGBKS2Big5();
    8 M0 T: Y$ P* P& M$ u
  55.         //6 Q9 Y" W) Y. e) X! g7 a
  56.         bClickRunExe = FALSE;7 \" B, Z7 M" @; m; V1 ?& [! V) p
  57.         //. q2 |. r7 f0 {; p. H* \) v% G0 D2 v
  58. }
      P$ H7 b% a/ h' K8 v

  59. $ z, _3 a. I1 A6 ?3 O' X9 X
  60. CRevAppApp::~CRevAppApp()8 p4 _! o3 v5 q1 Z, M- e% f
  61. {) n2 n7 X7 Y7 X7 i" B- }( l2 r, ?9 M
  62.         // TODO: add construction code here,
    " F1 n1 w9 d( r8 r% X2 Y# W" v
  63.         // Place all significant initialization in InitInstance
    ; Z  f3 q0 g0 G+ ?, ]. w
  64.   EndChangeData();5 o+ g& P) v# M
  65. }) h$ K. p. `( d0 A9 F

  66. * A/ E  v  G4 Y
  67. /////////////////////////////////////////////////////////////////////////////1 V. p( W% ~* |% T: o
  68. // The one and only CRevAppApp object
    ) @: a1 d% H& q, `+ B9 f6 f' D  ~

  69. 2 w0 l4 Q3 J0 o, G( T2 `
  70. CRevAppApp theApp;
    - K) o' }' L. c4 a8 Q
  71. + h' B& V9 a& p  _: @' u+ A
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ; m& u. Z  N& P
  73. {
    + K3 o6 R8 Z1 g3 w2 L4 M# \; [
  74.   int iEOF=0;6 w+ G7 G6 n5 V+ g7 K3 o/ ]% L2 t
  75.   char szTempName[MAX_PATH];4 P+ D/ @# D9 r
  76.   *szFileName=0;0 }* o* ?+ {1 W  j& n
  77.   iEOF=fscanf(fp,"%s",szTempName);9 C' I4 A5 |+ b8 ]+ o2 w2 s8 V
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')# K7 M' {4 ]- M- V" O- X
  79.   {
      P6 N- X/ e9 L# R  N  C- y3 l
  80.     strcpy(szFileName,&szTempName[1]);
    7 e, M& [. d$ a
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    , {; P+ @' S9 l  f" S' t; m
  82.     {
    . U6 x9 }/ _+ n
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " @+ q8 [0 k0 ~1 w/ d( {
  84.       strcat(szFileName," ");
      ^( V' ]$ \8 q' ], u6 Z, j
  85.       strcat(szFileName,szTempName);
      P5 g. r8 X( P! Q8 R
  86.     }
    6 |5 G& y5 p; W* z
  87.     if(strlen(szFileName)>=1)5 f0 c7 _5 k7 ]" `' X
  88.     {
    / g' H; A( Q' M) k8 N! X( j
  89.       szFileName[strlen(szFileName)-1]=0;
    , y' W) E$ L' G! e0 d6 J9 \  I
  90.     }- {5 w7 O1 N. m+ n/ z2 x$ ^
  91.   }0 o# |8 S" f5 T3 {, {
  92.   return szFileName;
    0 u3 {: i3 e* ~! f) [/ ?
  93. }" C1 ~- r2 y, d
  94. ! r) u% {3 l0 V" x
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)2 U. B) u6 j9 ^( H+ H6 j
  96. {
    " d; F( l( F' \8 J8 s2 m9 G
  97.   FILE *fp;! {; \. H& i- |+ f1 u
  98.   char *key=NULL;
    8 [& d; d# J, f
  99.   char version[MAX_PATH];
    3 c- L. u/ N- o# v8 L! F
  100.   LPUPDATEFILE file,olds;6 g1 [+ X- R1 l3 _3 W% j
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    : {: H$ d0 i7 M: O' P
  102. ) Q( D7 p2 p" ]# @/ W. ~" h
  103.   UpdateList.clear();
    ; |! o) ~, w- K1 z9 T0 z
  104.   UpdateFile.clear();
    " G' K+ `- D4 a) s
  105.   if(GetFileAttributes(filename)==-1) return false;7 a* q; l: ^+ \# I4 A; v
  106.   if(!(fp=fopen(filename,"r"))) return false;
    $ J6 D8 ~6 p- c; Q; w  y" P1 v6 t
  107.   fscanf(fp,"%s",version);9 P4 I/ }4 D' j% F
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ( A5 W7 d5 l! u7 x
  109.   while(fscanf(fp,"%s",version)!=EOF)( u% Z4 @7 \  y/ {8 |9 [" ~4 R5 k
  110.   {
    ' {: U& w9 R9 g/ y* p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " K& {# }) f1 V- |! @9 O
  112.     fscanf(fp,"%s",file->path);3 ~- g. i6 V# b6 b/ C2 x
  113.     ReadFileNames(fp,file->file);
    ! Y1 U# m( ]. g& y: B8 w
  114.     strcpy(file->full,".");" ^3 a4 E% `# G! j; y4 Z
  115.     strcat(file->full,file->path);- Z, B# H+ o$ Q( U/ P+ y2 f
  116.     strcat(file->full,file->file);" X) I- a0 z3 }7 N, L# w) U
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    5 ]' d* C8 e- o1 |) v  o
  118.     {  h3 N  s$ l5 Q( p/ h- M
  119.       file->vers=(float)atof(version);
    % t; Z: M/ w- t& j7 O% C9 I
  120.       UpdateList.push_back(file->full);
    4 \! |/ W: N* ]' V1 ~. L
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));( |% U$ y3 G9 z& ]
  122.     }: r. C, y3 l1 T3 [% a
  123.     else
    % F5 t( c  v% O
  124.     {
    2 m/ Y4 t- R) j. a
  125.       olds=(*p).second;' f) m! k6 @2 w3 X! ^$ U4 l
  126.       if(olds->vers<(float)atof(version))$ _( F" i+ A  C! [6 W. v
  127.       {
    4 D' Q  _) o# a$ Q( p8 u
  128.         olds->vers=(float)atof(version);
    ' W1 Z! e& m/ B# Z- f
  129.       }* V. k* H5 s6 p8 S! i
  130.       free(file);
    " s5 C1 i- \8 x" s
  131.     }# \7 h9 p! v/ ^+ P, I2 f
  132.   }$ d  Q1 k; K; O# d
  133.   fclose(fp);
    - e* N6 B9 L7 {" J; p+ t/ W6 `
  134.   return true;
    , ~2 ^# T) p- B  _! F: B! L
  135. }
    , _* D5 l) w+ t4 ]* c- n1 b! {
  136. ) R9 q# y( Y3 G4 U* e
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    " p: k0 P: ]6 `$ u2 k- ~/ Y8 w
  138. {
    & }( q; e0 _0 C% l
  139.   TCHAR  szFull[MAX_PATH];  r, W0 l. a. ~  _; U
  140.   TCHAR *token,*inter;* l9 e! U+ h# \% f1 p) p( Q! a
  141.   *szPath=0;: P6 R" p' b; i' v1 b& z8 y; K: x
  142.   strcpy(szFull,szFullPath);3 n  _- P( R: [4 |% ^
  143.   token=strtok(szFull,"\\/");
      W/ w8 f- L: N( ^+ s! d+ k  d
  144.   inter=token;0 M0 R& D# J' @1 A# h6 K" \
  145.   while(token=strtok(NULL,"\\/"))) X- n5 q8 c  l9 g% w6 \4 {8 h/ e
  146.   {5 X; X. h. ~0 z+ f2 R3 V
  147.     strcat(szPath,inter);
    8 M! m1 F, c% O. Z$ Q% h' e$ ?- ]
  148.     strcat(szPath,"\");, K9 y+ f; d5 ]
  149.     inter=token;( ?7 @4 U! C# g. m* p
  150.   }# o% d1 I( q+ }; d# N* U
  151.   return strlen(szPath);9 f) [& |* r0 ]! B, v- g! p
  152. }
    0 q& S! m% i: P6 \# B/ r+ H' x  h" d
  153. 2 V" ]- W0 n; L- J1 @- W/ ^1 c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)- r$ x" |; q7 A( M
  155. {4 H- t$ s6 `- x
  156.   DWORD attrib=GetFileAttributes(Target);
    / D$ ?1 a. N) o% a6 n
  157.   if(attrib!=-1)  }% K. t% r0 o" c8 t  a
  158.   {
    7 [$ C" q) d5 a7 T  s" j/ A
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))) M$ i* D' i; e' b+ o
  160.     {
    1 V; g2 J. f7 T' H
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);0 Q; ]" b7 Z; j, K( M5 t- y1 _9 ^2 X
  162.       SetFileAttributes(Target,attrib);7 f! h  t) {+ D
  163.     }3 r0 Q9 s# X" ?0 L: M/ E4 }
  164.   }3 }0 t' e$ I, B8 T+ b, @) g6 s
  165.   CopyFile(Source,Target,Erase);
    $ k# V; b& e. n. W- ^9 e
  166. }$ k/ {0 @( k7 ~* k4 A7 t- `
  167. ' m* G3 D" ]2 z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    6 q+ @/ [0 U5 Q9 k4 h
  169. {
    " k$ ]+ Y' S# Q" H0 S) c' R
  170.      FILE *fp;
    % V( n( l5 `. e* l( Q" P
  171.      char  szBuffer[8192];
    8 d7 \# g: x2 q  ?# J. |3 d
  172.   va_list  argptr;
    : L- J: A* p, J+ o  P: X9 m

  173. 2 F5 `. i' V; z4 j/ O
  174.         va_start(argptr,message);
    - K, e" c6 ?( x+ n; Z) K
  175.         vsprintf(szBuffer,message,argptr);
      O) C( y0 o7 `& V1 s* q7 B/ H+ q
  176.         va_end(argptr);0 S+ D) ~0 Z! n$ t/ \  L! ?4 Y
  177.   fp=fopen(FileName,"a");7 |8 S  u6 R$ F5 z# ?- o# s5 f
  178.   if(fp)
    2 E! p; x% v8 b) m( L( O5 s
  179.   {- w' k$ z9 b. N2 y0 n/ s
  180.     fprintf(fp,szBuffer);
    7 Q6 o1 n! m" G+ p0 u' m3 p
  181.     fclose(fp);9 H/ C6 |- p. P, a/ f  [
  182.           _flushall();* `+ Y, G, Q/ W5 L0 ?+ k; @
  183.   }
    ) F8 c8 A4 u9 F* m7 d) Q  f
  184. }9 w" {% K4 X0 f: I6 H: g) e
  185. - ]( B  {+ D+ L; |& t
  186. BOOL CRevAppApp::Fclearf(char *FileName)% D  |- n2 K, S9 Q* r
  187. {
    + X( ?8 k3 [% F
  188.      FILE *fp;; F/ _$ c5 H6 N" s2 B& y* [
  189.     DWORD  attrib;
    8 ~% [5 k* ?3 d6 o
  190.   attrib=GetFileAttributes(FileName);
    3 H! E4 v0 }. {! u8 o) Q) G% C3 k+ L
  191.   if(attrib!=-1)
    4 R+ `4 L2 y; i$ S3 L
  192.   {  u5 ~  k! ?- M/ D$ b, H/ L( _
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);/ w: T: J/ m3 [4 D; e3 F
  194.     if(!SetFileAttributes(FileName,attrib))6 }6 D4 @. `0 {0 V, V
  195.     {9 U1 d- y8 Q0 F$ N' r# z
  196.       return FALSE;
    7 z8 W3 L! x- R$ l
  197.     }
    0 c+ u% O  @6 \9 j6 o: r
  198.   }
    8 i: U% S: r  h, I8 P, K3 j5 P  O2 O
  199.   fp=fopen(FileName,"wb");
    $ ]! n5 q6 s, I! h
  200.   if(fp)
    3 h4 q0 T4 @; o6 E% G6 K/ Y
  201.   {
    5 \9 `, h" {5 j$ t, b- u# x
  202.     fclose(fp);
    # [4 ^) v! \* ^! ]" u
  203.   }$ x" G1 g( n5 V& U
  204.   return TRUE;
    ( c6 @" ?0 {+ O& c1 b9 _
  205. }. L  l* W5 L) h$ U
  206. & M) f/ }  z; E' }2 f, @5 r
  207. BOOL CRevAppApp::UpdateLocalVersion(void)0 I( i7 Q- D1 X3 R8 r$ C& h
  208. {
    / ?  ~" M. X/ t, i2 m  O  U# |6 Y' F
  209.   char filename[MAX_PATH];! U8 |$ c1 B, m2 [
  210.   LPUPDATEFILE file,olds;
    + h" E+ k" M6 U1 ^
  211.   std::map<int,CString>::iterator i;
    ' _5 S: M# L* T) w/ f  g& X
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    " T4 f* Z; k- ^6 h  T, p9 L
  213.   std::list<CString>::iterator l;5 v1 [% x2 O' F% X$ f& a

  214. + \- e; u5 o" C4 n( y1 K
  215.   if(bFirstUpdate)
    ' p7 q+ x" Q& m" a: e5 c) ~# z
  216.   {
    + W, `( X* [7 f9 F, c# x
  217.     dwCurrFile=0;. ?, \6 W  l1 b
  218.     bFirstUpdate=FALSE;& U6 U  d6 u0 j0 m& T4 M
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ {9 L- y2 f% T/ Z" _1 D
  220.     {' ^" }9 n4 X: ?* R' S( Q& S
  221.       dwTotalFiles=UpdateLocal.size();
    ! [9 _! m8 z8 y; E- N4 |/ w3 z
  222.       dwDownLoaded=0;
    ) J# i5 R6 w: b$ |  a
  223.       bSilentStep=FALSE;3 |/ `4 b; F" q$ u* |+ a1 e, I1 f
  224.       bCompressed=TRUE;! T& `, N! L3 m- u/ i
  225.       strExtLocal.Empty();
    + |1 i1 s# T: n* x
  226.       strFullName=(*i).second;
    1 g* D. A$ u2 X& |* v
  227.       dwProgramState=AP_CONNECT;/ o9 k, w$ e  o2 a4 ~9 k
  228.       return TRUE;8 k3 I' {( E! ^  o% u
  229.     }
    & p9 j: a. m$ ?" r
  230.   }
    ! a! P4 w/ i2 z; F$ ~" t
  231.   else if(bRestartUpdater==FALSE)
    , `. @- R( j) |( M7 w
  232.   {
    : x5 \  G& }3 I6 w; ~; X. U
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ( i# W, S! i. g% @* h6 q4 ]+ o
  234.     {
    ; z: C. D/ Z# d- h2 e$ _* q
  235.       file=(*p).second;
    5 C0 A5 V; r* o- B9 n3 i
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    " B' r" Y% s0 r( W6 z0 [
  237.       {
    5 |- ~+ C" i; K, y8 p# C
  238.         olds=(*p).second;
    ' [7 N  T( J" s  v$ K' Y
  239.         olds->vers=file->vers;! }* ?8 K  P$ s' o& f9 ]6 n
  240.       }+ m4 C( t: [; y
  241.       else' w1 O  j1 r) T3 F
  242.       {
    1 @2 i8 w- }, A" m, ^0 T6 a
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 Y' s) y+ y9 z5 g
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    9 f! \$ N: ?& R1 P6 S0 f; ~& v6 O/ T
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ; [5 ]) Y0 t. J* j6 L
  246.       }1 J, f; O& j; t# C/ N8 D
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 C2 ~0 f) W8 \; j9 W8 w; U
  248.       sprintf(filename,"(%s)",file->file);/ C5 x9 D6 q& Z  Z* |% y( P+ Y( `! O
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 U8 |: Q% c" ~3 I+ A
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    # w% E4 J3 F% T* h3 o7 R
  251.     }. M" ~$ Y! u# M& q. t
  252.     dwCurrFile++;4 l4 ]9 V# o: T6 T
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    9 [+ {" ]0 ]& O4 R& m
  254.     {4 k$ i  Q. }$ _2 p
  255.       bSilentStep=FALSE;
    # r- e6 P9 j' F
  256.       bCompressed=TRUE;
    . {: t$ w0 m% o
  257.       strExtLocal.Empty();
    ( d& @6 u6 J' ^" U
  258.       strFullName=(*i).second;# [8 K, s$ ~5 o
  259.       dwProgramState=AP_CONNECT;! c7 m4 F2 G% H
  260.       return TRUE;- F2 A+ ?& M2 L# h
  261.     }8 t% S& [# A9 u, {3 F, [5 z
  262.     if(!bRestartUpdater)
    # U7 q1 p  P0 F
  263.     {
    4 G* V1 x7 f. g
  264.       int iCurrSize,iFileSize;- h2 I( V7 r: x" m
  265.       iCurrSize=0;6 L7 S. e5 O% P0 r
  266.       iFileSize=UpdateList2.size();/ w+ f' V% _1 m' ^' K4 H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");/ D9 f  L( p9 C6 h
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");- C6 o# M; x. Z0 G
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ! l6 U0 p# e& C' j' F
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( U5 A2 e- w# C9 N* }0 N
  271.       Fclearf(".\\update.dat");3 }4 C0 r5 B$ i; X8 o
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    / I5 ~, o. {! M# m- Y3 v3 _# Q; S- ~( y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)8 m8 y+ v/ k) S7 |" L
  274.       {- k" C! j& J" I, p6 |% `
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()). o6 I+ S' @4 {. F9 j5 F
  276.         {
    3 ]0 U! j2 I  M3 b4 r+ n
  277.           file=(*p).second;
    & {3 b* K( ^7 D
  278.           sprintf(filename,"(%s)",file->file);
    6 c8 C/ k7 Q& a. r! @
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / W8 j" F  `3 e0 a
  280.           iCurrSize++;! e  _) s; n0 }  t
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));# V; N  d3 _, ]7 @: `& W5 |, \
  282.         }* P& g/ o/ I' I% }1 ?) r( e
  283.       }) k% @5 z1 L- B2 M& M
  284.       unlink(".\\update.txt");
    % k% i9 A  k4 g% Q9 a7 V
  285.       unlink(".\\update.tmp");. O- J+ E/ N, \5 K! m
  286.       Fclearf(".\\checkversion.dat");* p/ ~: t: ^; j& l3 R% _0 B
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 j9 v$ g- P; B" x+ r6 W. w
  288.       if(UpdateLocal.size())9 [5 r' D6 K: f& L
  289.       {
    0 O8 s* s& F  ^! c
  290.         UpdateLocal.clear();
    7 g, Q- y- `) O# l/ X* @
  291.       }
    * M. v4 d) f+ o  `
  292.       if(UpdateFile3.size())2 F# k. s, i  R; B
  293.       {
    $ [" D: ^/ t" g! J' B( `/ j
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); Z: L6 {3 U+ n, O+ ]9 J0 i3 [/ U
  295.         {
      H; d, \  ]" i1 e8 ?3 p3 B
  296.           file=(*p).second;
    5 w$ k# e6 N6 [) P
  297.           free(file);+ k' [- F, w" M+ Z
  298.         }  k* b9 w) h# b5 I' a5 H
  299.         UpdateFile3.clear();
    + _6 I$ `5 k; L4 U
  300.         UpdateList3.clear();
    % T! c/ I! C1 w9 K
  301.       }3 w$ {( q* [6 \) Z, `* \
  302.       if(UpdateFile2.size())
    $ ]4 [8 F7 _( U8 k
  303.       {+ T6 g$ f0 h/ i. n+ l
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 W2 M' P' T8 m0 e$ |
  305.         {6 T& T( r) [' A$ x
  306.           file=(*p).second;
    3 i3 g8 x+ s# u! O
  307.           free(file);
      }% K$ O: {' X. w1 O+ Q
  308.         }
    $ v% b0 q2 i" D7 i2 ~2 n) n
  309.         UpdateFile2.clear();7 b$ P* Z$ ^" m$ P# ~/ w
  310.         UpdateList2.clear();' M/ P% H1 d, j7 l/ x' F; c/ }
  311.       }
    : D. n* v8 f' O! @) a8 ~: ^
  312.       if(UpdateFile1.size()): Z) O. v8 J$ X( r: G. E0 l
  313.       {6 u+ R0 k6 X6 G: s
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 t9 \9 G( h/ S  ?
  315.         {, n* I& S' w( v* c' M
  316.           file=(*p).second;4 R& e& t4 l4 r# {  M
  317.           free(file);7 L6 g: A8 O/ @- a/ ]
  318.         }
      n( j' J4 ?2 t" n- N
  319.         UpdateFile1.clear();$ H- D0 l3 A5 t- Q" @1 H
  320.         UpdateList1.clear();
    " k4 X, L: k: D
  321.       }
    * ~8 ?/ R  N& W$ Q7 g, ?/ f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    / |: {  O/ d; |* o, D, S
  323.     }
    # n+ u: d- a. H" A
  324.   }
    9 m8 P! J4 H( I# O  {) m  y" S6 V
  325.   return FALSE;# S. i- k8 n" Z- s1 V9 M& Z
  326. }
    + R+ ]0 O- i7 z

  327. - j5 C2 t5 I1 a( N3 i
  328. void CRevAppApp::ClearAll(void)' d' Y% g7 k2 {- r$ v$ S
  329. {! P, C9 X. A, H' P7 m
  330.   LPUPDATEFILE file;
    1 P! w; h1 p8 ]3 g% F
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    + T$ P7 g! G: N% m8 `

  332. ; l, G& p6 @* i, f6 t. E+ j. I7 S
  333.   if(UpdateLocal.size())
    + P7 c/ [8 t) s, x* G/ U8 X2 F$ X
  334.   {6 V6 l! j) V* P# b" @
  335.     UpdateLocal.clear();& K9 U( z# o* [# V' W4 C, ~+ Q
  336.   }
      s3 x8 I% S* d$ \$ `+ x$ z
  337.   if(UpdateFile3.size())$ h8 `7 Y+ k: c: _
  338.   {
    ! \7 \; `1 d4 f/ X6 G# g5 b1 U
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# H3 r0 T1 J- Z
  340.     {  k* T2 d" f3 R! v
  341.       file=(*p).second;3 @7 ~. S3 ^6 ~5 T& F
  342.       free(file);
    % K  U+ y, l; \% ?! A- L
  343.     }
    $ v0 S6 A6 J5 x9 ]. p
  344.     UpdateFile3.clear();
    2 [* _2 _$ i  i; ?
  345.     UpdateList3.clear();
    ' k# i1 d2 A* E# U! {/ q- S
  346.   }0 [4 s' J) `6 k9 J. n
  347.   if(UpdateFile2.size())' k3 w- x0 g% D6 I
  348.   {* b/ B; _. M% s1 I
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% s5 C$ w8 K4 W
  350.     {: }" M; Y5 A- P4 e- \
  351.       file=(*p).second;
    $ ~4 T" a# l7 T. E& c. `" S) l! S1 \1 J
  352.       free(file);
    9 Y* o% B! P% E: e# _' m" n
  353.     }
    / _3 F. c9 ?! k7 t- t2 ^2 X
  354.     UpdateFile2.clear();
    ; U- I2 j1 g* Q' G/ u3 q$ q
  355.     UpdateList2.clear();5 F* t4 B( V( e% ~
  356.   }
    : o- l* N& b& Z" }
  357.   if(UpdateFile1.size())* L9 C& k0 u0 Y! k; j( J
  358.   {
    : h' @7 s. a1 P7 W4 v
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) N) B& L* i1 x
  360.     {( |) T0 ?1 o+ `4 y- s4 x
  361.       file=(*p).second;
    6 y" a# Z5 U/ G9 r
  362.       free(file);. V. c2 V1 e% h& x
  363.     }9 n4 \5 d; y& S, {
  364.     UpdateFile1.clear();  P2 C7 h) D% Y, c* V
  365.     UpdateList1.clear();8 z2 _3 `* K7 `
  366.   }
    & R- w, ]3 Y, a
  367. }  
    8 C  U3 l& a, R/ I+ _
  368.   ! }; a$ c8 W# K
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ! I) P7 T& x' E1 C, Z  {6 E
  370. {
    " I6 B6 c+ L. s% u6 @: W
  371.   int c;5 q- L6 P! c* i. e
  372.   LPUPDATEFILE file1,file2;5 V* F1 ~6 l0 M5 l; G
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;, F6 F& y4 J( S) f7 w- e; V
  374.   std::list<CString>::iterator l;
    - b' n3 c8 W! X1 R: c

  375. 8 p; U4 m) @+ [
  376.   UpdateLocal.clear();: B, U% t% q& M; c
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    5 N1 O: x9 E* u9 l+ x
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);% t( f' L  k4 \/ D! M, j# q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    8 I, j7 z4 b. D, {
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    7 v. [& t+ r# [" n# T$ @4 v
  381.   if(UpdateFile3.size())
    ; g$ ]2 K) {5 R* m
  382.   {
    1 {0 B! K; ]8 b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)! y) w( N+ \/ `  C3 r- {
  384.     {
    7 O. @) F2 a# L$ u) `
  385.       file2=(LPUPDATEFILE)(*i).second;
    * {0 @; s5 @/ u: L/ P
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  p* F2 F% y+ }4 N: ]& A
  387.       {) X) Y6 L( J) S9 v. M6 `
  388.         file1=(LPUPDATEFILE)(*p).second;
    0 _1 t. I9 l( M! B% Y/ v7 d1 e( ]# n
  389.         file1->vers=file2->vers;% y: S2 ]( u* c2 u3 r$ M
  390.       }- J( k6 X1 G, |( {) w
  391.       else: X% ^/ n" H. G
  392.       {; W0 \: Y3 i3 O2 p  g5 ]
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ M7 a  E3 l- v. Y+ X2 Z5 q9 M
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    4 z7 h  ?% {9 k' R, u* H9 ?; G  A
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    $ Y3 U5 I) u" ~0 u' L, h" G
  396.       }9 ^: W- E6 ?4 B( N7 Q! L) z
  397.     }
    7 j. f4 }& s: a# Z. r
  398.   }+ j* @  N. P+ G6 L* L7 A0 h* v
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 o, C! M6 t4 N' f3 \+ S3 A& k/ R
  400.   {
    & [2 c3 N) I7 b2 T5 e; ~2 h3 p
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())5 B) |/ t- Z4 q) a- ]# a) ~
  402.     {
    7 p3 B0 A: n. Q
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 j" d7 E) `( r! D! u& x
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 ^3 l6 Y' f8 C* o% Y+ ^7 ^
  405.       {
    ( R% _7 q3 d$ }, D; @
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 M& i5 f" G) l# W
  407.         if(file1->vers!=file2->vers)
    + T) k+ l( ]' q3 G) f
  408.         {
    5 e5 u& @6 ?4 s+ o3 m
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 [0 H0 ?* [4 `
  410.           c++;
    9 H4 l5 G: t1 N: S* ~+ A! M
  411.         }: g5 A- x, T" O; e2 v8 }
  412.       }% u2 W6 W2 E  m9 _, U7 m
  413.       else" |, a4 |& g# ~) S
  414.       {
    % O/ f0 d6 O! D7 X! x) v
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; W3 D& ~1 J7 ]' g- s( \, X
  416.         c++;) G' @, i) p6 ?; h8 H
  417.       }
    + ~6 c7 H2 A8 i! @8 ?( J- R
  418.     }/ F# Y% U/ s2 z6 A9 S
  419.   }' g% D0 C7 D' t. }# Z5 a2 ?
  420.   unlink(".\\DownLoad\\update.txt");: K" c/ ?, W* u. Q  i' e+ D
  421.   if(UpdateLocal.size()) return TRUE;
    " ?- l1 T7 i1 \6 [% S3 P
  422.   else                   return FALSE;
    & t1 S! z, l! \# Z; n6 n
  423. }7 e/ |- q; |5 [0 y0 R( e6 m
  424. * P( q, @) _- M
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    / X8 C, @0 i7 a1 O' Y' E) b) j6 ?/ F1 @
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    + D$ q  c6 S( w5 y/ m: i

  427. : h+ _! R& A3 i+ d+ p+ D

  428. ) w9 w' P$ }+ y
  429. 2 t" J) b" J3 T7 |$ I
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 q" G( y6 l  @" @$ h
  431. {
    ( ~* }( |  U) D: o
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    * b9 A1 ^! [% d) F5 N  f3 m2 M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    6 O+ k4 T6 Z! G& m: G8 v* c
  434.   {
    ; ?) F( Q- ?. `/ Q
  435.     char szLanguage[50];+ }7 B- y; `. I5 H/ F  a) r
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 y9 c( [- P) @3 q# I) j+ ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    6 C; l- I+ {8 {$ K
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - }9 l- X9 h2 {( z, Q2 K. r2 g! O3 r
  439.     else                                   m_iLanguage=ENGLISH;
    + K8 Z: d. k5 H9 ~
  440.     char szRegister[100];
    7 F, G. O* S1 T) J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + K) e4 e$ v$ J0 l1 z
  442.     strRegsName=szRegister;9 x  t! x( b) H
  443.     char szPatchURL[100];2 H2 o+ p$ q, t5 L# X7 q' s
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 ~$ |2 k. |2 X/ E
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 B0 J  o4 z) q* V0 n) H7 [  V8 t
  446.   }
    1 O; v5 p8 \, v& Y
  447.   else
      D+ ]$ Z) K; j5 ~
  448.   {3 Z% L8 _7 E$ ^" f, A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& M' {: y; f5 E! q
  450.     strRegsName=DEFAULT_REG_URL;7 K4 f' k- m6 l, G: r
  451.   }
      j# d; g. M" O0 ~1 ?9 ?
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ; x' I9 _0 w  h8 _/ k9 G
  453.   {
    $ I) A' ]! H) `; s. j# ]% w6 b& [
  454.     char szIP[50];
    . n& v; \5 Y  C0 Q! @4 g, |7 w
  455.     char szDIR[300];
    4 Z3 }1 F1 N% z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))5 o& p$ d' E6 D7 ?( \7 f3 y
  457.     {& Y7 g* V; `3 H. J. u
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    $ U9 R* Y$ ]2 }4 e  H
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");6 H3 W8 r& A/ t2 A
  460.       strHostName=szIP;0 L4 _( N# G1 @1 U
  461.       strHostPath.Format("/%s",szDIR);
    0 U8 _6 i! ^' h4 J1 x. {) y+ C) X2 N
  462.     }9 Z2 J, r( E6 z  Z" K' I
  463.     else
    7 Z1 h- @9 Q! ?, w; ]$ `
  464.     {: w3 U1 U" R% S
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" ?( M% M5 e) E) N  z
  466.       {
    3 V+ [: e& x- S- b
  467.         char szLanguage[50];4 M3 L) G/ D6 c" Y; [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* a8 b! b2 F$ r
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    / ^, O4 Q8 W% F4 J( z1 Q- u( }
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    9 Q. Q4 \3 g7 m  j% P
  471.         else                                   m_iLanguage=ENGLISH;7 m8 I+ E6 m: W+ v+ y3 ~
  472.         char szRegister[100];
    / I/ L; S( {5 J$ }+ k* ~0 @& B
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 [* g, X5 g4 z1 }' j' L
  474.         strRegsName=szRegister;
    9 b+ c2 n9 S4 O: x
  475.         char szPatchURL[100];
    8 \2 n+ S; ?( Q8 N
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 j" B* z, u+ \& ^* M1 U
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ p( ^4 r' R2 P" ~3 m7 Q
  478.       }
    & t% ~2 g2 y  m$ e; y
  479.       else7 w7 p* b% m' I7 z( u* [; h* W
  480.       {
    & y+ Y; h# S- a
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( p8 H# |) J  D& I
  482.         strRegsName=DEFAULT_REG_URL;: f. U# V8 R/ G, f8 e) {( T
  483.       }& H( x2 U' M* L. e, a. l9 j
  484.     }9 C! h) F$ K7 J
  485.   }
    * W* w' X3 ]6 p+ H
  486.   return true;$ U' y! D& K+ j/ m9 H. R$ @% o
  487. }" i8 |6 N3 Y3 {- Z6 S( y( r, }3 {' e8 R( \
  488. : S; h/ E# a5 p2 d  E$ M
  489. #include ".\ZLib\unzip.h"" U& C- ~  l% v! ?) B" |8 h4 A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);& w6 T# n) J# U; ^5 l
  491. /////////////////////////////////////////////////////////////////////////////" n- i: S6 n2 i  H0 _
  492. // CRevAppApp initialization! X0 u$ l9 V% K% A# \

  493. " p( ?; @4 S. T! d
  494. BOOL CRevAppApp::InitInstance()
    9 b' g$ s# ^$ b7 }2 D! y" g
  495. {7 C2 m$ @; B  M5 R1 g6 o2 k1 t0 o
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];; S8 Z: j) N# ~
  497. 8 h! z8 @5 z# X8 i; b
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
      j' V! ^( W; `) |5 V0 x) \: m; P
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ; N: h* A# I1 x% X! i- ]7 P
  500.   {) w6 l! N4 G( S
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    4 |; X6 k" h& ?4 }3 G3 m( ~5 z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    1 r  i" _- V, I+ z" z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    4 H; l8 J* y! G" q+ D0 J
  504.     {
    : h) }3 T: ~* i/ _
  505.       strcpy(szPath,szPathTarget);/ ?, S( }  {- T
  506.       SetCurrentDirectory(szPath);
    ; w+ Y* k4 s: Q/ b' [* v7 w" v* T# Q
  507.     }! A$ y) x+ _) ]! J/ @: P# R% r
  508.   }
    * {1 y5 `$ ^5 g
  509. #ifdef _DEBUG' E7 X9 X7 Y# Z; f9 T
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 ?, G: k& w4 @7 r( `6 W
  511. #else, S7 F( e3 t4 s8 @, ^" `3 f
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 e$ c$ v' {' R& K- b
  513. #endif
    3 p. f; H* T1 ~
  514.   {
    - d; v/ l3 f# m- ]' v
  515.     char tempFileName[MAX_PATH];6 x6 c' Q2 o" \6 H7 V- y3 a- a
  516.     strcpy(tempFileName,szPathSource);
    & E4 K( Z  D7 J" {
  517.     tempFileName[strlen(szPathSource)-12]=0;- K1 y9 A4 M0 C% |0 v
  518.     strcat(tempFileName,"\\$CSUpdate.exe");/ D( L7 U( N8 Z& c8 P6 m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);1 L4 v) Z( O' a0 ~( I
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + Q; n( u0 [) O4 ]4 C
  521.     return TRUE;
    $ t( C% `- }- u
  522.   }1 f4 T  z. K! m
  523.   // Nuke 0118: Delete run.exe5 Q9 Q0 Q4 @) K! E+ H( a8 E
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );, D+ ~/ {/ \; U' I# }: _9 v: R
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");( R2 E0 c/ ^0 H" n
  526.   if(!ReadCfgFile("Config.ini"))
    . j& s- A2 n6 a* Q
  527.   {$ u. T5 u! F8 ?- B7 L
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    7 c/ c- e! p  Z" z8 ?. U4 m
  529.     return TRUE;% u+ H5 J1 E1 r" v
  530.   }
    ) j( l# r- X& Z4 \
  531.   HANDLE mutex;: j" t8 W% l: E- |9 u6 d/ m1 f
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    # u0 s! w' t2 W" k3 C7 \
  533.   {
    # n2 z  a  G3 c: @
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    1 x3 X" {' E1 j8 ^. `$ g; H
  535.     {# [7 ^5 z: j4 H) ?- h$ m. i
  536.       CloseHandle(mutex);  M6 c( S+ n% \' u+ `4 Z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);- T$ N0 ~) p8 C
  538.       return TRUE;
    ; s0 k8 n7 d1 {2 u: z3 c+ L- s$ C
  539.     }
    ( f/ K, f' R1 J; J8 f1 n
  540.   }  3 d& n# l& Y2 d4 N9 o
  541.   CloseHandle(mutex);( O0 x7 _- S' M8 M) {# k

  542. 8 R# f% Z# o2 G2 I/ ^7 u
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);: N* Y+ W0 ~+ F6 L  V

  544. 0 R# ]) |( ]/ z0 c, U
  545.         AfxEnableControlContainer();( Z1 t5 q: H9 `& w8 x' j

  546. ) p& y* d& F9 a7 I) X' |
  547.   bCanUpdate=FALSE;
      U  X4 n: o- M
  548.   dwStartUpSteps=1;
    : v4 ~1 P- ?5 ~7 [' W5 ]& ]
  549.   dwProgramState=AP_NOTHING;  N+ D: Y# M: P2 @: L" Q

  550.   F5 ?$ y1 Z9 T7 ~% R; r2 ~8 D
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    0 F! m% [. k+ l: h& k

  552. - H" O4 i  p8 e/ s/ X' V( T% p) N# G
  553.         // Standard initialization+ T% I& b, V2 k. y0 J  f7 k" S
  554.         // If you are not using these features and wish to reduce the size! b- q& a+ b) o3 A, \) }( v
  555.         //  of your final executable, you should remove from the following
    0 W0 w5 a! u0 t/ \
  556.         //  the specific initialization routines you do not need.8 Z0 B' ?4 H6 r8 W9 |6 E  q

  557. + i+ y- ^2 y; Y+ p  p+ \$ i" u/ E
  558. #ifdef _AFXDLL* l, R3 D9 R: N+ ^& T
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL4 u0 E  u8 x$ D0 p
  560. #else
    ! @3 O  `" ^6 W7 Y7 ~
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    # N7 J. }4 j$ s- `) q2 F
  562. #endif9 n0 b& n& i  ]/ r! {0 J4 n
  563.   H& p! h$ x) P' @* ~+ R7 }
  564.   dlg=new CRevAppDlg;# q5 G* o! z- l& w
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 w1 v5 r: p7 [/ v9 R) c5 l5 _8 L
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    5 G+ l4 ^2 v; q( j0 E# O; v
  567.   m_pMainWnd=dlg;
    % r% J- c1 g# T, S  \
  568. & s. M8 ^+ H$ `0 Z3 ~
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);' P" q7 `- P3 M0 e" }" N7 \) ~
  570. 1 F- B' }% i# o% l: D" `1 ~
  571. //  GdiplusStartupInput gdiplusStartupInput;' |5 ~! F1 O! ~# j+ h- C- k/ {. k
  572. //  ULONG_PTR gdiplusToken;
    0 F" ~2 V  i, g' `6 z. B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);' X% e6 X  x$ Z  }9 g

  574. , C0 m# z2 P0 D6 W( h( H$ L* i( M
  575. //        CRevAppDlg dlg;2 V5 S: E6 \5 K2 |7 Q/ `
  576. //        int nResponse = dlg.DoModal();
    ( L9 b; w( O) q1 K# s
  577. //        if (nResponse == IDOK)
    6 ]$ d  Y/ W( p
  578. //        {! Y& Q9 B! {# k, \: w+ [7 O' F
  579. //                // TODO: Place code here to handle when the dialog is. U; L! S. s7 ]( x- H
  580. //                //  dismissed with OK
    0 Z; z  f" v2 [+ z: H4 v! f
  581. //        }4 L' Y( ?- I: J2 K# J
  582. //        else if (nResponse == IDCANCEL)
    1 N% Y! B% R+ o  ^
  583. //        {9 c" t! Y: L" e" W' ]9 u% _
  584. //                // TODO: Place code here to handle when the dialog is0 n+ w  t" y8 y- w' K
  585. //                //  dismissed with Cancel
    / `. _, j& [# k' |3 g
  586. //        }
    # Z9 ]+ N) k5 C/ h& Q6 G9 g5 Q

  587. 8 S: h1 w+ j6 z+ J+ C
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ; r  D) N+ `' P
  589.         //  application, rather than start the application's message pump.- _2 z; e, o6 \
  590.         return TRUE;3 u9 b5 c5 ~) U  A/ L
  591. }$ r6 }7 S% H: S9 D

  592. 0 c8 X8 Z- ^* c- V8 b
  593. char *CRevAppApp::strtok3(char *pSource,char *token)) G5 W( ~8 s4 D' Z/ Z0 ~2 l8 [
  594. {
    ( ~; R3 l% C+ O" C/ O2 J
  595.   int i;& e6 E1 N5 n7 n6 l0 e5 v- F
  596.   char *szRet;
    6 ?0 w" Z+ L9 M2 E. j/ j; ?! g) r

  597. : U; j, [6 \2 r7 B4 k8 v
  598.   if(pSource) { itoken=0; sztoken=pSource; }. S6 p! A% q, z" F0 K: ~/ `6 }
  599.   if(sztoken); {, S4 z8 Z+ q- `9 H7 o, D
  600.   {
    , X8 K6 s# A+ ^0 y
  601.     szRet=&sztoken[itoken];) k. b5 c6 a$ l4 O$ \% Y$ D9 ]8 C
  602.     while(sztoken[itoken])
      K3 a& s& q" n' f" I* ^' J. e
  603.     {8 I, ^9 ^5 x9 m% l3 Y0 m; U$ X
  604.       for(i=0;i<(int)strlen(token);i++)) }& A1 ^; I8 F3 @& Z3 B1 @8 K0 y, \$ `" I
  605.       {) \. \3 Q# P2 |- U
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])/ }2 W* I6 c( v
  607.         {$ j. R5 r2 Y& M1 X% F4 Q6 U  I% T7 z
  608.           sztoken[itoken++]=0;
    ! W9 b7 k! ]7 v& B/ _
  609.           sztoken[itoken++]=0;  c/ i& Z+ c0 v: }& l% {+ e6 _/ y
  610.           return szRet;
    8 {4 G% x7 _% c, `8 w2 A+ H- o, u
  611.         }
    9 |$ Z  X5 x: Q6 j4 t
  612.       }, _2 C! ~3 Z' _8 ~
  613.       itoken++;0 I3 u9 ]5 I1 R4 V
  614.     }' \. P; B: F5 m& m- U6 n& S
  615.   }
    ' r* O. ~) s9 }. E
  616.   return NULL;7 o5 _8 x8 U! g5 b
  617. }
    7 z- U: ?! t0 ~6 i, Z7 N1 w
  618. ' u. G7 A( u) ~$ L! n1 z
  619. void ProcessProc(long Total,long Current)
    ) }' ?  \/ d' a! _* |" l" d
  620. {( B+ t0 V) d9 \6 X6 A* i
  621.         MSG msg;( i& |* b+ W& ]7 @2 O
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    / Z3 O# B2 Q. y! a! N1 Q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 o% K" A1 F5 K$ v* i9 w+ @8 U
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    5 U3 R+ f2 q, @+ A; q) H
  625.         {. h( ~# D# V1 G% O
  626.                 if(!GetMessage(&msg,NULL,0,0))
    * J$ C5 H& t. W
  627.                 {
    6 i0 i1 H, ^# \3 G6 l
  628.                         return;
    # S# m6 N9 f4 y  c& U- q: v
  629.                 }
    9 Z4 k  ]$ q) Q" {4 \" v6 g2 N
  630.                 TranslateMessage(&msg);
    6 c' ~9 B9 Y0 T# G; H: ?( B1 i
  631.                 DispatchMessage(&msg);
    4 H" \0 l3 O- r: l* F* k9 G, N
  632.         }        ' r% J3 p2 k$ d) \( i  ]
  633. }* b5 x1 ]  S' `$ N0 {& S
  634. ( P' {/ B, O) Y
  635. BOOL bFirstChar=TRUE;# r; z5 k: x8 |  ^) G9 D* Y

  636. ; ^/ o- I$ ?; V+ r' Z7 h* q8 U5 @
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    7 ~' \2 }* e* _# m4 k
  638. {
    % U6 @: n- T$ r' h" V! ?
  639.         // TODO: Add your specialized code here and/or call the base class! V7 f: j8 @0 B: q0 h1 b- v3 D# q7 Y8 Z
  640.   switch(dwProgramState)
    . Y! d. `1 h0 o% R3 S1 t
  641.   {  C/ F) s$ c" {! {) @
  642.   case AP_NOTHING:, h) q% E; @, i8 H% w$ f  B1 c9 D8 Z$ t
  643.     switch(dwStartUpSteps)
    & P/ w. {6 z" [7 R
  644.     {
    1 Z7 L# [% f0 ?+ A+ S7 O5 v
  645.     case 1:
    9 r5 p' W  K+ f* j5 r
  646.       {; ?1 o, R) H( e" D0 t$ m5 y
  647.         int i;- J: F, ^) e, T) {% V0 ~/ n( W
  648.         CDC *pCDC=dlg->GetDC();
    0 p2 x0 Z# p- E6 ^
  649.         HDC hdcwnd=pCDC->m_hDC;
    + @) I) _. M, _8 T) [, L  y
  650. //        Graphics graphics(hdcwnd);0 v/ S& o  q* |4 x+ R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");& [4 `/ K# v- A  B' r# ^, W( R
  652. //        INT iWidth=bitmap.GetWidth();% L$ F& N* Q2 G
  653. //        INT iHeight=bitmap.GetHeight();
    9 Q. ]! a! v) C. R4 t  l
  654. //        Color color,colorTemp;
    0 c! l0 `* \: }5 y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    $ _( f/ H) v2 H1 Y4 |
  656. //        {
    4 x& O* B7 r  f
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)! g# N0 Z  W* H  Y
  658. //          {4 |7 \* _; Z. W; |; f( D1 Y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 |! j' v9 i# e
  660. //            colorTemp.SetValue(color.MakeARGB(5 x5 V, A- s+ A% T5 B+ m
  661. //              (BYTE)(255*iColumn/iWidth),% ^2 v4 e9 n, ?. M; D4 M
  662. //              color.GetRed(),
    7 C8 w8 j+ {  R9 s# w' z& s+ W* i
  663. //              color.GetGreen(),% k5 B, R+ j" L
  664. //              color.GetBlue()));
    ) E8 }9 x! e2 T) T0 m
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);& z0 N$ x, b! m8 u4 g6 L/ v: b
  666. //          }/ z# ]: i4 ]/ J( S0 S" ]9 z: W( i; N
  667. //        }1 ~: w1 I( r3 I! a2 r% Y- F
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    9 Y* Y; \. P2 b2 e/ Z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");  ?( d8 ^' ^) y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");, c, V  }# T0 ~* d
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! ~* t" N# ]5 t" W& w" t. F6 T( J
  672.         for(i=0;i<240;i+=8)
    + Y# }6 n) ^- t  X* T
  673.         {( ^; c1 m  v% l0 H
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. U, Z% z( O# |6 J& K( j; Q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * y) l" v2 l- `* H6 ~  B. D
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ v$ `2 Y5 T) H4 C2 ^: ^- m+ a7 n
  677.           Sleep(33);
    % G. i5 y- Q* l* I: F
  678.         }  O4 n2 l! `7 A6 s% V1 k$ X
  679.         Sleep(1000);, Q1 c- ^& E6 E
  680.         for(i=240;i>0;i-=8)
    5 ]4 K5 F9 ]0 [1 `" V# ^/ j
  681.         {
    1 v$ M4 g. O, i' m$ l( t  M
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 L9 \5 k& J3 ]
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 X# d$ `$ O! d) M
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 f. x2 X9 M1 l0 l
  685.           Sleep(33);
    , }7 L3 u2 Y& Y8 G# s
  686.         }
    " s* m. y# e; `: R' {
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    # {0 ~# @7 F- |& e' ?
  688.         dlg->ReleaseDC(pCDC);
    " w- Q9 }; I2 F9 R4 ~- f8 K
  689.         DeleteDC(hdctar);+ o! J! T: K1 F' [, }
  690.         DeleteDC(hdcsrc);
    & i  d4 e! H- u& W4 u  s6 G) g
  691.         DeleteDC(hdcorg);
    : T: E. O0 \& U1 t* j$ B
  692.       }. x: F! K# p! f" I  n/ A# s
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    # r! s9 A1 m' N( x
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    + k3 T, y9 K  Z* B2 D) ]
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    " F6 O% E+ v" F! Z# I
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 }7 w0 F# M0 ]
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* R% I4 x; Q/ J& y! H& @
  698.       if(!Dn.Connected())
    , a1 `" {9 @5 o& J* v
  699.       {9 k+ K8 T8 `  a' H9 e' }
  700.         dwTotalFiles=1;
    3 Y, j3 T6 _2 y
  701.         dwDownLoaded=0;' M# B+ B9 a+ [5 d5 ]* i1 I- d& S
  702.         bSilentStep=TRUE;) P2 E  I- U/ ^) C2 u& z( I
  703.         bCompressed=FALSE;/ [" c6 P* ]" s
  704.         strExtLocal.Empty();- L, W2 X' b4 \
  705.         strFullName="readme.txt";, g8 `3 M( l8 k
  706.         dwProgramState=AP_CONNECT;6 X- G) G7 ~! o  o+ G6 _
  707.       }
    1 t1 D( C" v6 b4 V4 R2 r  O& ~6 `% T
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    $ Q4 [* i0 W2 J4 d( E0 n
  709.       dwStartUpSteps=2;
    1 p; p1 Y8 [" Y& J/ P0 T7 I
  710.       break;: S- X' T- z0 F; W3 b
  711.     case 2:7 D0 R* q5 }4 j  u7 F1 _
  712.       {  Z- |, c+ H) Q/ e5 K$ d* z) z0 r
  713.         int iEOF;
    1 W# b! Z8 _  e* v, g
  714.         FILE *fp;
    + A: _4 C7 {& I4 m+ W
  715.         char szString[512];, C: I2 n7 ?% J5 D$ ?2 f2 C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    0 U+ t# d& I1 |2 z, r5 l
  717.         if(fp)
    $ H/ b8 x1 f" n5 Z8 f$ o3 p
  718.         {
    ; _+ \' t  x3 Y) Z
  719.           do  m5 T% L, N4 Z
  720.           {; A& U$ T4 W- |
  721.             iEOF=fscanf(fp,"%s",szString);. i& x  @& Z  V( m
  722.             if(strlen(szString))5 \& X& t. d/ V, c* ]
  723.             {
    - [0 G/ X( X- d
  724.               if(bFirstChar)
    $ K( u! Y- \* X) E& l9 E
  725.               {7 {# H5 m$ Y- w- r7 D! k$ D5 f& Q
  726.                 bFirstChar=FALSE;) F" }* L( W/ N& f
  727.                 bConnectIsBig5=FALSE;5 ~' [1 C9 B" l7 b, ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
      z: g' U& a/ G  J+ |4 B7 k
  729.               }6 r  ^! @0 L. E  }5 y8 P
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; P% [: c3 O1 ^* H3 ~; a
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . K5 A( {3 [  P0 i3 \) B1 R
  732.               dlg->m_ListText.AddString(szString);* s4 J/ t7 G. W% S1 w$ l
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ i- J3 T3 @. X+ H) K
  734.               *szString=0;# i+ K5 J8 J3 e; T: k
  735.             }
    5 [0 B8 y7 d+ U2 g" b( w
  736.           } while(iEOF!=EOF);2 m' h. ?0 W2 e4 O& P$ C
  737.           fclose(fp);" j+ ?$ T6 Y4 s
  738.           unlink(".\\DownLoad\\readme.txt");
    2 P  X0 L1 E+ `
  739.           dwStartUpSteps=3;/ w9 H, x& i1 O' n( m" u$ w' @3 b
  740.         }% [; L5 i) N! e
  741.       }
    - R. M" d7 k! J# w
  742.       break;
    ! n$ Z0 N: i( ]1 e
  743.     case 3:
    . x$ c& O; M8 Q5 k: i6 b, q: M
  744.       if(!Dn.Connected())& O! k6 L! g' P5 Y0 l
  745.       {; p4 J0 F- E. f9 A9 Y4 g! P% m2 x
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);# p/ H+ E! J; o: J+ b# i
  747.         dwTotalFiles=1;
    ; d% K. m0 a# v, y6 }
  748.         dwDownLoaded=0;9 R2 G" U% v6 U. H& i% t
  749.         bSilentStep=TRUE;
    * p/ C; N1 [# I1 s5 ~- R
  750.         bCompressed=FALSE;" M7 r: S! C  T# E3 [
  751.         strExtLocal.Empty();% c  u! T+ f2 @" g  R. U: X
  752.         strFullName="checkversion.txt";
    & ^9 x( `* C  X- u( Z
  753.         dwProgramState=AP_CONNECT;: V) f  ~! W! J. e! w, |
  754.       }6 Y2 S7 ~3 q; o9 j; D, _# z
  755.       dwStartUpSteps=4;
    ) A8 m" p5 f9 e% C- {
  756.       break;( B  A% n9 B) @& M
  757.     case 4:. Q0 o4 K1 Z: ]2 m. E8 u
  758.       {3 {. {7 e. S4 c& M9 ?$ v
  759.         FILE *fp;* h4 w0 S4 {; R, o( U
  760.         char szString1[128];. C. E, T& h5 B, P
  761.         char szString2[128];9 a/ E- d) H7 T) s3 v% O
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( j$ _  w) E$ u0 x( M; F
  763.         if(fp)
    9 S/ i6 x( J* ?1 W
  764.         {
    8 G' h" m. @. h2 _0 h  w1 Z
  765.           fscanf(fp,"%s",szString1);
    9 m2 L- D! a' B8 p$ f
  766.           fclose(fp);: u2 [1 |3 j" H# z0 Q  D
  767.           fCheckVersion=atof(szString1);
    ; M' [6 u" @: W% j0 Z
  768.           fp=fopen(".\\checkversion.dat","r");, H+ P( T7 d4 v2 T2 k
  769.           if(fp)5 P) G! d8 |* j; ]$ K3 n; Q0 v% A$ }/ `
  770.           {
    6 c( }# u7 c; N9 c: N$ F& e3 P; p" d
  771.             fscanf(fp,"%s",szString2);" z8 u& Q+ i3 F" U4 ~+ l
  772.             fclose(fp);
      @; K0 B. b, @  U4 e2 O, D
  773.             if(atof(szString1)!=atof(szString2))' e% b" R+ r/ O5 Y. Q
  774.             {3 B. b+ i- V' Y+ {( ?/ [
  775.               if(!Dn.Connected())' _  S8 @8 E0 {* T
  776.               {
      n; G. x1 s. o7 V; Z+ y9 I5 z# g# Y
  777.                 bFirstUpdate=TRUE;
    % b; S# j8 l  C
  778.                 dwTotalFiles=1;) x! L9 U1 `8 X4 }$ ]
  779.                 dwDownLoaded=0;, Z3 i: I/ O4 n$ K- ]
  780.                 bSilentStep=FALSE;  f! i* z: n9 R; j1 N7 m/ p# m
  781.                 bCompressed=TRUE;! ?/ T* a/ v! H2 @
  782.                 strExtLocal=".\\DownLoad\";
    7 I5 M0 Y% {/ w1 E9 x2 m) I
  783.                 strFullName="update.txt";( Y6 j, W6 ]8 {% x, X( k+ e
  784.                 dwProgramState=AP_CONNECT;7 K& ~( N' S; _  C( o
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      H, J$ }4 s, k
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 S& @$ v5 o  H6 I
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ A6 t( b- K) F7 w/ E; q' s

  788. 3 X1 Q7 m. s6 T4 s3 ]
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! E) e, }8 b. ^6 b4 t
  790.                 unlink(".\\DownLoad\\checkversion.txt");6 _! s1 ]- T! I0 n) Z- n3 \# w
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)6 k$ m6 E+ T$ V  k3 E6 o
  792.                 {- ]8 S% ?2 D2 w% g4 V. H
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 V" }. L7 F$ E" \9 U
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");- c9 v5 p3 w- x. R4 e8 @; c* t$ n8 e
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    " ?! n9 g0 N: a0 G
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # E- X7 a; n: u2 v4 j6 Z( ^% i0 _
  797. , L% X: E7 h' ?$ d* ?" ]8 j5 r& E% s
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% o( U6 p+ T* s. V, t0 h
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : o& x/ n; x5 u
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    . V) p2 `0 ]9 @4 D1 j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. J9 w) `* `7 U- v* O6 J% J
  802.                 }
    + E. e. D6 N" A# C9 p# |8 {" _8 k
  803.                 dwStartUpSteps=5;& z# b$ q% e% X. f8 t% c& _
  804.               }. I7 c! k( r& t  B+ l
  805.             }5 D7 N7 `3 h, E& P. O# Z
  806.             else
    ) J; S$ m0 R. k( l4 s6 V. \
  807.             {5 P$ b1 x9 l, }) R% Z3 d
  808.               unlink(".\\DownLoad\\checkversion.txt");! f' A3 Q- E& X. i# c7 z
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");( J) ~+ a8 B- Y# s7 I' V; Q' k3 n6 r
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 h, _& z& N! k) y* m; V! K! S4 F
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");9 O) H6 x7 n/ x) f% ]% ?! B
  812. * [9 b8 n) }. m9 z' a
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 e) A' }4 L) N# T
  814.               dwStartUpSteps=99;1 ^$ @1 ^+ a7 x& z
  815.               bFinishUpdated=TRUE;
    0 L* ~. O- [9 A; M/ {; A5 S
  816.               bCanUpdate=TRUE;. m0 j6 O( n# d1 R: _
  817.             }
    ' O- m) }7 }3 L9 ]/ V2 O# D, N4 c
  818.           }4 e) y; b6 k2 F9 k2 U/ V. `7 Y* v/ m9 E
  819.           else
    ' [' D& O) M. f, t( U/ Z9 G% e
  820.           {& _# ]( w- Z' Z
  821.             if(!Dn.Connected())
      }# V! x9 `) z1 V2 ~
  822.             {! J- p% M+ L$ Y1 `
  823.               bFirstUpdate=TRUE;' f( h  D5 C9 C' t- C
  824.               dwTotalFiles=1;" K' o) o2 |, V- y# R
  825.               dwDownLoaded=0;+ |: M6 k0 Y! E+ ~" l4 ^- g
  826.               bSilentStep=FALSE;. U+ q, I( m% k
  827.               bCompressed=TRUE;
    - J( M. ?; `- T  x) M4 \
  828.               strExtLocal=".\\DownLoad\";# [( u3 Q$ s" N% \# X" \( y
  829.               strFullName="update.txt";4 a1 ~% Z" M. i+ w" ?
  830.               dwProgramState=AP_CONNECT;
    7 D; F/ c1 y0 f2 [
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " A8 F4 D; w9 m  o4 Z" c+ G
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 T8 A! m8 k1 P. K- x1 @* Z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 ?% x2 t/ Z, d. m
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 c; F7 R/ g5 Y
  835.               unlink(".\\DownLoad\\checkversion.txt");
    # h1 h2 H- O# S% \) e5 y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)8 s6 G$ i9 E/ d* ]: V
  837.               {7 ^6 @( ]" I) z& _3 `! P
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");3 T4 i- j: o2 J2 }6 o" h
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
      S' [, M- |/ C8 V( f4 j0 n
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");2 l& v- y. E- L/ S0 y* C! d' U, u
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & A1 t7 M6 ^! q# x. K( x; b
  842.                
    " K; g& t' G/ Y
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : y3 f' p1 B9 A
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; F5 l6 W$ d! v$ q( Q2 s1 b4 P; T
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");  s6 U* Z  i0 h( V0 a$ U: T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ o5 O1 }4 @, q3 ?) \
  847.               }
    & e) d  a. {9 U. j# T% \
  848.               dwStartUpSteps=5;
    & S- n, D4 ~3 m2 V1 I" g
  849.             }
    7 E) H! Z3 q6 d1 o+ R, t) \9 v/ u
  850.           }  j& L) d: M0 T
  851.         }
    . j# S) W* [) n; a. }" E
  852.         else
    : v# g. t- M5 r
  853.         {
    / l3 n% O* f9 e7 H9 B3 \
  854.           dwStartUpSteps=3;
    $ S1 {& t- t: }) _2 s4 m  V
  855.         }
    3 p% F- M2 K4 b& @( u) |& z/ [
  856.       }# W6 K' j5 d' ~, _; K2 p: s* V
  857.       break;
    & K2 L. F& |8 V- b6 n
  858.     case 5:$ b, Y- y2 j) x' }4 F1 H
  859.       {
    * w) f! h0 {+ Z
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ' Q# F/ k8 O6 T! I4 |1 T) v" W
  861.         {$ k6 i) B0 h; C! F. Y0 N
  862.           int opt_overwrite=1;
    / E7 ]4 {8 U! G& T
  863.           int opt_do_extract_withoutpath=0;
    4 t7 I) y; ]9 K8 t' m
  864.           unzFile uf=NULL;
    : B# [3 W4 L; t9 q( }- r8 U
  865. . k- M0 U( O7 i+ g! t2 U; @
  866.           uf=unzOpen("Wsa.zip");
    8 d$ C. `) Y2 j
  867.           if(uf)( S4 ~4 i( }1 b# ]; h
  868.           {
    + H9 Q) e# J, l0 l4 v/ J) B
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ) j5 z7 G6 v! f3 g+ B8 S
  870.             unzClose(uf);& Z5 K4 p$ H( s- f$ Z, c, p% X7 q" B9 R
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    + s8 M2 p8 ^, m( m
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    $ {1 }; C# Q- V- D( Q
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");# n7 [  v# Y' l! h4 D8 U( z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # D" K8 ?! Z4 B/ X7 T5 x* S, j
  875.           }/ T7 F+ ^! q/ c: J
  876.           DeleteFile("Wsa.zip" );
    . |: a0 \5 w: A( g5 D
  877.         }
    5 {, c6 K- f4 u9 P5 M

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

/ Q( R' n$ E: w" U- T  T* j' B6 E* |; p1 r9 c

評分

參與人數 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-9 10:51

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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