找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
. D5 ^0 ?3 j$ p. x( ?* K2 U; u' w1 q
  1. / RevApp.cpp : Defines the class behaviors for the application.8 r( g; R; M& S- c% r
  2. //1 k& i; I) z" t, \7 n4 c

  3. . r+ m" v, u9 L/ O, C4 |. Y
  4. #include "stdafx.h"* J5 X3 ^! U3 m( G! d
  5. ; \; V' P+ M0 x, C4 B! X
  6. //#define UNICODE
    / M) k/ O' @7 N0 S2 ^6 ~) D- i
  7. //#include <gdiplus.h>
    6 q+ v. W" c+ s) k9 P
  8. //using namespace Gdiplus;) x8 u% v% L% ^2 @8 I6 }+ Y

  9. 8 J, J: n% Q+ A8 p$ F( B5 @7 I
  10. #include "RevApp.h"
    4 H# o0 q# C4 E7 A. E; |7 B
  11. #include "RevAppDlg.h"9 u! I. d1 c: a: M
  12. # G9 Y6 b& C8 S8 a
  13. #pragma warning(disable:4786)* @( A! q  _/ U2 K/ F
  14. #include <map>& |% J( x* ]& n" C9 o# j
  15. #include <list>
    - Q( o9 ]# _- N1 V) J' C9 p
  16. #include <direct.h>
    4 H, e# a, u( x% P( z

  17. 9 U0 N# c5 a- i2 c
  18. #ifdef _DEBUG: h$ N2 W) \( }7 w( }
  19. #define new DEBUG_NEW$ e1 X* i8 Z; A- |
  20. #undef THIS_FILE- n& L0 D. m- ?) O5 A. ^
  21. static char THIS_FILE[] = __FILE__;; p- F0 P2 {* T
  22. #endif+ v$ J3 t8 {$ Z1 M" A- p
  23. #include "SkinResDef.h"% ]! W3 j% g: j( V7 p
  24. #include "ChangeBG.h"
      J- g4 x9 {1 w, @4 D4 v0 j
  25. #include "AFXINET.H"1 V' l/ s6 K2 D
  26.   o1 u  {+ ?7 B% x  v" _5 d6 Q
  27. #define TRADITIONAL_CHINESE 0/ c# }, j# G9 ~3 U
  28. #define SIMPLIFY_CHINESE 13 U: X& X" L2 q3 J
  29. #define ENGLISH 2
    $ q) I9 v9 t0 T  Z) g
  30. int m_iLanguage = ENGLISH;  b' W$ R' n. H/ j
  31. /////////////////////////////////////////////////////////////////////////////) R9 ?% n! l" C5 G
  32. // CRevAppApp0 E9 q. R5 p  ~1 P2 K; F1 H7 g

  33. / a6 a0 t; u+ y# P5 r
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    1 a7 M; m  T. J1 Z. M" ~
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    - q) {! i3 S- r! W3 c$ q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    , e0 t1 |3 p- [
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 w2 R9 d! S5 U* x6 o  {$ Y
  38.         //}}AFX_MSG
    ; _% A3 d1 E" X$ p* \  S9 Q; d
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)6 s$ E. Q6 R+ ?6 K
  40. END_MESSAGE_MAP()
    ' p9 ^0 w0 r  n# E

  41. 8 w% Z7 R" n, [1 g
  42. /////////////////////////////////////////////////////////////////////////////, R/ ]" v  ]+ B$ d6 ^
  43. // CRevAppApp construction7 D$ u7 w% y9 S& {
  44. # k" L! a) F) Y, B! ~
  45. CRevAppApp::CRevAppApp()
    : N3 }3 r# `0 H7 f
  46. {
      a/ p* l6 F% I# b0 }3 E! X- C
  47.         // TODO: add construction code here,( G: m+ _+ ?* l5 u
  48.         // Place all significant initialization in InitInstance. c5 Z7 x6 h' |9 ~7 `1 J: i
  49.   bDisplayIsBig5=FALSE;
    . C0 b& O( u0 m& R) y4 N* j: W
  50.   bRestartUpdater=FALSE;- ~/ z; y) X5 {6 Y/ F, A. t
  51.   bFinishUpdated=FALSE;6 i% }( [! g  n* e7 V1 |. ?* I
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    / X4 u+ a/ B9 B. V' x- [- V/ K
  53.   InitChangeDataBig52GBKS();; \$ G- u  Y- a2 a! K% p
  54.   InitChangeDataGBKS2Big5();
    & h8 F2 {7 r5 C0 j1 J5 S
  55.         //
    ; @6 B/ D% q# |2 U' |
  56.         bClickRunExe = FALSE;
    3 ^0 G9 Y+ c7 K+ P
  57.         //; ?) j! ]0 {* z) R* |" p
  58. }
    ) O$ [6 e9 l8 H, s- ]: T3 I
  59.   i* I9 N, n( C! T3 d
  60. CRevAppApp::~CRevAppApp()
    0 a/ F( _% K, e) {/ h
  61. {
    $ M7 X( e) V# p+ C/ a% \9 \  P
  62.         // TODO: add construction code here,
    6 D7 d, C. ]+ E' j: Y
  63.         // Place all significant initialization in InitInstance5 d3 p2 ]; J8 U1 f, s: U; X+ [/ ~* g$ H
  64.   EndChangeData();
    0 K# F3 V: d5 ^0 O
  65. }
    1 g9 a! ^) R- r; I# i& ?- ^( G

  66. + b& w" J) O, Q6 Z
  67. /////////////////////////////////////////////////////////////////////////////
    3 k$ h! y9 e% }1 [, Q" n8 N
  68. // The one and only CRevAppApp object
    9 a8 @1 l. L) o1 X9 k5 m  e; J

  69. ) J. q: y- m  z+ S# R- m
  70. CRevAppApp theApp;* L7 A& L7 ~; k) C  p7 S" Q4 i

  71. $ ?4 V& I6 n5 ?5 R
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    5 N4 n! i& Y6 K" e$ I, {" V
  73. {
    ; n' s4 @* l6 o( J' t6 o
  74.   int iEOF=0;
    ; B8 t& F  a7 Y$ t0 g# Y) u* k
  75.   char szTempName[MAX_PATH];
    5 _' \4 y+ K9 U& @1 L
  76.   *szFileName=0;
    ; Z6 Z1 p5 V9 c( Z* g
  77.   iEOF=fscanf(fp,"%s",szTempName);
    2 Z# C6 @$ D+ H
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    . O6 ~# V/ A+ O  V, G5 M
  79.   {
    6 m& w% R, ?$ J/ w& |
  80.     strcpy(szFileName,&szTempName[1]);
    % F0 i( \3 L0 l9 m! p$ y- U
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & u+ k# p( J. E5 C1 M
  82.     {
    8 }) i* a; h9 w7 m( v
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , B$ U& i  M* G4 ]; F
  84.       strcat(szFileName," ");9 K. b6 U, k. r( p. s% R
  85.       strcat(szFileName,szTempName);7 h% r1 m! ]% f% G
  86.     }1 t9 R3 {! f+ r4 M& f) b- J' D6 j
  87.     if(strlen(szFileName)>=1)  V2 @3 D! @4 S0 B" o5 Y
  88.     {
    # x7 V0 A0 T2 W( I+ R3 L
  89.       szFileName[strlen(szFileName)-1]=0;
    $ s" @1 ?+ k& z2 f& E7 ~) {
  90.     }% ?# _1 M* t6 u9 x
  91.   }
    5 w  k0 P) l: b6 ?+ @: X8 u  n
  92.   return szFileName;9 Z0 O) D' o* e; g! r
  93. }
    - d: ?) r  s0 y6 M9 I# a
  94. ) _* ~' h5 ~& a1 ]7 H5 M+ V7 y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    # a% }# R; i; F8 ]
  96. {5 }  _/ T7 C3 x; w) O
  97.   FILE *fp;0 [+ N! w9 m- _
  98.   char *key=NULL;  Y- v7 h& `3 L  P
  99.   char version[MAX_PATH];2 q9 A6 M8 j! P( J
  100.   LPUPDATEFILE file,olds;
    ; ~* Y8 e, f# \4 G# ?
  101.   std::map<CString,LPUPDATEFILE>::iterator p;# R3 x# y7 F/ H; I/ `* [' A- n  j
  102. ' u) I; f: i2 ~6 z0 O" Q0 x* `& R
  103.   UpdateList.clear();
    3 ^( W5 l! C0 d* ~; |+ k6 f7 ]9 A
  104.   UpdateFile.clear();
    7 P9 y' @( @6 _( C$ o
  105.   if(GetFileAttributes(filename)==-1) return false;6 p. p1 }+ ^9 U6 _
  106.   if(!(fp=fopen(filename,"r"))) return false;; O7 x7 A/ d) \# r; P' n& w7 n+ Z
  107.   fscanf(fp,"%s",version);$ ?6 [. |. J/ ~# A: @/ K) A
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }# i4 s$ m/ ^; m/ M
  109.   while(fscanf(fp,"%s",version)!=EOF)
    9 _$ i7 K9 x% m: e7 s
  110.   {: N0 G% u* r' S: a/ T3 }
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* m- d: ^% D7 r/ r* g
  112.     fscanf(fp,"%s",file->path);; j+ M+ d& `( {
  113.     ReadFileNames(fp,file->file);
    2 @0 a  r1 H; U' v4 B! m6 x9 t
  114.     strcpy(file->full,".");* |: h$ V0 H% W. U0 A# @& T
  115.     strcat(file->full,file->path);8 I! ]' e) L/ M4 M& g6 b
  116.     strcat(file->full,file->file);
    + I3 @1 z5 ]. @: w- ~% s  B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    * a9 E  X/ V$ Y
  118.     {3 _3 k; Q, _' y! O7 W2 `
  119.       file->vers=(float)atof(version);! m, u" X8 d( U, j, r5 k3 s: `* S
  120.       UpdateList.push_back(file->full);5 o, _; M5 x) N8 [) C( S
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));* A; Y- T% {% L( a8 Q) Q
  122.     }
    & o! p. x1 c' a6 P- w3 e
  123.     else: O, c- b* j- M, b3 i0 f1 d5 ~
  124.     {
    ! B1 W: z, G- Q4 Y9 w# W
  125.       olds=(*p).second;
    % z& L9 z) G+ I4 Y# w
  126.       if(olds->vers<(float)atof(version)): }8 `; `2 C  B; m3 n* m4 V
  127.       {
    % @' U+ ?3 i+ s/ B, k. R& N: a' m
  128.         olds->vers=(float)atof(version);
    , I. E7 K: ]6 D
  129.       }
    " _, {  C  S. m
  130.       free(file);: N7 O! A/ F9 T5 a* g% H$ A( ?! h  X
  131.     }! x1 U2 G+ r+ a+ v
  132.   }
    ; \; F8 ?: n& v+ W% q
  133.   fclose(fp);% @: c$ P( `1 c$ ^
  134.   return true;2 i2 Y* O: ?2 d( f4 m
  135. }; j' ~, |* Y6 X3 s
  136. ) v) F, f. t8 K# B* q% q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)4 ]8 c; P! f' ^9 ~8 t$ n! \
  138. {6 m+ F8 w! m1 T
  139.   TCHAR  szFull[MAX_PATH];
    - z4 {2 N. l) C' N% D- O; _
  140.   TCHAR *token,*inter;
    2 m2 p8 o! `5 `, K
  141.   *szPath=0;
      I7 N* k1 c. ~2 K1 o! a' B' r
  142.   strcpy(szFull,szFullPath);
      S7 b) ^# H; J& J; _% c
  143.   token=strtok(szFull,"\\/");$ u" [5 Y; x- \$ n% s. t
  144.   inter=token;6 v; Q5 ]4 c7 L& `( A
  145.   while(token=strtok(NULL,"\\/"))) Q  Y  ~; a9 N% G7 I
  146.   {' a- M* p% v& S; ~) m8 P) f
  147.     strcat(szPath,inter);
    3 i; W2 ~$ Y0 U6 x7 `- B9 i
  148.     strcat(szPath,"\");
    5 `4 a) T6 M0 c& I& r9 H
  149.     inter=token;
    & D8 P  k: N! E0 f6 ^7 E1 Q+ T% G
  150.   }9 F6 M" h5 J( H  O$ {$ o
  151.   return strlen(szPath);6 \1 ^" ^3 z. L% F+ z6 X1 N& z' K
  152. }2 }; _( E/ _; S3 V6 Y
  153. ; e# M; d$ L2 ^3 |  d& m
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    + P8 R/ ?7 B; B, R3 a- h9 v
  155. {
    ' r, S- s6 X- Q8 r
  156.   DWORD attrib=GetFileAttributes(Target);
    4 b! q* a5 t, l) T. _: ~4 @
  157.   if(attrib!=-1)) f4 O& H. I# y" L# w" f3 x
  158.   {6 U3 o# G9 R! g3 r" M3 F
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    5 n9 E% l/ M! z
  160.     {
    2 w" O* `2 j2 K( ^  j; B1 K2 @
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);9 b5 _6 P9 S1 l+ R/ C8 j
  162.       SetFileAttributes(Target,attrib);, {2 L% a+ ~4 R
  163.     }
    & t% P" N" Q* p/ P
  164.   }
    . Y) T4 m! }$ Z
  165.   CopyFile(Source,Target,Erase);
    / R" C8 t" t; M! @6 K
  166. }
    7 [8 b; r9 J. S% l5 ^% q

  167. $ \( j7 G2 Y7 U, t: z6 o
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    % X/ w& r; Y+ K7 \
  169. {
    3 {) F" F+ g9 s) B
  170.      FILE *fp;
    - i4 C# E) z( s0 l1 V5 z
  171.      char  szBuffer[8192];
    2 @; A' @6 m6 r' P: ]  f
  172.   va_list  argptr;
    $ ~. H6 _1 t0 v5 H
  173. ' @. w' x% n/ E' }7 j
  174.         va_start(argptr,message);6 _. \. N7 s/ Q0 A, y/ c( r
  175.         vsprintf(szBuffer,message,argptr);0 v) [4 [& E5 ~% J  D$ j& Z- j4 d
  176.         va_end(argptr);$ O( B0 M0 a% L1 o5 n1 E
  177.   fp=fopen(FileName,"a");
    7 V! e1 F5 _" K6 S6 {# x. f
  178.   if(fp)$ D9 ]* W( ^' e# \' [% B
  179.   {
    9 I0 M0 @- N% P2 J6 b
  180.     fprintf(fp,szBuffer);, i; A7 w9 t. g3 E8 \) z) v
  181.     fclose(fp);
    3 h1 m2 d) Y  m/ b" {- s
  182.           _flushall();! {0 f0 \4 ?$ z+ l  ?  b# {8 i  n1 a
  183.   }1 h% m$ Y% `& G5 G9 V9 P. `. e& Q
  184. }  v: u8 C- d) c; o# o9 }
  185. " e) F, A) d) |
  186. BOOL CRevAppApp::Fclearf(char *FileName)) E) K3 B3 Q$ k3 a; c
  187. {
    # L- f  p( I' O/ A
  188.      FILE *fp;' n7 I' P( [  I+ y6 q; W
  189.     DWORD  attrib;
    - N' g/ L4 p  g  S1 w
  190.   attrib=GetFileAttributes(FileName);
    . R5 U3 I( y( s, e% E, K  R% ]0 Q2 \
  191.   if(attrib!=-1); [" G2 j1 }" w, q- g  Y
  192.   {1 S' Q2 O' @0 g  J$ M3 B
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      g* u. K3 Y3 L$ \* M
  194.     if(!SetFileAttributes(FileName,attrib))4 N4 g( \, F' `: f5 h0 \2 F. K; Q
  195.     {; }$ [& h4 \  r
  196.       return FALSE;0 I. R$ S4 a) @' Y) G9 A( {
  197.     }% [1 \7 g4 r5 |+ H% V
  198.   }3 T* P" A1 S: [2 A
  199.   fp=fopen(FileName,"wb");7 X' I# p& ~5 ]! w
  200.   if(fp)
    $ b. r$ [' v5 j: r- ^* k4 _
  201.   {/ l: s1 a, m" ?* k7 D6 y! I
  202.     fclose(fp);0 u0 O4 N0 n1 d* y1 r3 a+ `7 v
  203.   }
      l; w7 O" y, G0 ]; u
  204.   return TRUE;
    9 E! s# X* r( h
  205. }- f: d( T6 G/ N7 r2 j* X

  206. 2 P3 i* G" X8 M, g: E; j. m
  207. BOOL CRevAppApp::UpdateLocalVersion(void); z5 j5 |2 e6 p
  208. {
    . K8 v+ q& A3 \1 r7 P
  209.   char filename[MAX_PATH];% g( o' f/ a& g' _
  210.   LPUPDATEFILE file,olds;
    8 x# K7 i0 L2 E9 \6 n% a2 f4 b! F0 e/ b
  211.   std::map<int,CString>::iterator i;
    7 ]# i% `1 Q- e# `7 P, y. j
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . l' O. g6 q0 G' c3 x
  213.   std::list<CString>::iterator l;. }+ T( R9 j2 ]5 ?5 c
  214. 9 V9 F6 y, Y5 ?4 O, k
  215.   if(bFirstUpdate)
    + G: c. W* {5 p/ M
  216.   {! g' y; c: }2 N! z
  217.     dwCurrFile=0;
    " {; w* J' U5 i
  218.     bFirstUpdate=FALSE;  `& k9 |, W8 Q& Q+ ~; q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; p1 h/ B5 r4 C
  220.     {  z) T* S- \- o8 w& H$ B
  221.       dwTotalFiles=UpdateLocal.size();' D3 e" ~. ?: v/ G& s
  222.       dwDownLoaded=0;+ c$ Z. J+ Z6 P( r/ F! b& \" x* k6 Z0 ^
  223.       bSilentStep=FALSE;) d" y7 O5 Z* j) }/ t5 f. Y/ r
  224.       bCompressed=TRUE;
    " c+ X+ O4 j; v5 |6 @) a# n
  225.       strExtLocal.Empty();8 S9 i; o9 u/ X3 X# k
  226.       strFullName=(*i).second;+ `. Y0 G! @" J2 B
  227.       dwProgramState=AP_CONNECT;
    / N" \- y3 Y3 Y' q
  228.       return TRUE;7 K' Z  ~9 @$ C. {
  229.     }
    ! _  a1 ^/ L7 c* S
  230.   }
    ) G7 `: \2 E$ b+ f/ l- {
  231.   else if(bRestartUpdater==FALSE)2 i7 z  L, Q" S
  232.   {1 @  f4 ^2 |1 y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())7 r* k' e( e) O2 \8 D' g8 f
  234.     {& u1 C7 K& ~* O: M3 }* }
  235.       file=(*p).second;4 Z  x$ M" F5 k8 h2 w
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    8 B" b9 H( b. h- J" `5 b! P4 a
  237.       {4 N0 g+ G( w5 e" u3 O$ u
  238.         olds=(*p).second;
    1 g6 z( L) s. O5 f( j
  239.         olds->vers=file->vers;
    ) [; u6 e! d) i9 z
  240.       }
    & T0 Y) {8 f3 {4 ?4 X7 v) I
  241.       else, }" a( p* {( U6 ?3 T' g
  242.       {( _# s, r( q: ~3 Q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 V  I& h  I* `3 f* e( u% G
  244.         memcpy(olds,file,sizeof(UPDATEFILE));8 l* |2 Y- Q) ]' K8 Y  H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    % ^" J+ H4 q, b- F
  246.       }6 P( r8 M! N; b1 X& \
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    6 x, O" F/ a6 K3 H# t# M9 L
  248.       sprintf(filename,"(%s)",file->file);
    0 v0 H; {( y- j2 I; k6 T
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! n  J9 @  e& h# a4 C) P$ Q! t8 s+ m4 a
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    9 E  k# c' f# ?0 _
  251.     }
    5 E. f2 S4 r* _( {: a, d
  252.     dwCurrFile++;
    2 M' C( l( [+ D2 n2 k
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 a1 I! H8 I* a7 e$ M  f
  254.     {
    ! U1 y  B% Z9 @* [' W3 ]
  255.       bSilentStep=FALSE;$ t6 {  N9 {: ?) A; P( `# m
  256.       bCompressed=TRUE;
    0 f9 u# [: U7 `
  257.       strExtLocal.Empty();
    , G+ ^  L+ b7 R1 b6 c" L" C7 j
  258.       strFullName=(*i).second;& G8 W5 g2 Y: l- w2 e
  259.       dwProgramState=AP_CONNECT;
    , V# Z: z# @8 A/ E2 [, ]
  260.       return TRUE;
    & K+ ?! V: }7 t  f* G) u
  261.     }
      U+ U* @. [) s" n
  262.     if(!bRestartUpdater)- O  H7 U& q( ^3 I) j- u
  263.     {
    , y( l1 N" o9 c
  264.       int iCurrSize,iFileSize;/ \: j& S( Q4 N3 u+ x
  265.       iCurrSize=0;
    . w- R+ L# z0 K4 y- c8 U1 F9 m# m
  266.       iFileSize=UpdateList2.size();
    6 M9 k& |3 v4 N. D5 C
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    & ]$ r; P% X" G& Z
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    2 f( I$ U! J/ y2 O( i
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + D$ s' h% E0 l5 a- H) ?  v8 n
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 B8 y+ z( `! R' S) o3 T
  271.       Fclearf(".\\update.dat");
    6 R# V9 H4 q5 a' }0 d
  272.       Fprintf(".\\update.dat","Bloodyf\n");' m! y/ j: l# I% c# x
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)2 N* p: e% L+ E0 j  A! E+ X9 v
  274.       {
      f, ?5 F7 m+ t; y0 O+ I( j
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
      B1 t0 j/ z, G2 S  O3 L
  276.         {
    1 u+ f( L( a* {0 a$ x% L; r
  277.           file=(*p).second;
    4 ], J0 y* L# C  Q5 E
  278.           sprintf(filename,"(%s)",file->file);9 e# V/ O9 G# Z3 W% ?. p; F) @
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 e" D; V- Q2 s5 h% E0 k4 S( M6 l
  280.           iCurrSize++;
    ! M$ W% b5 t# {! U! Y" ]
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));$ H% z% M! G+ f* y+ }% h
  282.         }: |" f3 R5 Z! q9 j5 {4 n' ?+ P; Y
  283.       }7 A6 a8 o  ~7 W/ N; |
  284.       unlink(".\\update.txt");
    & g! i" }: s  V' p) ]
  285.       unlink(".\\update.tmp");1 Z* Q* W- k# P, [5 O1 I
  286.       Fclearf(".\\checkversion.dat");
    - Q+ l1 t* `! y- q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    . X* H. Y+ f) E5 b; Z/ H
  288.       if(UpdateLocal.size()); `* w2 ]7 d0 q8 J: E6 i
  289.       {% t, W  m9 C- n5 \5 a4 K* [
  290.         UpdateLocal.clear();
    : @2 H" g; W( K' l  |
  291.       }9 a" i; Q. V4 e6 b/ _" r1 O
  292.       if(UpdateFile3.size())# X! w; l/ O4 ?3 @' l# D
  293.       {/ B3 |+ o- e. r
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " `5 ?; |5 z; k  Q$ B* B3 y% A) @
  295.         {
    ) S( v% `- k* }# p  S/ P
  296.           file=(*p).second;
    ! s# T- T) N. ^: M% Q2 u
  297.           free(file);7 l5 u, [9 f  e+ G1 Y0 d5 G
  298.         }
    2 d& J" g) Q" {9 Q
  299.         UpdateFile3.clear();8 B  u  S$ |4 K* `' r2 D
  300.         UpdateList3.clear();
    ( Y# Q! D) {( r- z' C: W$ B
  301.       }
    ) H( C4 P  M6 X7 s! ?/ |- @5 i
  302.       if(UpdateFile2.size())
    ( C% s/ n8 J- n( t# _* s
  303.       {8 z7 ?" U2 [; V! v' J/ r
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)5 w  ?# `- ]; h
  305.         {( U# v6 k+ U+ F( ?* C
  306.           file=(*p).second;
    - _! y7 _: z5 j1 T1 e
  307.           free(file);1 P5 i& z: t* {, h
  308.         }/ E7 y; r; o+ l/ S6 z2 a& s
  309.         UpdateFile2.clear();0 h( [! d: x: y( Z. [) ~5 Z3 J4 f
  310.         UpdateList2.clear();
    9 A+ V' Y; Z+ \5 |) |0 |* L; k
  311.       }$ D& I$ D8 u) t( \* z* D8 x7 n
  312.       if(UpdateFile1.size())
    6 y/ r0 ]) ^% |$ e$ I7 w4 u6 n- a
  313.       {4 i4 K  j% }0 W3 d
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    % A, v' ]5 S$ |/ G: `
  315.         {
    " I1 {$ o; S& _  q( x, k# X2 |$ c
  316.           file=(*p).second;  r' A+ ?& h& R# A
  317.           free(file);
    $ q5 z( P' U5 S
  318.         }
    , o4 G6 _/ I  s/ s+ L- Y; X
  319.         UpdateFile1.clear();7 q0 r. w0 ^4 F* H0 X5 f. Y
  320.         UpdateList1.clear();5 ]7 v& C# w' ^3 x
  321.       }
    ) A2 v4 c$ X9 v) x  f! ^
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));) r0 e; E8 R% Q2 e$ f
  323.     }& E  l, }" @/ V
  324.   }: `: P  {! l- h% `0 X
  325.   return FALSE;& B+ h5 [8 \  r2 J$ d* ~9 a" v
  326. }
    ) P8 K8 @' ]3 y: M( k8 m
  327. % [+ F% q4 H: n/ X, _% v
  328. void CRevAppApp::ClearAll(void)
    9 r6 |" v8 n# v% B% @
  329. {
    & w% i% j6 T/ J5 `5 Y
  330.   LPUPDATEFILE file;
    : d0 a9 B+ S+ d# B# p1 u
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * z3 W) i  ^" p

  332. . O" K; V) R7 I- a
  333.   if(UpdateLocal.size())" ?( |& ?- i% N3 E
  334.   {, m5 {6 F( c+ W3 C5 {0 @
  335.     UpdateLocal.clear();# C  d. J5 S' q
  336.   }- W( @; `8 B4 I* M
  337.   if(UpdateFile3.size())
    % x1 X* c4 y5 z% O2 k
  338.   {
    8 e8 i( m1 ?+ u- X
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 ]# s# v/ Y* g4 G" M* e! T
  340.     {, s) T8 h/ f6 K" p
  341.       file=(*p).second;# O& Y- Y0 Z' A/ z& I
  342.       free(file);
    . V9 k8 z/ a( \* I* ^
  343.     }
    6 Q! [9 J1 ~* }; e/ G7 o
  344.     UpdateFile3.clear();+ ^! R9 l, k1 w' q1 p" Q+ X0 g' v
  345.     UpdateList3.clear();
    8 o( C1 T# ~4 x) _7 e% R
  346.   }# e9 c: f1 C2 ^" p& V
  347.   if(UpdateFile2.size())
    ; J3 Q- i; C. ]' ?" G
  348.   {* O0 q% Z- |) m/ n8 D( G
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      n. U4 }" M7 L2 u+ c4 D
  350.     {& H+ \3 j5 |# B/ ~6 O
  351.       file=(*p).second;7 c7 [$ b/ _- r) p
  352.       free(file);
    0 E' X. O( A3 }! W
  353.     }
    8 f: j3 h* D. I) |
  354.     UpdateFile2.clear();
    0 `: f# y% q, Z) _6 \
  355.     UpdateList2.clear();
    . E3 p% S& ~2 ^& g) q
  356.   }
    , P& _+ K$ A6 ~/ u
  357.   if(UpdateFile1.size())" r! T5 j/ T) a7 p+ o, v( x
  358.   {
    ( e+ N  F/ `$ w: Z  c4 A3 o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# O& g) S5 e8 _- ^1 m
  360.     {
    / J: b8 z8 E, g/ R" y: \
  361.       file=(*p).second;8 A: z7 a( e5 I+ |6 z
  362.       free(file);
    ( _% J% N; V$ v1 Q9 }
  363.     }
    # c5 [5 U2 ?" l% g2 }7 x, y6 ^
  364.     UpdateFile1.clear();& N5 E: y6 R, Q  {% ?' G3 ]9 R
  365.     UpdateList1.clear();! [8 `- y3 x! L& X
  366.   }6 g9 n2 l/ C& @5 l
  367. }  
    & X; e+ {- `% ^( |1 k. Q4 ~
  368.   
    * R9 \1 T4 S; R
  369. BOOL CRevAppApp::CheckLocalVersion(void)# N4 k4 b2 w$ L; w8 \5 Z
  370. {/ l* `- u8 r$ q: {
  371.   int c;2 w( E- X4 H) x* f: }
  372.   LPUPDATEFILE file1,file2;9 `, S& B8 M9 e( z/ u
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 \7 u, M/ }6 `+ q2 E, r& f' T
  374.   std::list<CString>::iterator l;
    ; R) S* x& \) j9 U
  375. . H) n! ]  W, [* ^; Z
  376.   UpdateLocal.clear();
    1 \: y; K+ w0 b- O
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    % O1 r0 c4 V' N+ {& `1 g
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    8 ]4 U7 U. c' E7 c# \5 P
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + j4 i1 @: K3 J" j
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);. ^! f$ y5 B9 {6 X
  381.   if(UpdateFile3.size())
    " L6 Y# H8 J, d3 ]. I2 F
  382.   {& H; s; |% r7 ]0 L( N6 v6 i
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)5 X9 [0 l1 U! |" \, {
  384.     {
    0 D0 u7 [; ?7 D0 Q  j
  385.       file2=(LPUPDATEFILE)(*i).second;; ]+ f6 u7 O$ \+ J
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - D+ I9 X" a6 k, Y
  387.       {3 }' y; v. m! E* M$ _% M2 W$ B
  388.         file1=(LPUPDATEFILE)(*p).second;
    7 I8 b7 K% P7 T, ^& o
  389.         file1->vers=file2->vers;6 @5 K" D+ }7 }6 \8 P
  390.       }
    , W! u5 N# G7 w7 g! y
  391.       else$ X/ k# c! @$ X' Y) \4 V- w( T
  392.       {
    3 y& W5 y0 d( P* \& I# @/ j2 s
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 K8 S7 ^$ J4 o* j
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    6 K6 @4 L$ [8 v' P6 A: W8 h0 ^- b
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    / h$ e3 K$ q* }+ g' f6 j/ b9 w: e
  396.       }" c% t) @# y1 U0 @& S$ j
  397.     }( U1 I- Z1 T- [. ~* A2 O
  398.   }
    ' o5 E% e1 u# W8 Z: g. J- v/ A/ p
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)$ D0 I! S7 B! I7 D  K+ N
  400.   {4 B1 P$ |3 g! @& A
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())0 j  n# ~* q# X
  402.     {
    / R) ]; d& e* ?6 n5 A+ F
  403.       file2=(LPUPDATEFILE)(*i).second;  I# _8 ~& |9 s3 ~% ^% P' ~
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 W# i  j( W1 U' N; ?( m. E  }
  405.       {
    0 T" L* ~9 R* [' T) R9 b
  406.         file1=(LPUPDATEFILE)(*p).second;
    5 N. T( G' {- Z) a9 j: M
  407.         if(file1->vers!=file2->vers)
    - y- R) G7 `! H$ d; K* a2 m& w
  408.         {
    # r- g8 [; G2 M& {7 v9 |' C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 Q% R. h! Q" p8 p  r
  410.           c++;/ Z  Z1 X& }  `) z0 E
  411.         }, r- X0 s1 ~* ]+ B
  412.       }  ]2 S9 z6 \8 E5 s, |. d+ h0 k" w/ w6 `
  413.       else
    ' l1 x. B. Z% X7 r" P3 ]2 ]
  414.       {
    , _$ ?( ]: e3 {
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- `" M  g' r6 W! I1 ~. Y5 i
  416.         c++;: Z5 o/ [) g5 V$ z) L1 M
  417.       }6 Z. n/ J6 a) J0 Y! V6 t+ U
  418.     }) e2 w+ J' {+ F3 J+ u5 T
  419.   }
    7 E0 e2 J  M1 |7 j: P. v
  420.   unlink(".\\DownLoad\\update.txt");
    / G# \8 P3 b( ]8 c
  421.   if(UpdateLocal.size()) return TRUE;
    " e/ u, g" p+ \* |0 v4 I
  422.   else                   return FALSE;; @* ~% F- J4 x4 h8 ?" y/ V
  423. }# y2 m! X! R% y* J8 G
  424. " q0 N$ Z. s. p- v- D, I- w: s
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"' V3 G# c6 M3 e/ U4 `
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"; Z  O' {. e, [4 w
  427. 7 R/ y! T: q* Y, L! F

  428. / D8 \& E6 I) p9 [, h$ V" d
  429. 8 Z% ^$ F, c$ s# c& Q% J
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    3 I  X# D# j2 g
  431. {" e) ^4 k+ [. F$ ]$ Y9 Q& B# v
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;- t& R: G# W2 R+ I% y) l- Y/ F
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 L$ V% R1 q' t  Z8 K9 b- p( O( D
  434.   {' d/ C2 O6 @/ O' X/ h
  435.     char szLanguage[50];' [5 v1 {% r) ~
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    7 j. B0 E9 `/ O( o# Q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 O. B$ W7 i3 P# D  L  U
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" R' z4 P4 `  u! G; Q3 P8 ?5 i
  439.     else                                   m_iLanguage=ENGLISH;
    6 N. u+ o0 q( \1 k+ r& N
  440.     char szRegister[100];
    9 n( u& Z5 i* C
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! W# A$ G; ?& l- q
  442.     strRegsName=szRegister;
    ; I$ I6 L# c5 w
  443.     char szPatchURL[100];& ?% v  p2 C$ Y# ^. F3 p
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * \. O$ H2 g% f/ `7 E+ b
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ H- w- a& g: ~8 c, S1 H9 A
  446.   }. D& P& c' Q) Z) {
  447.   else
    . \0 f& v9 c1 J: B, \4 a8 T
  448.   {+ d3 r2 q: b' l+ h8 _' _! X3 D
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);! h: B; p: x: C0 |$ i  a; o7 {* `& t
  450.     strRegsName=DEFAULT_REG_URL;% P( J/ f: ^2 ~7 U# O; p1 d
  451.   }3 O0 ^; I# F  `" E9 o; l' ]
  452.   if(GetFileAttributes("hosts.ini")!=-1)7 z$ g! {' K$ ?' W# p3 l
  453.   {! [; {) }& B. f5 d$ g1 F
  454.     char szIP[50];
    . {) F. c: g7 k- c
  455.     char szDIR[300];$ a. W8 O) f2 Y% {% z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ' [6 h3 k) U! X! `8 _* z5 n( w
  457.     {
    . \3 n2 @8 `6 a  y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* R( l' I1 i7 n9 |* I% L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");3 U4 n1 R  s& A5 r
  460.       strHostName=szIP;( g2 l; c( t5 P$ M. s
  461.       strHostPath.Format("/%s",szDIR);
    * x# L8 x# D# i7 h8 Y% s: {% Y
  462.     }
    5 k. m" A, P# H+ v. s: W2 R
  463.     else
    ' |" K2 S/ T# N& C' L/ O- a
  464.     {
    ( l2 ~/ B. M: w4 _! ^
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & F4 w% z8 [4 z8 j" L& j
  466.       {
    5 p3 V, L8 S$ B# u' F2 I- ?
  467.         char szLanguage[50];2 L: ^: o' p* I/ r4 ~& x/ x0 h1 C
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - e% ^0 \+ w& z' T; C8 m
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , W: u. i3 h1 B
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 C4 u7 @/ b) A, Z  o9 S- R
  471.         else                                   m_iLanguage=ENGLISH;
    , ^& F& ^* I3 n1 d
  472.         char szRegister[100];
    . L9 Q( V4 K) c$ R7 `5 m
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ O0 @  U! B* l% K  `1 g
  474.         strRegsName=szRegister;0 U( Y9 a( h( O# w# S
  475.         char szPatchURL[100];
    ) u: y- _" Q1 r4 S! d# G" u  k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ p" u: Z0 A( W+ x2 X2 t+ w$ }8 i
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 V7 }" K, F+ b+ W; b" S
  478.       }
    2 Z1 m/ d  i5 O. d- U) A* H* }
  479.       else# h3 y3 @4 V# _% H' b
  480.       {
    7 F2 t' f, C! ^1 v; u/ W  w
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; c) p* S" ^7 ]
  482.         strRegsName=DEFAULT_REG_URL;
    ! v# W, C( j, e( `, H
  483.       }8 q. a. U/ R5 |$ ]
  484.     }
    : ^( e" I4 E' e; G7 [! a$ R% P; x
  485.   }3 A2 Y, V# D; J- {* ?' T5 L
  486.   return true;4 K0 d% N# M& ?  \8 Z! C6 r2 o/ a/ f
  487. }' R) x3 \$ D" u! D  a: n0 A  U
  488. 9 y( ]  x' l) i" ^8 k4 E
  489. #include ".\ZLib\unzip.h"
    4 [% R- t: T1 b9 h" P% z
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    : D( P# y& a: O" |" w
  491. ////////////////////////////////////////////////////////////////////////////// K: ?( `  c. ^! G) R
  492. // CRevAppApp initialization# c3 O$ h4 [( u4 L3 w

  493. 3 `' t- s+ `! Q, }: q+ [
  494. BOOL CRevAppApp::InitInstance()6 E& R$ n- ?9 q" `& I" V0 X0 C
  495. {3 Y; a: f) Z& Z7 m0 @% q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];. |. b# q1 w9 T* G+ U/ j4 f# F

  497. 3 A8 u# Z3 h0 T; V" h, l9 q4 z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    2 W9 n: B  @; c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)): O( B! b3 m/ t! g2 V/ J
  500.   {& R  s2 ^5 q7 ^9 g8 y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");- y* b! A' c0 Q/ c/ m6 y8 s
  502.     GetPathFromFullPath(szPathTarget,szPathSource);9 k3 l& @; K& a0 L
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    8 w, I$ C% k' z2 a4 P' T- ]/ |8 b
  504.     {
      }/ z; K0 ]) R" \' {6 z
  505.       strcpy(szPath,szPathTarget);) F) \# J* ?! Q: E- p: c1 _
  506.       SetCurrentDirectory(szPath);
    : D$ d, r9 V- }& g6 v
  507.     }$ n2 V1 e/ H. x4 S* k* g9 ]
  508.   }
    8 F# L; F# j; E* w- V
  509. #ifdef _DEBUG
    . p$ i6 [9 c9 N
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / P, r. G" ~5 A) F2 p
  511. #else% N( ~  Z$ Z4 L7 A) J! k
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 o: k* N, @5 C' [% H0 _* u3 V
  513. #endif
    9 N) J  R* r+ _$ y
  514.   {  d4 G4 I1 t' f3 l- f) D
  515.     char tempFileName[MAX_PATH];! H$ l8 a( a" @3 ]% s+ V
  516.     strcpy(tempFileName,szPathSource);# _% R- _$ f( r6 a
  517.     tempFileName[strlen(szPathSource)-12]=0;
    3 x4 A. ]: _, Y' R
  518.     strcat(tempFileName,"\\$CSUpdate.exe");7 L8 |7 t5 Z3 J( M3 B4 [% ?; E' e
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    * q6 W, A9 `0 D0 ?( C
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    , `8 {4 j5 s0 U6 M4 Y% ]
  521.     return TRUE;
    3 @' y* _8 R, T, `; s* J8 x
  522.   }* W4 T& B: R9 ~2 N% f  p
  523.   // Nuke 0118: Delete run.exe
    + J! w/ h% ^4 r
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );% A4 l6 {8 l0 G* K/ [1 v6 o2 z% c
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    - ?9 p- ]* D! S& p5 I, d0 ?
  526.   if(!ReadCfgFile("Config.ini"))
    - u; w* w/ }3 Z  X. E# \1 e
  527.   {% l3 D! Z! C( d
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 a8 [+ b) h  U0 ^( v
  529.     return TRUE;
    ; f  y0 w( e: B+ t2 [& C' v
  530.   }) A0 m) w7 y4 G0 y
  531.   HANDLE mutex;
    # p$ `: I% A: S) s  M
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))- L" C5 @3 q% N3 }8 O, Z
  533.   {
    ' |2 c1 @7 C; N& R+ J1 J
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 `' {  c! D' G  n) L
  535.     {$ X  b! E! n# A8 ^) t
  536.       CloseHandle(mutex);
    " P& P+ |& \: U
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 \5 g8 f# T8 S
  538.       return TRUE;/ ~9 }& I/ ?- O  T1 D
  539.     }, s" G% W- ~" Y4 e5 t; X8 a2 j
  540.   }  ' K' J) ], G: V% D
  541.   CloseHandle(mutex);
    * _' p: M8 H. g' c* p
  542. $ E$ C+ S! B$ K- z/ h" a
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);5 O8 c! z5 p4 e6 R  [/ R

  544. 5 r; j: m+ z1 X0 m$ c' m
  545.         AfxEnableControlContainer();& S% b* ?, n, S6 \0 O  B. L
  546. 6 J" P1 T3 G1 p. v3 K
  547.   bCanUpdate=FALSE;
    - ^+ ~- Y7 S, Y% X' }8 |7 H2 _
  548.   dwStartUpSteps=1;. g2 }+ N/ {& _; y1 I! [8 R( a
  549.   dwProgramState=AP_NOTHING;" O1 x" l: n7 d% o3 o2 y- C% H

  550. & K# n# v* k- t" `9 V* k2 k5 w
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);7 M' N4 O; @- X+ h* _+ h

  552. 1 O/ t9 G2 ~! B3 |6 b* `
  553.         // Standard initialization
    ; @+ j5 C5 N  {/ B
  554.         // If you are not using these features and wish to reduce the size
    ' S+ e& a7 |2 J, }0 S
  555.         //  of your final executable, you should remove from the following- O* `4 \/ d+ K
  556.         //  the specific initialization routines you do not need.6 [; o: P0 {2 P" ^

  557. + i: I1 l# E3 [$ E/ g
  558. #ifdef _AFXDLL
    . N3 w: G* l2 w' \  A) {4 k1 v0 Y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 O& \) c; g. a* v& J- @, c
  560. #else
    1 V* E$ ?$ C. I5 K; ^3 Z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically/ j0 L+ P* R: ~- Q* H
  562. #endif0 O9 e8 O6 J5 t1 C: F# f" v* y
  563. 6 h7 m% V2 B1 B6 p8 v' p" H
  564.   dlg=new CRevAppDlg;) K" y( `9 A* x! e0 O0 @! X9 J/ c# m
  565.   dlg->Create(IDD_REVAPP_DIALOG);$ K! u- h1 X) x. l. q3 F4 m* a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);( |! M8 y$ w' H  I+ z
  567.   m_pMainWnd=dlg;  v+ q. r# E3 \- v6 L1 }( c

  568. ( r/ S9 ], U3 E8 E$ L' S
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);7 V- o) W, @/ k- f
  570. $ N& T' w) S" h/ \" s0 A
  571. //  GdiplusStartupInput gdiplusStartupInput;
    $ P  k4 b4 f0 u+ d5 \( M' _
  572. //  ULONG_PTR gdiplusToken;! J( u! G0 a0 H* x
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& P+ c2 @' Q, y  G$ R
  574. 7 j3 P3 r2 Y9 t. d/ K$ _2 C
  575. //        CRevAppDlg dlg;1 W4 N4 T( R* `
  576. //        int nResponse = dlg.DoModal();' @# p4 M& U" ~
  577. //        if (nResponse == IDOK)
    # ?9 n1 S6 y+ ?5 \. h3 R( Y( g9 Z$ s
  578. //        {
    : P6 q; W- R# X6 K' ~+ S. f" R
  579. //                // TODO: Place code here to handle when the dialog is
    * r5 y5 Q+ |8 n, t6 w6 K+ L
  580. //                //  dismissed with OK5 ~9 @$ a' Z9 f: Y. Y! w
  581. //        }% k, i* ]+ ]. N2 S6 k" V
  582. //        else if (nResponse == IDCANCEL)2 i: T1 Z! \% _; j
  583. //        {; B9 u+ `( i) a' e! U
  584. //                // TODO: Place code here to handle when the dialog is
    8 t7 B1 _; F" k
  585. //                //  dismissed with Cancel
    7 \4 [2 T+ X. F" F: q% K+ z
  586. //        }- X; `- O; N8 v, A" A
  587. $ g$ b7 m2 O& Y  N
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    6 F9 n8 v% h: K$ E! {
  589.         //  application, rather than start the application's message pump./ `6 t( u3 F5 [3 `  `
  590.         return TRUE;1 X" M3 H" |/ m8 R# Q& R
  591. }
    $ \& `# _0 d6 x& U0 O

  592. 7 j- _# F* C. S
  593. char *CRevAppApp::strtok3(char *pSource,char *token)" p6 b# ?* y! ], v/ Z
  594. {1 t, m* J. F( N( E! A% u% u
  595.   int i;% }. M% p* a. L) E
  596.   char *szRet;0 ^" N* N- d2 i* h# T: s$ P/ ^

  597. - G5 i  A! }+ g0 ^1 d8 ?, r, C1 M
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    & z' d" J+ C3 h2 g( Y% f
  599.   if(sztoken)& c4 X% u4 m; \. ~; L6 s) ]+ g6 Y+ G
  600.   {
    ( A0 `8 c% \9 B% w. g% z
  601.     szRet=&sztoken[itoken];9 N+ i; C: t3 k6 W) S0 M
  602.     while(sztoken[itoken])1 A8 g. d' |6 \; }3 U
  603.     {
    , ^5 u" f, D: r  D" z
  604.       for(i=0;i<(int)strlen(token);i++)6 N, o' B2 }8 t+ c
  605.       {  k# M( Y$ c( l2 \6 v
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    % I5 X/ b% G; ]( A
  607.         {7 {  o3 ~( y2 R; `% n. ?
  608.           sztoken[itoken++]=0;
    + x5 t: n; L5 V% [# v
  609.           sztoken[itoken++]=0;
    2 I; J# e# M' G) _9 x1 M4 t
  610.           return szRet;2 w. m& z0 I) E5 l* n! f
  611.         }
    ( X4 Y. W6 h# z: W+ d) L
  612.       }7 E, U7 y1 z. R/ f5 ]3 G- U. Y
  613.       itoken++;
      r6 y  Z% N# P, }
  614.     }* S8 G- t' m$ n1 b0 U; u. w- _, {9 q
  615.   }
    2 `" P& Q$ s& V6 D/ x! W
  616.   return NULL;$ t$ U+ E+ H0 y" S5 b) d
  617. }* I; X) L2 a( }
  618. , _8 f! [* v6 C2 h- _9 k2 [
  619. void ProcessProc(long Total,long Current)/ ?2 |7 x9 E; X) l
  620. {8 F+ u( i1 Y6 n: C% y- a
  621.         MSG msg;6 ?; `/ q$ v% I, M" U
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    8 r# \, m! t# \7 H* H
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " E* F' L* q6 E. Z
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    1 _9 l4 f3 o& j. @; i1 C; Z
  625.         {4 v: X; I+ X* P3 `
  626.                 if(!GetMessage(&msg,NULL,0,0))3 I! d. n/ G1 R6 ]1 f) ]
  627.                 {5 d& Y8 a7 h: O" w
  628.                         return;0 a- r! q. X& O1 r* `+ g" C0 H
  629.                 }. C4 {0 H4 o6 v4 p; t
  630.                 TranslateMessage(&msg);
    & t* Y8 F) K' e7 i" O' s
  631.                 DispatchMessage(&msg);3 ]& t% e0 [& s2 r, l) u
  632.         }        2 @" f% _3 M7 i$ g
  633. }4 @% y1 t4 y3 j- D! |' U

  634. . H7 e& B1 g7 e* z
  635. BOOL bFirstChar=TRUE;  t; K+ ^+ ?- k+ ~6 E

  636. - C% h+ ^7 k, M+ ~. ?7 D  @
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    9 ?  x  o' @9 f" y
  638. {
    5 g5 {" l  b/ v2 g
  639.         // TODO: Add your specialized code here and/or call the base class
    " L* @% C+ x6 c8 M
  640.   switch(dwProgramState)3 ^4 k% \9 R( Y$ a, B1 d2 t
  641.   {# G* ^& G( i$ f5 K
  642.   case AP_NOTHING:
    ) B1 C" A& h0 U$ X4 k2 q
  643.     switch(dwStartUpSteps)
    ' \+ Q" Z" {" w% j5 X' h6 P& G6 x
  644.     {6 ?0 O, _; |5 z$ q
  645.     case 1:
    7 a! v" W$ t5 b$ n6 t* V+ e
  646.       {
    ( M5 j2 c# R# z" ^- t0 R- ^
  647.         int i;
    ( P+ O1 \9 F$ j2 `/ s" n, `
  648.         CDC *pCDC=dlg->GetDC();. i' K, N; x# w
  649.         HDC hdcwnd=pCDC->m_hDC;
    : q0 M, `: Q2 J9 g# g
  650. //        Graphics graphics(hdcwnd);" b/ B: ?. q. v+ `5 ?+ R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");2 j5 F- B( p$ U. z
  652. //        INT iWidth=bitmap.GetWidth();
    & F! ]+ i8 m5 z; D
  653. //        INT iHeight=bitmap.GetHeight();
    ( C" H; d3 P2 x( f# v0 r+ @7 \6 w  H) ]
  654. //        Color color,colorTemp;  f7 |/ T% v; Y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)9 e9 x7 d' U* [1 I% X
  656. //        {/ r( d! H  r7 w' h! l7 @+ H4 S
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    4 E/ J  s, S6 g9 _0 D
  658. //          {! J3 j+ _6 V+ g& \  ^
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    , N$ M% C0 x6 J0 t, k) G: O
  660. //            colorTemp.SetValue(color.MakeARGB(- @" I+ \4 a0 z9 X) a! `2 T
  661. //              (BYTE)(255*iColumn/iWidth),, `5 P) o: P. ?
  662. //              color.GetRed(),
    - t, G* E6 x" _0 t* G
  663. //              color.GetGreen(),* l1 T$ X' j. h
  664. //              color.GetBlue()));
    + f% K1 d8 P2 w4 u
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- y4 H( h) _7 R9 B2 y
  666. //          }
    " g: U" J6 @% s4 l6 Y& a
  667. //        }
    " E1 L( l) _' R
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    8 s1 s- ^- b; m( [
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % ^! ?* v: k2 u. w0 D0 [0 k9 ]5 `) z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    % F, @, r; _% a' @; S
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- `3 `! R0 |/ R4 G# B
  672.         for(i=0;i<240;i+=8): [, b0 ^+ `& S/ u# y
  673.         {
    ! i+ w- @* M% P
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % C( s: {: k5 M6 l8 [
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / n' j: t" ~* v
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) Q* @+ @7 h5 d; z, q
  677.           Sleep(33);
      n) e  h* ^. _! {0 w9 f: U
  678.         }# q# S: L9 _& S% f! b
  679.         Sleep(1000);
    / z4 z4 Y/ X+ k
  680.         for(i=240;i>0;i-=8)
    5 A8 J/ A/ [8 u/ Y9 x2 }
  681.         {
    . J9 M1 a5 d$ h" ^+ Z2 R
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);+ a: ~2 k- G6 R% ?. C: o1 [
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ ?- e1 I; V5 r# Z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);! a% n6 d! T  p! Q
  685.           Sleep(33);& ~. E# n, Y, a% E
  686.         }
    8 P1 e( }, B6 ]1 ?
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( i7 e# W3 n6 X  K/ l" F8 k' ]9 z
  688.         dlg->ReleaseDC(pCDC);
    1 n- k3 n8 B2 z3 |; t' q
  689.         DeleteDC(hdctar);
    , l0 j% h" a/ B& X9 K3 f# ?1 H
  690.         DeleteDC(hdcsrc);
    9 c% O4 p! f% n% D: K$ {9 U% O) f* \
  691.         DeleteDC(hdcorg);
    & n2 m, D- n3 j- j" [
  692.       }
    8 z4 v7 x$ U; B! u  ~; s
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    6 B1 Q3 y" p, W$ x
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");7 Z+ N# D, Q0 \' p% h  A2 P
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    + }* w- j/ w; I5 Z* T, g
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    8 v! K0 w+ [$ {/ N) O! L
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + `# i' n9 U6 ]5 p
  698.       if(!Dn.Connected())8 ]3 }9 Q. ?: s- y# l1 h
  699.       {9 n# [/ l* [* r; R  M9 z& J, l
  700.         dwTotalFiles=1;
    & r: X5 c  G1 v, c; }- `
  701.         dwDownLoaded=0;
    " L* F0 X: W( Z. A& n3 B$ B
  702.         bSilentStep=TRUE;* T+ |/ _9 N& _$ E
  703.         bCompressed=FALSE;" l( W! q* _6 V$ T6 j
  704.         strExtLocal.Empty();
    4 B, i) o7 i$ u6 ~$ A
  705.         strFullName="readme.txt";* f7 y* o2 |# l4 [* M. C
  706.         dwProgramState=AP_CONNECT;
    $ M* P; O) n* f% h; J" S( @
  707.       }
    7 x" b, k- D$ D3 G, P! d
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();  B0 `. p" g3 o2 W1 V, S
  709.       dwStartUpSteps=2;
    . q) |' R8 f* [& a) |& y: C/ K" a
  710.       break;7 l0 L; T* p6 X
  711.     case 2:/ m5 h5 X. ]5 N
  712.       {
    0 L5 a- L# l8 m8 `. Q
  713.         int iEOF;
    9 L7 u" {' @; V
  714.         FILE *fp;5 Z4 o7 i$ X) j* _5 W; T: @
  715.         char szString[512];
    % x& O2 W! d3 K, z' S6 v- k$ \
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");7 w! {4 f2 _6 @. ^' O5 t. q8 U
  717.         if(fp)
    0 d, |8 V. x9 ?3 v
  718.         {  }9 Z% Q. P& y
  719.           do: Z. Q# h( Q4 I% E. j) Y- D2 v
  720.           {) Y7 _$ m/ f/ M. c
  721.             iEOF=fscanf(fp,"%s",szString);0 y- ~. ^- H% J7 s. d5 Z
  722.             if(strlen(szString))
    + V; ^5 Q/ a6 [) w+ j8 m  z# ]
  723.             {
    5 n. \; V: m  H/ O% U! i
  724.               if(bFirstChar)
    + J/ _% P. `4 Y  a% y4 v
  725.               {
    2 m8 B8 {+ |& R4 X" i. m
  726.                 bFirstChar=FALSE;
    5 Y7 f- x1 C( R" r! ]- w) Q
  727.                 bConnectIsBig5=FALSE;
    : X! [. f7 D. O3 v0 V6 `. J- j
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    1 U- ?% Y* Y! L7 C/ a; S
  729.               }2 H) P( U) L% G, l/ Q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    & i, S. q: M# w' _2 t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - m" M3 k) J( G( V8 C
  732.               dlg->m_ListText.AddString(szString);0 {" T$ @8 A: Y9 ~* ~
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ b& U3 L: i+ _% m! W
  734.               *szString=0;( i- s. N# d7 P, S% x
  735.             }
    9 _: i% s% [. @( e9 u
  736.           } while(iEOF!=EOF);
    2 i0 [" }( K. L: Y
  737.           fclose(fp);
    3 N9 j9 Z0 R8 d
  738.           unlink(".\\DownLoad\\readme.txt");; d7 f, _: U5 s+ H# t
  739.           dwStartUpSteps=3;
    * Q: J" x7 ^6 x8 }2 e2 p
  740.         }
    1 r( C! }% n2 }* d
  741.       }) R" j3 l8 n1 H* i2 z
  742.       break;
    3 Z! I7 U* F9 q* y! ^# ?/ c
  743.     case 3:
    ) y6 e5 @5 K5 {. K2 G7 q4 T
  744.       if(!Dn.Connected())
    . x& u: q# c2 ?5 ?4 x: i
  745.       {
    # d3 Q; C; A- c# J  `8 ~+ X
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    2 O9 G6 e5 v8 V0 [8 P& }$ f0 k0 }. V" S& s
  747.         dwTotalFiles=1;
    0 {7 _" A4 D* p6 ]
  748.         dwDownLoaded=0;7 n; x- w! u( p) Y( i* @8 h: w
  749.         bSilentStep=TRUE;. N3 `/ U4 Z' x; b6 N" ^
  750.         bCompressed=FALSE;
    7 w: Q( O% i9 }2 y
  751.         strExtLocal.Empty();
    7 T1 b% v+ e+ C8 c$ n$ W' D
  752.         strFullName="checkversion.txt";
    & q. a1 `3 |- L' Z
  753.         dwProgramState=AP_CONNECT;
    ! b% S$ f  B3 w/ c6 E
  754.       }+ Y  X4 T) E0 f6 B6 m& o- Q* D9 m
  755.       dwStartUpSteps=4;
    * Y4 Z0 @) h2 s# }
  756.       break;) {8 o1 h2 I% O' F8 ]* l
  757.     case 4:
    / G0 R5 I! [5 _! [  j
  758.       {6 n! w- F& a+ Y! e' D/ }  ]' b6 A
  759.         FILE *fp;1 h# f( E$ Y. v. Z
  760.         char szString1[128];/ s' v* i* z- O
  761.         char szString2[128];0 D7 Z8 f& B5 O1 w- J
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    5 l) u1 [3 R3 U5 N8 d
  763.         if(fp)# [! g: d3 s& u
  764.         {: V# T4 k! w& z; c. T
  765.           fscanf(fp,"%s",szString1);
      r5 F6 Q; v! P0 R- Y# T
  766.           fclose(fp);5 H2 P- y4 y1 r) {
  767.           fCheckVersion=atof(szString1);7 d4 s7 a0 Y0 c+ S6 U: R
  768.           fp=fopen(".\\checkversion.dat","r");
    " H6 w5 A. B. |
  769.           if(fp)
    * U: r8 X$ y0 f: n
  770.           {
    2 R% n& o+ @) p2 r+ W+ M3 ~' ?4 Z
  771.             fscanf(fp,"%s",szString2);7 N+ S9 v" B: ]" D# k* H
  772.             fclose(fp);' t( x; v- g. j
  773.             if(atof(szString1)!=atof(szString2))# j4 @1 e( v3 C* K1 X; K+ Y: H) F
  774.             {
    . m2 ?5 B% D8 O4 v
  775.               if(!Dn.Connected())
    + P" ~2 A, s0 |& ?& U1 W
  776.               {
    " J& W' q! K: @' Q
  777.                 bFirstUpdate=TRUE;
    . f( u& g0 ~2 k2 r0 u- o; z
  778.                 dwTotalFiles=1;, Q9 ^7 j7 f8 b" k1 B0 a( u
  779.                 dwDownLoaded=0;& \) G9 `7 e9 d  m+ ~" `
  780.                 bSilentStep=FALSE;% E7 `- w) w7 b  k& f
  781.                 bCompressed=TRUE;
    ; H7 z& D" ]* ~2 U% ?& n
  782.                 strExtLocal=".\\DownLoad\";# x: N3 p& {% v3 [' f$ y; U
  783.                 strFullName="update.txt";3 S/ t! Z- ?0 U8 N& q  A
  784.                 dwProgramState=AP_CONNECT;5 O2 F4 }9 E( [' ?6 r* d9 f, ]
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( T( D  J* w9 O
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");* `6 O. R* c) w  u
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 H5 H- _* C8 x& {2 m9 I& K4 @
  788. # x6 e4 v* `$ T6 m
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 Q0 g$ b' m/ _
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    % Q; g! j& j, N, G. }0 N0 l
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ( W$ @; x. u4 G$ c1 v
  792.                 {
    % \2 p! `: ]$ R1 W4 g8 N- k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    4 r' i/ ~7 ?/ D4 h
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    2 r, [% ?0 ~5 w0 \! c# X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
      L4 [- c. |7 U
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( D' C& M+ D9 l+ [7 P* Z

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-9 20:40

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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