找回密碼
 立即注册

CSUpdate.exe源代码

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

$ x; H. L0 z: j$ c2 o
  1. / RevApp.cpp : Defines the class behaviors for the application./ w3 h; J8 d* ]0 A# Q& n
  2. //& F  b" L7 q/ `. u. E4 g1 A
  3.   k3 t, X8 q. i3 Y
  4. #include "stdafx.h"- T$ s2 j/ x2 J1 Y# N8 v
  5. & ~+ e; p4 H) n! w9 U
  6. //#define UNICODE8 I, P: O% @- {% B% d
  7. //#include <gdiplus.h>$ X! q* H8 Y$ [) w5 M  S
  8. //using namespace Gdiplus;
    4 ^( _& t4 S! n2 U
  9. ! ~% ?6 ^$ C9 B4 i; Q6 Z
  10. #include "RevApp.h"
    - e  H' X, M# D  _1 V
  11. #include "RevAppDlg.h"
    7 n& y7 t# a" g$ o9 B8 l
  12. ; v1 N0 S" M' ~$ k( K; H
  13. #pragma warning(disable:4786): Y! f3 U, r& b0 f" U
  14. #include <map>
    : U# A. P9 Q% |! Q
  15. #include <list>
    + g) s# K+ n! p0 r( Q
  16. #include <direct.h>) m4 z) g6 [. K/ r, ]) U
  17. & I9 |5 T, r- g! }
  18. #ifdef _DEBUG
    8 R( @; Q* o: Z# t6 c! y
  19. #define new DEBUG_NEW1 q8 ^- B* h( n. t7 Z. `
  20. #undef THIS_FILE
    ! ^, f6 g1 \, J$ P0 Q6 l# `
  21. static char THIS_FILE[] = __FILE__;
    ) Z, t( z3 `  _* k, z+ q) y! G! d
  22. #endif, c% |, n5 V( L3 S% t5 O
  23. #include "SkinResDef.h"8 [0 V) k+ x3 t1 h3 i! B
  24. #include "ChangeBG.h"  `4 F9 P1 o! F7 O; a
  25. #include "AFXINET.H". r: c: @0 ?. J# |1 Z$ e' M1 l6 x
  26. * r6 l3 d: F3 n3 U
  27. #define TRADITIONAL_CHINESE 0+ |. ~3 |$ z" W
  28. #define SIMPLIFY_CHINESE 1
    % c. n% `# g6 o" p4 k
  29. #define ENGLISH 2
    # s2 r2 R0 f/ \! E0 i: Y5 Y6 h: F
  30. int m_iLanguage = ENGLISH;
    & R. z4 F/ w+ q
  31. /////////////////////////////////////////////////////////////////////////////2 s" `" j, T. |* v
  32. // CRevAppApp
    - X) c% d+ ^$ W- }$ N; y- O

  33. " h2 o3 ]5 G8 P. T" w3 t: l
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 z; I' W: N! U+ U
  35.         //{{AFX_MSG_MAP(CRevAppApp)" n( s) R/ s- L  n
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    + g5 A9 }2 M! L5 }
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!% v& L4 i3 M, ^8 a4 D5 S
  38.         //}}AFX_MSG
    ! `. i5 h# I$ t1 [/ Z! h
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    , _& k8 d7 C5 K5 e+ k
  40. END_MESSAGE_MAP()
    . @: H* M; E6 W( o: _- G0 J

  41. * _0 M. s9 D0 c" y8 G
  42. /////////////////////////////////////////////////////////////////////////////
    ( I% i- x: r5 s* F  X0 D2 I# D
  43. // CRevAppApp construction
    * z, M3 M4 g$ D. z9 a" m

  44. 4 L/ w& Q2 s( C9 W1 z
  45. CRevAppApp::CRevAppApp()4 u+ o7 Y0 x$ Z& x
  46. {1 s1 [, h. S* @8 q, b( d! p% F2 U
  47.         // TODO: add construction code here,0 S1 Q+ V$ i2 M6 _$ n# v5 f
  48.         // Place all significant initialization in InitInstance
      H. V5 U9 P) x6 l
  49.   bDisplayIsBig5=FALSE;0 k5 i0 ], g, _9 s6 P! N: W
  50.   bRestartUpdater=FALSE;; X' h& V3 I8 a% C1 D" W
  51.   bFinishUpdated=FALSE;! Z& J& E# j: |0 F5 X2 x' b0 [  f# j6 y
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;4 P7 w2 u: v/ M  t" V( Y
  53.   InitChangeDataBig52GBKS();- N% U+ v3 G7 s/ X- q' C
  54.   InitChangeDataGBKS2Big5();
    . L3 W/ i( `1 {) q4 d8 B
  55.         //3 q. }: {- P! O% i( ^7 Z' a$ f
  56.         bClickRunExe = FALSE;
    ) J9 N# n6 Y) E& O$ f/ j
  57.         //
    & \4 b, p5 Z9 \7 `- z- [7 q
  58. }
    " y8 |3 m# l3 g8 e( R1 z

  59. + K: D# u% i6 s
  60. CRevAppApp::~CRevAppApp()
    8 A$ ]# a# k4 Z2 W
  61. {" y; O2 d/ F8 T: J
  62.         // TODO: add construction code here,
    0 ^  E# R& t" Y$ l0 w
  63.         // Place all significant initialization in InitInstance
    + M( ]$ s/ u' j
  64.   EndChangeData();+ O2 B; m- i5 i9 @& T+ ^6 |" E
  65. }* A* [$ x  [& K# u& q! i  ^* u; Q; }* Q

  66. # T) E1 f$ i4 }5 M
  67. /////////////////////////////////////////////////////////////////////////////
    6 w# L* i7 @* T. c2 \
  68. // The one and only CRevAppApp object6 ~2 T0 l# [( q+ F3 u

  69. 9 L, _' C$ n5 I; U' S- n% M
  70. CRevAppApp theApp;) N) f2 c2 f; X8 d
  71. : [6 t3 C3 V+ k8 k
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    $ j1 t  a$ ]. r4 r  ~9 h
  73. {
    4 T$ P6 V: `+ ~& f% V
  74.   int iEOF=0;/ d8 N9 w  F2 \
  75.   char szTempName[MAX_PATH];6 k8 J  E  B& `$ S& z" D
  76.   *szFileName=0;3 H& W5 \3 `" v9 W
  77.   iEOF=fscanf(fp,"%s",szTempName);! V$ ?0 o& A  i) ~/ N
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')/ |  b, L7 f+ ^& i) {" A3 ^
  79.   {
    * t5 \# i) n! a9 Y  v) M" O( p
  80.     strcpy(szFileName,&szTempName[1]);
    : K- f/ `8 k$ D. j7 y' m, ]
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)& D- I' S: B; h4 f. k: m
  82.     {3 f/ ]2 n0 s% y9 e4 R8 E
  83.       iEOF=fscanf(fp,"%s",szTempName);
    3 h) l% q  _# G" o4 M$ D
  84.       strcat(szFileName," ");
    9 {$ L! l  `, M4 m0 e
  85.       strcat(szFileName,szTempName);: T. r) P. H" B. j# M- ^0 W- q
  86.     }; N' ~1 y( d- c$ j$ b" e4 R$ s4 C9 R
  87.     if(strlen(szFileName)>=1)
    5 a+ k- W& s/ `+ _  `/ q' |! S
  88.     {1 R7 p1 s7 i+ r& H2 a* R4 ]; ?
  89.       szFileName[strlen(szFileName)-1]=0;
      G9 q: J! c; ]% D7 v3 L, x
  90.     }0 S# Z! O* \4 q: V1 W0 D
  91.   }5 N3 v. p. H5 Y3 Q' ]: Z
  92.   return szFileName;
    ; I, @5 e  H! |9 c% {2 `* d6 |, a7 p
  93. }
    % j. p# [; i# o) F; M. u& R& q
  94. . L! P" X" L# z& k6 U
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile): o& i( `2 b7 |% h2 c2 y4 I5 W
  96. {* n" f  x; j3 i: r  V
  97.   FILE *fp;0 A* p. e6 l# k7 \% ^
  98.   char *key=NULL;
    ; h2 {9 W  v, N
  99.   char version[MAX_PATH];3 q8 C2 q3 a6 r+ w% x& X
  100.   LPUPDATEFILE file,olds;
    ; L. q/ r, E6 |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;+ {9 ^* W# b4 R& P7 H: o

  102. 9 c7 q& {" Z& i9 g6 e4 y5 x3 x" T, E: |
  103.   UpdateList.clear();
    7 K( B7 Y4 O% i! J: f
  104.   UpdateFile.clear();
    7 S5 L( C: ~- y  ~
  105.   if(GetFileAttributes(filename)==-1) return false;
    / ?$ _0 R5 D2 ?) F
  106.   if(!(fp=fopen(filename,"r"))) return false;/ a" @& R1 v: g! f9 K
  107.   fscanf(fp,"%s",version);. J* ^8 s- p. ~
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 F: M" t/ h$ _0 v$ e4 r* u
  109.   while(fscanf(fp,"%s",version)!=EOF)% o9 n- D8 d. r( s0 y3 s
  110.   {
    8 f$ c7 }+ @2 R" C
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 O3 s3 t* O1 d
  112.     fscanf(fp,"%s",file->path);
    / E8 Q; N6 [; n
  113.     ReadFileNames(fp,file->file);
    ) R' g+ B( m& }  M' V' X, G
  114.     strcpy(file->full,".");
    5 ^5 D& ^. q1 v* I0 F7 K
  115.     strcat(file->full,file->path);
    2 Y4 s- D' U' N. d: Q! \( v
  116.     strcat(file->full,file->file);1 m5 y, `/ a9 T; F9 v
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
      ~( y$ H! s6 C; }% A! a
  118.     {
    ; U0 l( z  z, H! D2 `; E, X* P0 k
  119.       file->vers=(float)atof(version);) m, n# K5 a# A  [5 i7 h1 r
  120.       UpdateList.push_back(file->full);8 q0 G: ]) u/ d5 t7 x  I
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    $ R# z: j" A+ W2 k
  122.     }7 t6 A/ W; x$ [3 v* A
  123.     else
    . Q/ Z) S; S7 _9 ?1 M
  124.     {
    . K! n8 X7 v+ c' M: r, i# ], S3 i
  125.       olds=(*p).second;
    1 Y% `. a$ m# F7 d
  126.       if(olds->vers<(float)atof(version))
    - N9 x# o/ _& ^
  127.       {9 _8 K) i" T9 `+ f6 B
  128.         olds->vers=(float)atof(version);
    ' \2 k1 r9 ?( o! e# [  f
  129.       }) E/ `3 f1 [0 T( n% n$ {
  130.       free(file);
    $ x: r: R% B& @- k" f: y1 X  _
  131.     }
    : |. m4 Y  K9 N" [, N5 O
  132.   }, J  @9 Y5 Z. z+ t! S5 S1 L
  133.   fclose(fp);
    4 }4 z- o& g: k
  134.   return true;% t8 U. N/ ~9 j2 b0 Q
  135. }
    * d7 ?5 Q. m1 j5 l5 [

  136. + f& b* t0 T" ?
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)2 l+ R  b0 F8 _0 o) b& T9 C6 p
  138. {( F  j$ @* U2 ~, K# x: _$ ]2 P
  139.   TCHAR  szFull[MAX_PATH];" B7 I$ S# F7 [* R
  140.   TCHAR *token,*inter;( N. w3 f) L" W8 W
  141.   *szPath=0;
    1 j5 g- B- y9 L/ v, Y
  142.   strcpy(szFull,szFullPath);8 l3 c- i6 O9 O
  143.   token=strtok(szFull,"\\/");' a  g: ^, p9 J( J1 y: k5 {
  144.   inter=token;; T1 |" G3 C9 w9 Z6 M0 H2 y  r
  145.   while(token=strtok(NULL,"\\/"))' B0 e. ]+ S; [, B* J) t
  146.   {# R5 a/ U3 r5 P+ @
  147.     strcat(szPath,inter);7 A# P  X6 e, z) I
  148.     strcat(szPath,"\");4 _/ `9 y" q6 b5 o9 [+ ^
  149.     inter=token;$ R, @7 v5 A2 V: h: [) o
  150.   }' j2 h9 s; W6 j* r
  151.   return strlen(szPath);- x1 T" a; x  W! a. L
  152. }9 F5 I6 {0 E/ D: g' e

  153.   f7 x) C- R# J9 {" `
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
      t. F9 d2 }+ v1 z
  155. {
    , e! D- _, a. R+ S" f
  156.   DWORD attrib=GetFileAttributes(Target);
    1 o. `/ E7 l+ x
  157.   if(attrib!=-1)# ]7 _# Y/ |5 I) Q5 B1 S8 t
  158.   {
    ; G; k- D# B4 S( u
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))+ ]% s+ |. r4 t: O' w! h
  160.     {- t' u! M& F! k7 ]% M: n' `0 x
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);  O+ Y/ C9 f3 G
  162.       SetFileAttributes(Target,attrib);
    ! Z% j9 @8 c0 f0 z0 R  v$ L5 d
  163.     }, j: X! ]3 z1 _! |4 _) Y
  164.   }
    ' t8 W4 ^! n" {6 _7 ^
  165.   CopyFile(Source,Target,Erase);
    , B( M) U! L6 {$ H
  166. }
    * I! M( x* V' |" X) Z$ ~  R

  167. $ X0 G7 s& F1 g4 m2 I+ m
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    1 q: |7 y' M" s4 {+ ]
  169. {
    & L% N8 M: F# I( V
  170.      FILE *fp;
    " ^; c7 m7 ]8 m" f! F, |2 d8 I. ]
  171.      char  szBuffer[8192];6 K" z% y$ \" y8 m
  172.   va_list  argptr;
    3 _+ f5 r. x; e7 v* i

  173. 2 z, M, c% ~& C% \- B: X
  174.         va_start(argptr,message);4 y# S0 `2 J3 Z, M; \1 p
  175.         vsprintf(szBuffer,message,argptr);5 k- N- w: }( e
  176.         va_end(argptr);
    / W" X" h0 N' x0 h% m* h' @0 t
  177.   fp=fopen(FileName,"a");8 f8 x% W, `4 D2 Q
  178.   if(fp)
    ! f3 N7 c' `6 H9 Q
  179.   {% ^0 Q4 t! R4 `4 D' s
  180.     fprintf(fp,szBuffer);& [7 f8 o& Z" D1 N2 v! c
  181.     fclose(fp);  f; }$ h/ G6 \- L" ~- y
  182.           _flushall();" F6 n+ n; ?0 f5 e1 z
  183.   }) S# G. X5 E9 Q, x& }& ~
  184. }. G6 B4 S: V. ?4 v+ i: Y

  185. + B9 ~* C# {- S/ ~9 K
  186. BOOL CRevAppApp::Fclearf(char *FileName)% k- ~# Y9 I+ c/ {
  187. {
    # w% H# G0 j; P, v1 f1 ~
  188.      FILE *fp;4 `7 ^! u7 @; H; R; Y8 `8 }0 O+ M
  189.     DWORD  attrib;
    4 g7 x' Q2 w$ j! a! \5 }2 C  p
  190.   attrib=GetFileAttributes(FileName);/ e6 G$ r2 M9 G- E* J/ P! `
  191.   if(attrib!=-1)
    . B7 Q; s% D9 o2 I
  192.   {6 t( J! A+ U: q' a
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: U# Z% e6 u# g) z. R( k; F
  194.     if(!SetFileAttributes(FileName,attrib))
    " g# {1 ^$ G% g- ?- T, n4 ?2 \, F8 p
  195.     {
    3 E/ w4 X3 w6 v5 L6 {2 L4 {
  196.       return FALSE;5 V% m4 V; T, c7 l  U
  197.     }+ p9 U5 E( N  }, h1 ]  t
  198.   }
    % i& b  {/ G/ h) r& j
  199.   fp=fopen(FileName,"wb");# t2 d; W9 |6 v/ H, F: @2 |2 |
  200.   if(fp)
    8 ^! k( Z9 u4 j+ ^' K! u2 E
  201.   {
    ! Q, t& Z- m4 j
  202.     fclose(fp);
    6 H9 I6 ~' ?! n4 _! {% r: r
  203.   }
      N1 i+ @8 X  Y) U- o
  204.   return TRUE;  F" m  I7 m1 ], Z! w$ W
  205. }
    . i3 A$ y. _! {
  206. ( X( [8 E( v4 ?& [, `
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + _. ]- e! U3 o, n
  208. {
    : w6 Y+ ?. z( A- r# N
  209.   char filename[MAX_PATH];/ o/ w8 \' Y4 ]1 _/ }
  210.   LPUPDATEFILE file,olds;
    - r0 A! ~1 k0 P2 u+ j
  211.   std::map<int,CString>::iterator i;
    3 F" u4 ]) J+ u8 h; M& g
  212.   std::map<CString,LPUPDATEFILE>::iterator p;0 u- d6 h2 B* M% y5 V. x. [
  213.   std::list<CString>::iterator l;
    $ `1 b7 \  s. c$ p/ K" t. Q: q
  214. ; B6 Z) I) z+ u1 e
  215.   if(bFirstUpdate)
    ( Q( s( ?$ M! _/ t1 a8 S- s# c
  216.   {
    ( F. I" o2 y, T/ S* h: g
  217.     dwCurrFile=0;% d2 M+ _/ m# V$ S: y9 d+ Z# u
  218.     bFirstUpdate=FALSE;- _2 W$ z5 Y# P6 V8 V- B
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . v8 v+ ^1 ^9 q
  220.     {
    7 Y  R* g$ }7 c8 y7 q1 S6 G: F
  221.       dwTotalFiles=UpdateLocal.size();
    0 X. L* f; U: a4 F: T
  222.       dwDownLoaded=0;* F6 P( _$ F4 k7 \3 d, N
  223.       bSilentStep=FALSE;; \# d/ f% N+ ~1 T9 e$ e
  224.       bCompressed=TRUE;
    ; u8 z% S6 k3 _) P& o
  225.       strExtLocal.Empty();0 Q5 @3 T! Q, ]6 o
  226.       strFullName=(*i).second;
    ; T2 S$ R+ }" g& ?, m- B
  227.       dwProgramState=AP_CONNECT;
    , i& Q  l+ S5 u3 q# w
  228.       return TRUE;( ?) T, S0 T4 O9 @6 ?' |; Y
  229.     }* T9 M2 C' E3 T. X' Q! |. o
  230.   }5 @1 w/ S# D$ h& {8 o
  231.   else if(bRestartUpdater==FALSE)% b3 P( D  B# \- T
  232.   {
    % n! ~) O3 T8 h, K
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())& c( `" ]/ Q9 v# t- F* r
  234.     {: l$ f( f$ x, e( v
  235.       file=(*p).second;
    ) I4 g7 p, {- g- J
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())5 U7 h& j. n# S. J5 h' q0 V# r
  237.       {* J, M0 |- @2 @, V
  238.         olds=(*p).second;0 A4 ?  |* j% q
  239.         olds->vers=file->vers;% G; ^" o2 G0 b1 Z- ]2 E
  240.       }
    ) v7 ?+ [- c7 ?) u
  241.       else4 [! X1 D' ]' W3 m
  242.       {' r9 E9 q8 l- @9 Q: E  h  d
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' p% @! G: N* K. S6 f! b" k1 s
  244.         memcpy(olds,file,sizeof(UPDATEFILE));6 j1 z" {: D3 I0 v$ |
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ; Y( j8 ^% B2 k2 }" i+ _. }
  246.       }' U) _% P$ f5 a5 ^) z+ }
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");  m$ E  a$ y/ I6 |$ [8 L% }6 g4 M
  248.       sprintf(filename,"(%s)",file->file);  x% R) V+ l7 G* S9 U- A# h. Q4 q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & ^( t* M0 G: E
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    6 D% e' L$ ~4 M9 a4 ~1 @6 ~
  251.     }$ h2 p  z& |3 i1 o* ]! [# @
  252.     dwCurrFile++;
    6 |% K! X: w4 F+ M  @
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- D. {+ P8 _& W
  254.     {
    6 q" N/ \% C* Z& K
  255.       bSilentStep=FALSE;
    " r7 h/ U, E' q/ U
  256.       bCompressed=TRUE;0 W# M( P+ X7 H) X
  257.       strExtLocal.Empty();  X% ~3 I3 Z) b% e" I5 C$ }
  258.       strFullName=(*i).second;
    * a! {# J( W! J/ N% e
  259.       dwProgramState=AP_CONNECT;1 a. _; s  d2 F' [7 s. I- H. E
  260.       return TRUE;" v  }9 H( u3 a/ L+ O
  261.     }
    8 f& A5 Z5 C7 B. i* ~6 @
  262.     if(!bRestartUpdater)! u) B! e; a3 z. N* A2 q* f
  263.     {
    : j, X: }) F: ^9 x
  264.       int iCurrSize,iFileSize;
    8 E5 K" W1 H$ \: I4 t
  265.       iCurrSize=0;
    ( N) i8 M- Y7 Y% M# e* _4 I6 r6 I
  266.       iFileSize=UpdateList2.size();
    6 b$ l; e( @$ R: Z3 F$ t
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");7 j" e6 q9 d* z- e# q/ P
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");/ O& O$ \, q6 a
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");5 d+ T3 f1 C1 {& `5 a! }- v
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( I: d+ O3 ?5 U, t) Q$ ^% W, V% T& ^
  271.       Fclearf(".\\update.dat");
    % N& Z1 E( \0 C
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    # w6 d9 k4 x9 L4 n. U" c
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++), ]: B1 n& c2 v( T2 Q
  274.       {
    5 A9 _* l1 e4 x! {
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())1 N% j2 {9 K! ]8 Z* y! R
  276.         {
    ( w% y3 J) L3 H9 Q& R  a
  277.           file=(*p).second;1 B4 i! M, V+ L- r0 R; K& |
  278.           sprintf(filename,"(%s)",file->file);' b' o- f5 n4 U& f4 O* G% N- j
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 F' ?4 L8 A# M8 N
  280.           iCurrSize++;
    / ]' v% D4 O, t
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    3 f+ J5 g  t, [4 f
  282.         }. P% Q: p4 t! q% e* ~
  283.       }$ }, f% O% p: U; c# ^; }
  284.       unlink(".\\update.txt");8 p! ?' V+ |- r+ k- n
  285.       unlink(".\\update.tmp");
    , {2 L0 i- h( k6 h
  286.       Fclearf(".\\checkversion.dat");$ m3 ?  M: N+ I7 B8 s8 w
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    2 {6 u# V( P( E7 _8 M% s
  288.       if(UpdateLocal.size())
    " ^% J! D; y$ U+ Y
  289.       {3 n1 X  G% v% t' C( h; h( T
  290.         UpdateLocal.clear();
    + R* W' G( _6 D+ H! {: h
  291.       }
    # J8 i! p' S& c- K: x4 Y
  292.       if(UpdateFile3.size()); B0 q' K# n, y& L0 n& Y1 |
  293.       {
    , t; q! w: k* X( L1 H  {& @. v
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" N1 s; H' h7 n* t
  295.         {
    ! ]& S6 @" g) v& o4 w' O
  296.           file=(*p).second;
    , {3 l) l( d  R0 X  I% T$ ~
  297.           free(file);
    3 O/ Z! Q3 r" j
  298.         }. {1 u2 b8 u/ x, Z
  299.         UpdateFile3.clear();0 R. h, V5 _3 b: X8 k" A* K1 ~6 ]8 i
  300.         UpdateList3.clear();8 T* t3 d6 e; d& A5 N
  301.       }
    8 i; x! |3 b$ x6 k& Z2 @' s
  302.       if(UpdateFile2.size())
    ! l6 y/ w: I" ~' W$ O
  303.       {
    % F6 H) c; Y4 |" F1 m, {
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); @5 M0 e: O  ]
  305.         {
    ( }0 ?! c$ e$ d/ n8 }" U
  306.           file=(*p).second;
    $ Q3 H6 d% L) k' M2 g9 ~( j
  307.           free(file);0 n0 S- k' K: ^. ^
  308.         }, [+ L# e2 Z' Z/ p4 l
  309.         UpdateFile2.clear();/ w0 i) F$ j8 E& j7 k4 t8 Q7 K5 n
  310.         UpdateList2.clear();
    7 [" v, Z  ~+ t. l3 }; B
  311.       }
    6 e+ u# G/ |. ]3 G. C- U
  312.       if(UpdateFile1.size())
    4 q9 P5 c3 L9 \
  313.       {
    4 [0 |. r* R/ n9 A8 I' t, ^& c1 I0 T
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 t$ H- ~, j$ \
  315.         {
    ' z9 t& q$ n& u1 o
  316.           file=(*p).second;9 c1 ?9 |+ j7 \4 t- U
  317.           free(file);  W+ X) A" @- N8 l5 F
  318.         }
    % Z% h* ?- p3 F8 N5 ?' O  u4 i
  319.         UpdateFile1.clear();
    9 Z5 B1 M' @* {& G% I/ i
  320.         UpdateList1.clear();
    1 w* y3 k9 J- h* U0 g+ j9 f0 V
  321.       }
    $ C$ Q6 a# P. v* y, B  Y& U
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));0 D6 m$ C: I5 `# A+ n( r  Q2 _
  323.     }
    $ D& O! r8 {3 d9 z- ^; L9 r! [
  324.   }
    2 J7 x- t7 v% F! l/ H2 ^
  325.   return FALSE;8 q! O& Y  O2 N0 Y: U
  326. }4 W" V; b8 d6 D& D6 }. Y
  327. - R8 [/ A8 M; W% g! h
  328. void CRevAppApp::ClearAll(void)9 F! o: g+ d' d; f4 ?! F
  329. {
    , h, k+ i2 U! m/ P+ _: L( E
  330.   LPUPDATEFILE file;' F! D; D! \% Y' t' A
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 a% l3 Y$ F% R& C7 r# w' [, N

  332. 2 o3 X* u7 ^" w2 d& y1 }+ N
  333.   if(UpdateLocal.size())
    3 z8 n% S. J0 f4 T; J
  334.   {
    5 h8 t3 ^5 [. b4 u* h- j) E9 m
  335.     UpdateLocal.clear();
    " Y0 K+ A# j7 I2 b5 i
  336.   }
    ; y2 W7 ?8 R/ S+ P: u
  337.   if(UpdateFile3.size())
    , _0 |4 P2 o8 L# a' I  h
  338.   {
    7 s) f* f) @2 X
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 X5 E! R# @1 L8 l6 p8 ]9 I) q
  340.     {
    ' ?  F6 x# w( J2 m
  341.       file=(*p).second;- c: C# X$ {  Q& I3 C/ u& h* H2 l
  342.       free(file);
    ; _& R# {+ ]) S4 U
  343.     }1 F  n0 N6 b. R' U4 `3 x; J# j( M
  344.     UpdateFile3.clear();
    ( L. j7 ]4 s9 a3 e" o
  345.     UpdateList3.clear();
    ' W3 W" \* `" y9 [# S, ^, G
  346.   }
    + S; |8 s! G/ p9 m7 X5 U
  347.   if(UpdateFile2.size())
    5 F! [: d  M6 M2 e( c
  348.   {7 A  f* K- u6 b. _+ H7 S$ v, A
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! G, t, j5 }6 [
  350.     {3 u9 A4 {) q7 p) f5 U; h" {# E& H
  351.       file=(*p).second;
    3 S/ X8 M8 G  E# q* s0 O
  352.       free(file);
    , l, r4 b- F0 N
  353.     }
    3 ]  _  c& K, ]% r4 Q- s  ]
  354.     UpdateFile2.clear();' S& C% l( n/ x, N6 T
  355.     UpdateList2.clear();
    6 o9 }+ n* s( N; u' k
  356.   }$ ^! ?( [) U' m& ~( S
  357.   if(UpdateFile1.size())
    7 b& p6 T3 q( s, `; m" M$ e$ V
  358.   {- V8 o' ^& c! u+ i7 G; t
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & f* ^$ R& J: K# k
  360.     {! c' A! ^, P/ |; F/ X% ]* s( l6 R
  361.       file=(*p).second;) Z: x* G4 G+ p! H3 V- Y
  362.       free(file);* g1 [. w2 _# c- v! W* r
  363.     }
    , R* q' g! a1 a+ x/ q
  364.     UpdateFile1.clear();
    ' ]/ u/ |8 Q3 _/ ?2 k7 E, V3 o
  365.     UpdateList1.clear();
    ! c. l$ t" K- S3 o0 \2 j/ f+ v, u
  366.   }
    2 h% y9 B1 y, x% w9 r4 Z
  367. }  % ^2 ?0 e& p% l# D/ n4 Q3 Y
  368.   
    $ G* p4 ]3 N; p+ Z1 N
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ) d4 u  l( R  K
  370. {$ ?& @3 v: e& h
  371.   int c;
    + q0 ?( h2 H3 M/ ^
  372.   LPUPDATEFILE file1,file2;8 j1 ?' K; ^+ a: E* q2 N
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    8 R9 g! O8 L; h: x9 F, J
  374.   std::list<CString>::iterator l;3 F+ {( q6 H4 t+ G

  375. / p; G8 e0 R2 _5 M" }& Q* [
  376.   UpdateLocal.clear();& z, [* N1 a5 X/ R
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    % H0 ]0 l! ?& ~6 W
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);3 i8 z) w% b) g( E$ F- @. n- i* S3 Y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    2 H& Q: x7 z/ D" k
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);& @' B" |* z1 p- F+ `& x' [
  381.   if(UpdateFile3.size())/ c+ `; Y) h( r
  382.   {2 n/ v. ~/ ^) D
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)" h, B2 V$ X; w$ t
  384.     {' S7 k2 \) d- z2 E7 ~3 |, ~+ v! o4 X
  385.       file2=(LPUPDATEFILE)(*i).second;
    % f" |' W! {8 c5 I/ ?1 O
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 F/ `& y2 o3 {# ]5 F3 b* B
  387.       {
      ^: r% n5 r- k# U" Q. P
  388.         file1=(LPUPDATEFILE)(*p).second;* Q+ H. c" Z% n) G
  389.         file1->vers=file2->vers;
    / Q8 t: v: |: Q7 w9 w5 d
  390.       }
    ( J: A& p1 u( S9 T: U4 q6 S: L
  391.       else7 I* ~% g, ^9 g  r4 ~" T  [
  392.       {
    3 O2 p- h, ]- Z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 y" q% s: P* j8 T) H
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    + C# o, X- g7 n0 q* A/ E1 M) ~
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
      V. O9 C* }& m  y# V0 ?/ _
  396.       }
    8 r  W5 p# Z/ n3 |. ~
  397.     }% T! S9 ?7 Y& M2 y8 m( S
  398.   }# @4 D) T5 m! e
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 Y! x" e9 N  x& r' _9 e  F
  400.   {" t8 ], t" h- }) A5 @
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())9 o! \9 _7 n( q; k% v/ ?3 N4 r# C
  402.     {
    2 |& ^. X- E: \$ X; l
  403.       file2=(LPUPDATEFILE)(*i).second;% u( O9 v8 I1 K$ I
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ Y8 B) G8 f! n) O$ v+ s: Q- f
  405.       {
    9 X+ b" Z) \3 M: h
  406.         file1=(LPUPDATEFILE)(*p).second;; o+ \! N  T1 ~+ h/ U) U6 @
  407.         if(file1->vers!=file2->vers)8 L. @* T* ^, U* }8 }
  408.         {
    4 P  Y5 c( g8 n! R* a& b! Y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 Q9 @/ k* v7 r
  410.           c++;2 n5 ]3 Z' C9 e# ]
  411.         }% H3 a/ K6 U6 i6 [
  412.       }0 ^# f) A# S8 `: y0 U
  413.       else
    : ?1 b2 G! t' `* \: L( I" b. b
  414.       {$ |: q( H3 m, X+ n8 q) B
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% p5 E* u# Y2 S$ U; V6 x/ E
  416.         c++;
    3 J; ?) O7 s1 r& q  C& @9 P9 [. d) p
  417.       }2 f- K+ E9 |  O: G# C- k: G
  418.     }, ^! u5 F9 q* c+ i) ^' B
  419.   }
    . Z$ m  t( R5 N/ {! Z6 b
  420.   unlink(".\\DownLoad\\update.txt");
    ( t' Y) x/ t1 P2 Y. Z, N0 i
  421.   if(UpdateLocal.size()) return TRUE;
    3 j7 L# a0 K6 Y5 w& s
  422.   else                   return FALSE;
    ; c( ~% ]. f& O( z; \, C
  423. }
    " p& w% K) l0 }# i# Y. b7 T

  424. 5 s! W/ p/ R7 L* Y9 U
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 C$ o8 M' i  j! \! p7 ~! a
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    & s- P6 _' q0 R- Y" ]; D1 P
  427. & q" K4 b) `- w3 T$ I0 b

  428. , k" D) k% P" }0 y) [) |0 I

  429. 6 G. }' C! k  B( m, K/ \- {
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)3 h' A7 A4 Y, y% i+ Q/ p7 i8 y  B1 n
  431. {
      }* r7 t8 j8 C6 T4 @/ s6 V
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    $ u0 U/ d- D" J$ ^( ~' I' a0 O
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( R! R( m" M% C% m* g4 K7 ^
  434.   {% V. {. a& H- T& C
  435.     char szLanguage[50];
    * I; }! C6 `$ p" \
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * i, ?- |' C! L8 q; `
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 l7 Q1 c/ }/ j4 k! ^& x6 u( c, R
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 X9 f4 l- |! Q/ v8 S
  439.     else                                   m_iLanguage=ENGLISH;
    2 g1 ]! V5 j" U/ O0 f
  440.     char szRegister[100];
    * T9 E9 }& @/ H% F) i
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 o+ s) d! W  K
  442.     strRegsName=szRegister;+ N; o: k4 F$ E
  443.     char szPatchURL[100];
    5 \- A  j3 h% I0 P7 R" F
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % v# z- i; b8 k5 H* |. h* _; J7 Q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' A  z/ N/ F0 I0 |4 C
  446.   }
      w, W9 _) h' [) f, l+ E
  447.   else
    8 v" }0 e. E, F, Q
  448.   {
    5 N, Q6 k/ P. {3 y* |" \3 Q
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , ~' I9 O) K5 F. v5 m* t
  450.     strRegsName=DEFAULT_REG_URL;9 ~3 }8 _% v6 Z. c7 J7 G( ^
  451.   }
    * z" n, o( {0 T0 \
  452.   if(GetFileAttributes("hosts.ini")!=-1)- H. A# w; M$ g
  453.   {2 h9 s2 f3 y9 l3 t
  454.     char szIP[50];+ [  ]) a+ Q( H) s% l4 K' z) l
  455.     char szDIR[300];
    8 J4 H9 l% D1 g, E
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))4 M" e( U; k/ o, J  {  L" A8 L& z: |
  457.     {! F( I3 B, m! \4 l) B# S
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");+ k! e' k: z/ M$ `* P$ c" W) o" g
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    5 r" T8 k: x5 X2 ]  U
  460.       strHostName=szIP;+ {* V2 T5 h4 l3 M
  461.       strHostPath.Format("/%s",szDIR);5 q8 h5 e# Y+ E" y- y8 {5 d4 n
  462.     }( c5 f4 d! R+ y# \, ?1 x4 z
  463.     else
    0 ]  y( ?5 B) [+ A' [& g
  464.     {; W4 m# J: J/ e; E; K) \. j
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : `. i6 W( w* s! i3 [: c: U
  466.       {
    2 I, Y+ W) i( t  i- Y7 G. [( Y! u
  467.         char szLanguage[50];
    & o# _3 C0 Y5 C: Z8 |8 w
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ Q. U: K& N% f2 }, M7 h  |
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . v  s6 Q$ u& y" R( L
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 q, M7 K" I$ X% z# Q6 F" ^9 ^: _' j
  471.         else                                   m_iLanguage=ENGLISH;
    7 t6 z: |" j* L" G7 |" F; b: j# i
  472.         char szRegister[100];9 A/ y9 K4 h& o7 e# p; E
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 B# P! v& a# {- D+ Z
  474.         strRegsName=szRegister;
    6 F/ C4 C: j) {" I9 J9 p0 b
  475.         char szPatchURL[100];
    & J$ S' s6 T* {# c& f' |, ?
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% f9 _0 L. t( w! z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  Z: ]. z% k! w* f! T/ g9 u' T
  478.       }/ I: D7 a# ^& h4 P. h
  479.       else1 }& Y8 D4 ]: T9 u0 x3 [# g, |
  480.       {
    $ l) ?0 P/ E6 u/ p
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      H! D- V5 `( E) f$ `8 G
  482.         strRegsName=DEFAULT_REG_URL;
    ) Q- O3 u5 P$ [! }, J5 x9 j) A
  483.       }
    9 O  p- D# I8 D7 c( U: |
  484.     }& A( `* d1 R1 K; i; r
  485.   }# J4 E; V" X  ]# C
  486.   return true;9 Z- f. m4 V$ z2 u! x2 z( S. A
  487. }$ e% T3 M* ?1 v
  488. 8 g( s6 i/ `1 Z* d
  489. #include ".\ZLib\unzip.h"( \0 N; G- ^! L/ F4 l3 b
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ; }& X, r( k5 B) ^6 D! S! Q$ v/ I
  491. /////////////////////////////////////////////////////////////////////////////! N3 S0 q: _$ a; d5 X
  492. // CRevAppApp initialization1 @& X; |+ T* M3 C
  493. 8 F5 A  f6 C! m1 S9 D. z# h
  494. BOOL CRevAppApp::InitInstance()/ x- n+ ~0 |" _& |
  495. {
    ; K4 n' q0 q7 i3 [- c) ]
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    8 a% q" r: s3 Q/ }
  497. , p5 h# V. `! e( h+ U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    0 k$ z$ o7 D0 ]# X; C- b  D
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    % G' Y2 G- c5 x; n2 G( I" q0 ?
  500.   {/ h( G6 y  n5 Z, p4 H9 E
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    1 X! B7 U% e3 u0 z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);0 R" A9 @" o4 ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    5 m9 w9 i% w1 h' R
  504.     {: A: j( L! O5 F4 `
  505.       strcpy(szPath,szPathTarget);
    # D+ U' n% w+ Q7 N
  506.       SetCurrentDirectory(szPath);& N6 Z, D) }- n. P9 F' d' e  f
  507.     }6 d5 M/ Y& R5 U( S4 L$ u% p
  508.   }
    - e' f& p# C7 y8 }! _2 [" o; ^
  509. #ifdef _DEBUG, z% A  a: r3 e
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 F" q6 @" u8 }2 A, b+ {2 U
  511. #else1 ~* }; u( x. {% N
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * [. g! J- W8 p
  513. #endif7 B, g$ H  R3 b% O! r+ i0 c
  514.   {( |, t8 m' D+ J: ]) g1 s1 h. Q
  515.     char tempFileName[MAX_PATH];
    8 W$ Y  I! l& y/ v2 y" }  f
  516.     strcpy(tempFileName,szPathSource);
    9 f. l; G1 P8 a* ?4 {+ J/ J$ l0 {
  517.     tempFileName[strlen(szPathSource)-12]=0;) b/ L& t' t5 Z2 \# p/ y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    8 Y! W" q9 m, a1 E
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);/ N( g0 ]) c  z+ ]- _& I
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    % A8 D" Y! j* a/ `5 F) V
  521.     return TRUE;
    6 H% r% o" l; Q4 n( z+ l1 d
  522.   }$ y. p; b( a- Z3 ]5 o
  523.   // Nuke 0118: Delete run.exe6 l6 n! @9 Z  l
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );+ a0 _8 r3 z+ J3 V
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    , w. u) o* u5 F& v0 O, q4 m
  526.   if(!ReadCfgFile("Config.ini"))
    ( x$ P/ {9 q% A0 ], p
  527.   {$ N" L3 ?+ D8 H1 w" E  C: f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);$ b% d' i# X+ X
  529.     return TRUE;
    : j8 F0 B% Z0 j3 W
  530.   }
    ( y- O* T8 C5 U+ E& k
  531.   HANDLE mutex;
    + U) W% B( M+ ^
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))8 Q3 R" s  [) |& \- J# w4 f* N
  533.   {6 E. Z4 a, U. ^
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)- |4 G6 i& D- a! D
  535.     {9 T4 c; W4 F1 s! Z( O1 g) P
  536.       CloseHandle(mutex);+ Z; d4 B6 F) S
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    6 i3 Y1 u+ Y) @0 N1 v5 U. h# I* M
  538.       return TRUE;: G' E: k! O3 S! s
  539.     }
    / @  L; S, C* Y! _8 L/ x
  540.   }  ( F9 P+ W  C& I
  541.   CloseHandle(mutex);
    . d3 R6 m5 s& C" W+ k' [

  542. + O7 F7 C7 `& L
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);" `/ n- J* N1 A
  544. ; m9 @" O- i& _, Z+ p# f
  545.         AfxEnableControlContainer();
    5 E4 j  ]7 z: u  E9 |4 \  S3 a

  546. 0 S' N3 v. z6 }( E
  547.   bCanUpdate=FALSE;4 k+ b( z$ q+ D1 W% L7 }( }% H  z
  548.   dwStartUpSteps=1;. x0 u" K# B' C; T
  549.   dwProgramState=AP_NOTHING;
    2 T/ \2 X0 _: m

  550.   t$ I( e# W7 [, y4 ^' S& t2 n' U
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & I4 K! n' I! A3 ^
  552. ) }# J/ H& z/ o' e3 x4 |6 m  ]4 q  V2 U
  553.         // Standard initialization
    / B: U7 W- }" u$ N
  554.         // If you are not using these features and wish to reduce the size+ S; J4 x/ h2 a# A
  555.         //  of your final executable, you should remove from the following
    2 ^, w2 x2 M: J
  556.         //  the specific initialization routines you do not need.' o& |" t1 Q- ~; ?& E3 c
  557. 5 J$ e8 `$ A7 W1 |
  558. #ifdef _AFXDLL
    ' S* j4 [/ N" T8 g! J
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL: i6 W  h9 N% b5 f( R8 j. e
  560. #else5 k" d2 @) m0 L) M0 C- x+ G( `8 t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    4 w, D# `# m3 ^" F# Y
  562. #endif
    # c$ ?9 Q. j3 T, a6 y
  563. ' ?- a( W: O) q: g: @( y
  564.   dlg=new CRevAppDlg;
    2 f; k# k4 ]+ H5 F; ^
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ; v" l: X- h. _" N7 h
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    & x1 _# n2 j- c$ N7 d; o4 [, U
  567.   m_pMainWnd=dlg;) W' e+ L4 R1 o# D6 e& D  \) \
  568. - \+ Q6 ?. n% c, `+ A& c+ R
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    8 c" a9 P6 ~4 |. _
  570. " j6 R. Q: }( Y
  571. //  GdiplusStartupInput gdiplusStartupInput;8 v- @# b! s& h" \
  572. //  ULONG_PTR gdiplusToken;
    6 ?/ V5 l6 e, O+ I8 b2 j
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ; ^$ y  z) H+ ?) d3 Z4 j* d
  574. ) ^% v/ d8 Z7 \
  575. //        CRevAppDlg dlg;1 h  W( j( g& U7 [: c
  576. //        int nResponse = dlg.DoModal();
    ; |) P5 L1 B% \! |; |* @* E/ a
  577. //        if (nResponse == IDOK)
    ! G/ t9 _$ E4 I8 X
  578. //        {& L- \! v- O. E" Z* j+ \' f$ J. M
  579. //                // TODO: Place code here to handle when the dialog is9 _0 o- H6 m0 N+ |8 k& z8 t8 s
  580. //                //  dismissed with OK0 A; X, e1 R+ n: [
  581. //        }
    : ], n3 d! y  A' o$ L* u. T) [# d' Z
  582. //        else if (nResponse == IDCANCEL)! ^2 ~# v  Z7 o$ ?3 @
  583. //        {
    4 v& k  u0 T% P4 ]/ i: F& i/ R. T
  584. //                // TODO: Place code here to handle when the dialog is, B# X# N; j' Y  A. ^6 u( C0 O
  585. //                //  dismissed with Cancel
    & I, V( P1 u' N7 i
  586. //        }) {$ ?1 S2 b+ g/ j# f

  587. . I- m% o1 }2 D% E* ]8 `
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    / a' P3 ~. Y7 j; Q$ f3 }5 j1 |
  589.         //  application, rather than start the application's message pump.
    ' m% f8 o6 k0 w3 P, T
  590.         return TRUE;
    . m" S/ W' u! T
  591. }: {$ k, v: z9 F+ A
  592.   X. z) u4 t  |) p  Z
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 v3 {5 z6 ]  @# d8 V
  594. {/ i4 V) ?8 {7 s7 E
  595.   int i;
    6 ~: l  z# _9 }4 ?8 G8 E" _
  596.   char *szRet;; W8 W. M* c. _
  597. , A2 e7 z/ m6 \$ N# s5 s$ F( L5 z! i8 ?
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    & P$ y" n' C0 x% a6 Z/ l) W: I& ?
  599.   if(sztoken). v- B/ T3 N9 ~; X
  600.   {
    % m! G6 p# N' d7 A7 E+ g3 m( v, Y+ {
  601.     szRet=&sztoken[itoken];
    ( y5 ]6 {; P. m+ `  I' m
  602.     while(sztoken[itoken])
    - _4 G) C' G& n3 ]
  603.     {
    ( D, P6 {* ]8 a
  604.       for(i=0;i<(int)strlen(token);i++)
    7 n! @2 N/ E) o% E( I2 c
  605.       {8 V+ s/ A, V1 B7 Z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]): ~' t+ v* r8 P+ }7 n
  607.         {
    6 c1 ?4 M: I, A, H5 Z1 X9 |4 b0 G0 j
  608.           sztoken[itoken++]=0;1 O+ R4 d: W' |
  609.           sztoken[itoken++]=0;
    & ~! M" O6 x/ @$ }1 f0 `8 r
  610.           return szRet;
    . y* E; u" ^8 H) c: R
  611.         }
    ) q- S* g& ~- O& ^1 a& |9 l
  612.       }
    : O- s5 p# A/ D6 I' @
  613.       itoken++;) V1 ~9 _! w" w0 U# a2 p+ g! R
  614.     }
      b- H: p! e2 `% x5 O
  615.   }
    , d0 s- \1 {) V0 L7 r: J
  616.   return NULL;  k" j& u  ]) A# o/ E5 z1 R2 D
  617. }: V8 Y4 S2 j& g
  618. : r) @& k- L  @+ w! v( t- _& y
  619. void ProcessProc(long Total,long Current)
    " K# V. ^$ _( W0 n1 L. C
  620. {
    9 g4 T# s4 u: s) y/ Z
  621.         MSG msg;
    " W+ L7 L, d8 P# r5 q4 g7 E: H
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ; M% f; f. |1 k- h8 u2 Q3 E
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    . d& A/ J" v; k
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))+ |. l5 Y' x2 `" v* c
  625.         {  y/ ]" d( |$ b# {
  626.                 if(!GetMessage(&msg,NULL,0,0))2 P( H# |% ?( z4 h1 I. P
  627.                 {7 }/ J3 P5 p, t& i. G
  628.                         return;4 |! S0 l) R5 Z  F
  629.                 }
    5 \. q" T7 N  }1 H& s" f
  630.                 TranslateMessage(&msg);4 b+ w! B3 \  i
  631.                 DispatchMessage(&msg);: K1 P, _6 G; Z6 e! D/ a+ M/ B
  632.         }       
    1 ~1 ^7 Z6 y$ s- n' j- S
  633. }
    9 e; |" I4 q# S1 }' V8 d! p+ I3 d! F
  634. 4 p4 T3 D$ ~: Q! W* y% {
  635. BOOL bFirstChar=TRUE;
    * @2 Z( {4 P, n4 R  Q" G' V) W

  636. ) ~7 e: S  T8 L
  637. BOOL CRevAppApp::OnIdle(LONG lCount)& n* ~- k5 S: ~' M% p
  638. {
    % }! E; U1 S/ h; R7 t
  639.         // TODO: Add your specialized code here and/or call the base class5 [0 s  k2 ~9 s6 a7 M1 [) u6 l; k+ ^
  640.   switch(dwProgramState)
    , L/ g) x5 p5 r; Y$ q
  641.   {/ E( b: r3 a7 g! W0 F( h
  642.   case AP_NOTHING:
    1 P  \2 {  q. m7 e
  643.     switch(dwStartUpSteps): j5 e, z% t5 C* Z) u
  644.     {/ i# x# I9 E: C- a
  645.     case 1:
    , D+ t" d. D- f" V& }7 T% N! W
  646.       {
    3 P. B. D. V# E% l& q  c7 q3 f3 A
  647.         int i;& n% ?7 D$ D: B# p0 N" Y# x3 r
  648.         CDC *pCDC=dlg->GetDC();" z/ u8 p) R: Q; D
  649.         HDC hdcwnd=pCDC->m_hDC;# S/ W; |- [0 N2 t/ x
  650. //        Graphics graphics(hdcwnd);, s7 b. H* [! s# a! F2 z/ G
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    3 d' g! l1 h8 A! Z  f  H/ U
  652. //        INT iWidth=bitmap.GetWidth();( Q. W6 @/ X0 l1 f
  653. //        INT iHeight=bitmap.GetHeight();
    - o; H5 A* k7 z7 Z5 z7 ]; `1 s
  654. //        Color color,colorTemp;
    + y, P" _5 D7 p1 ~% R2 K" T
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    " c- e9 p# j9 d9 R+ T
  656. //        {6 B7 U' K3 ]$ t
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ' L$ f! W) p" m- ]+ v+ X
  658. //          {0 ]; R, L: }5 B. ~$ }: H: b
  659. //            bitmap.GetPixel(iColumn,iRow,&color);. g- e% g4 @! Z% y, k) r
  660. //            colorTemp.SetValue(color.MakeARGB(
    3 J, G: G: R! l& a  D) {6 p
  661. //              (BYTE)(255*iColumn/iWidth),8 u/ ?6 K7 X% @! R; a7 x/ B7 X
  662. //              color.GetRed(),
    - ?7 ~* K) F- R4 N, ^
  663. //              color.GetGreen(),
    * W8 G) A& s! o+ U/ G
  664. //              color.GetBlue()));* C3 ]( Q; T* s4 U* c
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- A5 ]  E; Q# Q+ r! x0 @0 m+ g
  666. //          }( f1 k3 g" Y/ C' B6 F
  667. //        }6 w$ f: V4 ?& G% Y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    4 p: E) @' f& H, l
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      Q! x, D* l* z8 R0 j8 E0 r# u1 O
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # g7 o, M% I7 x
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 L$ m& {* `" Y- d( ~
  672.         for(i=0;i<240;i+=8): ^, S4 M- s6 a6 w1 k9 c
  673.         {
    5 ?' t: c9 g7 Y, w- `
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 f! d4 N% w' F1 [% ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 }2 i" s% H7 V+ t: B
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : b' P; X# h1 L; G% P3 {' E/ x
  677.           Sleep(33);
    . N& x% u0 W: l* n- b0 ~* X
  678.         }
      l6 b  t& P6 S' u* ~
  679.         Sleep(1000);' H9 }6 p9 S; W* Y5 C0 S
  680.         for(i=240;i>0;i-=8)
      H3 W( j! W9 L" J/ V6 W
  681.         {
    # j/ J/ `9 W% E9 q, G- u# P
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 t1 e' o$ i! @1 Q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);( F# o' q4 B: S1 B9 D, {
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & Z6 ]( ?* o- U3 s3 l
  685.           Sleep(33);6 r1 Q4 v5 |& E7 c: o0 g
  686.         }
    * n7 L' A( {( r. n+ E: w: I
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);, v# C6 h$ E* m/ Y# I3 B" d3 P  k
  688.         dlg->ReleaseDC(pCDC);
    + o4 i; i& f! r' |: C
  689.         DeleteDC(hdctar);8 o; E0 U  q. Y
  690.         DeleteDC(hdcsrc);
    : I" L6 ^6 \& b3 n3 `- r$ P3 t/ Z' Y
  691.         DeleteDC(hdcorg);7 z% L) C3 A' Q* [" {' h+ X
  692.       }
    / w( f9 q( I0 H, b* R* E( s5 _
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);! I' a4 z, j8 U9 p' l
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 W' r0 A/ u! A7 n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");' f* A; |- c6 Z; `
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    % g/ q) ]( \6 |2 R1 e8 d
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + P5 p- q. a, L
  698.       if(!Dn.Connected())
    ( Q+ }4 Z% l5 b" O
  699.       {
    9 P9 m1 G1 m$ z( r
  700.         dwTotalFiles=1;
    ( x2 T  j. S  k8 J
  701.         dwDownLoaded=0;
    5 X* p1 \$ o3 d) h* L- d* B3 ]
  702.         bSilentStep=TRUE;# X6 |" I1 P: k7 ?9 f# _& y5 |
  703.         bCompressed=FALSE;7 u4 s; f8 l( X$ ?- ?, E0 v" G9 E
  704.         strExtLocal.Empty();
    $ E2 R, ?# Q1 j+ n9 m/ T
  705.         strFullName="readme.txt";* A1 `0 @  P; ^% Y, F
  706.         dwProgramState=AP_CONNECT;
    & {, I) {! j4 `
  707.       }7 ?9 h# W3 N  F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    : q2 K8 r! h& j; O1 V* H7 D7 B3 c) s8 [
  709.       dwStartUpSteps=2;
    $ @* M& s' D6 f' Q+ C, n
  710.       break;
    : t5 z. B" h8 m# @3 @9 T. x- Z; p
  711.     case 2:
    ! [" F( B7 e0 k
  712.       {$ D; k3 l, A4 j! ?& C/ B* l$ t
  713.         int iEOF;
    " ~9 k/ c4 X5 L, {$ m
  714.         FILE *fp;
    4 V% r# _8 ^. @5 C4 ]9 v. L
  715.         char szString[512];
    3 P% g! k  O1 X: f2 i: Q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    . @" p" ~; o( o: Z
  717.         if(fp)
    , k* v. z" w) M* J8 N0 F6 ~- _
  718.         {
    5 Q! g4 f% ?; o/ r0 m. w0 [! }! ~
  719.           do/ C$ g( i3 O0 I
  720.           {3 f: C2 P9 C: b* p2 [: Q8 H
  721.             iEOF=fscanf(fp,"%s",szString);" i: f) n, E* K3 v) {
  722.             if(strlen(szString))3 `  ^: U" m$ v: D; n
  723.             {! _9 L8 [/ \" \1 |$ h; `
  724.               if(bFirstChar)
    : F2 a. W1 i! M
  725.               {
    ! |8 Q8 c" i  Y- K
  726.                 bFirstChar=FALSE;8 k4 Y. e, I( G, V3 l  V( i/ D
  727.                 bConnectIsBig5=FALSE;! Y% ~; Q* N9 {# J- l' x8 W
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    : x7 D: u9 G& z) N7 v# U
  729.               }
    / j8 _0 e, b2 M% g+ y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    , K6 ~& z. f2 t% t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    : s0 H+ H0 U! G0 c0 N
  732.               dlg->m_ListText.AddString(szString);% e; T; q4 `* s0 E  ~( M
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 q- {& d3 k) r; K
  734.               *szString=0;& q3 u) \7 [, ^9 C- e1 a
  735.             }
    8 w1 d9 `3 M) @( G" H; U
  736.           } while(iEOF!=EOF);
    - m0 y" S, J! l8 @
  737.           fclose(fp);
    9 j# e8 A6 G! m% `+ e8 d
  738.           unlink(".\\DownLoad\\readme.txt");, |- M8 E$ K( q0 _+ t: \( v
  739.           dwStartUpSteps=3;9 K+ B1 C# w% A8 m7 Y
  740.         }
    * X4 h  D# C7 |
  741.       }
    , T2 d1 q/ ]' {0 j0 ^5 `: b1 q- h
  742.       break;/ X4 U% L! f9 K+ u( p
  743.     case 3:
    7 Y1 Y; h) d) l5 k3 ^1 P9 h+ D6 N; R
  744.       if(!Dn.Connected())
    3 V/ e1 e* a) T4 H
  745.       {
    1 i1 G5 s0 ]  A" U1 Z/ Z6 Z; p" y) i
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);: G2 ?. {8 U. s0 v' m" K! x
  747.         dwTotalFiles=1;' m  O: C2 [- p( t0 [
  748.         dwDownLoaded=0;) _4 {) R: C# l; ?3 T  `7 ^: ]
  749.         bSilentStep=TRUE;
    9 f- C( h; @9 S, X- V, t
  750.         bCompressed=FALSE;
    $ b5 @; _; i2 E& i
  751.         strExtLocal.Empty();* f3 V( b& p0 m, R4 I
  752.         strFullName="checkversion.txt";
    # q3 I; t0 O! A$ `. q; Y- p
  753.         dwProgramState=AP_CONNECT;, c) R6 c( S/ b6 J
  754.       }. O( _9 ~) x; b, {8 u/ X, A
  755.       dwStartUpSteps=4;' E# ~# r) O, H! k0 b: w6 w
  756.       break;
    . z: Y" L! m/ e7 Q# R
  757.     case 4:  u3 i) I1 p2 m9 S/ a4 t) d8 c' c9 p
  758.       {$ E# C$ I4 [: M
  759.         FILE *fp;
    0 G9 I% N, W% c& s2 P/ L
  760.         char szString1[128];
    2 P& S. h0 o! |) Y
  761.         char szString2[128];
      e0 s+ r) ?! P2 f7 ]6 e/ r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");" [- C% m) E- e- o) W! M0 @1 Z
  763.         if(fp): j4 i7 r4 U0 R2 z! `7 a1 w
  764.         {
    ; b! Q3 h* [7 m
  765.           fscanf(fp,"%s",szString1);6 O6 W- F4 L! T5 m) n
  766.           fclose(fp);
    3 o' v6 ~0 C5 F4 o
  767.           fCheckVersion=atof(szString1);
    8 A* H& q* q, ~8 i4 [- E' }% V
  768.           fp=fopen(".\\checkversion.dat","r");4 h$ U3 t3 Y7 H1 X# c( q
  769.           if(fp)
    * f, E* Z/ K' P- u
  770.           {
    . O. i* s+ l! I  Z- ~
  771.             fscanf(fp,"%s",szString2);
    * O8 P* C7 d! q1 l; K
  772.             fclose(fp);- @5 B/ P* [* c
  773.             if(atof(szString1)!=atof(szString2))
    ' Z5 r' J" z- Q/ w" \7 T0 F
  774.             {
    ' Q. d) T% @0 r, R6 }
  775.               if(!Dn.Connected())
    , b7 D* D* n: b% P# H
  776.               {
    - M! h7 [2 Z+ u7 N% z& Q* Q
  777.                 bFirstUpdate=TRUE;
    ) _, |# v) I) P. K8 P6 M
  778.                 dwTotalFiles=1;$ ~. ^8 _4 [6 t5 n  ~( Q
  779.                 dwDownLoaded=0;
    ' |' Q; V0 S; r; w/ o
  780.                 bSilentStep=FALSE;8 l$ {9 l1 o0 ?- l
  781.                 bCompressed=TRUE;9 s% X' ]( E/ r. p0 C) b" F
  782.                 strExtLocal=".\\DownLoad\";1 u# E- D" ~! c2 `. h) P
  783.                 strFullName="update.txt";
    0 a9 f7 I3 n# G; t& b
  784.                 dwProgramState=AP_CONNECT;' V* P" k: Q, O0 w
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 f9 c- C# `/ i+ Q/ R
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    * X: G2 @* K; p3 ^; E
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ {; m! J6 O8 Y: ~8 {7 l6 g/ ^( p; \

  788. ' }& N# \! T# \' C0 }
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' M/ l4 O" Q5 K. m: Q. ^  m* y) u
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ {9 ], u2 B1 x2 e- P2 f
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ) F* {5 r* e  M& ?. M/ \
  792.                 {5 E+ a; F' }+ V; f: ]* g2 i2 W
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    - b  N6 c* y) D, s9 q6 }% Q" z
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    + C5 L0 B* {0 h
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");) d( F. i) K# D  B9 S& c, T
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; B5 s/ c3 {" @$ r0 O4 b8 O

  797. * K% b, c( h& W) u/ m$ x
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");/ i9 Q8 ~; y- \8 T
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 U% w! c7 U- ]
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    " J8 X4 w' E8 f5 |9 [% b) p
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* m9 h  b( X% s: ^
  802.                 }9 M3 @% y4 `* e6 D' L/ z+ W9 b! _
  803.                 dwStartUpSteps=5;
    " E7 \( ~# X7 f
  804.               }
    * G% t3 |* o5 h5 t# z0 i3 O2 z
  805.             }
    ! j, B# [; f7 n6 K# s
  806.             else# c4 \! u. f1 ?+ v0 d6 H
  807.             {. b4 y, o# w6 E) i8 o8 V( m
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ) t1 ^5 e* d1 J! C
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      i6 i0 b( V/ T4 v  P1 C: ]+ L
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    * v8 K' s$ H* d& M. {! F
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" `4 H* O! F3 y
  812. * z- Q. K6 u* ^. @5 }" d' l
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' b$ C! E( s3 |2 s3 p3 @7 ?% G
  814.               dwStartUpSteps=99;# ?1 G8 V+ a. m8 v1 k/ s
  815.               bFinishUpdated=TRUE;
    ; ?; U5 c) q& g
  816.               bCanUpdate=TRUE;  t. B7 j/ F7 w: v" c
  817.             }7 W4 Z+ a7 e7 `2 ?# u  r5 R
  818.           }# j9 v+ A. G/ a4 H0 v' W
  819.           else
    . |: j$ A- ^+ o, O% W
  820.           {' z% G+ f7 i; }  T1 V3 g- N
  821.             if(!Dn.Connected())
    $ l# W& ^% I4 ~  @8 Y2 G; C
  822.             {0 E9 G& T6 U2 y' a5 z8 L
  823.               bFirstUpdate=TRUE;$ T) i  T: k8 o9 \2 N/ o5 D
  824.               dwTotalFiles=1;, a* \9 a" c/ }
  825.               dwDownLoaded=0;" O" }! z! o6 x9 ^" W- Y3 Z# K
  826.               bSilentStep=FALSE;
    # }7 T! K, b7 \8 D
  827.               bCompressed=TRUE;
    6 J$ C, ^6 L/ E6 \" y" `8 O
  828.               strExtLocal=".\\DownLoad\";3 A5 q! v" ^5 `
  829.               strFullName="update.txt";
    7 o( c+ n4 J: f
  830.               dwProgramState=AP_CONNECT;
    7 t( |0 A# a# o3 n8 l0 u
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 r% r$ [: j' Y+ {5 |# F2 G* a
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    . L+ t8 Y- S7 W, {- U$ ]3 R' {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");% S, M- v& l5 C  f
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ k* Y0 M3 e" u7 l( n" Y- _6 S- y
  835.               unlink(".\\DownLoad\\checkversion.txt");5 N( k; N& ^7 ~  a; [
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    - n; T9 o* m+ i1 X3 |  g9 c1 y
  837.               {) r! t7 R0 ?: D' }
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    9 J! A" \5 p$ W: N- I
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ( `0 Z" `$ `# O& g; z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ( `0 j7 w, l7 l7 ?) q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + x! C  `9 M& I3 }  i: U
  842.                
    8 [6 p! m# M% z' Z& _. N
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 t7 b- G, Z4 P6 m7 @! |  S* p
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' m- R; j$ j# U$ E" l5 t6 u! X
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    * e7 j6 n3 R6 r
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; V8 o+ }, b4 P5 S7 u
  847.               }
    6 F2 d6 Q4 w- y' a& X" }; }9 p
  848.               dwStartUpSteps=5;
    # S% {/ r  o: y9 T/ A- r6 b
  849.             }
    : U* I: X) A# N% Q$ N$ @6 ?
  850.           }1 V4 W( M. x" E4 q, l
  851.         }  e" a, f! g, n0 g5 F. j& Y
  852.         else& V4 u1 Y1 v) }, h! Q( Q
  853.         {
    " S# Q$ M: ^6 ?7 r! G
  854.           dwStartUpSteps=3;" l# V+ H/ g' ~9 X9 k. g2 j
  855.         }3 E- M& f& ^" \% D5 W' H" k
  856.       }% N; Y6 F# ^4 V+ E( r
  857.       break;
    9 b) u# r' O1 z0 K
  858.     case 5:+ `- I6 }6 p, x  b* C0 R
  859.       {) E" Z# I- W/ N; e- L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1), w1 N; M5 Y7 e/ Y: w  J; U
  861.         {
    / A( L" Q2 I/ b& j- c" p" B- H
  862.           int opt_overwrite=1;
    # d$ _  @- w) Z9 p# U% G- ]
  863.           int opt_do_extract_withoutpath=0;+ W; k) ~# R- I7 Q
  864.           unzFile uf=NULL;
    : p& Z; N' P  a. O; g

  865. , J* z; R1 R0 e# @  p
  866.           uf=unzOpen("Wsa.zip");
    9 U: n6 Z9 w6 e( l1 A1 i1 g! k
  867.           if(uf)
    " X$ e. R" f$ j3 {9 D( ^$ q& _, S: B
  868.           {
    6 q- N1 T0 s. u" K& Y
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    % c, A8 `- T  C7 ]/ d, A! j
  870.             unzClose(uf);
    ! B$ J) D+ K, ]5 |% X0 n- [% u
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");  |) c3 e5 B* R- M' o/ `4 M
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");, D" T& f  o0 u- {
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");9 K0 H3 h1 q) {% `5 N6 |  F
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * H. [2 {% [' U, H6 B5 F% c
  875.           }& S" ]5 J: i% d4 E4 u2 Y4 g% {3 M
  876.           DeleteFile("Wsa.zip" );5 _0 T% o9 y5 a" e/ Q9 ]9 h. x' j2 z
  877.         }. f/ X9 X7 b$ k2 A

  878. $ \8 n8 W# W4 x2 ^  i7 S
  879.         if(CheckLocalVersion())7 K7 b+ i- V, ?4 F' T3 E6 ]# P
  880.         {7 k# I; e: t" o- [% c4 W/ n% X% E
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    & P! _8 j8 `8 N  C1 v; O( E$ G
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ( j7 R* K7 t7 p) B+ ~$ O
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    9 F7 X  X6 O* V: p% G" {8 y
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 c1 H# v; |; l3 j- _
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    / \2 S  a8 m; t$ y( j3 x0 o
  886.           dwStartUpSteps=99;
    4 S9 w5 t! L& \; Z
  887.         }
    - \6 b0 [1 a) r- z8 Y9 B: P3 p
  888.         else
    , D( d1 n3 |4 P4 `
  889.         {
    " j3 R2 b' U$ ]/ J6 U
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");/ E& `% q) R: X
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, f* W; Z& c3 v0 e, y: h. |. o$ J! A
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    - o. n) ]2 G% z, R! I0 R

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-12 09:18

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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