找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
' ?* d7 M  i* V1 q9 X2 C
  1. / RevApp.cpp : Defines the class behaviors for the application., k/ }, [1 t& x& P5 ?! O
  2. //
    ( K3 o! u$ W3 H/ ?

  3. 2 p. c" d  ]: n4 ^
  4. #include "stdafx.h"
    2 s  }0 v4 r2 |$ K

  5. 4 [7 }# l4 A' n6 A
  6. //#define UNICODE
    ! I( L1 k& p3 ^2 X; d
  7. //#include <gdiplus.h>
    4 ?* l, W: J6 c6 H5 @0 b" w. x
  8. //using namespace Gdiplus;* C# u) S, l) {+ Y5 U' E
  9. . S! a$ X1 `  ~# G7 f6 G7 I
  10. #include "RevApp.h"
    " x( I& E" v! K* Z
  11. #include "RevAppDlg.h"- n# A  o1 Q6 q' t/ Q( O1 r
  12. + f5 a! U: u. U5 U
  13. #pragma warning(disable:4786)
    ' n' x" J% v) s( l" q* X
  14. #include <map>& l- s& z0 L/ ]* }
  15. #include <list>; N! a  y# P4 ~3 @% j9 g# ^
  16. #include <direct.h>+ }7 o, {6 K( [2 e

  17. + L% n$ t5 c" P# t
  18. #ifdef _DEBUG
    9 J) p" R8 ?" K9 I3 m
  19. #define new DEBUG_NEW
    - R4 M( q  [8 \
  20. #undef THIS_FILE
    8 K6 I: ?6 a5 z; W; e8 n3 x8 M; u+ i
  21. static char THIS_FILE[] = __FILE__;- S7 _- q/ w4 X' C8 p# k( Y
  22. #endif
    + {6 z* m4 @0 u4 |5 m' _
  23. #include "SkinResDef.h"
    % l. r' j+ x0 E3 E
  24. #include "ChangeBG.h"  S8 M, b; H4 X) ?* R" I
  25. #include "AFXINET.H": u5 s1 p! K* h9 H! B; u- Q

  26. $ i) g  E5 v- z4 R; ^
  27. #define TRADITIONAL_CHINESE 09 w' Y0 L4 U+ P- C% e( k: [& m
  28. #define SIMPLIFY_CHINESE 17 P9 `5 K  X6 D: a. [
  29. #define ENGLISH 2' x  X' u- M9 z5 X" S; {
  30. int m_iLanguage = ENGLISH;
    9 I) z( S4 E! g1 q" @- c# f
  31. /////////////////////////////////////////////////////////////////////////////  |6 |$ S; R4 Q  Y8 S% `# J
  32. // CRevAppApp) ~9 z, R1 s/ P3 K3 }9 w2 b$ Z6 c

  33. , ^7 H* U' c$ A
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    4 Y1 a: S1 q& P. W! ^
  35.         //{{AFX_MSG_MAP(CRevAppApp)4 r: c7 }; \: T  P9 l' J: N' O
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    4 N4 I; Z" e/ U7 D- b
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 d: V0 G  q; V4 S, I
  38.         //}}AFX_MSG
    " P; ]8 R/ ?6 g5 s+ f2 H
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ) U& t* j% O8 u! M
  40. END_MESSAGE_MAP(). a' F0 O1 q; O  O
  41. : y4 a. T3 O, W- q  S3 T( X( Z
  42. /////////////////////////////////////////////////////////////////////////////$ d7 ]0 ~, p8 o% t: E; u  T
  43. // CRevAppApp construction
    - R2 B3 q& j) Q- W; F2 ^
  44. 2 y- r7 u0 `, X* I' E
  45. CRevAppApp::CRevAppApp()( D+ b. `6 s( R  ~- f2 a, {
  46. {
    7 V/ V' F7 P6 x3 x4 A3 @
  47.         // TODO: add construction code here,, M0 j' u& X  L
  48.         // Place all significant initialization in InitInstance
    ' `2 Q& k& T) i2 E' ]9 g- H# w
  49.   bDisplayIsBig5=FALSE;
    & _! v+ @. L: p, \/ D
  50.   bRestartUpdater=FALSE;: V  z/ x6 {. B0 J
  51.   bFinishUpdated=FALSE;1 A: O2 \/ o# S6 v9 m; ?+ K- n
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;9 V7 R- V6 d. K6 u" D+ y' _
  53.   InitChangeDataBig52GBKS();* v% `- d& J; c# _& K' X* }. U* C; c
  54.   InitChangeDataGBKS2Big5();1 a; D5 V, E9 ^' m( t: p& V
  55.         //
    1 B: ]% T  w2 e+ X
  56.         bClickRunExe = FALSE;" }, o2 b  f8 W/ x( V
  57.         //
    5 Z3 b! d% e1 E, |6 G3 R6 a
  58. }  q7 a& F+ J5 B* t* B0 \

  59. 6 s$ w2 c& ~1 |& N8 s
  60. CRevAppApp::~CRevAppApp()) u) X1 I, D. @1 V5 g, z
  61. {6 N& z6 x+ V. D3 O, `$ F
  62.         // TODO: add construction code here,
    / _3 {- W! y  k
  63.         // Place all significant initialization in InitInstance7 C. g4 V/ c: q% H
  64.   EndChangeData();/ `8 K, |/ g5 j: p
  65. }* r6 f  N# P* h1 G2 [$ L, _* H

  66. 5 n3 J' r$ v: h$ j( H
  67. /////////////////////////////////////////////////////////////////////////////
    9 ^& }: B* T4 E7 c% s1 p( Y
  68. // The one and only CRevAppApp object
    & }& w6 P3 E5 f& G2 e  j/ U) F; l+ U
  69. , F9 ?' a0 t+ Q( m: `
  70. CRevAppApp theApp;8 Y) J4 \( B/ z6 w0 Z* t6 _

  71. 8 Q8 w$ ]  S( R( {$ H6 o$ o' h- m
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)6 G, _8 L+ d* z
  73. {; n' d% F7 Z. @
  74.   int iEOF=0;/ o0 J# k" J  n' P
  75.   char szTempName[MAX_PATH];
    ) x' a  }# J( z* w: x% z) R! O
  76.   *szFileName=0;4 ?2 A2 e8 X4 k* S
  77.   iEOF=fscanf(fp,"%s",szTempName);
    % @! h/ T" V* G: j
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    , d0 [8 p' |0 H3 g" ]6 ?
  79.   {
    $ p2 q7 O; q8 p$ G+ d9 G1 {* {
  80.     strcpy(szFileName,&szTempName[1]);7 ^$ S. c' U- o  H9 _) N5 ^# }
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    * ^5 u! @6 W( v8 n, k9 j
  82.     {
    3 S( `5 V. i. |: ^) `
  83.       iEOF=fscanf(fp,"%s",szTempName);
    5 {' t# K; R) w
  84.       strcat(szFileName," ");0 r% T1 y  N0 U8 \; l8 ]& W8 {+ x
  85.       strcat(szFileName,szTempName);8 B4 @9 V9 e+ R
  86.     }
    " B, p4 w8 Z2 ~0 S( ]
  87.     if(strlen(szFileName)>=1); S( H- j! ?3 f$ q  ~2 [# F
  88.     {+ \, O$ N% p- q) v3 @
  89.       szFileName[strlen(szFileName)-1]=0;% Y; J1 U$ ^& {, h/ O
  90.     }; M+ D; Q* L: R7 M7 q, L
  91.   }6 I+ @) t% {6 \/ D% G8 }7 n
  92.   return szFileName;" V  ~, G! Y- s3 p: k% q9 L& n) G  M
  93. }, P) C- Z8 \4 l3 ]( N  Y) k% J; `1 l  g( y
  94. " [) a- v' _" q: n
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)' L7 a% c, l6 \: v0 Z
  96. {- w  z4 m! m) C# @' _& o- M( Y) d- ^
  97.   FILE *fp;* D& T( Z3 F/ \; X2 R9 \# k
  98.   char *key=NULL;
    8 x5 H' K/ G. t( b. O% O
  99.   char version[MAX_PATH];
    ' }. _9 h+ ~# u
  100.   LPUPDATEFILE file,olds;
    ' z) ^) g- N8 M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;& T) B( p& W# U  |3 V
  102. & {, m3 l8 k) p& L3 Y' T+ F, F; k
  103.   UpdateList.clear();* [7 ^, E6 d, F, A) w
  104.   UpdateFile.clear();) s: T6 v6 [2 ^4 z5 O0 Q
  105.   if(GetFileAttributes(filename)==-1) return false;. ^' z% d( `( J0 t8 _- A, H3 Q# B
  106.   if(!(fp=fopen(filename,"r"))) return false;8 R; y' y; k( Q# L! Z7 R. Z
  107.   fscanf(fp,"%s",version);; y* u0 }' J7 ^2 A5 K8 \' ]
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    * k: v3 v2 Y6 T( q8 B
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ; ^6 C9 U% q' P! C" U: j! r
  110.   {
    % v; m5 e- O/ a2 ]9 a
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 I8 ~# Y9 }* Q/ a; ?+ ~
  112.     fscanf(fp,"%s",file->path);
    - P2 s, H: Z$ ~
  113.     ReadFileNames(fp,file->file);0 {, v: T5 G" S2 J& {7 L
  114.     strcpy(file->full,".");4 L* q3 s; u* u0 H
  115.     strcat(file->full,file->path);
    0 K! z# Z" b6 d8 e
  116.     strcat(file->full,file->file);, d+ I7 P( t% ?, w' j9 o( \8 @
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())8 p. F+ u$ c& ]/ I
  118.     {& r) S+ p* d% i9 D
  119.       file->vers=(float)atof(version);
    : h, `9 @, L$ P8 Y1 j# L- o  g
  120.       UpdateList.push_back(file->full);1 b: H' b, H& ?7 E1 C
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 C) }* G. d1 d5 J: n
  122.     }
    : Z$ n( G  y* ]0 j5 [; s) l9 l" }
  123.     else6 w: L; A9 W: U
  124.     {/ E. Z4 D+ f7 P2 N0 P$ H+ A
  125.       olds=(*p).second;/ j9 \  I3 ~* a- ?$ J9 U
  126.       if(olds->vers<(float)atof(version))
    9 T7 g$ L/ K$ x7 `6 W3 m
  127.       {  g$ r2 n. ?* q  U
  128.         olds->vers=(float)atof(version);
    9 E  ?  y# w  O  y5 I9 q
  129.       }) ^6 E2 e2 V2 s7 c
  130.       free(file);
      R5 Y+ C! L8 W. _& L" m
  131.     }
    # U( _; o* p7 D
  132.   }/ E. c  V& v; p% W2 Y
  133.   fclose(fp);
    8 [+ J# _5 P% J$ q
  134.   return true;* L" U$ Z9 e2 c+ _6 \
  135. }
    8 i8 W- _/ q3 n/ P  l  {8 F

  136. # j1 o- e# y% p" V& `2 R
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)+ m  h! I3 H3 ~/ e( N3 \: C
  138. {! ~9 w- N, \8 k, u( F6 G" {
  139.   TCHAR  szFull[MAX_PATH];3 y# T' d: d: N5 L0 K
  140.   TCHAR *token,*inter;
    " W  m) D2 [; n, e9 L# S
  141.   *szPath=0;$ Y. _4 i- ~+ N6 ]+ D
  142.   strcpy(szFull,szFullPath);
    + P; k' n9 ]- R% t0 X
  143.   token=strtok(szFull,"\\/");
    + k, C0 B/ J" X5 j) ?
  144.   inter=token;
    : \, W. s: W( e  q6 n, e
  145.   while(token=strtok(NULL,"\\/"))
    + A: u' v, `1 M- T" @3 w
  146.   {! Z9 Y8 d( c- \& M) W6 g% C/ ^
  147.     strcat(szPath,inter);
    * l7 v3 a$ v' X8 a( k1 y
  148.     strcat(szPath,"\");' n5 |6 j( z/ I- ^7 ?# z( Y
  149.     inter=token;& U9 [& x* X' F6 i# V
  150.   }. L/ j. u7 s' q; K" ^0 u! R- ]
  151.   return strlen(szPath);# Q9 l4 e7 E' g& d2 ?
  152. }' y% G. n/ X& W; n. m2 S

  153. - d' O; c( [# B) V
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    6 F5 O" T) k8 W' ]0 l8 Y
  155. {
    & K! U2 H2 v5 L6 O
  156.   DWORD attrib=GetFileAttributes(Target);: Z( y5 H- t& ]& {1 H& V& u
  157.   if(attrib!=-1)
    ; u( M3 A5 Z  u  H& o7 G% r
  158.   {
    $ t! r3 f6 n" ^6 Y. e% |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ; x' a# i4 A: ~5 M
  160.     {7 C  ~. U  @5 @2 u9 t- h
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);2 V3 ?% e& t, H+ o: W
  162.       SetFileAttributes(Target,attrib);
    : c0 R8 @  ^3 u# ], z: N
  163.     }
    ' _9 T# Y( H5 k) ]' _; R3 _
  164.   }+ \1 S% K4 W9 |+ F" Y
  165.   CopyFile(Source,Target,Erase);7 e  i3 r# G" Q: P: ~( X% b
  166. }) J5 V$ E4 r. \

  167. ! H. a( M( a! i. H
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : P2 K: k6 h) W$ N/ ^
  169. {
    6 c' z4 }. h* I- A4 ^5 m
  170.      FILE *fp;
    " j7 `8 F8 W) \8 P  Q0 M$ j) B
  171.      char  szBuffer[8192];
    ( y( H4 s8 p0 m# N+ M: h  o' v
  172.   va_list  argptr;
    . a9 w/ e) p) ?% p8 s2 n

  173. % T. x8 s8 c. u8 A) i
  174.         va_start(argptr,message);9 k# u6 h$ V% ?& U
  175.         vsprintf(szBuffer,message,argptr);! d$ G1 s1 N' Q; R. n
  176.         va_end(argptr);5 c0 M, u8 N. E7 i% z6 e7 B
  177.   fp=fopen(FileName,"a");
    3 Q# T! Z$ P8 L  I
  178.   if(fp)' H! K% e( M1 e! s
  179.   {; q  [- o* n! Y7 Q- F
  180.     fprintf(fp,szBuffer);. D4 D$ J/ L0 M0 Q7 o
  181.     fclose(fp);% G& K: q: a! P# y0 x
  182.           _flushall();" {5 v: U2 h; G0 l5 j
  183.   }: M8 s0 i- L" R1 X
  184. }
    . O1 B: d( J4 s6 k; o9 h1 R0 e8 u

  185. 5 }; z. O2 v% I) u. s3 P/ \
  186. BOOL CRevAppApp::Fclearf(char *FileName)- G% d) j+ A. k
  187. {% [, V) k; E5 t% H* F2 g- O
  188.      FILE *fp;
    " t$ H4 l) ]6 R# B6 c
  189.     DWORD  attrib;+ K1 s2 T+ W6 V8 Y" f
  190.   attrib=GetFileAttributes(FileName);
    0 `. l3 R* p+ W5 g& V; {. M* g$ n# j! U
  191.   if(attrib!=-1)
    0 Z) x& K& e& f
  192.   {
    9 O: ^! T' |  i; P5 S
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);4 ]- h4 b- _' A
  194.     if(!SetFileAttributes(FileName,attrib))
    ; \5 S" p6 I5 m0 p
  195.     {* h' f% t0 g% l8 H6 F* ]5 o
  196.       return FALSE;5 |* B& A! {9 ]
  197.     }
    9 j, j  _6 f3 @
  198.   }
    - Z+ y0 X4 j, r8 V
  199.   fp=fopen(FileName,"wb");
    # x9 V& ^3 s! l7 v+ i1 m* k8 ]
  200.   if(fp)
    ' m  Q5 C1 L# Q2 b9 g* ?
  201.   {
    $ M& c: b% f# }- I4 s( {
  202.     fclose(fp);
    4 u. X/ }/ F4 R+ F
  203.   }
      X( D" R5 M  o$ u+ y
  204.   return TRUE;
    ' N9 @; ]! T- Z- Y0 [
  205. }
    3 K6 C8 o' v4 G9 Q9 M1 d/ R

  206. + w6 ^( ~$ `& A1 Q) P: X+ l
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ! E+ p' d7 |  Y" `
  208. {$ F  B" Y( U5 Y2 A% N* b9 W
  209.   char filename[MAX_PATH];
    - m; W: i- x* W* \
  210.   LPUPDATEFILE file,olds;
    ' s0 E' \. ]+ K- v& A6 B" _
  211.   std::map<int,CString>::iterator i;1 U7 Q" m$ e  j1 L3 M
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 D- n' z5 r4 W& a, F+ _! U
  213.   std::list<CString>::iterator l;
    1 x$ ]( h2 ?- T$ ^

  214. * Z: C4 S. \" z$ R8 }/ n3 J
  215.   if(bFirstUpdate)# R' y# T  M2 k1 ~4 W* F
  216.   {* ?0 w& M! C. w: e
  217.     dwCurrFile=0;
    1 p' V3 o5 W- c$ B. t
  218.     bFirstUpdate=FALSE;
    ; Q& g& A$ e2 a4 b# S* ]
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    9 w) S: o! ~* X/ a
  220.     {/ _+ ~7 _0 R, C6 T# G
  221.       dwTotalFiles=UpdateLocal.size();
    + n4 ^' d) }2 h! h& w# l0 @3 Z
  222.       dwDownLoaded=0;
    ; R  H* \9 I# @( \+ ^. w9 @, G
  223.       bSilentStep=FALSE;( K3 W! i* W4 ?
  224.       bCompressed=TRUE;
    3 A* w! c! ?4 _* d! e
  225.       strExtLocal.Empty();
    9 X/ [; q' m6 g7 Z
  226.       strFullName=(*i).second;' W4 g& m2 R6 b. R2 s
  227.       dwProgramState=AP_CONNECT;& s% O& a* V; \, G* W9 K
  228.       return TRUE;: @+ e4 f8 e; C$ \
  229.     }; U5 Q& F3 T  U$ ~3 N
  230.   }
    3 s8 w7 w$ E) n8 M& i* S2 ~, D; _
  231.   else if(bRestartUpdater==FALSE)
    / E& ]1 g7 x1 v: \, i
  232.   {
    5 m- d  I7 Q  q1 T) h) k
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    % t& V. C, Q* j. x# ?) |% h
  234.     {
    ; ^6 A" R( n) C
  235.       file=(*p).second;" d& F1 f+ b3 l. J# u. J8 G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    6 r/ y1 t+ V8 S0 x' ]
  237.       {
    $ E8 t; Y8 }  V" T, N8 _
  238.         olds=(*p).second;1 P5 L9 j  X& P4 l  |: g4 j
  239.         olds->vers=file->vers;! N3 I; J0 g; a- E
  240.       }
    # C8 ^  A9 R+ h9 @% i% C
  241.       else- m) I/ A" E- x& s
  242.       {& r1 ^- A. E" u
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 G/ e% p! |% E& b0 e  p
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    : @) w& S: S! T! n
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));$ S& e8 Y2 D) L" C2 B
  246.       }
    1 w# ~' F' ^0 N+ }1 m- D
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ) y" H$ i* O% q' w- {' S% h% j! H
  248.       sprintf(filename,"(%s)",file->file);1 t3 ~* V. }' b3 {
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 ^, _, W' b1 o% t& ]7 Y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    $ u- M9 m/ k( m% x; ^9 ?- _3 b
  251.     }1 u9 Z' [8 _0 l' V4 I9 N& _6 z
  252.     dwCurrFile++;4 q. U$ f" l( A
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' A+ @  H4 p/ _" w4 }% c/ @
  254.     {
    + ~9 j- C$ M" A( u- W+ M. y: i
  255.       bSilentStep=FALSE;
    * T7 ~' j) E# H! v7 S
  256.       bCompressed=TRUE;
    8 R1 |) [& ^. X1 I% o! |
  257.       strExtLocal.Empty();
    9 G, f, o1 q; g; i( Z* j
  258.       strFullName=(*i).second;
    & E! \' h. d. `( M4 u9 P
  259.       dwProgramState=AP_CONNECT;
    ! u6 `6 ~1 x! N, ?7 [2 V) m% Z
  260.       return TRUE;" }$ C* g  D1 C- k$ R9 P* ^' j( K
  261.     }4 _& B! h4 d& H
  262.     if(!bRestartUpdater)
    6 F1 g; J5 W& j. h% j1 h
  263.     {, u6 w0 [& o* H: ?* {
  264.       int iCurrSize,iFileSize;
    5 l- p3 e3 a+ |! r, G' K( }  K4 x9 b
  265.       iCurrSize=0;
    3 K3 E/ s; `( ?2 h1 o
  266.       iFileSize=UpdateList2.size();& f' K3 }( ~/ }- E1 `
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . L4 E0 a! r$ N- A6 x
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");* u; M. w6 X9 ~. r
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 p0 X) f! K2 k- x! |9 O: A9 R
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - O  h/ c' x2 c- N
  271.       Fclearf(".\\update.dat");
      j; @6 p7 Z; f
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    % ^7 F+ H6 y5 b  l9 F: _% ]/ ]
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)! s, ~4 a- }2 T" Q3 G4 j0 _
  274.       {
    / D5 c) B$ J( q% n+ `# O
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& w% O) p% ?, x" C: @
  276.         {% h1 ^) M! @8 H2 t6 S% d
  277.           file=(*p).second;' r8 U/ c! j2 M$ u0 ?9 [
  278.           sprintf(filename,"(%s)",file->file);
    9 ^4 w9 ^2 z2 I' B$ w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 Y) o3 T" R' C  I. b
  280.           iCurrSize++;
    8 r. a7 t6 S4 E% P
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));$ q8 @/ J, p& ?8 u- b+ x# e
  282.         }
    7 O9 }! e8 P" w& e
  283.       }
    : U/ @% ~/ \& m1 `* h: F, F
  284.       unlink(".\\update.txt");
    - Y9 w2 @; N8 T
  285.       unlink(".\\update.tmp");, Q+ J2 V5 M8 I6 \6 r2 t7 W% o; O- w
  286.       Fclearf(".\\checkversion.dat");
    ! S# P8 O- Y) o8 H. r+ J
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# C7 V  U( P3 G8 y
  288.       if(UpdateLocal.size())
    ' w, {( t% n# a& Y2 Z  B# u" l
  289.       {" I& r0 n2 P! ^0 a1 l' ]
  290.         UpdateLocal.clear();+ Z0 }$ d3 l4 y
  291.       }& s5 K0 k" K$ ^# }' x, @+ X# l  n
  292.       if(UpdateFile3.size())
    3 P, Q) K( F6 J
  293.       {: ?' @6 e4 p& ?$ d# R% F
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 H& l) G" f, H! a) w/ |% x& f7 s- X
  295.         {
    - M3 g/ Y2 C* ^
  296.           file=(*p).second;: ^; H1 E8 B/ |
  297.           free(file);! d: i- x/ e% j) |
  298.         }. N3 y. s# t8 Z! R
  299.         UpdateFile3.clear();
    1 d5 H* {. q; [3 b" x- o
  300.         UpdateList3.clear();
    2 Q" U- t% C2 z
  301.       }* o& p1 N. ]- ^5 K
  302.       if(UpdateFile2.size())4 v" x- }/ i+ r# y- V0 |3 E5 h
  303.       {
    5 v3 f! H# @# _5 n
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 w1 n$ W% v1 W+ x
  305.         {! A& r6 L# [, N/ o+ T' U
  306.           file=(*p).second;
    8 T. _) R1 |& V1 l+ d/ k
  307.           free(file);. n( {0 T. G' K
  308.         }
    5 j* d# F. y' s( {& w3 W/ W  ^
  309.         UpdateFile2.clear();& l- i& d! {) g  I; B% Y( u+ [$ X
  310.         UpdateList2.clear();' L5 w* f% G% s3 V
  311.       }
    + n' u4 X1 j0 k" E# i. W
  312.       if(UpdateFile1.size())
    1 f1 a% m! T  Z
  313.       {1 R) O2 X1 u: B2 S9 u% S! R  c
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    " f# b$ }, {" n( e  Z
  315.         {$ n. B' Q, b9 M. m: ?
  316.           file=(*p).second;
    ' m" {/ O1 z5 _' X, }
  317.           free(file);
    $ ^5 S" r, y. @7 R) ?$ A- q
  318.         }
    $ N3 B& \: e, B$ W- f
  319.         UpdateFile1.clear();
    . B8 r7 P% A5 X' n! E+ x, _
  320.         UpdateList1.clear();: y% N. [' X; B2 [$ i
  321.       }' K1 W; i; @8 }0 i
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; S( w! w: G; f
  323.     }
    ) M# N7 t7 _# Q& P+ \( s
  324.   }
    & \6 K' @' ]9 O" b. m4 b. {
  325.   return FALSE;
    9 f- y/ @5 ~" r5 y# h" y
  326. }$ k! J4 C! b# F$ K, @
  327. - o# I: ^: O7 M7 u3 v/ e* ^. g( L
  328. void CRevAppApp::ClearAll(void)
    - b6 K  \, r: o$ V2 M# Y% ^+ k" R& O
  329. {
    9 g/ b+ b; o5 {5 G% a6 Y6 C8 r1 T
  330.   LPUPDATEFILE file;
    7 b7 Q) y" X& z5 u& l8 V, H
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) y7 V$ N7 r. A5 Y. X: s6 g2 F1 S
  332. " U( l- }. m0 e' e' B8 G$ _
  333.   if(UpdateLocal.size())7 P/ a5 z% A7 c- M' J2 X, X" Y
  334.   {$ B2 C& L" m( B+ t
  335.     UpdateLocal.clear();$ L6 }1 X  r6 V, C, y/ N
  336.   }
    ! U) O6 T* m- t2 \
  337.   if(UpdateFile3.size())
    & J9 o0 B. m; D+ U; B
  338.   {
    8 b0 L* V# x8 B( I
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' C% {+ r! H- n: m- R
  340.     {7 |+ i: E  I4 w* B  ?
  341.       file=(*p).second;
    # y2 ]0 C2 e5 X9 B3 k
  342.       free(file);1 ^0 _0 O' k- l6 G2 z) H9 V
  343.     }
    8 |, M6 E: X9 `; z- q; A
  344.     UpdateFile3.clear();, k+ a; \9 j" _3 i& u; }% W
  345.     UpdateList3.clear();
    1 G; J# k" Z% u$ c% k
  346.   }) H; z: S2 `0 x- f; ~* X
  347.   if(UpdateFile2.size())
    4 @  L1 b0 \, J  o
  348.   {3 p, c2 y, C4 Z3 A, l1 y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    9 o5 |  v; E& M' R% P2 k$ i* J
  350.     {
    " m! |. d" O4 L
  351.       file=(*p).second;# ?: [9 ?; p; R+ P3 k
  352.       free(file);! u, j3 `: z) D2 q
  353.     }1 H/ d: C6 {4 G2 t: B8 d1 b
  354.     UpdateFile2.clear();
    7 ]( a+ ]' O9 Y. d1 h% w& _, G- @% L
  355.     UpdateList2.clear();
    1 N0 A; `- a7 M" x( s1 B' [' ?
  356.   }$ a; K) }5 g: X6 W+ h6 Y
  357.   if(UpdateFile1.size()): m# B8 k6 M( P  C# p: x+ ]5 w
  358.   {
    , T- l5 m" M) O. @2 Q
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 X* K& L9 x  S( D+ D
  360.     {! S7 U# y# z$ u4 [
  361.       file=(*p).second;
    # n5 ?4 g) a+ Q9 n- x2 u
  362.       free(file);( d4 a* v8 E! O# v
  363.     }
    5 S% P; i# E4 i+ a; d5 W
  364.     UpdateFile1.clear();$ L+ ]/ v* ?5 s) s
  365.     UpdateList1.clear();& M4 z: o; c0 M3 c/ K, D
  366.   }
    - }0 K8 H( J5 s; t3 t
  367. }  " x: `6 W. T( }6 g/ H3 J6 A
  368.   " o+ x+ y8 v7 V7 g7 Y3 _
  369. BOOL CRevAppApp::CheckLocalVersion(void)0 o6 _# V) p( Z- D4 j
  370. {$ m7 }- S( _2 S+ |. _; E( [5 C8 `
  371.   int c;% t( p. Y# ]2 G/ a+ R
  372.   LPUPDATEFILE file1,file2;# V( B6 l9 X' ^" }: J# e
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 [( ]2 s6 g2 f' O! B0 Y
  374.   std::list<CString>::iterator l;
    # o$ ?- Z7 ?! K

  375. ( _+ l, J9 B" X5 x- y
  376.   UpdateLocal.clear();
    ! L, {' i* y' {. C2 a; O
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    % ]/ I1 f) w7 c; K1 w. T
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ! A- Z% k2 m' B
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);  n9 f: o3 A  {; u
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);4 F1 c  Z1 z/ O0 q# P
  381.   if(UpdateFile3.size())
    $ `0 F* S$ U& c/ g
  382.   {
    + t3 ]  j; z! q! z( a
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)- V) y6 O, D% O
  384.     {) U' _: c; {: [# A# ~
  385.       file2=(LPUPDATEFILE)(*i).second;
    9 c4 R8 d; q1 i0 f$ k
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 h' p. S4 L* \+ w5 `& I* g& d6 S
  387.       {" P0 @* A8 E, r% `. x+ u
  388.         file1=(LPUPDATEFILE)(*p).second;: g7 p; t& m6 ?# B, s
  389.         file1->vers=file2->vers;
    5 t+ Z9 v/ f1 j1 r& g5 F! a
  390.       }) ]+ u, K8 v6 D, j! i5 u2 {* W# r# ~+ K
  391.       else
    ) h) ~! [$ W9 }- k( N
  392.       {
    / ^/ |" ^8 V: \+ `7 S6 U
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + @+ g+ S- x9 j, G1 b9 A# ]9 O
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    5 l' {3 N0 K1 t
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));" e- a6 o1 R7 b2 Y$ t7 q
  396.       }. R6 n' R8 v6 ?+ l
  397.     }( K- p! p% u+ o4 d# w" w: p( u
  398.   }( ]$ B5 E  f+ O
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * E2 e6 b4 f- i0 w* O
  400.   {1 Q3 H" G( H1 Z- J, d" d
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' Y. F2 q' f- N1 u: F+ g5 V
  402.     {
    6 r5 A; l/ k3 q8 m2 _4 e; d
  403.       file2=(LPUPDATEFILE)(*i).second;
    / ?- h: U. y; e! |7 K
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # e! F+ N5 u  w, ?0 B* c/ z! K8 I
  405.       {
    # x4 X1 i+ z$ q6 Y" u
  406.         file1=(LPUPDATEFILE)(*p).second;4 ~2 ^2 j. v7 i  f; W5 |
  407.         if(file1->vers!=file2->vers)  d/ H- O! K' m  d8 B9 \- f) r
  408.         {) ~8 r5 R( R& d) p1 D! e
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; F) N5 U- n( ^1 V; }
  410.           c++;3 l% G. R  u7 p
  411.         }! o# d0 y; E% Q' M/ V
  412.       }+ A. p& F. ?# r+ f2 D. H
  413.       else9 C" k! h4 M& k4 ?' n
  414.       {! o( n7 a; M3 `4 X: q) ^5 Y* \1 v
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # N. a  v$ ?3 W! S2 |* r4 |& Q7 G
  416.         c++;/ K* ]4 A' {3 W) v5 S- s
  417.       }  R* ^$ `1 O& P( k# H/ @
  418.     }8 y( v! ~9 r& }8 }
  419.   }
    ) O2 E6 [: J  x, b5 }2 {2 @& y
  420.   unlink(".\\DownLoad\\update.txt");
    ' A! W( A4 E( G- h$ R, _: t6 ^+ Z
  421.   if(UpdateLocal.size()) return TRUE;
    & o/ U# Y# F% p0 h2 S
  422.   else                   return FALSE;
    % i' c5 r' D$ \
  423. }8 A# H+ e+ X: v# k3 T
  424. ( K. `: I7 W  b- }0 \/ F$ J! ^: L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"3 V+ S/ _9 T7 g! U# u0 a
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    , |% |- X4 @8 r' R
  427. 5 I8 c8 K5 p0 A/ D4 y0 B

  428. 9 H0 J- L& u9 s& }) S3 j
  429. , X  u, L% X4 ]4 Q. \; R) M' g
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)' \3 G3 P& p( ]$ h0 K. S
  431. {( F$ o5 q# J" S. _- \
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    1 b* \# s4 f4 G# r2 F0 o
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 m' f; S2 q0 z; }
  434.   {' B- ~) C* i4 J1 n  k; m
  435.     char szLanguage[50];
    " c) j' H8 N1 W# |
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 ?7 A9 w: t+ p0 O4 f1 g
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' ]' x4 d, \" p
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ J2 e) J# }5 w/ _& _6 d
  439.     else                                   m_iLanguage=ENGLISH;
    $ C6 ]2 g1 H9 u! [" u* t" s
  440.     char szRegister[100];
    & H. T; i2 Y2 b6 q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! C, R0 h( G9 T9 O6 y  p  u
  442.     strRegsName=szRegister;4 k, ^" f5 e/ M5 D, b
  443.     char szPatchURL[100];
    5 V4 \5 F& B4 [/ s  T- O( F1 ?4 E
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ X! X$ f6 A  P! u6 C; g8 w+ \
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / d2 Z1 \& C1 D# ]# T- b
  446.   }  O& \, _9 d# @1 ?* M+ P1 S0 G% Y
  447.   else( ~! y, d/ x0 P& p" A# I8 g9 K$ u
  448.   {
    . U6 O6 R& |( f/ l
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; P; ?( J& a& h* ^; I2 k
  450.     strRegsName=DEFAULT_REG_URL;
    % Y6 g- y+ w* [: C; f( @
  451.   }  m! V7 a# b, g" w1 Y
  452.   if(GetFileAttributes("hosts.ini")!=-1): V/ p: Y- T* `, I8 w* x' ?, J
  453.   {: I5 u, i4 l% M3 `. U
  454.     char szIP[50];
    % _, g8 N2 F" T) N. |* {/ w
  455.     char szDIR[300];2 b0 |6 G  h* ]7 I
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    : r! I9 F' w+ |% \& g0 \
  457.     {5 K5 A! Y" U4 M; T* I
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    . u5 e$ d5 ~3 P1 ?
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");4 d+ [& ^) E' _3 N# j' M& A4 u
  460.       strHostName=szIP;
      K/ U7 e$ e- P+ s  m4 q
  461.       strHostPath.Format("/%s",szDIR);6 f# H% R; I! T) U
  462.     }
    ) f$ l" H3 [( w9 N- R, f  P* N4 s
  463.     else* {3 D+ P* @. N3 r0 T/ d
  464.     {
    - J! t8 g( \/ g4 n) `$ N: Z- ?
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" t& j# u  s: q" e
  466.       {
    / w- n% p9 N4 Q* ], g1 m
  467.         char szLanguage[50];
    , D4 a( e7 ?) W! m1 I- f
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 U2 g/ e0 {$ y8 L  b
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 G# M6 z, d. ~8 {& J6 N
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- q: }- R2 }5 z8 H2 ]
  471.         else                                   m_iLanguage=ENGLISH;
    - Q6 c$ O. w- X. k. f4 c7 b. G* _
  472.         char szRegister[100];, E/ P/ _' D1 O( Q
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ M, W/ M9 s# G( L5 |0 [  @
  474.         strRegsName=szRegister;
    ! u8 p! o+ M0 p# A+ n+ X5 P2 E- ^
  475.         char szPatchURL[100];
    ) E$ p3 @" g' V$ G! x- f
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 P' C! m, H" ]5 W( L( e
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 b. N- t. b" y1 ?9 i6 `
  478.       }
    6 v& w( P- m* H7 _" Q, p
  479.       else& p, Q/ o+ L! Q. W/ E! @
  480.       {3 A* ^0 K2 V- O3 J! c; K8 {
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 T5 o% c5 o  k
  482.         strRegsName=DEFAULT_REG_URL;
    - [( n  M. U2 h( q& o
  483.       }, F: d. S) B7 `5 S6 p
  484.     }) P) l& ?" P: d6 F' L8 H& f
  485.   }" c1 b" g! R# }! \- t/ j
  486.   return true;! B, e" D8 b' f8 E' S, N/ \0 m- N
  487. }
    % _% w4 m6 p. T
  488. ; }3 U# h" p2 ^) x' M5 B  w% L
  489. #include ".\ZLib\unzip.h"
    ' O" P2 i9 ?" ~/ m* c2 z8 j
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ) ^( o! }! J# J7 }
  491. /////////////////////////////////////////////////////////////////////////////2 g: V' @9 j. a. b# O' U9 I- t
  492. // CRevAppApp initialization7 d, [" g# L& u" d
  493. 4 W: h$ x2 U9 j4 v. ~/ n- t
  494. BOOL CRevAppApp::InitInstance()
    % c1 e3 Y. M! l, v! e7 w0 f
  495. {
    " B' J! m  [+ S4 E
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    7 A) P' F0 S2 G- n5 b  _

  497. - R- t6 {  F" U( \, U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    , u2 s: Z" [; D' u1 R4 c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    5 ~/ g* @0 g( K- N, c/ s
  500.   {
    , a8 H% F5 Y  e; g$ z& J& u
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");' d) x$ n. Q2 K. z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! a3 |1 u+ @3 I, x! R( o2 f
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    5 t: ~! b) }. y$ C6 [& J
  504.     {4 L& d% \, m$ F" P
  505.       strcpy(szPath,szPathTarget);
    + N8 \% M$ ~3 k. X! h8 T/ B: `) |& q
  506.       SetCurrentDirectory(szPath);
    4 Q( v' C: U& X) c- K9 x
  507.     }  @! `" X! d# G5 n2 h
  508.   }: I7 b; u6 a* Y6 n
  509. #ifdef _DEBUG
    % s7 @; s1 D3 P3 r' x7 A
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). W" h8 q# o$ k7 l7 l
  511. #else
    & @% |( U' q$ m. _# x+ b  P- `# Z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 M1 z; Q* C: {2 B
  513. #endif
    4 Z3 |" w) T& q
  514.   {
    1 a6 ?5 x: E9 t6 W- B
  515.     char tempFileName[MAX_PATH];
    : }: L- k- c% t
  516.     strcpy(tempFileName,szPathSource);* q9 u6 o7 u% \3 E6 L* r$ ?
  517.     tempFileName[strlen(szPathSource)-12]=0;
    6 }& K6 g+ U+ [( ?3 n5 y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");7 Y, V/ Q) ?9 d" R( e
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);# B! I5 \7 G5 G, n1 |3 S  {
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    9 W( b& R0 c2 h9 o1 f: C" [
  521.     return TRUE;% a% |4 Q4 V" _3 e% M& S% ]* L2 h4 u
  522.   }
    ' e, P# b( \1 N: L7 N6 b- B- ?, w! r
  523.   // Nuke 0118: Delete run.exe: g  g, C$ o6 r* `3 V
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );  m! [! W0 j$ H/ G8 D* l8 A
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");% X! n6 t& d3 m& w* R
  526.   if(!ReadCfgFile("Config.ini"))
    . d/ E3 c! z5 T: H5 I9 G
  527.   {1 w$ `! g' O3 ]3 P( v5 W* y. F
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);. E$ B3 _9 Y: {4 [& ^  J: I
  529.     return TRUE;
    4 N  u9 l4 S# U% J
  530.   }5 I2 y2 d6 B/ }. P  h
  531.   HANDLE mutex;
    % r& _5 {. C" Z/ t
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))# B' s  u5 N/ G( @9 ~
  533.   {4 a1 g" t7 q% ^2 f
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)4 h( a- p3 E. ~# k: s- ^- q3 ~6 t
  535.     {
    , P+ j+ F. t% a" H2 t+ t
  536.       CloseHandle(mutex);
    7 T& d4 s, n) J, [4 z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    8 C; Y" E0 y4 k9 i  D% A. ?. F+ a
  538.       return TRUE;& M6 D% y, t' F& b0 d3 [
  539.     }
    9 x7 ~6 T6 d: o2 S- M
  540.   }  
    7 |& f) k, l3 ^6 h
  541.   CloseHandle(mutex);
      C+ t0 k/ K9 Y" B  \/ X

  542. + g7 A& Q. l- C% r) A: \+ D" q) s# I
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);8 ?  |7 K4 p0 n$ C$ O1 m, Y

  544. 1 R+ x( W/ N* B0 n+ u) D
  545.         AfxEnableControlContainer();' _! P2 {, y5 h' K. j" l7 M
  546. ' i+ p. [9 c3 r; C. f4 y, W" a( }
  547.   bCanUpdate=FALSE;) T. [& G6 f! E% f
  548.   dwStartUpSteps=1;
    ! L0 q# w& @: f8 o! M
  549.   dwProgramState=AP_NOTHING;
    2 L1 r1 A+ i7 p

  550. . b  V+ a2 S& C* [( j0 L
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    . G- {7 G3 U  Y9 P% m

  552. 2 y; Y3 \2 `, K5 F8 ~+ F
  553.         // Standard initialization: p: f# q5 p  N, J7 \0 V# m
  554.         // If you are not using these features and wish to reduce the size
    : Y" x. u/ X+ E0 `
  555.         //  of your final executable, you should remove from the following- {( Q: D! y/ l: T
  556.         //  the specific initialization routines you do not need./ u" c6 p, H, s8 H# l9 t

  557. : [6 ]+ B  L# \
  558. #ifdef _AFXDLL
    # x! y6 F, I- X# d
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL+ P# I* m( Y, G7 X* S
  560. #else4 p4 v, U1 d3 C/ Y, X' ^6 I/ b! H) t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    - H3 K( j+ M: ~, J. q
  562. #endif
    0 M. L6 Q; z) R  x

  563. , t# c! g5 \/ \0 Q; M  \$ B& [
  564.   dlg=new CRevAppDlg;3 G+ M0 s' \/ j$ F& d3 m* i
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ( U/ u/ x2 I& @
  566.   dlg->ShowWindow(SW_SHOWNORMAL);& P' E2 K- \( k: D1 r1 g
  567.   m_pMainWnd=dlg;( u, a0 F/ {- N3 D3 U6 N

  568. * @; c; B& b1 }/ @  B( f; c8 }
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 ~" W0 a/ Z- r5 Z" c1 a4 J3 e
  570. , r6 U. X  Y4 q; J; w: F4 J- r- L
  571. //  GdiplusStartupInput gdiplusStartupInput;
    5 W8 e+ l/ s, Y& M: N( R  F0 N! H
  572. //  ULONG_PTR gdiplusToken;
    , a# w$ l7 X* C4 L
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    3 p1 R, P0 K3 P

  574. 6 y5 ]6 j, E/ h+ R# Q/ ?2 s. Q) C3 |
  575. //        CRevAppDlg dlg;. l0 F, G. _2 P; {
  576. //        int nResponse = dlg.DoModal();. _+ o% X0 c( ^4 O* |9 E* ~, r
  577. //        if (nResponse == IDOK)  G0 x% v" t/ e* H0 X7 O, j
  578. //        {/ H7 t9 R3 I6 g  a
  579. //                // TODO: Place code here to handle when the dialog is
    % u& ^9 z1 M1 A8 u7 P
  580. //                //  dismissed with OK
    ' b" Z* _& D3 W! e$ P3 O
  581. //        }
    ; U4 w# c7 O% a' G
  582. //        else if (nResponse == IDCANCEL)
    , F( a$ F4 V6 Y
  583. //        {& T: ]) B: _1 s+ U7 O7 g
  584. //                // TODO: Place code here to handle when the dialog is
    + x8 i; P: V/ O
  585. //                //  dismissed with Cancel3 m' k8 S" G$ y. L. ?  D0 o5 g# P# z
  586. //        }
    # Y) b! U, m" ~/ l. G; [* D2 ?+ z5 k
  587. / F5 |' B$ l, F) J
  588.         // Since the dialog has been closed, return FALSE so that we exit the# T& ^2 \$ P. m: n2 O
  589.         //  application, rather than start the application's message pump.  O2 K$ o5 v5 U/ t7 D. o4 B
  590.         return TRUE;3 J* Y" T# f0 B0 u* s
  591. }9 }/ y$ o9 C$ C4 A, b9 ]* w

  592. % `+ Z9 M6 J1 ?6 U! x  a; T( U
  593. char *CRevAppApp::strtok3(char *pSource,char *token)8 R* n" K) \4 t/ a8 r+ B- z
  594. {$ V% u5 T5 v# I$ x
  595.   int i;7 Y% l' o7 f  _/ F: I
  596.   char *szRet;
    ' s3 Q, u8 N: `1 z; @
  597. " ^" m. s- |$ Y5 v
  598.   if(pSource) { itoken=0; sztoken=pSource; }; F1 O0 o! {9 Q$ |2 }6 e
  599.   if(sztoken)/ |5 Q) t& }; y. s, N  t
  600.   {
    9 M7 t2 i+ V: K. x1 ?
  601.     szRet=&sztoken[itoken];" A1 o  S8 V- N
  602.     while(sztoken[itoken])  D6 e2 W5 \1 R5 @: e. B
  603.     {/ ^0 G$ d" z' ~2 f; f) @% H
  604.       for(i=0;i<(int)strlen(token);i++)7 c+ u9 i5 d' B$ s" y8 B6 d5 h" p3 k' u. i' K
  605.       {- C) j' W( M, h6 v6 T
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    " i8 G6 Y) A: Z# \
  607.         {3 X0 y" n6 w/ o
  608.           sztoken[itoken++]=0;
    ! z, o. s( I( d. O
  609.           sztoken[itoken++]=0;+ m# T+ O6 f6 B: Z. ]4 g
  610.           return szRet;
    5 A8 L7 @5 @. F& P/ |
  611.         }/ U$ z- c" g& ]! p  N, m
  612.       }
      L; _1 o: R: P& d- N
  613.       itoken++;* @( D( z$ ^" ~1 i7 y2 {, z: y- P
  614.     }; }% u8 u6 L. F9 I
  615.   }+ i& S9 N" D* l7 K# K* I8 ^& g
  616.   return NULL;( i! I6 p4 n- j) z1 [
  617. }
    ! |4 F! u! y% M: p) p. i# j

  618.   u7 ^) U# L. {8 K. G; e: O
  619. void ProcessProc(long Total,long Current)
    0 l! `% c/ G6 z. a! S
  620. {( ?  N. t' E) k
  621.         MSG msg;# a8 `6 m% W0 Q4 R( y9 r/ ~
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
      @3 V5 i- x! d0 \
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));6 X& Y- A  Q# S0 `( [: p
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    % D$ q9 H# i) N) Y8 |
  625.         {8 K" R1 B3 R2 M. I( A& m
  626.                 if(!GetMessage(&msg,NULL,0,0))0 {8 j/ M* C3 @0 j& a) K7 z
  627.                 {$ \- o8 W) E6 |# X. Z
  628.                         return;
    9 J! P+ P, n" U7 T( G( C( T
  629.                 }: G" \2 U, n$ o- U: h) V% c
  630.                 TranslateMessage(&msg);
    ' n: ~% [5 q; t8 L, |" z! F$ i
  631.                 DispatchMessage(&msg);# `7 s3 V0 @% O% k7 @
  632.         }       
    / a; H: Z! Z( W+ \/ H* x& g7 w
  633. }8 d8 w  w1 ^+ u& v0 m
  634. 6 h- C6 K- g1 T5 U/ q$ @) s' `
  635. BOOL bFirstChar=TRUE;
    - A7 L: u' S/ O/ v3 |- E

  636. ' {$ R, P: C. N8 F0 B8 \
  637. BOOL CRevAppApp::OnIdle(LONG lCount): v/ d1 x" b8 @
  638. {
    1 J' E1 e* A* Y
  639.         // TODO: Add your specialized code here and/or call the base class* k) _: y, L/ ~
  640.   switch(dwProgramState)
    9 Y: q% W: G4 P( o. ]3 M! O% Y. T- a
  641.   {
    3 ?3 V$ Y$ w$ w9 R6 J: n
  642.   case AP_NOTHING:  \5 z* X3 w( A1 O/ V
  643.     switch(dwStartUpSteps)
      r3 ^3 \" ^3 A! c% |3 e
  644.     {% [, K/ ^$ a* G# W) K
  645.     case 1:) ]% S( u: A/ R; k; \/ O
  646.       {
    - M8 I8 e( n* E3 l9 R6 W! @/ L
  647.         int i;
    ) Y; `; d, y( a" M, u
  648.         CDC *pCDC=dlg->GetDC();
    ) N. W4 v( ]3 _* y3 e
  649.         HDC hdcwnd=pCDC->m_hDC;
    . T. v5 t8 k0 d' K; r
  650. //        Graphics graphics(hdcwnd);) K; l2 G$ u. L7 J
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");- G& F, m+ K1 y# w
  652. //        INT iWidth=bitmap.GetWidth();
    1 a- i8 n4 ^8 z6 p! l% {9 x
  653. //        INT iHeight=bitmap.GetHeight();
    ( N1 H! N+ E3 E/ ?; W$ l9 \& f5 a
  654. //        Color color,colorTemp;
    , m% k4 r6 ]8 ~. v; F7 h
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    % P( w# g* t% V' C
  656. //        {
    " W3 R( k! T5 V# d2 X" w
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)8 a. L4 F6 Y0 B% B
  658. //          {
    . `0 g/ [8 E0 E6 o3 c+ t
  659. //            bitmap.GetPixel(iColumn,iRow,&color);- a! w/ e4 r+ a* }7 F5 x9 y
  660. //            colorTemp.SetValue(color.MakeARGB(
    7 E: H: J( `! n* _7 o' a
  661. //              (BYTE)(255*iColumn/iWidth),) `! `3 j! X. A5 r) ~1 T6 ~1 ]
  662. //              color.GetRed(),- V8 y; }; m) B( H% U& U5 \
  663. //              color.GetGreen(),( c3 ~% O4 l; ?2 Z" I' k; u
  664. //              color.GetBlue()));
    9 f' c" x% F7 A1 B& n
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    9 S; d0 ?- V9 u
  666. //          }, j. l2 B0 q8 j' N' M
  667. //        }9 D, @) ?/ _8 Q" {, }
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);* L$ s" i- I9 ~
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 @$ Y% D( {7 @0 p
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    - Y6 v0 t3 y2 H
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, [: n' t5 j. H
  672.         for(i=0;i<240;i+=8)
    6 S: i; [  O4 A
  673.         {/ O1 @0 G8 M$ h
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 Q' f" Z* t0 Y1 u4 j, Y2 n0 c
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% m8 M- W7 {/ k+ L
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 S; l7 K2 ?( ]0 K5 j1 m
  677.           Sleep(33);
    + ?4 l5 Q9 z& W6 y
  678.         }
    8 @6 g$ [- {2 C. \: {: k4 A
  679.         Sleep(1000);* @1 T4 N+ P4 O6 T5 k; F) Y
  680.         for(i=240;i>0;i-=8)* G8 U3 U- r5 M0 S
  681.         {
    : K& _; m# I1 F* \9 m2 N' C
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 ^) t  g6 Q2 ?3 V$ K/ n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 z; R3 p1 C' {& Z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  l7 A: o% L2 h! N  `4 ?; A
  685.           Sleep(33);, i4 L$ ~8 {+ ~: e: N
  686.         }
    ! k* _1 K7 V& S4 O; F& r- u7 D9 M
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);2 n7 M2 _6 N* v4 n
  688.         dlg->ReleaseDC(pCDC);- P3 r) ~3 Y6 o2 E( g- j; C
  689.         DeleteDC(hdctar);
    4 P* `1 _+ g$ [: A. s% e, ~5 J: U9 X
  690.         DeleteDC(hdcsrc);5 ]- [, D; E! j
  691.         DeleteDC(hdcorg);
    4 W+ A7 m0 o/ k1 U
  692.       }
    / P+ w- N/ M* E# }0 A
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);' f$ c6 ~5 v5 D9 I9 Y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");) s0 T& x) W  a; P
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    * q: K# w! a+ e( g" z/ Z; @. p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( `% O7 k2 S6 n5 @8 J+ J
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ p/ k, K' n) T, }: N5 `
  698.       if(!Dn.Connected())
    - W( X7 @7 L4 g! y
  699.       {6 G! P- K' s6 Q& a
  700.         dwTotalFiles=1;8 f2 g. h( P. p/ U9 @. `# V% }- A
  701.         dwDownLoaded=0;
    & ?) K% ~+ a7 ]; K, o  m
  702.         bSilentStep=TRUE;5 Z( ?4 K+ C0 z, a2 h/ K' a: a7 s
  703.         bCompressed=FALSE;  j+ f) A3 H1 D/ e. F2 u
  704.         strExtLocal.Empty();4 O( ?; w* f7 L6 W: j7 v+ P
  705.         strFullName="readme.txt";
    / Z% A7 k( W6 m! w& i, s4 L/ c
  706.         dwProgramState=AP_CONNECT;' d; y8 K" y* l
  707.       }8 Q) u0 v5 g$ E- P4 F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();4 v9 f( P) c* @: `- V7 @$ W* J
  709.       dwStartUpSteps=2;" z/ {6 |( |/ R
  710.       break;0 ?" U4 f. |$ t" w& k7 y
  711.     case 2:4 V- q; `4 f/ E# `
  712.       {
    . B' m! V7 p) }
  713.         int iEOF;% L& _+ g: O7 s/ l% T0 V& S
  714.         FILE *fp;
    8 o: m5 J% Q/ g* m6 {/ u' E6 R; _
  715.         char szString[512];! [) d3 v$ ?8 J0 R9 c' A
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");0 m* f: W" n* [& U$ O
  717.         if(fp), L: \( _5 ]4 o- n
  718.         {
    8 }5 v7 ^8 }: T/ S0 J/ c
  719.           do) ~3 h" @8 X5 `: L4 y
  720.           {' C7 D7 d- ~$ X4 a) z  y
  721.             iEOF=fscanf(fp,"%s",szString);. Y. e* p) ~4 u4 u$ n. c2 d+ R
  722.             if(strlen(szString))' g9 J- j! k6 \' {; o
  723.             {
    5 H9 \* I  E& l* J- \: X- f
  724.               if(bFirstChar)
    " d/ D+ I7 ?+ b* q
  725.               {
    9 _5 U- ]) {% z, k1 c$ F( }
  726.                 bFirstChar=FALSE;. ^2 h% B: }1 F2 L; E
  727.                 bConnectIsBig5=FALSE;" P/ C: Q: L" J" {
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;& ?9 ~1 z' C' {, V. n
  729.               }; I' A1 B% r1 q6 f# I
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    0 f8 @9 x. h7 D
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));; D& _' Z# F( K) [1 W9 t
  732.               dlg->m_ListText.AddString(szString);
    3 a5 q8 n2 f+ K9 w# g( z
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - q2 u7 n0 P2 |- \/ U) ]5 w
  734.               *szString=0;5 \" K# E2 k1 k
  735.             }0 @% _5 o5 W  ~- J9 q
  736.           } while(iEOF!=EOF);. n8 \' T3 ~# T# d7 P7 a( d
  737.           fclose(fp);# ^9 S; L3 X( n0 {8 k; n' e8 J  m5 R
  738.           unlink(".\\DownLoad\\readme.txt");- S2 T# }, L, r4 i
  739.           dwStartUpSteps=3;
    $ ?5 |0 v: b6 y5 K
  740.         }
    8 B: C  x" y9 x  o
  741.       }
    ! T. {6 H+ C. W- Z. g: R' j8 u: h# y
  742.       break;/ y5 l  F/ r9 A0 h
  743.     case 3:
    + J8 I4 A9 L* R" o2 A, t4 g
  744.       if(!Dn.Connected()): ^6 R: C# u" S1 i4 Y% N
  745.       {
    , @/ T8 I6 k0 ?% J
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    6 M3 @& J* N* X0 t" t
  747.         dwTotalFiles=1;
    4 r0 m6 t1 y+ f, ]
  748.         dwDownLoaded=0;
    ' w4 e, R0 x* _3 `7 {- i
  749.         bSilentStep=TRUE;
    3 J, E% F# d- P) r; Q0 Z
  750.         bCompressed=FALSE;/ w% ~, @* k0 Y' [+ w/ l1 Q0 v
  751.         strExtLocal.Empty();
    # X2 \/ F: a! N4 E+ C* Z: b+ `
  752.         strFullName="checkversion.txt";
    ) v9 Q9 I# \& Z1 Q  H
  753.         dwProgramState=AP_CONNECT;0 j. ?" {$ j, l+ P
  754.       }
    % W* d% F  j; A& W# z2 k' n
  755.       dwStartUpSteps=4;
    ) u2 ]0 C+ q" r' t0 }
  756.       break;0 m/ {0 X! S& r2 a! h$ N' B, Q# b: k
  757.     case 4:  }1 J+ j7 c+ q/ n1 |
  758.       {
    ' g& ^5 a0 i1 b& u& S' d& Z, t4 n
  759.         FILE *fp;8 `7 T9 W: {# K6 J
  760.         char szString1[128];+ @% x2 m5 F2 m: v/ O0 E/ l. z
  761.         char szString2[128];9 e; y7 ^4 ?. s% h
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' x2 C0 b( z$ `& x
  763.         if(fp)
    ( n! w. ?. @1 z) i
  764.         {' b! _2 w7 _& A
  765.           fscanf(fp,"%s",szString1);5 W) S4 j% A* g! a! d+ x
  766.           fclose(fp);
    , J7 R( B+ |2 q0 @+ n
  767.           fCheckVersion=atof(szString1);- w. m6 t9 B% `1 @' a
  768.           fp=fopen(".\\checkversion.dat","r");
    9 Z3 V$ x/ Q* x7 @! n; ~( L" Y
  769.           if(fp)
    ! h3 ^" @. J8 y" s
  770.           {0 [* S& o3 f1 `; T3 f2 N" e7 t
  771.             fscanf(fp,"%s",szString2);
    ' B6 h" }9 {! O& g; V$ n3 ]) b
  772.             fclose(fp);( I- K& G& S# F! I( H$ S
  773.             if(atof(szString1)!=atof(szString2))
    2 f, R% `' l* n: ^! s1 n# J# N. O
  774.             {& r2 o- a) @) [" @( f' R
  775.               if(!Dn.Connected())
    / a0 C6 z3 X+ f9 w1 a9 f! \3 W
  776.               {& E6 i0 j2 a. A% H
  777.                 bFirstUpdate=TRUE;
    + k- k4 j1 a6 G1 S' F0 @, g4 W
  778.                 dwTotalFiles=1;. e6 i/ Q; k, `0 `
  779.                 dwDownLoaded=0;  _# L* y4 H0 c: K! i6 U
  780.                 bSilentStep=FALSE;
    ! E- f. X) W) u6 R1 z% x
  781.                 bCompressed=TRUE;
    & c" B& E/ }2 ?7 q6 z+ a
  782.                 strExtLocal=".\\DownLoad\";
    6 `9 I' u; J+ `$ I7 B+ y* n5 p! s8 K
  783.                 strFullName="update.txt";2 M3 G( E( d7 c' E: Y! g
  784.                 dwProgramState=AP_CONNECT;6 I6 t* m% y5 y/ z0 j4 Z7 o
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( ^8 g, N: \/ o; L& O7 |: W
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, k) `2 y9 C4 H) {0 \7 r
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
      N  ]  R1 F/ P1 E, O" x& |
  788. 4 S9 X8 u  R1 `
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , ?7 `0 v7 N6 h3 S& J& c4 R% J8 Q
  790.                 unlink(".\\DownLoad\\checkversion.txt");5 ^9 Q6 A! |" s1 ~, j! M7 T( f
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ) \' `7 g4 x/ U- [9 P/ D2 r( i
  792.                 {% O9 p% x- {# E& I1 j
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");) D  j$ q. t$ ^, N# F$ ]
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    / r' ]' U# s! N5 |7 I/ t
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");+ H& {- x9 B' t, s
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * `+ \% J9 O+ R5 V+ m" S
  797. * u, x6 V" j" {1 s1 y
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) r2 H$ @* U6 e2 ]  O  X2 ^
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 U4 k6 ]3 K! ~& q0 b2 F
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! n$ m+ N: j& y% T
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      D7 b% c0 w8 X9 v7 L: j# x
  802.                 }2 T' u/ R& h0 p. |
  803.                 dwStartUpSteps=5;
    % U9 K' Z5 j3 r
  804.               }
    $ X& v- P' E8 l+ i4 y$ Y
  805.             }" N7 ~" }9 q0 H! ?5 b# b
  806.             else
    3 O: q0 W- J% l, z) h$ U4 `
  807.             {
    . k- `5 p  t) c7 F) l) i: C5 ]# y
  808.               unlink(".\\DownLoad\\checkversion.txt");" K( Y( P- n+ G
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");' L9 F1 E- r4 d7 c+ H8 b5 @/ e
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 i% |: u$ K( o0 G  t0 b/ Z; V
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    & H0 ]% p  B( K. U% U9 _) s
  812. . N) v% f1 `* k. W
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% O' j% R( i7 T- g! I9 S
  814.               dwStartUpSteps=99;
    0 n4 b6 g  O) V* y5 z, Z# I  x! O0 v
  815.               bFinishUpdated=TRUE;# D1 L/ S# K1 f. V" n0 ~
  816.               bCanUpdate=TRUE;) O: h  _: ~* _( V2 Q+ J& p
  817.             }
    # D& u' n8 \0 O; @, ?7 f
  818.           }6 _/ J+ ?1 R7 L3 K% [' G
  819.           else
    & n+ d5 X+ p& s5 v( l- ]6 n
  820.           {- g! ^& ]+ K0 _. h9 C" v
  821.             if(!Dn.Connected())4 ]! M" \* h: S
  822.             {
    & Q* D7 g8 w5 ]5 B
  823.               bFirstUpdate=TRUE;3 `8 a1 o& U1 B; K3 `6 M8 k# h
  824.               dwTotalFiles=1;
    % N1 _: `7 ~& C9 W% ^) ~& g) B
  825.               dwDownLoaded=0;
    2 D: h) O5 J1 h+ D- w
  826.               bSilentStep=FALSE;
    8 k; S; O* m: h9 w* A
  827.               bCompressed=TRUE;0 z; L; _8 G; B% J
  828.               strExtLocal=".\\DownLoad\";6 a* X8 H% l$ ~* i; j9 c
  829.               strFullName="update.txt";& z& f# _! A0 N% X5 R
  830.               dwProgramState=AP_CONNECT;
    , z9 H, l& M+ f! o6 C8 s6 \6 v+ m  O
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 ~# V. a8 M) E. ^
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - g  j0 B8 M  {0 [' p1 h" ~
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");$ j: l8 I8 I2 u. }7 d8 o# ~- H
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) a' C  v4 W5 f- T: m, @0 x6 A
  835.               unlink(".\\DownLoad\\checkversion.txt");- w- {7 S( O  I! ~1 [
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)5 k# l7 {) G* S& V2 T- C0 |
  837.               {
    ) j  G5 O$ v8 \. J! _/ \
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    9 \' o# r. ^! S$ p0 p* V
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    $ w, L( O# x# W& v1 ^: K0 ?
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");% ^; R* ~1 I! x
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 j' b% r4 k0 R$ c
  842.                 6 K8 C$ ^! s: f% K
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , I3 p9 Q3 B8 L& r7 W- y' L" W0 Y
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    8 K; |( S" L; x, W0 G
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 m, z; ^: r% [" {' {, v6 H) h
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, c9 W; t5 @  i  p4 F2 J! ~* N
  847.               }' N3 f) a5 S- _( ]
  848.               dwStartUpSteps=5;
    % J! T7 P! J- J# A' l3 y7 p
  849.             }
    6 F4 U% M# h; J
  850.           }" f- C- K$ ~# P8 F- ]4 N
  851.         }- X& a! l) c+ m+ z( k
  852.         else
    2 j1 y/ T0 @+ c: G+ J0 x4 f
  853.         {
    " P- `0 f1 v& {5 o' P
  854.           dwStartUpSteps=3;8 `0 L; A" S) f. i8 o7 B) v
  855.         }5 R# j& H3 h+ A) ]" O7 h
  856.       }5 e1 R& u- D+ r. n% m' T
  857.       break;8 }) E" n: T# R
  858.     case 5:5 c- \7 J5 R8 A8 p  m
  859.       {. h2 a, q2 d1 y1 s; M+ `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& j: \, r3 r$ \( V8 j
  861.         {
    % [7 |& G  |+ o- _) \
  862.           int opt_overwrite=1;* ]1 c( l+ o# ~$ s/ O. g' e6 B
  863.           int opt_do_extract_withoutpath=0;
    : L" z7 o3 ^& g9 y) X0 D
  864.           unzFile uf=NULL;5 f' z! `2 W7 k+ p+ E

  865. ) w0 q  @9 O" D- k% s
  866.           uf=unzOpen("Wsa.zip");2 ?  l7 ^% a: `$ A" G3 u" L
  867.           if(uf)( J8 M$ G/ o$ a6 K: W
  868.           {' S5 `) X' [( h: c
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    7 @  n6 i0 ]# k' @; S) L. }
  870.             unzClose(uf);
    . o$ u% m# |- c
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    4 Q. L; o/ ^0 ~8 p& T! |4 h
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    4 e1 O$ y- G" l+ D; ~
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");* F! s, \" i, X- l* _% W4 C
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 x, [7 X# s: E8 e' m6 q  I
  875.           }; I% Z7 F2 V9 J: t/ j7 G8 M8 X
  876.           DeleteFile("Wsa.zip" );
    - `! ~6 G/ S' @. U& j
  877.         }
      g2 [- s5 [! i6 Z9 A3 B* I

  878. $ g% h, {1 r8 U, m/ Z
  879.         if(CheckLocalVersion())0 u, d4 t0 y7 b6 N+ P- m
  880.         {
    ( `' u- e3 U! H
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");) Z. m1 Q: Z; D& x6 F' l/ f
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");: ~. u, B: t+ S" ^& |
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");6 e1 q' u" X8 d8 D& J' K& W
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      y" K" ^+ Z" v! C
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    6 p1 I) @5 Y5 O! m
  886.           dwStartUpSteps=99;6 N3 V$ h6 B8 p0 M
  887.         }
    / t% G, @; r- R) G9 Y5 t: e
  888.         else- }. ~2 r3 O( s% \/ a& t1 a
  889.         {" m$ _) h9 m- w: K) l) R5 s
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    7 R5 j  c! h4 d% s5 d7 _
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. Q6 j9 I! q9 F0 o$ W! @0 z% |# a4 _
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 {! b; u# J- e

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

4 t1 W( X- R# `
3 v0 E% i/ J8 F

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-4 02:18

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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