找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
- A! u. _  @. k8 H
  1. / RevApp.cpp : Defines the class behaviors for the application.
    7 T2 J/ P) P* p6 Y/ b
  2. //
    2 K5 D' `/ c1 L$ {: `
  3. 1 u6 R( O; D1 C3 x1 g
  4. #include "stdafx.h"
    1 T. U+ Z. V1 ?7 ^# K% ?
  5. ( \) v3 h: _/ C4 O
  6. //#define UNICODE3 P5 I3 W& ^" d+ m1 L5 Y5 o
  7. //#include <gdiplus.h>% U4 V) Z7 o  b! e5 d
  8. //using namespace Gdiplus;
    1 ?. N" D9 E( O

  9. $ y* ?5 ~! L- _1 O4 e; P, ^
  10. #include "RevApp.h"7 j) X4 B4 ^9 S( v9 `5 x5 {8 X2 L
  11. #include "RevAppDlg.h"
    7 P5 O9 T, s- t
  12. / ?: U/ D+ H2 \6 Y: |6 m9 j
  13. #pragma warning(disable:4786)! S; e( m! s& t: @6 D
  14. #include <map>9 D; n9 p. f: U) {6 F
  15. #include <list>
    0 |8 O$ o# W" W0 @; T$ I( t
  16. #include <direct.h>
    ; Y% x8 |6 e8 K1 A4 S7 X/ Z

  17. ' X8 `& p4 k* b0 P4 E6 R1 J
  18. #ifdef _DEBUG
    7 u  W/ x& v0 g# X3 R) _; H
  19. #define new DEBUG_NEW
    ! S9 ^9 i& R0 V4 \$ H
  20. #undef THIS_FILE
    4 e: M* ~: ^) S% C: M. e
  21. static char THIS_FILE[] = __FILE__;
    : [, o- I5 L6 ?" m. R
  22. #endif, k1 L! a4 ?6 m+ ^
  23. #include "SkinResDef.h"( B6 |9 b& T2 {. u# K4 j
  24. #include "ChangeBG.h"
    , |- N$ R5 U4 {
  25. #include "AFXINET.H"3 r  p, f6 S8 j. C
  26. 0 a) g0 a: i" c' X& N) P7 ^
  27. #define TRADITIONAL_CHINESE 0
    * O  H% j3 z0 {2 m- d
  28. #define SIMPLIFY_CHINESE 1
    * s3 b  A: A, n9 i
  29. #define ENGLISH 27 e7 {  @. \" B1 [0 T0 }
  30. int m_iLanguage = ENGLISH;
    5 O" e0 ?; v: L" t+ z" }
  31. /////////////////////////////////////////////////////////////////////////////, k! W/ @( V) U9 F3 j
  32. // CRevAppApp$ O' O6 A0 |" A$ {- `5 f

  33. 2 c: l/ U( P% P8 c
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& B; s9 E: u  h/ g
  35.         //{{AFX_MSG_MAP(CRevAppApp)* s4 b4 \+ y& H
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.  P; ~: L+ O! o9 e
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 j9 Q& r9 D" {2 S* V) ^) C
  38.         //}}AFX_MSG, O- j& H6 O, @) U
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! ]3 ]# p- o1 g; l$ [, m8 Z
  40. END_MESSAGE_MAP()
      r  M* _* ~: b4 ^! [. n! c2 \, [

  41. 8 i- F7 i# c8 Q( S0 d* ]0 q6 r
  42. /////////////////////////////////////////////////////////////////////////////
    / R$ r  H& a, Y3 v# m. n* k' ~
  43. // CRevAppApp construction% B6 ~' @( g* _7 C6 Y
  44. 2 v3 }, y7 V( A( E6 e
  45. CRevAppApp::CRevAppApp()0 F! u0 n6 F8 e& S; S5 O2 `
  46. {
    ; X0 ?; N. Z$ F8 D- Z
  47.         // TODO: add construction code here,! K  s( p% C. W: e
  48.         // Place all significant initialization in InitInstance
    # o+ u( V6 t' r$ f* b$ q
  49.   bDisplayIsBig5=FALSE;3 H2 B& P/ y2 o3 \0 b6 r
  50.   bRestartUpdater=FALSE;
    ) e, g* O6 n) V- F
  51.   bFinishUpdated=FALSE;: i- i) t5 _1 T: N+ a
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    - x3 L: U# o$ h( F$ h& [
  53.   InitChangeDataBig52GBKS();& P" |( g) o3 d! Q1 i4 F) s# p
  54.   InitChangeDataGBKS2Big5();
    $ }  o5 B( W0 \! Z
  55.         //7 _$ o0 i9 m: ]# [
  56.         bClickRunExe = FALSE;
    % n% a; P2 X$ b* d, J( t, V) Y7 d, E
  57.         //1 q& q4 a5 t) T+ j  E, d, I
  58. }* W$ L, k7 {) }+ c1 ^

  59. + g0 c( I4 A0 K# f# H; a1 z
  60. CRevAppApp::~CRevAppApp()5 [5 x3 U5 i& [
  61. {
    + o& s: B# z1 c9 z+ C6 P  c' A
  62.         // TODO: add construction code here,; g; H( M4 s$ q
  63.         // Place all significant initialization in InitInstance+ |/ e8 n5 h9 J& w% {
  64.   EndChangeData();9 `) {: V) h3 S! ]
  65. }
    / T4 z6 v8 d. I1 K7 u7 a
  66. 0 c% h. S0 l. J& D  V$ z5 F' O
  67. /////////////////////////////////////////////////////////////////////////////5 ]" q# Y" |% I% I8 p( e' W$ b6 n5 o
  68. // The one and only CRevAppApp object& M1 I0 n( c* U" K

  69. 4 @: O0 N# q. `" p& C
  70. CRevAppApp theApp;
    % P' C. B& _, p
  71. ( K& G& |& B" Q) j% g  @0 |4 w: C
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)# e  S5 J. a% x- J; \
  73. {! ~+ h; P8 F( ]: j& h* Q
  74.   int iEOF=0;
    5 }) p- ~4 v3 Z/ L
  75.   char szTempName[MAX_PATH];4 D6 w4 o$ z) F5 _" W" `) u# O7 B
  76.   *szFileName=0;
    . H% G) m: [0 ?% l0 ^
  77.   iEOF=fscanf(fp,"%s",szTempName);
    9 o5 m: @+ t/ d: |" o
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    % B6 j: M' E2 G1 E! a, Z' X& \
  79.   {
    5 f* A  g2 y% `# L* E' h% j
  80.     strcpy(szFileName,&szTempName[1]);0 m0 Y3 [1 L. D  M$ C
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    " W1 K- ~% M0 Y
  82.     {
    ' g0 y8 d# B# I
  83.       iEOF=fscanf(fp,"%s",szTempName);! h9 i  _/ h* I: d" [
  84.       strcat(szFileName," ");( L! `# S. b$ s# S
  85.       strcat(szFileName,szTempName);
    ' @" r5 z7 Z) m' N9 D, m4 {- ^7 b9 {
  86.     }
    7 K# b% r' ~5 A! Q" b1 O! D
  87.     if(strlen(szFileName)>=1)3 T! W1 g& z9 E+ p3 f
  88.     {$ B8 ~. s; F. m( f
  89.       szFileName[strlen(szFileName)-1]=0;* j+ S% Q! ]- x/ W
  90.     }
    6 K1 r/ K8 b, `6 [' e: X
  91.   }" N% f; C  d% a# I  C
  92.   return szFileName;* Y; m4 u; x! x: e, |* X8 N5 N
  93. }
    5 c+ y' r& `. _* f

  94. 3 Y  c1 b6 J0 ^
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile): E( }, [( u0 o5 Q2 P
  96. {
    : T) B/ {) Z/ g8 j# _3 E" d5 v" l
  97.   FILE *fp;
    ! f9 Q" u) f# P7 O/ u
  98.   char *key=NULL;% ^, X' \0 t7 s6 q
  99.   char version[MAX_PATH];( A6 Q! j8 K) G. G9 ]
  100.   LPUPDATEFILE file,olds;, S4 T4 \0 ^7 M& v2 A
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' R+ {  Q( V5 T9 U

  102. / Z- p+ u: K7 e; k, c2 p% I
  103.   UpdateList.clear();1 W  c' D" |# a. I/ v9 b
  104.   UpdateFile.clear();1 a% M8 l* u/ ^: @
  105.   if(GetFileAttributes(filename)==-1) return false;- T! E- S5 l, ]& `' Y6 l
  106.   if(!(fp=fopen(filename,"r"))) return false;. {* f" B& F+ \7 z: I) X
  107.   fscanf(fp,"%s",version);
    ; {- |( f% F# ?$ V4 s
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }0 `9 j" q- W! G8 ^# g2 y2 q
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ' V7 Z8 F# \2 i  _1 N2 ~, y: O
  110.   {2 h$ z& e. q* r# N
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 K1 N# `% q0 n# c/ a' B
  112.     fscanf(fp,"%s",file->path);, p7 }8 E2 }  G: c* L5 p0 f  q
  113.     ReadFileNames(fp,file->file);
    . z1 J9 _; o1 ]- \% Z# W
  114.     strcpy(file->full,".");
    9 ]: ]& d. \% _
  115.     strcat(file->full,file->path);
    + U% l8 a  J$ f$ B" V
  116.     strcat(file->full,file->file);% e0 b2 N2 T& P. O9 I, i) R
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- f: M% V  i7 k2 P6 ?7 o
  118.     {- k' ]) d! Y" V! m% |
  119.       file->vers=(float)atof(version);) H  l  L% E3 z) J! i; O9 {7 A
  120.       UpdateList.push_back(file->full);
    ( u/ ]1 m2 \7 g, W' o
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    " k1 x! h& z! m
  122.     }
    ! Q( n* P/ P+ m6 f; x# k9 m
  123.     else) G* v4 L! L$ i0 W
  124.     {9 V# @9 T- B$ e
  125.       olds=(*p).second;6 H  |5 n5 v! u
  126.       if(olds->vers<(float)atof(version))
    9 ^5 g- {6 m, i6 Z
  127.       {
    4 L# W8 r2 W4 g4 w
  128.         olds->vers=(float)atof(version);( M3 K& F  |2 k. P6 P. @0 {
  129.       }- O8 B; @& I2 K/ l9 ^0 \+ d$ }
  130.       free(file);
    9 z1 T- x  h2 l4 }# F- K
  131.     }
    " B# e- @% ~4 e1 q
  132.   }* Q2 k9 ^+ b$ ?+ {8 M0 u
  133.   fclose(fp);& [1 h& G. I# u( G4 W: _
  134.   return true;/ r8 H8 @, C* y% H% q
  135. }) G& T; w9 J$ \0 s( m* X

  136. / A  W1 U9 T; w. \9 v% |& d. R- l
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    & T: l# @! W2 A& {) O
  138. {
    , D  q4 S$ l1 c: p; }3 d
  139.   TCHAR  szFull[MAX_PATH];
    * p& s% i( ~6 W( J5 p4 J! m" g
  140.   TCHAR *token,*inter;
    # I4 d" t" [. T6 v" z, _: C
  141.   *szPath=0;
    7 I+ {- @# v3 u! m4 o
  142.   strcpy(szFull,szFullPath);% V- B& g* O* s1 A: p
  143.   token=strtok(szFull,"\\/");7 z. |0 i, H  S3 r' i- H, B* K
  144.   inter=token;
    : F0 c; d* c+ t
  145.   while(token=strtok(NULL,"\\/"))
    - O  S1 T& s6 ]3 q  C/ w4 M
  146.   {
    , U- _3 N1 D% X* G
  147.     strcat(szPath,inter);! N2 ]$ H" V' l0 ]: ?4 m7 Y
  148.     strcat(szPath,"\");
    , H' r3 ?3 |0 D' j
  149.     inter=token;7 e- G, \0 d: P6 Z" w
  150.   }0 B. W8 Z# H* `! W- q7 t. e$ K
  151.   return strlen(szPath);
    % J- F( j" i( V: e; F# J
  152. }( V" t1 a& p2 K5 y/ J+ Q+ c

  153. 2 t9 U) g( u- t3 z# w) b- V
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    2 @9 t; e; ?* v8 O8 p" E
  155. {; q( g4 m* G  p; f  Q
  156.   DWORD attrib=GetFileAttributes(Target);: i( e8 g9 p" }* \, I$ t" l, \: I" W
  157.   if(attrib!=-1)
    + _6 b8 @: T& N8 P
  158.   {! L- |3 r3 B1 W3 m0 R3 \% T& k
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))8 x+ k" C  D- L/ ^+ z
  160.     {
    + `1 o5 `( k7 t/ x- U1 ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    9 x2 G  b; j% p0 p0 }
  162.       SetFileAttributes(Target,attrib);1 k7 a) |0 o/ J7 H' P6 R
  163.     }" J/ F" e6 R, t" \- ?6 ~3 r
  164.   }" i0 z( B8 S4 \) z1 G3 |- j( y
  165.   CopyFile(Source,Target,Erase);1 m; E7 Q. H. w# j# y- E  d. d
  166. }
    , g7 g9 H6 ~7 p8 T
  167.   ]& d# G& P8 E! T' }
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    4 {* }9 x$ q- C# M
  169. {2 `! d9 U; V7 M( G; j
  170.      FILE *fp;  ]% j, E7 V. w! J+ M9 N2 D
  171.      char  szBuffer[8192];5 d) K8 J/ y$ Q8 L( K
  172.   va_list  argptr;
    ) g/ ~, A5 ~3 b; z6 z, u7 K

  173. $ O) ?8 H! G* E9 K1 ^
  174.         va_start(argptr,message);
    # f$ _0 w: r# K: X* h6 ]
  175.         vsprintf(szBuffer,message,argptr);
    0 R: s3 b* J! e2 h2 J
  176.         va_end(argptr);
    4 X$ w. T4 u. y8 a
  177.   fp=fopen(FileName,"a");
    % Q, x" p( w( d
  178.   if(fp)" I* t7 L$ T) k, l0 \
  179.   {3 N  h! U1 e* p- _, G  `7 N9 b
  180.     fprintf(fp,szBuffer);0 q+ \% z( m" J" S
  181.     fclose(fp);
    2 x# i- Q$ v1 \3 |/ g
  182.           _flushall();
    5 _. D2 `* {  R, }$ `0 }
  183.   }
    % A& `  G8 q, B" p
  184. }9 I+ l0 a+ m" h

  185. ; P5 z! ?9 u9 U) @4 q5 k. B% r
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    - @4 b8 B5 J" W& F
  187. {
    , ^8 s4 e; C+ U% }6 G1 x
  188.      FILE *fp;- y3 X4 L1 n* F! R
  189.     DWORD  attrib;
    , r: F4 M, b3 ^) O9 B8 J  t
  190.   attrib=GetFileAttributes(FileName);/ n4 ]* a9 g$ J# z( b( M
  191.   if(attrib!=-1)8 Y7 \8 E6 t: @* b! X
  192.   {
    + j+ Y: g' A* |# D* G
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    $ x% t! o6 h/ |, Z& ]" s* @' O& l$ s- ~
  194.     if(!SetFileAttributes(FileName,attrib))+ [" B2 A1 v* B! I
  195.     {& t5 d0 W! ]3 C7 c- F5 `, @8 V
  196.       return FALSE;& ]/ g$ n( x+ Q; I
  197.     }
    $ d- n$ P" I* Z" ]0 @3 R3 S
  198.   }( u! D' H6 f7 M  T0 I
  199.   fp=fopen(FileName,"wb");/ \: P% Q' ?" n% S  Q8 g! w. Z1 s
  200.   if(fp)
    ' W/ N( e2 q9 Y! k4 I( R" B
  201.   {
    5 X7 B# L4 G# n  {2 \
  202.     fclose(fp);/ r  u8 M: i: e# m$ d$ Z# b( S9 B3 n
  203.   }
    3 y. @7 L, a; E$ O' K+ e5 g
  204.   return TRUE;0 Z  B; I0 A, `2 X" _( R4 X
  205. }  @/ A1 Y9 O0 |3 _

  206. ) h3 W6 Z! H/ w9 K7 e
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    % U# Z, \5 ]0 V' ]5 g% L
  208. {
    1 ~8 F' [3 s/ C( V
  209.   char filename[MAX_PATH];4 f# z% ?0 I% w1 `; X9 I3 `
  210.   LPUPDATEFILE file,olds;
    ( |& x9 `/ V( F$ R
  211.   std::map<int,CString>::iterator i;
    6 k2 Z* m) d& H7 T& M) e' K3 F1 m" _
  212.   std::map<CString,LPUPDATEFILE>::iterator p;1 H5 E( A7 ^: K3 Q( o
  213.   std::list<CString>::iterator l;- e7 Q! K3 t9 P: l9 f5 k: ^
  214. ! h1 w1 c9 _  u3 d* p
  215.   if(bFirstUpdate)4 s, n4 D) ?' M6 H
  216.   {. @9 a* I2 {" z0 b: z1 C
  217.     dwCurrFile=0;' r" Q% b: p$ }! O% k0 b6 K
  218.     bFirstUpdate=FALSE;1 l! x! o3 q& [- z* ^2 N8 }
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + e) a- m1 R& Y
  220.     {8 B3 `' C! c/ @
  221.       dwTotalFiles=UpdateLocal.size();1 r- w" [7 G7 b1 @0 K7 ~
  222.       dwDownLoaded=0;; @% l" O# l0 }. k0 H# W6 [; c
  223.       bSilentStep=FALSE;
    ( R5 z4 P' ]0 Y9 \! i
  224.       bCompressed=TRUE;
    5 \- g5 G+ I) m+ U" {
  225.       strExtLocal.Empty();
    8 T. [3 n* c9 _2 y5 [8 ~3 }# I
  226.       strFullName=(*i).second;
    4 C, U0 ^5 k' C9 \
  227.       dwProgramState=AP_CONNECT;
    ! W; c8 J0 n( a: D
  228.       return TRUE;
    6 l8 D$ [9 L+ @; ]9 \
  229.     }
    + O8 g! k+ p" m/ H9 J& |
  230.   }
    - I, p$ z( H8 y$ ~+ {, z
  231.   else if(bRestartUpdater==FALSE)
    ' i  Z0 u( t2 e& e! K0 U
  232.   {
    % q7 |* p9 S$ V8 ?' n6 P7 F
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    * R, n# V% E. X" s/ @
  234.     {" y- p2 S! s  h8 R
  235.       file=(*p).second;
    / D8 P8 B% J( M  w# W: i
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    1 c5 B5 n7 d7 n/ T
  237.       {
    ) \8 ]' ^) Y0 X" \) O9 u& H5 ]
  238.         olds=(*p).second;- ]: l+ ^" E/ k) l
  239.         olds->vers=file->vers;  x6 ]+ Y. L3 g
  240.       }
    8 C" N. l6 {* T. u7 R
  241.       else
    / X0 d2 I# X3 ]. {: ^4 e
  242.       {
    + G  I* J, p7 V
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. B: Y0 H) X" d2 s3 r
  244.         memcpy(olds,file,sizeof(UPDATEFILE));0 C% i4 N4 t8 v# |7 W8 a
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    2 O& g) t" g* _: l: q! M
  246.       }; c% i5 q2 y# a  ]& X. B! u
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");4 d% h( y* Z! N/ C# S  I
  248.       sprintf(filename,"(%s)",file->file);8 K( _7 @4 v9 O0 c; n! J
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; d" o, N7 t$ o" ]
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }( ~" C" M) a" E$ j& `
  251.     }
    9 }! w( x$ I) k' o5 x- M
  252.     dwCurrFile++;
    ) d$ W7 a. L8 I9 _
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): W6 X0 c. D% Q6 J8 W% W" I
  254.     {% `2 |3 N! A/ j- B. |8 s0 g  u
  255.       bSilentStep=FALSE;
    * b" j# {6 Y+ z
  256.       bCompressed=TRUE;* d6 ?$ E( J, k
  257.       strExtLocal.Empty();
    + h" h( w6 X9 L8 k% J% H
  258.       strFullName=(*i).second;
    % [0 m  A( X& m- x
  259.       dwProgramState=AP_CONNECT;
    : g( C5 ]' }1 z; o: p, a
  260.       return TRUE;
    & F$ ], Z, @( A8 T* t8 w$ }( K  Z  y
  261.     }* }2 }$ o! Y4 ?, R; d  c
  262.     if(!bRestartUpdater)
    2 F9 c* [, g3 {$ r% j( m
  263.     {
    4 K' a6 m& M' M& Z) _
  264.       int iCurrSize,iFileSize;; B  K# ]- K5 Y4 t
  265.       iCurrSize=0;
    . }5 l: P4 K4 w. E1 z( J
  266.       iFileSize=UpdateList2.size();
    / h# s/ B/ k8 t. ~+ t
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ' M8 `- w3 m% K; [
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    - }& B5 R) n/ N
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
      P% A0 j9 t: d2 h6 n. s' e/ t
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      t9 S3 f& C/ q
  271.       Fclearf(".\\update.dat");
    3 K2 g  V% N5 U  U9 A% z4 u! f& E
  272.       Fprintf(".\\update.dat","Bloodyf\n");+ i3 G+ @+ R$ g" e4 ~- [
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ p% Y! M. P  d9 a/ z; u
  274.       {6 x. {8 I! |  m0 v* R2 K, u; p
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 O& Z& k' m& K# x
  276.         {0 a- p$ V) ]4 q9 y8 s6 w
  277.           file=(*p).second;4 \+ F+ s6 x: J( M4 T/ I# G( N. W: o1 ]
  278.           sprintf(filename,"(%s)",file->file);
    3 ]9 N3 Z( W; o# U
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* k; L' S1 L0 p+ c. I
  280.           iCurrSize++;
    : m! x6 M3 T2 m  A
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));. G$ M+ Y; v. ~8 i1 H$ {8 q. a
  282.         }2 E5 j  b5 g+ _1 `/ o9 P1 B& Z
  283.       }# W! t! Y6 x4 A, k6 c5 e7 c! ]
  284.       unlink(".\\update.txt");' J( e: j+ L$ _3 ?, V# @
  285.       unlink(".\\update.tmp");
    - Q4 u/ V( _' A6 q, f
  286.       Fclearf(".\\checkversion.dat");2 ~9 v* l  Z% d8 L4 J
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);: c$ o! N# Q4 @% G% {
  288.       if(UpdateLocal.size())+ B  f: z- {3 [6 \( C- z: }
  289.       {& b$ L- E2 Y$ K- K+ K' U( Z
  290.         UpdateLocal.clear();8 n# c6 y# j6 B- e* O; ^
  291.       }
    ; K2 B9 o, Y9 |. }' \1 o# I( R8 T
  292.       if(UpdateFile3.size())
    $ W+ N6 s2 Z+ `
  293.       {. O; n2 E! {% s$ y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 H; ^: X) v! S! p
  295.         {
    / {6 ~4 F# s& q+ Q0 M
  296.           file=(*p).second;
    ( Y  E& M5 t8 H
  297.           free(file);- a5 {4 |! ^7 F) k1 h) L
  298.         }
    0 e7 j! P2 ^& x4 k2 G# C
  299.         UpdateFile3.clear();
    " Q9 a5 k% I* \7 w9 o; ]# C) a
  300.         UpdateList3.clear();! v  c3 ^9 l+ p% S9 N  |
  301.       }
    : L5 L/ R$ O/ H0 f" Q
  302.       if(UpdateFile2.size())
    * T) ]" X! X+ @' E) {# S
  303.       {/ [0 }( r0 \. C5 y2 P  B% C7 b
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 S- Y, A8 a3 T% N' a
  305.         {8 A0 C& ?0 z5 {
  306.           file=(*p).second;7 Z8 a8 ?$ r& `
  307.           free(file);
    1 v1 ?+ U! H+ O3 ^& G5 ~* K6 r9 C
  308.         }8 y. q. D' @+ P9 q$ O5 ^4 s; L, U
  309.         UpdateFile2.clear();
    9 k6 y$ M5 i3 E0 c! ?* @+ L- O
  310.         UpdateList2.clear();' o- x, c# ]5 M( g; `; K
  311.       }# M$ u' I; b- {9 D) m
  312.       if(UpdateFile1.size())( `8 k' l0 o( j8 A
  313.       {
    0 B) O2 h4 B3 e. G5 K8 W) l* ], D
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ j( [8 x* |! Z$ q
  315.         {
    8 w1 K3 E: R5 L: F
  316.           file=(*p).second;
    # i, W/ c( ^+ J4 ~; g5 Z: H
  317.           free(file);
    % m* r5 s. o& x. X8 C% M% h
  318.         }
    ) [7 `; Z1 ~/ k) @: ^3 E/ H
  319.         UpdateFile1.clear();  k# @  |8 I; K
  320.         UpdateList1.clear();% ]6 z% {3 c% ?0 E  u
  321.       }' ^: s/ o+ b: V
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));2 p- _, o) i9 x  Q* F
  323.     }
    + a& u) ]! f# Z7 [% W
  324.   }
    & _- j6 l, Q6 t4 y4 s$ r/ i8 N4 V
  325.   return FALSE;
    9 e0 P$ C- j1 \0 L4 w
  326. }6 [9 @6 n  q: P7 g* G* r% f! b
  327. 8 {8 O5 j: v) s
  328. void CRevAppApp::ClearAll(void)
    , h  o7 q. P4 k- P
  329. {
    & G' ]; V4 y* i) I
  330.   LPUPDATEFILE file;* J0 ^: @5 |. |2 F) |
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    - c) {$ F- N  ?. A6 j* b3 w0 G
  332. 0 l  h% F" |0 W, x5 Y
  333.   if(UpdateLocal.size())
    " E5 ~) x) r* ]
  334.   {, g7 p2 T6 b% M8 R& o# {! ~0 Z
  335.     UpdateLocal.clear();
    . o4 w: X& e$ F# T% \+ A$ ^/ k
  336.   }
    # z- X1 f. K  N2 u& s' X: z5 J
  337.   if(UpdateFile3.size())
    " O6 |& J- F4 M, r1 Y8 v/ w
  338.   {
    . K0 V6 y! K2 o4 f" Z* ]( K
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): b# X8 @0 H& a+ o1 W
  340.     {5 n* Q9 T9 }9 f, {6 l6 B
  341.       file=(*p).second;9 n" {6 @! r6 r  l& u" U. Y
  342.       free(file);. r6 p( b6 M# E  w
  343.     }1 B3 p+ `, q7 b; p% M3 r
  344.     UpdateFile3.clear();
    6 N' _7 o9 H. z- m( ~2 `: ^3 q
  345.     UpdateList3.clear();
    ( w" W. s7 H+ l" R! w( H
  346.   }# J6 F: ]7 K1 N9 R3 |% J9 k
  347.   if(UpdateFile2.size())
    $ g4 V! Y9 e9 B$ n' P
  348.   {5 n1 i* ?1 u* F# {2 T
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! g1 W  q4 }7 X# z8 J/ |7 ~8 H
  350.     {
    $ ~6 g. S1 u6 O0 F7 Y% C
  351.       file=(*p).second;% g5 k# b9 w( N# G$ H9 p5 w, x" h% I
  352.       free(file);
      I* L+ w# y- s  k! I
  353.     }# u0 f, o% Z+ p5 ~& Y# }1 S
  354.     UpdateFile2.clear();
    " o/ [& X+ h& _6 n
  355.     UpdateList2.clear();  r  z6 c  j  T5 Y- A
  356.   }
    5 w% ]& e0 I6 F& K9 ~* {0 h
  357.   if(UpdateFile1.size())/ C: N2 `% `4 f1 P% B
  358.   {  X2 D3 m  W" r& M4 d
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - o) o/ r- X6 O/ t# Q3 K) `
  360.     {
    0 D' u; V( l  j0 Q! u1 _: a
  361.       file=(*p).second;
    " K- N& [9 J8 w1 Q5 J: ^" t; p
  362.       free(file);
    % Y% D# a7 J/ {; O7 S
  363.     }
    " W$ v' d9 E% d
  364.     UpdateFile1.clear();# n% b5 H( z  Z7 z) h+ z
  365.     UpdateList1.clear();
    & ^- z' l1 h  N) W% Z' Y
  366.   }% a2 S, M. V6 {  D) c9 [1 Q# U
  367. }  ; c% Z2 N5 K) T
  368.   
    5 K! p" o, L" E1 w. w, Y( Z  U
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    * }7 L+ r6 N4 B2 J9 ?" r1 [& J
  370. {
    & o% \  V# I+ e+ Z
  371.   int c;3 V  a- l. ~3 e" w- Y* s1 O3 e
  372.   LPUPDATEFILE file1,file2;5 b5 D, D! ~4 D2 h# r2 l
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;3 n: Z+ Q# K$ z' ^: Z: Y1 ~$ @
  374.   std::list<CString>::iterator l;
    ) Z. b' a1 I. U% v: R0 j
  375. * K& i5 {6 Q+ X( \2 B9 [0 K
  376.   UpdateLocal.clear();
    * o5 W, C- w  |: i- Y! I
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    . t. q. f9 a! F' x8 [& c
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);' X8 k( p8 p# t2 I+ q. z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);; z$ ~* W' o  }; u2 G- o
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    , w$ n' e) E) F( f
  381.   if(UpdateFile3.size())
    . V, o4 m* S! t1 Z7 X/ M
  382.   {  n: |- m% [" k6 Q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)" E8 [  {4 |; A$ G! U" ?
  384.     {
      e8 k7 W* f8 }! G5 B; P6 R
  385.       file2=(LPUPDATEFILE)(*i).second;
    - I% o* J7 N. n3 I. N+ R2 b
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& i( w; Z6 N# |7 y# ?# ^: c
  387.       {
    + }9 h6 ~0 E1 `( }0 v7 T
  388.         file1=(LPUPDATEFILE)(*p).second;
    % f) U% w; C: w, z: d, ~
  389.         file1->vers=file2->vers;
    % D0 m# w: J9 A# {* F; K0 l
  390.       }. o% e4 t% h) {8 [1 S4 r
  391.       else
    8 |, |9 s* P% s7 ^
  392.       {
    0 N9 O; q3 a+ I6 i. x
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 ]% Z( T+ `  F
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ' r$ n* K" y: [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ' v+ K4 O+ Z  h, M2 Q" |
  396.       }5 H* |  f, A7 }+ Y8 _7 c" g
  397.     }  {/ N( ?* g9 r
  398.   }8 O% Y( [0 d) o0 v! R
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++): }2 j  q6 |, r
  400.   {2 q7 a5 P" Q9 b4 ^' ?& b( A, j& u
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())8 x- J' n/ `5 M* E2 _6 d
  402.     {# B; X; [' q" J- f' y% N% G
  403.       file2=(LPUPDATEFILE)(*i).second;
    9 Z0 o& c7 Y+ g6 `; h4 r
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), v- @$ Z. i) k$ }& r
  405.       {
    / ^: q3 q% a) k8 j. u. V+ j0 f$ X
  406.         file1=(LPUPDATEFILE)(*p).second;
    + g+ M6 t3 b& h1 _: |
  407.         if(file1->vers!=file2->vers)  ]6 o$ W; G7 M
  408.         {
    " g( W+ R! B. G" n' E8 i- V
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 z% _! X0 h% B3 z" a% U2 c
  410.           c++;
    2 j* m7 ^: ?) g* D, {" a5 h
  411.         }! Z  v" o7 ^# M! W8 o( i
  412.       }
    ' v6 U& x( Z$ j1 K, J6 T
  413.       else
    8 r+ @3 b% F* A; W& m$ d* D3 A8 T  W
  414.       {
    1 i9 }" D* E2 K: R7 C; K2 @
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ z) m! F' b4 q( Z  f& Z: U( u
  416.         c++;
    5 ^, T) h, X3 n* \7 Z
  417.       }/ h2 h7 l3 d  r
  418.     }4 j& z: p2 B9 K) e/ `
  419.   }- G. D* n# u+ U# t  P) w
  420.   unlink(".\\DownLoad\\update.txt");7 b& ~; G6 b8 h7 k0 s# j
  421.   if(UpdateLocal.size()) return TRUE;
      L  x) {4 R1 a7 b
  422.   else                   return FALSE;
    ' I% |; y) ?6 i) ?; ]9 Y
  423. }
    * q2 C& w/ M: K7 ^1 ]9 m3 F6 I5 v$ ^

  424. ) l" X# D. R, n( p* h3 d8 i
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/", Z5 M0 R0 p: Z+ k
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"9 @3 b7 G/ O+ G; e7 O. W( h9 t) D
  427. $ k4 ]! P' i& W) r5 `
  428. 1 n! p' Q& ^+ L4 Q
  429. " X& u5 }" G$ @9 K) u
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    / @% W/ a( w, ^7 ?# j
  431. {+ ~* s* @) |0 Q& i7 m9 Y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;3 J5 ]* C+ F8 r5 L# d
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ O6 [  D& |! R) K7 y; z$ t
  434.   {
    " |( e; s/ f1 w- [/ t
  435.     char szLanguage[50];
    ) Z. B/ d( t8 J: h! {% F4 J
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- m1 p' k% k) x+ V7 a( d2 M: v! k/ h
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  o7 d* h1 Y( e  B  y/ H
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ( t$ u: t- H# O5 T4 h7 }) V- j
  439.     else                                   m_iLanguage=ENGLISH;
    + n# h2 Z, t" B' [' X
  440.     char szRegister[100];" f: o1 }" s6 L3 S! a' t1 T
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 v1 Y- v1 C( ]3 R
  442.     strRegsName=szRegister;# X' _% g  J' B! F3 l5 }, D
  443.     char szPatchURL[100];
    4 u5 {* |3 y  p: n' m
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ O, D; q6 [* N2 p0 y7 e9 A& a$ ]
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 ^/ h! n( @9 |& O( ]
  446.   }
    : {. |4 Q1 r1 V7 P9 H! D
  447.   else6 h" s& T" c! y, C, v
  448.   {
    # [5 a; B: f+ ?! }. w  w! }
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    5 H# U! D; k6 l) h& E3 ]( K
  450.     strRegsName=DEFAULT_REG_URL;
    9 p& @: N% P0 k4 \. o
  451.   }. T9 d( m; k7 U6 w, U
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    0 H% y0 \: h5 b8 Z# c3 y
  453.   {1 e6 \) c  @4 |# Q: E5 i) x
  454.     char szIP[50];
    6 ~9 z' Y7 N: b* c$ Y$ ^, \
  455.     char szDIR[300];+ I, m* {8 A" N. q% H/ M7 D, I
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% Y  X. u7 R9 P. q6 B
  457.     {
    7 D: m# ~% i3 G5 ~8 Y: R) p! p0 ]
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & k, e3 Q# Z% k$ ?9 `; @
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    # w' Y* _) r( f5 c5 D& G8 u8 n
  460.       strHostName=szIP;( L# \0 i9 |/ k& t7 f) j
  461.       strHostPath.Format("/%s",szDIR);: ~8 C+ f5 O' `
  462.     }
    4 U( C  {6 R. i* ]- g
  463.     else
    ! ~; R6 n: N6 }2 C; I2 ?
  464.     {* t2 \, `1 X& N% t" X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' Q8 E1 s4 d0 {/ |5 Q
  466.       {- ?0 j7 U6 O# n' v+ }: S, \& m: ]1 Z/ k. o4 m
  467.         char szLanguage[50];& x/ _6 _: N& ~: S4 j
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 B4 c2 ]! i/ ?1 _! x, U
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 ?+ e# A7 l! {
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + v/ g9 x5 d$ G' T! Q6 a
  471.         else                                   m_iLanguage=ENGLISH;% k* w# Q! A: J9 P
  472.         char szRegister[100];
    6 c0 P" I+ y9 }' u0 n7 U7 S
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 ?6 [2 W' I( A  Y7 t) E
  474.         strRegsName=szRegister;
    # y! [# h; @+ H7 ]( R% z* E7 ]
  475.         char szPatchURL[100];
    " `5 A9 j2 M$ }- R0 t2 G0 x
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");, V& ]2 e# R6 r" r  M
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) s" ^' f) b, c. |& C
  478.       }" Y7 n5 K" g: E9 j4 f3 O
  479.       else
    8 g) b8 L/ J9 X. q
  480.       {6 ]: ~7 z( U2 }+ A8 Z7 h  {
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- x$ j0 a( w( ?* `' }
  482.         strRegsName=DEFAULT_REG_URL;& V9 d9 n2 {6 s5 P4 N: T& k& M
  483.       }7 k$ R" M$ G6 Q: t, m# \- ?$ q
  484.     }
    2 t) Y8 k0 Y# C& U4 g
  485.   }' W- I8 D4 G  o7 L; T* N
  486.   return true;" q# ]8 {. h2 ^/ g
  487. }
    ' f; [1 D' ?5 O* C

  488. & v& }- F' m/ u$ E4 ~4 i
  489. #include ".\ZLib\unzip.h"
    ; B2 s* h+ H% e0 B: M
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);$ V/ d+ p* _8 c8 ?5 Z
  491. /////////////////////////////////////////////////////////////////////////////3 I; y9 d( F, ]" C9 q3 h( o% A
  492. // CRevAppApp initialization0 Q1 V) B  @4 j  p5 V/ M5 w

  493. # V; t! q* D  o- n$ V8 P
  494. BOOL CRevAppApp::InitInstance(): o! ^3 q) J+ w+ s( P) D
  495. {
    / A$ t5 c/ t5 ]9 p5 K, t/ |! o; }
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];1 |1 E8 w8 V" c$ n9 Y

  497. 4 Q! O' M( Q% L% K' H+ d
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 J3 W+ R+ c3 N' R! m) k
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    - l+ V% |! }, G2 {* q  `( O
  500.   {
    0 F9 |8 H* S2 X( T
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");( g' y% J1 p( d" o
  502.     GetPathFromFullPath(szPathTarget,szPathSource);# t4 K/ x! I" q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" D# [( }1 [% Y
  504.     {4 i% T0 G/ B; K2 J% m/ {5 x
  505.       strcpy(szPath,szPathTarget);
    ! O( G* e  h# L- }7 P* O
  506.       SetCurrentDirectory(szPath);
    ' `+ |; @: y6 B9 I6 ^
  507.     }
    * e9 y% V' q" n9 `& k# a# g; i
  508.   }4 Q) L  h6 c  n6 u' A
  509. #ifdef _DEBUG" m! I1 d2 J$ M
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" F' G7 }3 \& m" z
  511. #else6 Y7 ]: S5 U5 x
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& J0 e/ f. b+ b% g# f
  513. #endif
    - U* S3 {& ]0 ^5 V7 ~$ }
  514.   {& A; M2 I: I' P% a( j
  515.     char tempFileName[MAX_PATH];
    # O3 A: ~2 q, w8 e. e" L
  516.     strcpy(tempFileName,szPathSource);  L, g7 I# {6 B& `* c2 q
  517.     tempFileName[strlen(szPathSource)-12]=0;
    6 F1 F$ |( X+ z# X+ D# i
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    5 X: @8 e7 j# k/ M2 R3 `7 ?4 V+ @
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);2 b/ O5 V" ~  J! ^- Q2 ], ]( w
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    % t4 y4 M8 ~: F+ |7 O) X
  521.     return TRUE;$ f; r! i/ [) `- U0 U" P" l: Z1 z
  522.   }, f3 b5 q6 M2 o/ o
  523.   // Nuke 0118: Delete run.exe1 u2 l; C9 h- R. i. T; {
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    . X+ s. e1 o$ [9 q3 o0 c1 N
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");& ]' b- M3 a+ w: J5 c$ Y3 X
  526.   if(!ReadCfgFile("Config.ini"))
    ) b' E4 L4 X! |  a: D2 s
  527.   {; n: T& Y4 j. D+ D+ N+ d
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);& F' H& ]( ^) ]- }  N. E7 T2 @/ M' y
  529.     return TRUE;
    8 H8 o: {- B5 i$ v7 |. G3 t
  530.   }
    9 Z! s8 ^/ ^- C$ G, ?& u1 g: C
  531.   HANDLE mutex;( e; F$ F, Z# ?0 _7 a
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
      a4 o! X$ m5 Y. z6 r9 d7 o. V
  533.   {& O/ B( s% C9 S4 @2 \+ R2 H
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    # b9 z- L+ l+ T
  535.     {
    & N& R, b8 l* T- U9 I6 Z! ^/ A0 K2 R
  536.       CloseHandle(mutex);
    " A% T% j, {3 G& P6 ^
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! {) _5 u% ]8 _
  538.       return TRUE;
    % F8 ^$ v- x; l8 }/ u  ?8 @
  539.     }
    ( m% O" H8 _3 q0 t! }, W
  540.   }  
    0 _% x% F: Q& h( w) I# H
  541.   CloseHandle(mutex);
    3 e1 h' X& s$ O, ]( I' u

  542. $ p# a5 p" e7 O5 u
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);  N9 u+ a/ a2 m1 o. `4 m

  544. - f; j2 r5 h2 Q2 F4 }* L& }1 d. g5 ?
  545.         AfxEnableControlContainer();/ r/ x0 U# b* W8 n7 U

  546. 8 o; c* y, A3 h, R7 Q
  547.   bCanUpdate=FALSE;
    & \- ^5 A: n2 i. R' `$ H
  548.   dwStartUpSteps=1;
    + j" Y" R( e' z1 s
  549.   dwProgramState=AP_NOTHING;$ t; h- |' I, _, `& R7 e3 Q

  550. ' S# [, ?+ V& @$ G3 G- K
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    , X- a3 o* w* k! [" \  Z

  552. # X) L. j2 [8 ]4 a' w
  553.         // Standard initialization4 l! |0 e4 N3 G5 _6 V7 a4 g
  554.         // If you are not using these features and wish to reduce the size2 x1 M3 b" Q- Y: f
  555.         //  of your final executable, you should remove from the following
    ' x/ c/ Y4 }' Z
  556.         //  the specific initialization routines you do not need.8 N) c' z( s+ x( @

  557. 1 ^+ ^5 f; B. M
  558. #ifdef _AFXDLL
    ; b3 y  I/ ^  [3 k
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ; l, q% q" n3 O
  560. #else, x4 a% ]2 m* |
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    6 F" M7 s% h! F! o
  562. #endif* t4 t+ t3 D7 C$ h1 z9 l

  563.   j' q: |( h* N7 N, ]
  564.   dlg=new CRevAppDlg;; _( d+ z1 c. v6 f9 A
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 X6 X0 i1 u6 L- t
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    - G. N7 v! @. V4 Q9 J; G2 r8 |
  567.   m_pMainWnd=dlg;: s/ H& k5 ?. p- K6 B. A' g' h% H
  568. # \9 {6 q4 q4 D9 [# D% N9 O
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);. w% }# K7 [# J4 D
  570. 9 c$ W1 A; I6 n( _1 d
  571. //  GdiplusStartupInput gdiplusStartupInput;
    " m. f" S( d* I) x$ d
  572. //  ULONG_PTR gdiplusToken;( M; k1 t6 U1 \4 L  Y4 i' ^0 d/ ^! u6 p
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);+ e4 P% ~) C, t9 B
  574. ( }9 c  _& o" m5 G- \6 q0 G
  575. //        CRevAppDlg dlg;
    & M0 f( M) X/ ~7 l6 _0 J
  576. //        int nResponse = dlg.DoModal();
    . l" s% B- k8 S" Z+ N
  577. //        if (nResponse == IDOK): T& N" H2 @* g+ K7 o7 _
  578. //        {9 y% E$ E* `: s8 T% l# o, W+ g
  579. //                // TODO: Place code here to handle when the dialog is
    & _* P& G( r3 X  {! s: C
  580. //                //  dismissed with OK# T) z9 m$ S# o+ U/ ~  f
  581. //        }- l( a: s& h. f0 W/ g( o/ Y
  582. //        else if (nResponse == IDCANCEL)
    / e( e9 {  B# @. a8 T! F, Q
  583. //        {7 a* j) z; U( I' t
  584. //                // TODO: Place code here to handle when the dialog is
    , X  x5 ~4 U2 ]- k
  585. //                //  dismissed with Cancel9 ?9 g! D: M' G! f2 G( i1 i2 m
  586. //        }- Q. y: I! N/ `
  587. 9 s* g: K( s6 Q# H8 k; E
  588.         // Since the dialog has been closed, return FALSE so that we exit the- |7 F) o& L, _+ A7 T$ A
  589.         //  application, rather than start the application's message pump.; U6 \  O; a# ~
  590.         return TRUE;
    : o- _5 f% i# q; k+ C  k
  591. }9 c. t8 |4 f! ^! b# ]4 v8 l* x3 C" T- q
  592. / t4 I+ J: [) a; A5 F& y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)  B3 k0 H" n6 Q- f& _
  594. {- _1 _  D6 p1 a& ^+ ]' x
  595.   int i;
    ) ~# a5 A; F& o' _. Y
  596.   char *szRet;& J3 U: y! I" z) [
  597.   r4 B, [; e; j5 j5 }( A' ?, o
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    $ }& b4 G( _# x- `5 l" ^, R
  599.   if(sztoken)- s' F0 S  y% z; `# b) V
  600.   {
    6 U/ U& u0 U4 X7 l& l0 O# K" Q
  601.     szRet=&sztoken[itoken];1 H; s2 b0 D6 {7 s
  602.     while(sztoken[itoken])
    , l& `! v6 v( a7 i( r3 s
  603.     {
    ' e; w( I9 R# k  P( v# G. D" d. F
  604.       for(i=0;i<(int)strlen(token);i++). j* T4 o: o% a5 v4 G
  605.       {& V; V) r) A& a: K: X8 ?9 Y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    4 A) @! |0 Z' l
  607.         {
    2 `3 t9 n. n7 K" B7 A
  608.           sztoken[itoken++]=0;* k. J! A, X! F; k; a4 Q6 J
  609.           sztoken[itoken++]=0;
    : w, k+ [+ I& P
  610.           return szRet;
      H7 l3 o9 S5 s
  611.         }+ t. e( m- j/ M5 U. k
  612.       }  w; D7 ]* R( [& n, Y- P& K& F
  613.       itoken++;1 F7 z/ e4 P6 R; G
  614.     }8 E1 z# `: i) F
  615.   }) K3 z5 I9 H: d  T5 Q
  616.   return NULL;; a1 N9 O9 D. Q3 L  M4 P3 _
  617. }
    4 G# n6 B  K, K/ C
  618. - k6 b1 u1 B: k$ z% L2 T( p$ O
  619. void ProcessProc(long Total,long Current)
    ( v5 Z2 b# Q* ~, U/ _$ Z* M
  620. {7 k8 }" {+ X4 ~  s8 }
  621.         MSG msg;
      `. J2 J2 v: z" K) T5 t5 a+ K) m
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);8 }7 Q. j0 M7 M1 Z: k! [
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ( R: x1 P9 w5 `! u
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))) r3 A( s$ s* n) q( z5 |
  625.         {3 Y9 k1 R  d, r
  626.                 if(!GetMessage(&msg,NULL,0,0))9 ?& Y1 M/ n5 b' q6 q  @: h7 w
  627.                 {" `( i% {7 i% m% V- e+ H* A% a
  628.                         return;
    ; f0 i# t0 F& m6 s- t0 b
  629.                 }8 w0 W& m( }! J* @! S3 n
  630.                 TranslateMessage(&msg);! y, P  k8 k; q6 J% T; B# C
  631.                 DispatchMessage(&msg);
    ( N9 A, k5 G, z
  632.         }        + l, U6 U# |' i0 k0 I5 S- O/ O
  633. }5 F. }1 l  P5 X8 @, v

  634. ! s- }) p* E3 R0 U; V
  635. BOOL bFirstChar=TRUE;) G: c* P; q; |
  636. ) m. f4 P  V. ~* ^, X9 I
  637. BOOL CRevAppApp::OnIdle(LONG lCount)( g. p1 k* l5 Q9 ]3 P
  638. {
    2 h1 D: s7 G( n: s3 U6 s0 m8 t/ A2 D1 C
  639.         // TODO: Add your specialized code here and/or call the base class
    ; ?$ g* T( ?! ^' X7 g+ f  h
  640.   switch(dwProgramState)2 ]& I6 B: j( q8 j# Q
  641.   {- w0 H* w- @+ c! J1 ^' g
  642.   case AP_NOTHING:
    ) R3 X' G% z- T$ N  N( m9 S
  643.     switch(dwStartUpSteps)1 s; E6 I, g# Y  W! r) o% W# p
  644.     {
    3 e0 K0 a; R6 t
  645.     case 1:
    % D& e% Y. n" ?
  646.       {+ W0 s' g. P) @" Y2 q: U7 m1 N& R
  647.         int i;
    ! s) `8 G9 D+ I2 A% Q/ l1 H  M6 k- a
  648.         CDC *pCDC=dlg->GetDC();
    ! F# P) Q$ y. D
  649.         HDC hdcwnd=pCDC->m_hDC;4 o& i5 I5 s% W. s
  650. //        Graphics graphics(hdcwnd);
    * S/ R1 q. a% T+ K1 K! e
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");, C6 M4 Z) c( D6 t  A
  652. //        INT iWidth=bitmap.GetWidth();
    1 F- s2 N! M; A7 z1 A8 d
  653. //        INT iHeight=bitmap.GetHeight();+ m# C4 C- Y' `, t8 S
  654. //        Color color,colorTemp;
    ; T2 o1 \. r- c! h) D
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    1 o, l4 c; o1 o) l+ Y1 s: p
  656. //        {, h$ n$ M' i5 G7 W7 @3 Q. B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ) A3 b* Y2 O0 ~; ?& f$ e) O
  658. //          {
    : D8 U& q' \) E; a$ ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);' L% M7 J# g: F8 m3 k: w% x
  660. //            colorTemp.SetValue(color.MakeARGB(4 N7 u$ T; o5 N& [. t
  661. //              (BYTE)(255*iColumn/iWidth),# ^5 S' U* b# [/ ^3 N7 j* q9 D! L
  662. //              color.GetRed(),& q8 ^* [+ s. ?8 J* P) u4 [
  663. //              color.GetGreen(),& Q4 @' W" a% w. P# Y! [
  664. //              color.GetBlue()));
    2 X& i# ~, Q% D7 R& A! ?: p$ G+ }
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);/ h7 k( P1 E* t, B
  666. //          }! q) i& P/ K0 O* u' p+ d8 O! f
  667. //        }$ J+ `; K3 _0 M. v
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    & j  G9 z3 g8 \3 z9 r
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) ^" U6 ^9 K! ~* C) e# D' G) \6 ^
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");1 o5 ?, E, G9 l9 |9 p
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 a  x& R$ V' k3 E2 E5 H9 H
  672.         for(i=0;i<240;i+=8)
    + }+ F1 w: f0 O* j9 u
  673.         {" s  E/ N0 F, R
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ( j# g: a7 }; d/ L6 o
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ F2 |7 e. s  y/ ~+ f9 w9 w
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; ^( I. m! e4 t5 D  ?* C: x
  677.           Sleep(33);
    : f( @7 b  V* {" J: [' |( q6 z9 j
  678.         }
    . }6 _7 R; y5 T- K/ B
  679.         Sleep(1000);. W! }* c- g; o6 w2 |
  680.         for(i=240;i>0;i-=8). S: d& f( c# G& Z2 ~& B, D
  681.         {) M- u" R. A* S0 \2 C' Y2 R  _
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 r1 b9 S8 L* l6 z7 q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);' W% n( Y8 ]' R7 P1 x3 l
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & @0 U' N+ }+ O/ b3 _' }, ?/ F
  685.           Sleep(33);
    1 R: J% M5 r& b0 z0 C! p
  686.         }$ V+ g1 p* d! J& u  [
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ; Z1 O# b6 q& A; c0 Y9 K; _
  688.         dlg->ReleaseDC(pCDC);
    . f3 r6 s, K- I& f" P
  689.         DeleteDC(hdctar);
    - c( Z. x" {. J- Q6 m
  690.         DeleteDC(hdcsrc);; O! t# |$ u( M6 a1 M$ S; G" ^
  691.         DeleteDC(hdcorg);
    ) ?4 k/ n* Q, P# P7 C. L* n  i
  692.       }1 Q4 ^+ l: }0 @+ y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);+ P% C1 J- G+ \8 K" M6 A9 v- o+ B
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    % B2 X. @9 y. E, _# D7 x
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");: ~; S' ^! Y: l% x
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
      j! c! _$ p  H8 P8 A) t
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 D) E/ x8 L- o& r( Y# P% m( ]1 T
  698.       if(!Dn.Connected())
    / g+ M9 P* }$ F% I0 g
  699.       {3 F8 ]; @9 o! b: W6 m
  700.         dwTotalFiles=1;2 M1 w6 q% `5 c# @4 B6 h
  701.         dwDownLoaded=0;
    6 j( }8 J: t1 d3 C# ?2 \/ }
  702.         bSilentStep=TRUE;
    ; G8 p. k: F# U  t- b( d: W6 G! ], Q
  703.         bCompressed=FALSE;5 m: R  T$ F6 o* x, S% _. ~9 o
  704.         strExtLocal.Empty();
    4 w, I/ b0 Q# J1 _0 h
  705.         strFullName="readme.txt";
    4 |% s# V' f& k- g* q# b1 p2 {  ?
  706.         dwProgramState=AP_CONNECT;
    " V  b. @3 i$ ]# j2 n8 o6 l
  707.       }5 t* ~# u/ L& W+ [% q& b/ T7 R9 A
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    * G8 [0 Q' }- M- j% X
  709.       dwStartUpSteps=2;
    ! O4 ?8 d) G& H
  710.       break;
    + m; p( \2 g* A
  711.     case 2:: B. i8 I0 e: I+ q+ C+ W
  712.       {- G! F6 A: n  \" F$ m5 f
  713.         int iEOF;
    + i3 Y% q& f3 Y  F( v9 Q: w
  714.         FILE *fp;
    % Z$ U4 E( ]) A  m8 ]& w6 W+ @
  715.         char szString[512];* h; ^7 F, ?7 }# o: O: p
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");2 Y  _: E0 C% U( [: v/ k# o
  717.         if(fp)$ r' \- V4 T/ w4 J# [' g) h* d2 a# n
  718.         {) @; g+ P. \# H( B" A
  719.           do
    1 ?: h. }( j, j4 l
  720.           {
    # \& ?$ e: @2 E6 q' X. ?+ q+ z/ Y% ]
  721.             iEOF=fscanf(fp,"%s",szString);1 u3 }! E9 w1 B- \( F
  722.             if(strlen(szString))
    4 Y* ?1 I0 O4 r/ s
  723.             {
    0 x( U" B0 h+ e0 K! T
  724.               if(bFirstChar)
    , ?1 b; @. i6 J3 b& t8 x) M
  725.               {( @. ^9 j" l4 S# c8 ^& {7 Z
  726.                 bFirstChar=FALSE;  k) V2 f  b) R( D) z
  727.                 bConnectIsBig5=FALSE;9 z, ]7 F; X  q! I( N
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;- i0 o8 t- N+ W6 r) Y. f
  729.               }
    6 I7 R+ E6 n3 O# `8 c
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ! I1 c+ m" S- z* ]
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    7 @7 o  f5 u3 f6 t5 ?' D8 r7 }
  732.               dlg->m_ListText.AddString(szString);/ C) C: o$ q: ?
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 ^) u, [- K7 y% {5 j1 Q7 O
  734.               *szString=0;
    + D3 d4 ^9 u; K: G' R
  735.             }. ^% f0 b2 y0 R+ x' K
  736.           } while(iEOF!=EOF);
    / l' E0 P/ x( p, L' ]; G& g; r$ @
  737.           fclose(fp);
    4 M/ P; Y& D' S! J! ~* s, d
  738.           unlink(".\\DownLoad\\readme.txt");# Q8 e' E/ E- @/ m% L
  739.           dwStartUpSteps=3;
    2 q. j7 ^0 j6 f# G
  740.         }5 R4 q; ^) t: M1 L
  741.       }5 _# [+ a: ~, s- M% s% b
  742.       break;& H8 a8 R/ \$ D  v6 t( I, L: H
  743.     case 3:) g' c! ]9 n6 o* W1 Y
  744.       if(!Dn.Connected())
    3 R$ G# t6 S! B  M+ L2 P2 Y1 t
  745.       {
    ! n% h: E8 ^( q' K+ o* y$ q; `
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    9 @) u' c8 z" R
  747.         dwTotalFiles=1;
    / d. ~5 e7 e' K: P' n6 [
  748.         dwDownLoaded=0;" \/ W$ f2 s% B' k
  749.         bSilentStep=TRUE;$ ]6 h; U0 h. {5 b1 a
  750.         bCompressed=FALSE;
    7 y! @4 @! f7 ?" \
  751.         strExtLocal.Empty();
    ' W; N9 y7 m* ]$ T) u4 s
  752.         strFullName="checkversion.txt";1 E" H) }6 k  w5 r9 z8 ^" W4 b
  753.         dwProgramState=AP_CONNECT;
    3 K6 t3 v# Y, {, A6 Y* d
  754.       }  H# q5 W+ X. S! K! P& l
  755.       dwStartUpSteps=4;+ c4 ^/ O5 F. S+ I
  756.       break;4 j! F9 e6 L3 J* ~
  757.     case 4:
    + \  `: v$ l  a& J/ }
  758.       {
    6 W" g8 W, q& H* m5 Z! b+ k
  759.         FILE *fp;
    : i* k: [7 a/ |# ]( v3 `
  760.         char szString1[128];2 d# _. x$ m- Q; G  n
  761.         char szString2[128];6 u, [" D: C/ Z' ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");% |" N: h# |8 Z- h+ u
  763.         if(fp)# ?& W) }+ D/ X  i& H/ r# v, A; T' r
  764.         {
    - j- x* D% E: f4 W1 \4 K
  765.           fscanf(fp,"%s",szString1);- y0 `/ T6 ~+ u: [' k4 Q9 J- `6 q2 X
  766.           fclose(fp);
    & ]! b' m' P, y: D) m, v* F
  767.           fCheckVersion=atof(szString1);- Y4 @  P; d, d' O; T) ~
  768.           fp=fopen(".\\checkversion.dat","r");+ M6 j; u, r4 e$ P+ f; n+ C
  769.           if(fp)
    ) k$ z1 n/ r* T9 z& q8 y0 ?
  770.           {
    6 ?% k1 X$ F/ s% N( Z9 {' I- s) ^- w) U
  771.             fscanf(fp,"%s",szString2);
    4 O. l3 a" c3 b" z# F5 }
  772.             fclose(fp);
    - b% A4 t: c* O. f$ I1 d
  773.             if(atof(szString1)!=atof(szString2))  w8 g0 S. M4 F8 [  V7 L  C
  774.             {4 D, U2 u4 G% n4 J; E! X. h; R
  775.               if(!Dn.Connected())1 F; m$ U- B( h6 s4 I
  776.               {
    $ w- Z+ _# s* U. p7 R$ n( `$ S
  777.                 bFirstUpdate=TRUE;, Y+ X# r) L8 j7 F2 ^& j  |) z9 M
  778.                 dwTotalFiles=1;: G( Q& Z( o( Z4 D. x/ I+ C$ k; W. L
  779.                 dwDownLoaded=0;& R+ k; `1 Y4 d2 W
  780.                 bSilentStep=FALSE;& z0 Q0 Z  K2 d( U/ j: I1 ^
  781.                 bCompressed=TRUE;$ S" T' m$ m9 i3 @  s4 r5 i
  782.                 strExtLocal=".\\DownLoad\";6 ~1 r& ?2 ~0 ^* _! [, z+ q# e
  783.                 strFullName="update.txt";
    0 Z+ P! b' Y; L: Y0 n: {5 [
  784.                 dwProgramState=AP_CONNECT;
    4 q& K; @6 k! M
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # M# ?* S. a2 g! }: Z$ ]2 a. h
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 d$ z7 w5 I* S
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + \. k1 X8 h3 d3 y" r; y) z1 L# ]
  788. $ P8 e6 x; i/ `" T
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + ^' I" }& p; w2 t; n2 {
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    : T& u* f* Z# Z+ I% P& r
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)- `' T% A9 H, ?1 y9 j
  792.                 {& Q& [. L( y% @" U2 v6 V) _: M
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");2 p9 D3 _" j. m5 Q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    # o. c2 S! T3 [4 |: u% q; ^
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % E" {, q  h! j; O8 r+ e; L: A
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; m+ f; @/ ~/ A

  797. 3 R' \4 e0 r2 V. w
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    5 F6 Z- ?, j5 [9 J) m) ?/ f
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 o+ G7 n! K8 _
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    / }% b7 G7 p1 a. D) M/ d4 K6 q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( p- ^0 o% h3 v- x1 f4 q
  802.                 }
    5 A9 M7 Q" o  j# |# z
  803.                 dwStartUpSteps=5;
    / D# {8 c, t* O5 C" t/ M8 H' `
  804.               }" K  L, E% s  e7 F$ K( |0 b
  805.             }
    ! `: J, u% F" [5 q. \
  806.             else4 G3 ~1 N4 o7 C& b! l
  807.             {- f% B. L  \5 u# |- q, i
  808.               unlink(".\\DownLoad\\checkversion.txt");
    : `& y4 |% |6 S  @5 z, m
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 ]6 x/ G8 M) y+ ]; l
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    " z5 y9 i' [$ X& v. M. J' D
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 x6 j0 E+ e$ X- s, n, U: c1 \7 d

  812. , |# x, i' d1 f
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 x. h: L9 j* E8 n
  814.               dwStartUpSteps=99;# \# Q  W4 m3 C1 Z" p& f
  815.               bFinishUpdated=TRUE;* \/ A$ s4 K+ e3 `8 `1 B
  816.               bCanUpdate=TRUE;# Z/ F( e! R% B. l
  817.             }
    % t+ {. [, y: ]- V- r- e
  818.           }- o7 O  i! o; w' f
  819.           else
    3 g' S. V8 R1 Y& M8 h
  820.           {8 g; D+ r3 a# b& h! T( T8 ?
  821.             if(!Dn.Connected())
    % C. y8 Z' y  I
  822.             {1 C. h% F* H. t
  823.               bFirstUpdate=TRUE;
    ' @/ {, W3 R, F6 z" v5 x: L4 `# ^! m: |
  824.               dwTotalFiles=1;
    1 T1 M6 s) o  x( @" c3 H
  825.               dwDownLoaded=0;: \: H$ O' _3 b8 H- g
  826.               bSilentStep=FALSE;4 U! M0 \1 }* k9 {1 i( L+ @
  827.               bCompressed=TRUE;4 }" Q/ a; A% Q6 b# E: D" h9 b" }
  828.               strExtLocal=".\\DownLoad\";
    & k2 v! _  t. i
  829.               strFullName="update.txt";; p7 w, I) A8 H
  830.               dwProgramState=AP_CONNECT;
    / }- z+ P0 }# |% V$ S' O
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 t' L) i8 A+ C% r
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% t5 W( A# a: Y$ F# G" |
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 f# v+ N6 M% i  h% ?
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, U, A9 W- B2 v: G3 A
  835.               unlink(".\\DownLoad\\checkversion.txt");
    % f* [1 f, [. A. i0 q+ i8 e, X& b  r
  836.               if(GetFileAttributes("Wsa.zip" )!=-1). G* z- N; S9 k: H7 _7 y9 A2 g
  837.               {
    6 @1 `  r4 @4 H1 j! P/ E7 v
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");! ~: M2 E4 L; x# L5 {1 i7 c
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    : D; F( W  z) u% Z) M! L, x: Y: B% o
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ; R4 J3 m( |; S9 Y
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # Y3 z% ?+ m) w$ W
  842.                
    7 R2 w* F0 [# a6 o1 N0 A3 a( t
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! W* ]) m+ P* F" Y) L5 J
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' Q  B/ ~# U7 H1 K$ U( k
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");% W8 q0 M5 y- X- }. R( Y
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " |( x- g4 Q& {3 s; Z2 C4 p$ L
  847.               }
    # Y! ?* ]2 ?8 z7 ?6 o$ Y. J
  848.               dwStartUpSteps=5;
    9 K0 ]0 {( Y: O! [3 s4 n
  849.             }$ {$ t' |* X; ^9 o& k
  850.           }
      }( g( q( s# ~8 F+ i5 x2 P
  851.         }# j0 ^0 L; X, a7 i" F- ]8 Y$ A3 T$ u- R
  852.         else
    ( S: q4 E8 X# K3 @
  853.         {
    + \/ K: x# F5 G
  854.           dwStartUpSteps=3;
    1 R& O$ A5 s5 T/ `. p7 Y
  855.         }+ x8 a4 s6 F$ m' k$ s
  856.       }! M. M- Q6 ^7 t; @  j' p
  857.       break;: r! \% q1 x9 {* q1 D% Z
  858.     case 5:5 v) c% G: A& Q0 |. |9 b. s
  859.       {
    * f2 W8 H# i) b
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    / H( I6 G% B: X2 Y3 K* s6 T# ~% q
  861.         {/ b6 v# o9 p4 n$ a/ y
  862.           int opt_overwrite=1;
    9 m5 W) k, e: A  a
  863.           int opt_do_extract_withoutpath=0;7 P. N4 N% _  R7 B2 L8 g
  864.           unzFile uf=NULL;
    9 B* Z- H, @/ h4 [1 U) ~8 u0 Y# w8 f2 X

  865. 3 H; X1 f; |+ d3 _+ S. [
  866.           uf=unzOpen("Wsa.zip");
    $ ~- R% Q0 d$ D; q
  867.           if(uf)
      [5 h3 Z6 }  m8 }* t
  868.           {
    / G& x) J; {, r- j! Z) \
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ( w! J  }; `  l+ ^. R
  870.             unzClose(uf);, ]/ i  R* {" p3 y6 W
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");5 e1 c- g8 w2 F1 Q5 J5 P
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) y) n' S' I/ b
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    7 m1 e) T1 p/ j
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : i% w$ h2 Z0 c( ~7 _) `. i
  875.           }
    + m& Q7 \* `9 `$ w5 h
  876.           DeleteFile("Wsa.zip" );: l2 F& E2 c1 O* A& q
  877.         }% m9 ]1 S! I# d5 b

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

- _$ y. h* }% b: B% ^  Y4 z( O3 k3 J" z: p  R1 W; O" H

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-10-19 11:32

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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