CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
' n3 {+ Z# ~1 z5 E. G/ r
  1. / RevApp.cpp : Defines the class behaviors for the application.
    6 b/ {( n' S" m: j5 c- O
  2. //( U+ `: }7 t6 n3 u8 o, s. d

  3. 6 ?$ @* N$ q$ D: T) H0 D, X
  4. #include "stdafx.h"  ]% q1 b- `+ u# b7 O" Y& U1 [' _

  5.   ^1 r4 G6 h: }* m- ]
  6. //#define UNICODE
    ; A' Q  ?0 h, g- x4 @% a2 a
  7. //#include <gdiplus.h>3 e) F3 n2 z( C
  8. //using namespace Gdiplus;
    % l: f* b: ]& T/ r

  9. 5 c3 {7 U& t3 j; c1 _
  10. #include "RevApp.h"4 V9 R4 Z3 [) }+ J' L# F
  11. #include "RevAppDlg.h"/ f( }! N6 T! y! m

  12. 5 Z5 l9 T  a# S; f
  13. #pragma warning(disable:4786)
    8 I: C# i: d4 l$ e$ {! e' h
  14. #include <map>
    ) p; d& }* o, }  N( }0 d- Y! a
  15. #include <list>
    - t% {4 ~0 E9 u8 R
  16. #include <direct.h>
    ' o0 w' D. H8 C  K$ B# B' Y" e

  17. + o: T$ f! q* ?+ r; [' ~* m* O
  18. #ifdef _DEBUG
    3 l6 j2 h! W* [
  19. #define new DEBUG_NEW
    9 }0 X, o. P0 ]0 B) y. R# V# Q& }
  20. #undef THIS_FILE* }( l' \; r9 e
  21. static char THIS_FILE[] = __FILE__;
    # ]2 o. d. }* \
  22. #endif
      T0 O6 A  A  V* H) c& ^+ z
  23. #include "SkinResDef.h"
    # h8 w8 i2 g" ?6 C; f
  24. #include "ChangeBG.h"
      K: W* P2 u! ]/ l& j  u! Z
  25. #include "AFXINET.H"" O5 c- B! m' E2 H4 U2 g
  26. , v' }* N$ K& L' k/ O" |: I
  27. #define TRADITIONAL_CHINESE 0! G( _8 V3 ^2 f+ O2 F
  28. #define SIMPLIFY_CHINESE 1
    6 ^1 ^" l! p$ [- Y+ W) u8 Z
  29. #define ENGLISH 2
    * Q4 A# S9 ]8 K3 c1 [
  30. int m_iLanguage = ENGLISH;& `# Y: Q/ G7 b, ?" ?; [( M& q# t
  31. /////////////////////////////////////////////////////////////////////////////; l% G, A1 A# u; {) t' t- s3 [0 v
  32. // CRevAppApp. Z+ b" [" v7 ?( M
  33. 7 t' s3 _1 k$ T1 V7 @+ U& o, W
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp): f! j( M, E9 {5 c# h8 Z
  35.         //{{AFX_MSG_MAP(CRevAppApp)1 r# r7 S, F. e. Y
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    1 i, X# c4 N  H$ q% O3 g3 @/ b
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!* x- o( }/ R/ Z) }9 t, u+ g; K2 f. x
  38.         //}}AFX_MSG5 b# e+ W- i% m+ U6 @* |; w! A' L
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . t: S: X8 ?) U2 K/ Z2 x
  40. END_MESSAGE_MAP()/ P8 I; J8 V( i1 V. i2 [0 L5 S, Q
  41. 3 p$ i5 _+ l3 m9 ^/ h
  42. /////////////////////////////////////////////////////////////////////////////% d$ o0 \3 K/ @1 C7 x8 @1 C4 s
  43. // CRevAppApp construction/ i6 M) }" x# G: N6 C
  44. / G5 K2 _# A6 Q
  45. CRevAppApp::CRevAppApp()
    $ N& }4 I1 N9 g# B% M. D1 ~% f
  46. {
    . N" g5 }5 J- O0 f/ F8 T0 ^
  47.         // TODO: add construction code here,8 K' B) G* J6 g  z$ G2 \5 [
  48.         // Place all significant initialization in InitInstance
    5 t! h+ P5 q2 I6 L
  49.   bDisplayIsBig5=FALSE;% i% S! w7 i  V" d* q) a# `4 o
  50.   bRestartUpdater=FALSE;! i# C: S- E& x2 e# ?2 {
  51.   bFinishUpdated=FALSE;# y- G3 @" _- Y% ?
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ) K; l# R. `3 M+ b
  53.   InitChangeDataBig52GBKS();! Y- B1 P, T# U" u" j
  54.   InitChangeDataGBKS2Big5();6 Q8 D" q# k  ]; k
  55.         //
    : y! T8 ?* Q$ F2 G$ x
  56.         bClickRunExe = FALSE;
    . H$ Z" T  \5 r9 Z
  57.         //
    2 }' _. y# X$ I1 C
  58. }
    5 L; L" v2 b6 ^& F5 s' C' y% k5 g2 |
  59. . a, E3 \/ }) e7 G$ K9 I# G% L
  60. CRevAppApp::~CRevAppApp()
    ) D( ^$ o# V' W- S5 ~& Y) N, b3 J
  61. {$ |  z1 Q3 m5 O% [- s, `* P
  62.         // TODO: add construction code here,
    : ]5 j+ r1 t8 h! F& e$ k4 h* U; ]0 R. e
  63.         // Place all significant initialization in InitInstance
    4 ?, B. T, W1 T- D; }" ^
  64.   EndChangeData();$ u: {4 L6 T9 ~5 g0 E0 w8 t
  65. }  l0 Z( @0 S4 g) x, T

  66. $ \; {+ o. k+ K- q/ s7 o; E  r
  67. /////////////////////////////////////////////////////////////////////////////
    9 Q; e' b+ z3 M% c) X9 G2 }
  68. // The one and only CRevAppApp object
    , m. t% X' G/ q, H
  69. . M2 {; \8 b. J* \, W! Y* ]
  70. CRevAppApp theApp;! g4 }. S' u& Y

  71. # U( W- `' ~5 c9 e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)- ^; ?  R; V" j0 o# G2 P/ e+ M* s
  73. {
    % d" |  q. @  ]: i6 P
  74.   int iEOF=0;3 i, S' l2 ~, C; D% G4 h% a4 Y& l
  75.   char szTempName[MAX_PATH];
    ) R. v7 B3 a( Z- v
  76.   *szFileName=0;
    " B/ P+ z% ^+ s
  77.   iEOF=fscanf(fp,"%s",szTempName);) p6 m9 X: X2 t+ h
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    4 a0 N( x1 w$ I. F) H
  79.   {0 s8 m: Y' U; \9 e6 j
  80.     strcpy(szFileName,&szTempName[1]);4 H: K, s3 ^* |* C) @8 a# {" |5 {
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF). z. _/ }! E' t- B
  82.     {5 o  G) \* T7 E; l
  83.       iEOF=fscanf(fp,"%s",szTempName);: d5 E9 E1 v5 H9 k; z. P: l
  84.       strcat(szFileName," ");& x7 }9 B* [! K" B! ]  T
  85.       strcat(szFileName,szTempName);
    6 N4 J; ]  w0 e
  86.     }8 w% a5 m" a- o% Z6 P2 r
  87.     if(strlen(szFileName)>=1)7 X4 h2 t! G* X- l
  88.     {
      ^7 K0 F7 A" |5 ^: d$ J
  89.       szFileName[strlen(szFileName)-1]=0;8 {1 `2 N* O! b1 i
  90.     }+ g8 N3 N% f$ I1 Z" t8 _$ j& w  b
  91.   }  D5 D2 I1 N, N4 i( w# O4 O
  92.   return szFileName;
    . G5 _$ c) y. P2 z
  93. }" [7 m& H& a/ Q& W' ~
  94. + Y& r, J/ ]) g
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile). f% L" e: h: e9 Z3 D% E
  96. {# o4 d% s1 E9 r+ m. \6 |4 p
  97.   FILE *fp;
    4 p# B8 T8 H6 t) Y8 ^
  98.   char *key=NULL;
    . q% X9 }; ~' Y) c) W( l% O
  99.   char version[MAX_PATH];
    ) [% W/ l- [6 n0 I2 O' y7 _: ~
  100.   LPUPDATEFILE file,olds;8 u" y" h) ]& U3 Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( F: x# c' e! O+ X! Q1 `

  102. 7 X6 `. Y% ?5 R; r' Y$ w. M
  103.   UpdateList.clear();0 Y) Z- ~- ]5 w$ {
  104.   UpdateFile.clear();
    1 I% W* D, r3 P6 J; X3 f- ]. Z4 c
  105.   if(GetFileAttributes(filename)==-1) return false;
    % d( u- ?) W/ `8 ]2 {
  106.   if(!(fp=fopen(filename,"r"))) return false;6 [. P8 _% W; T
  107.   fscanf(fp,"%s",version);
    " e" q! V. e" ~$ E" |
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }# y% H2 d0 |, b6 o" v. Z/ o6 ?' ?: u
  109.   while(fscanf(fp,"%s",version)!=EOF)# ?3 }" `9 }, X5 @# U; R
  110.   {
    7 q( o( \2 g" A* T4 i& {+ k
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . G3 ^  _/ X: x# ^! {
  112.     fscanf(fp,"%s",file->path);
    6 M1 P5 q% l9 P& y% m- w' Z9 R3 K
  113.     ReadFileNames(fp,file->file);# s7 |$ {4 z8 d! J- |, k
  114.     strcpy(file->full,".");1 j, Z' e! S5 a
  115.     strcat(file->full,file->path);
    . @6 q  ]6 I" \; Z1 x% d& f$ B" `
  116.     strcat(file->full,file->file);! ^* B3 g% D! v6 x" v* l
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ( A' _  s' u+ l6 `# X5 l& G
  118.     {" [9 J" |3 u* P( l' N) g/ ^
  119.       file->vers=(float)atof(version);7 m3 m& X" U2 n( B1 ^$ P, L5 Y
  120.       UpdateList.push_back(file->full);
    # A  b6 Z7 v7 U+ N
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ' ?( n9 a! K* \' d
  122.     }
    + O% G6 Z" y8 p- w6 R4 L/ a& N& b- o
  123.     else
      g2 I  ]( q3 D$ j* K- `2 M( n& [
  124.     {) R1 t/ F5 a8 q0 T+ f
  125.       olds=(*p).second;
    - k% I4 A/ c. ^3 f) f/ w( m
  126.       if(olds->vers<(float)atof(version))
    9 u+ h6 @& D5 Y+ |" I
  127.       {
    $ x, R: U5 b- n$ A  L. Y0 x. @
  128.         olds->vers=(float)atof(version);
    ) E# C9 ~  F3 p
  129.       }9 G5 B: J( n# H& i
  130.       free(file);! O: r7 ?2 z, B6 y" m) a
  131.     }: N) ]) t8 u+ n0 G4 h$ Q
  132.   }/ ?5 j9 w, d5 n
  133.   fclose(fp);8 q  W6 t2 E/ g8 m, G
  134.   return true;
    * g; J- y9 ~) A2 @2 L$ R5 K/ U
  135. }0 ?1 h" G( o$ S1 M  \9 L) i
  136. : Q$ E) `: Q4 L+ I2 \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)* U; E4 R) @3 z! m: _6 X4 J
  138. {. b$ w5 b0 }: c/ Q! m
  139.   TCHAR  szFull[MAX_PATH];. F" I% ^: ?) J. r3 g+ H" [
  140.   TCHAR *token,*inter;
    ( g! J2 k  b/ H/ O/ i
  141.   *szPath=0;+ W& {$ {4 z" O! W
  142.   strcpy(szFull,szFullPath);+ l- M3 ^! z% N5 m8 a
  143.   token=strtok(szFull,"\\/");
    9 C5 E2 F# X$ N
  144.   inter=token;
    $ {4 s8 X( ~5 B0 U7 [$ D! h6 k
  145.   while(token=strtok(NULL,"\\/"))
    + d5 _2 c$ {9 g8 j
  146.   {4 F4 m6 S: ?  w& R
  147.     strcat(szPath,inter);
    ! c& ]! @8 ~# d5 b9 n3 S  Z- i
  148.     strcat(szPath,"\");
    1 u' j7 t5 B% L$ v0 z8 W
  149.     inter=token;
    6 s: ~& Y( P* z
  150.   }
    $ e; }* X$ j7 @2 d7 G8 m! r
  151.   return strlen(szPath);
      L# E2 t2 ]8 [
  152. }
    / b, i4 ~" p1 C+ l" z8 }9 l: V. R
  153. + J0 z" X% G% Q* }6 l! m5 `
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ! Q: T* E& w" r6 A) o) G
  155. {8 O5 s9 R+ ^" D+ P
  156.   DWORD attrib=GetFileAttributes(Target);6 v5 Q3 \& e" M) V2 Z7 g1 P  G% d
  157.   if(attrib!=-1)) q+ n3 x* o# G$ r) n% k9 A- ]9 A, y
  158.   {
    ( {% T! n9 k: b5 S/ m
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    0 u2 F1 t% n9 i+ A  j! R
  160.     {" T8 e9 B: \9 E1 b' t
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    7 W  g3 i/ P" c7 V7 i
  162.       SetFileAttributes(Target,attrib);8 [2 S2 ~% F9 w' j
  163.     }
    1 i" ~/ ^1 M0 \4 j/ ?* J
  164.   }1 |1 @; x" U2 f5 t5 A
  165.   CopyFile(Source,Target,Erase);  n' Y$ P2 K. z- c( Y2 {
  166. }
    9 I9 y& W# T4 T' H
  167. 4 k$ q' _9 W4 _2 P4 l9 R% S$ H$ p
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); _! C2 {1 `, A# F* O
  169. {
    " t' s, e2 U& n0 ^/ b/ e- o
  170.      FILE *fp;
    / b  c- I4 n: M2 p) d3 }
  171.      char  szBuffer[8192];
    2 S+ T4 A( c5 {
  172.   va_list  argptr;" P# c! i4 D6 g5 g

  173. ) w- l: C6 I2 F/ }( i( J
  174.         va_start(argptr,message);
    , c, |! T( w7 j- ~. s
  175.         vsprintf(szBuffer,message,argptr);+ P: `' ~% t% g
  176.         va_end(argptr);
    ; q5 a$ {% f" ^# H! F  C/ q
  177.   fp=fopen(FileName,"a");6 @3 `) H% g5 ]0 e, I6 w9 m
  178.   if(fp)+ R: h; A  f& f. g! B
  179.   {
    8 U" b% p3 c$ z$ e7 H
  180.     fprintf(fp,szBuffer);
    , @+ A2 k; a6 G5 ]) u% A
  181.     fclose(fp);  {" Z8 `9 ~4 f
  182.           _flushall();
    6 }& g; \. l2 w# c
  183.   }  y( v0 F4 }$ O
  184. }+ Z$ ^  O! A; K7 H

  185. ; |; T' w  N( M/ W
  186. BOOL CRevAppApp::Fclearf(char *FileName)8 I; k8 w! k! N: ~( S9 Y
  187. {; r; X, @1 E8 z! @& k: w
  188.      FILE *fp;
    6 T0 S8 B  G+ `& W
  189.     DWORD  attrib;  W' W0 c6 t' L9 ?3 Z9 c
  190.   attrib=GetFileAttributes(FileName);4 V' [" m$ Z) l" @# Z
  191.   if(attrib!=-1)+ Z- B3 t6 c! m& ^9 z) |5 u, Q
  192.   {
    * L3 c  q- `. n. g
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    & L4 J' J/ _' P$ [" @' K7 d( y; ]
  194.     if(!SetFileAttributes(FileName,attrib))
    ; i" i; V- K$ u% ~+ p" @
  195.     {
    % w8 H8 L7 E6 ]' R
  196.       return FALSE;8 y# x, t; b3 Y/ _3 j
  197.     }; m6 Y" K' H4 w9 j7 R7 x, a
  198.   }
    ( ?  F" |+ I/ K2 m
  199.   fp=fopen(FileName,"wb");( c1 f4 h- e; c* \/ q; j
  200.   if(fp)7 r7 U3 x7 v3 v
  201.   {, B( ^) _$ q; P! _) k4 x5 H
  202.     fclose(fp);
    5 W+ n- T4 H1 J' r3 ?/ P7 ~
  203.   }
    ) x' ]* g0 o9 S9 W$ Y
  204.   return TRUE;
    # C4 G8 y  L  y
  205. }
    ; w+ ]; K! }  N4 `( R

  206. ' O" S* b- X$ c* w' c' k$ Q4 _+ h& {
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    , T- S/ Q0 C& P- I2 G
  208. {; P- G3 M4 o0 S. D
  209.   char filename[MAX_PATH];
    & f* r3 y+ `5 B) p
  210.   LPUPDATEFILE file,olds;
    ( |- Q: T% P2 j0 [7 d
  211.   std::map<int,CString>::iterator i;$ @0 j  h6 J" V! u7 h5 \' w
  212.   std::map<CString,LPUPDATEFILE>::iterator p;* `2 [) ?$ h2 {6 K- }. v
  213.   std::list<CString>::iterator l;
    , X9 \9 O7 x* F+ O! Z3 O

  214. & t3 k8 n3 I+ z) @+ e' ~; H
  215.   if(bFirstUpdate)
    9 o; x7 l! Z1 b' w7 }: l
  216.   {
    , |% b: a/ Y- `8 B' s* }
  217.     dwCurrFile=0;
    ) @0 N& c8 C' t1 f$ F
  218.     bFirstUpdate=FALSE;# M6 X$ `) h8 D, w
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 R: ], |, X# X) h7 I8 C" v$ k
  220.     {
    . x$ }. G2 {/ l6 M
  221.       dwTotalFiles=UpdateLocal.size();
    # x4 q/ g& q, V
  222.       dwDownLoaded=0;) @, h$ ~$ v4 T6 ?4 R
  223.       bSilentStep=FALSE;
    4 _, G8 e" S1 i4 o+ Z  y! n6 [
  224.       bCompressed=TRUE;; \2 u# A" y; p, M0 a6 q
  225.       strExtLocal.Empty();6 l* i3 u6 s1 A1 I4 Z1 t0 l  W
  226.       strFullName=(*i).second;
    " J8 G8 s2 T, M$ b. d  i# J
  227.       dwProgramState=AP_CONNECT;7 z- c3 x: w8 Y% Q, d
  228.       return TRUE;7 D. x1 ]: T+ ]7 Z* j
  229.     }
    0 m6 v, S5 v; y
  230.   }; {* A% ?5 v  e' R- {
  231.   else if(bRestartUpdater==FALSE)
    ( s8 X/ a1 [/ z
  232.   {
    9 c, |# U2 `7 G- i0 S$ N) Y; K7 D
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())3 F9 O! z3 A% x! ~
  234.     {
    2 C8 n8 H' t: s7 @
  235.       file=(*p).second;
    7 i0 ]) ~7 ?* q+ Q
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - q3 A* \3 G, K
  237.       {5 D- I+ Y; U$ |, N* A7 z
  238.         olds=(*p).second;* o3 X  F9 E. ]2 S$ C! g* s+ i. Q
  239.         olds->vers=file->vers;! A# a! e2 p$ z  ^7 x9 s  k
  240.       }" |3 J; z4 C, t% `( B5 @
  241.       else9 R: O: T0 w& Z0 N( w
  242.       {
      x  X5 p, z* c# O) U; J
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 S5 I" g# ], m6 _
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* `; X% T; B0 T( n. [! o2 e+ f( L& ~
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));" s% i9 t( b, L/ G/ r
  246.       }
    ( o1 y5 N& z  \7 `
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    9 R- _1 H  z$ i% `3 B" u
  248.       sprintf(filename,"(%s)",file->file);- O6 O0 q, \# H, G+ R
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 p2 ~9 E" H& E
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    $ z1 M. V9 j# `
  251.     }+ F, c& E, B; j6 l3 b
  252.     dwCurrFile++;
    5 ]- t3 l1 K. p9 c4 ?! V5 ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), T% V5 ^; F6 l# J& a6 I
  254.     {
    4 V4 F! g# ~7 h  v0 Q, p1 E
  255.       bSilentStep=FALSE;
    6 U/ ^( I. `0 t0 I
  256.       bCompressed=TRUE;
    ! T! z9 B4 t+ k* Q; g8 h
  257.       strExtLocal.Empty();) w# C( z0 c/ g+ {* K2 b
  258.       strFullName=(*i).second;# U/ k+ R) l8 U# r
  259.       dwProgramState=AP_CONNECT;' ~4 ?: f, D) w: O/ o
  260.       return TRUE;& C# @8 }3 W  P! Z( b0 P$ [' y
  261.     }
    & }5 ]! o, G( V4 i' U, |
  262.     if(!bRestartUpdater)
    # u% n$ S- p7 H- O/ U
  263.     {
    5 ^+ n! [3 n9 N3 i: D
  264.       int iCurrSize,iFileSize;
    5 A* M$ ~2 u/ R6 @) P! f$ A: ~6 A
  265.       iCurrSize=0;  R; `* s- Q1 x/ \; F% {
  266.       iFileSize=UpdateList2.size();
    6 B- |+ O2 S, j3 h, _- n
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    # z" M5 }/ |; ^* |/ U
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    3 z$ Q- G* v# ^7 c" u4 O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");* J7 h8 w/ h5 e0 ^1 b
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      Q* |* o+ a  m# B6 w
  271.       Fclearf(".\\update.dat");) V' T+ @! A- j. @9 @' n+ C
  272.       Fprintf(".\\update.dat","Bloodyf\n");! L5 D" p. G8 C, H
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , Z0 \  M1 g: T
  274.       {+ N- U* X" _8 [! K( K3 n& _: R
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
      j2 y& I2 P- ^3 T0 l' t# f  Q
  276.         {
    : c, z; n: k% ^, v( R" F  n. Y6 j
  277.           file=(*p).second;
    1 w% k, Z7 C: Z7 w
  278.           sprintf(filename,"(%s)",file->file);
    2 x# z' y+ ~& I8 S! v
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 F7 v9 B( C: E1 f; u8 B
  280.           iCurrSize++;0 I3 Y( J. B. v0 T) x+ l  F' H
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    + x- [, z, y( O5 `. E7 ?
  282.         }' |' I5 H3 U: B" `/ R8 p0 o# I
  283.       }% n* F5 G% Y6 l- y# D, D
  284.       unlink(".\\update.txt");+ k/ k6 k5 b) W: i
  285.       unlink(".\\update.tmp");
    9 f" Z/ c1 h1 |8 n( @% J
  286.       Fclearf(".\\checkversion.dat");
    : A3 Y1 X  H( C# i+ q8 Q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( A8 X( r- ~$ N0 Z, P
  288.       if(UpdateLocal.size())
    6 u0 f2 x$ x5 a9 |- p1 G, H; r+ v
  289.       {0 G0 M# g5 [# j0 ^
  290.         UpdateLocal.clear();
    - t% B' F  N2 K* P: r
  291.       }
    , {* b2 t+ e. p/ v3 [5 _
  292.       if(UpdateFile3.size())
    9 F4 K) m5 F- A$ B( S4 K+ F
  293.       {; ?: u, J# x6 r* [) c. X
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - K( a8 g6 p4 |* _8 M5 Y8 K, w$ ]# r
  295.         {
    * d) c1 v. e# o* |, B
  296.           file=(*p).second;& z+ d, X* l) P
  297.           free(file);
    5 Q' l# A" I* a4 _  q  \: Y
  298.         }2 X# s; G8 {$ J$ g# O- \
  299.         UpdateFile3.clear();
    6 ?8 l5 u2 c6 L- {' v4 j
  300.         UpdateList3.clear();
    2 l5 T) f; g. K' G3 H! _  B) D
  301.       }
    ; r! [3 A- h9 S; L
  302.       if(UpdateFile2.size())
    5 Y) |$ g) D  P9 t+ A. l- W- \
  303.       {- V2 ~+ z' d$ J# u9 a' k& Y0 j7 a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' B1 b8 X8 H6 j* j0 z' l6 K- F. U
  305.         {
    & y  C* P! s( {8 z
  306.           file=(*p).second;
    0 W' f$ ]0 k9 g7 {& m
  307.           free(file);3 V# ]4 [5 l. f4 D4 k4 h+ u1 ~7 A
  308.         }
    / w# }- F) W* |6 _
  309.         UpdateFile2.clear();
    + f  H: A' P# Y  p3 k7 G8 S2 P- _
  310.         UpdateList2.clear();
    1 d" @1 v! y$ n0 J) ]
  311.       }% H$ h) W' w9 s8 x
  312.       if(UpdateFile1.size()); x- Q. |4 n7 K
  313.       {3 V9 X( I  ?8 X  \
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) o* a9 U% A1 d4 d! T0 Q: r
  315.         {# }: [7 ~( t. ~0 X, b+ c: |$ l
  316.           file=(*p).second;
    0 w4 G! [* {! v3 k
  317.           free(file);
    ; L, V6 D1 S, I! b
  318.         }
    ' Y6 C- E; P9 k4 D
  319.         UpdateFile1.clear();; i. J  G0 y% Z  K9 ?: i
  320.         UpdateList1.clear();7 U# C/ l+ @  j% i+ f
  321.       }
    & y* p3 d6 j  A/ M! N
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    4 J- _$ l# E2 x( m
  323.     }- D* K  b$ ]5 q( [3 `9 O% S9 ]/ d
  324.   }
    & D. U3 h7 ]2 J& C$ ~& f& `& U9 M9 y
  325.   return FALSE;
    / ~, G, M! r: p6 K  D: V* i- t
  326. }
    " ]$ F& D- Q2 z* `* R5 R
  327.   m3 G! c7 h( \; O2 h7 z# u
  328. void CRevAppApp::ClearAll(void)& K- K. J& U5 _( h; Z4 R$ @
  329. {. s* J7 [* b" _1 a2 G" [
  330.   LPUPDATEFILE file;
    1 ]+ E. U7 i+ [* S$ `6 c
  331.   std::map<CString,LPUPDATEFILE>::iterator p;7 K+ i/ Q/ N: `' w( M6 M2 O  x

  332. 1 T  X% r5 ?. i8 g- D' X
  333.   if(UpdateLocal.size())
    ( l1 g6 J4 W' U
  334.   {
    9 s( N- S/ \- J
  335.     UpdateLocal.clear();
    # J# `8 K0 Q; c7 R
  336.   }1 m/ z1 V" J$ m! D" [) G) O/ k
  337.   if(UpdateFile3.size())% E1 D% u& ~8 b# N7 X( {+ R
  338.   {6 ~0 b$ Y5 U; X; O& f! d! C/ o, Q
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # v& Z5 N% w/ T; q' ~
  340.     {
    9 g4 E& ]1 A# W' p# E  d
  341.       file=(*p).second;* n* a: G& C) X. m
  342.       free(file);* u7 U4 m# q0 B% P+ P
  343.     }
    5 ?8 d( S* u& F5 F% V( \" Q
  344.     UpdateFile3.clear();( P% {$ [  k  b& \) [" \& K* b
  345.     UpdateList3.clear();
    ' t/ A. e* \4 D
  346.   }! ]! j9 |! }0 [3 E
  347.   if(UpdateFile2.size())4 Z) n/ e. w& z  c2 ]0 V  w: N6 V
  348.   {
    ; Y3 c- d7 K) e. M$ i" Z. P
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 I) W4 _6 g+ W6 {) t% F
  350.     {. v$ a) W/ s  x% z
  351.       file=(*p).second;
    - v: I1 T8 D/ I# o
  352.       free(file);. Y9 G/ |6 m$ P& A; C
  353.     }
      ]% v/ R. ?# f* e: J$ k
  354.     UpdateFile2.clear();# ?' P( j. {/ M% ~. V
  355.     UpdateList2.clear();
      ]1 B6 L4 n0 e2 Q0 g; K' N
  356.   }: v0 U: v# i* S2 P2 }- @5 [
  357.   if(UpdateFile1.size())
    " O4 F, e4 L% ?8 J9 V$ U; y+ L6 v4 c
  358.   {0 k$ V3 h5 b. s+ ~: p
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" }  f" u5 c, O% y+ H4 q
  360.     {2 @5 J0 ]9 k) |; ]; j# x8 {
  361.       file=(*p).second;: m& B' c0 f/ W; ?
  362.       free(file);' d1 b. k  Z8 l3 v6 d5 F% h0 K
  363.     }
    - K' R& `* U3 }7 w
  364.     UpdateFile1.clear();
    $ X  w& P' e0 e1 ?& E
  365.     UpdateList1.clear();% i$ s# a7 D8 x6 L+ c
  366.   }, L( {' }. b% e: m  j
  367. }  6 O" I# @/ J3 y) i: O- W! o+ M2 Z
  368.   
    0 u5 q" _- T/ N, d+ M
  369. BOOL CRevAppApp::CheckLocalVersion(void)/ b+ U+ K5 e  z7 o# b) g9 H
  370. {
    , _1 }9 b* i+ W0 a, F
  371.   int c;  n$ b  [5 e( K) Z
  372.   LPUPDATEFILE file1,file2;
    : P0 e! \1 J( y- K) T" F
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;. V1 Q* Y3 L& D' R
  374.   std::list<CString>::iterator l;( p+ A, k1 Y1 [+ i: O$ R2 S7 f
  375. ! \/ f! e8 d0 @
  376.   UpdateLocal.clear();
    , ^# w' Y; T2 K! i
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    / k/ P- ^7 @) |  |: C( S
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    , a: [6 v) A9 q; E
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
      p( K# f! u* e/ H
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    7 l, j: D: T. w) O: s, h
  381.   if(UpdateFile3.size())
    2 ^  Q  l. D9 L/ f/ A- T9 ], P! m
  382.   {
    : b- S5 N& I, o9 J( P2 o7 R
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    + z2 w1 K" b, ~, P8 F# G! |# K3 L
  384.     {9 k" J. R/ k; e0 k$ I
  385.       file2=(LPUPDATEFILE)(*i).second;
    ' G* }3 H$ u* Q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ( s; {& @8 r6 o& L) g$ [7 D
  387.       {
    4 q, S0 u7 e3 f1 b! K: e
  388.         file1=(LPUPDATEFILE)(*p).second;
    8 e* s0 j( k' H# J! Z
  389.         file1->vers=file2->vers;' w" Q+ ^" e5 K' D( |( ]8 `# x
  390.       }
    7 C4 K& ^# r" j- T+ n8 w
  391.       else6 x1 z. b/ c+ C( h1 u8 A
  392.       {
    ( F6 v6 z' R+ L
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' }* a  z8 H. ~1 r
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));2 _) M$ V+ k! ]% h- K' H, L- \3 r( [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    : B5 g" Q  p4 g6 b
  396.       }0 k2 z0 R+ r$ U7 m  f" m
  397.     }# n) U% t  c2 V7 Q' U% a
  398.   }0 c5 @, F0 j  w, V5 p% w3 b
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / K* J$ [" Z' \) N% n/ {
  400.   {. ]: G* ]! G9 P4 [, [, k& I
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' f/ f' t8 \. Y, p
  402.     {
    9 ?6 d9 @9 {) v6 M6 w3 {
  403.       file2=(LPUPDATEFILE)(*i).second;
    6 K- ~; ]  _+ U4 m$ e
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      w  A" C0 W1 z, u. K
  405.       {
    4 G/ U) ~& [% J+ \8 \
  406.         file1=(LPUPDATEFILE)(*p).second;
    / G4 T% r) K0 P4 v
  407.         if(file1->vers!=file2->vers)2 h. D9 z' ~" F; @
  408.         {& w, O" Y1 ^. ]. Q: u
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & v) T; S# M! z6 b
  410.           c++;
    ( p  f' f' T1 ?. w4 M* N9 l
  411.         }7 S+ m5 d, o% Z  m! T3 {
  412.       }6 o4 }5 g3 B0 i; D
  413.       else5 W, R! y  ?3 j
  414.       {. Z. h, q& F2 A' d8 O$ a
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& w( L8 T" I$ t/ m$ `0 v
  416.         c++;. n' U2 }" @" e0 l9 T# m" Z
  417.       }" I. ?& }$ t, g0 W
  418.     }+ T: n. n8 k) ^& V' Q$ U
  419.   }
    , M  m6 B1 G0 f+ F
  420.   unlink(".\\DownLoad\\update.txt");/ I/ Y! F/ ?0 `! h( d: ^; L
  421.   if(UpdateLocal.size()) return TRUE;
    & c+ d- v+ m8 Y) v; l3 L' J" [
  422.   else                   return FALSE;
    ; D+ k4 ]. z# F7 Q( q- f' W
  423. }
    3 r7 |( q; |6 l7 {' x3 h
  424. : D: O# }2 s, H( J
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/": S9 [0 A# _% o& k$ D  h# A
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * D/ N( U2 g* s

  427. ' X! H' B7 h+ F6 o

  428. 4 e+ V9 n* n3 }- K0 E0 C
  429. 0 S' U! u( t* k9 V/ ^
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile): ?4 b+ c$ n9 v
  431. {. U2 }0 R& l; S, R; J3 I7 g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    . X( i% X$ s* g" L4 e+ L% E
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & F! @$ A4 g& _
  434.   {( m, s$ \% e1 h* Y( b" V% B* G, |
  435.     char szLanguage[50];
    " V- Y( q$ K1 @7 s  w
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- k2 \$ C. K! ~" \  @0 F
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % J% w# t8 z4 P$ Q. G' }' h# y
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  _9 u6 b! n9 c/ `8 t
  439.     else                                   m_iLanguage=ENGLISH;
    8 u- P  m) }" e
  440.     char szRegister[100];
    ; Q& o2 T2 L( K. N
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : h' P) s3 C0 Z5 J2 W, t5 X
  442.     strRegsName=szRegister;
    & H0 l, z! ^9 {3 Y
  443.     char szPatchURL[100];4 l6 |2 L* {, ]$ u# y. Q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* ?% p2 H4 ]1 q4 P6 _) r, q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - }$ i! ~3 F8 ~7 u* y9 @1 w/ `
  446.   }
    % r: w* C* v. p& N
  447.   else
    6 O$ m3 p! L- r2 x, `0 z6 d' K
  448.   {5 o3 A- h6 C9 o' r
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 ^5 Q* ]8 l) g- A/ y
  450.     strRegsName=DEFAULT_REG_URL;
    & p& B$ d8 X9 J
  451.   }
    : Q' Y, R  Y2 k
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 R  B5 ?  h  x' c7 U; s
  453.   {9 G& l0 T* Z, Z2 G
  454.     char szIP[50];
    ; k2 b6 L! ?9 p2 z5 x" t! [) m% F
  455.     char szDIR[300];
    3 u% n9 p9 o  i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))$ h( S6 S! s# ~4 I6 U& R, j, x
  457.     {
    + N* n  v% D6 f; u, K
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : l% w0 G. Y4 p) u) \
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    5 ~7 w: ?8 z; \& s: w7 W: w& ^
  460.       strHostName=szIP;6 T2 X# }; ?% C' Z2 u- S
  461.       strHostPath.Format("/%s",szDIR);  k- S7 Y  p; C6 ?! o; O
  462.     }$ _# m0 o2 \$ E4 W. |" a8 i
  463.     else
    ! r; C( u3 O- B9 f& {0 Z  c, i
  464.     {( c8 c# t. G; r6 F
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! }1 Y4 r- I$ {" U. {5 Q
  466.       {
    ' o6 g8 {* n2 U# d" X* C4 o8 q
  467.         char szLanguage[50];
    3 w5 H& M9 w/ D; Q  @/ S
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 L+ O. c0 v- Y% H
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ g2 F' O* J+ \- ?/ T- X
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    , W0 V, u" E8 a7 w: @
  471.         else                                   m_iLanguage=ENGLISH;
    / n5 I7 z# ]" b" s1 \8 m
  472.         char szRegister[100];
    6 w+ {) J' y4 W& ^' m& r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    0 ^0 R% Z! [- W: r- V
  474.         strRegsName=szRegister;: A2 y8 x$ T% t' x4 H: e2 V
  475.         char szPatchURL[100];6 W9 K$ f, m/ L4 C8 O4 w4 M- _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ! e9 [1 `& m8 m# n) W4 V. S1 S' ]" e0 z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ g) }9 t9 y/ T9 Z  ?6 V: [# {
  478.       }
    3 n& k% @2 _" F
  479.       else
    6 Q6 M2 @% l) p" Y" j- J
  480.       {
    ) }& K) u  s: W' w/ z, ^% X/ v* _% j6 X
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  ~' U2 q8 z: d4 r* ^
  482.         strRegsName=DEFAULT_REG_URL;
    7 c- E. y: Q# U" O
  483.       }2 E7 M  V( _* \: z: s# G" v
  484.     }
    ( C" Q- R. F2 u
  485.   }+ Q. @; I$ M; i  `2 c) Q; j2 W- d# k
  486.   return true;0 T+ s) w7 w: H# W
  487. }& b) J& P. a8 \' O8 `

  488. . N0 O- w8 \$ ^  O% f* z2 V
  489. #include ".\ZLib\unzip.h"
    / S+ Q# [3 Y3 j! a
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    4 N( x1 T( N6 {& G0 S% d" i
  491. /////////////////////////////////////////////////////////////////////////////( Z( `: n1 c/ M: X( q+ b8 l" v
  492. // CRevAppApp initialization* @  }, h$ M  S) w( [

  493. 8 c2 M- B7 ?% X& ]& {
  494. BOOL CRevAppApp::InitInstance()
    ! ^. h- f8 A& S# C' [- H6 k
  495. {
    4 f7 }" D0 H: t( c; p% p4 Q+ u/ l
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];5 Z2 V" @7 c. I5 ]

  497. 3 a& z4 ]6 B. i
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    9 p6 S- g$ u: W) Y7 A/ r
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    / J* R- A& I8 S! r) N) k2 E0 n
  500.   {
    " K) U; D, m6 v8 H- k4 P
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ! W- i. g2 ~5 V$ d( h9 m
  502.     GetPathFromFullPath(szPathTarget,szPathSource);( d6 J5 \$ d7 _3 x" T, O
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))- K8 B& C: j- y: N) t  z0 T
  504.     {
    : W9 I0 D2 G( e" o. T5 W' ^
  505.       strcpy(szPath,szPathTarget);% }5 t  R' D$ L
  506.       SetCurrentDirectory(szPath);
      U- X* q* H4 v* p
  507.     }
    / I# v- T( K, L' K- E- p
  508.   }5 z/ Y. C+ ?+ k! h
  509. #ifdef _DEBUG
    # l$ V  U* P/ A6 J8 Q2 p
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ {' k4 F4 q2 j
  511. #else2 n. w& }0 g. ^0 x8 |7 V; U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; F  S  C  A1 U" V
  513. #endif
    % q" U7 k% z' m, s4 X& u& F6 W
  514.   {7 R. d5 |8 u* o, H& g. r
  515.     char tempFileName[MAX_PATH];4 w* ^! _4 P& [, S; q! ^3 {1 W# z0 R
  516.     strcpy(tempFileName,szPathSource);
    ' \7 \4 r8 ^% x( z$ w+ K6 z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    + o5 r; C$ L7 `
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    $ q9 c9 ]# J4 t3 B
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
      s' i4 p3 {' i8 ^/ G- K
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);; K  J) T+ @! U( e* |" D0 n2 l) Q/ B, h
  521.     return TRUE;
    # e1 Y) g, N% K  F! a- J0 q3 {
  522.   }" _. V1 ]6 H4 K. q" ?% `
  523.   // Nuke 0118: Delete run.exe" w. ^' Z: }+ a0 W7 Z( U4 c) y. ]' k* C4 b
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ( Z0 }6 j, C1 Q
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");2 A7 a8 L& H8 _  i; f
  526.   if(!ReadCfgFile("Config.ini"))( I# O- q# {4 {- f/ B0 H
  527.   {
    9 y4 \) j7 e1 L8 g. g' s2 p
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ! {1 n& `9 m  h# t
  529.     return TRUE;4 Z7 w" M  j2 x1 y* j! K: p$ X& m3 M
  530.   }/ ~* H; E: R* @
  531.   HANDLE mutex;  Z" E* ]+ J* N: l
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))& W' I. a/ B& @) @% R
  533.   {
    " d) }: S5 m; \3 q/ R4 d
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    5 }$ d" E) l9 f' _
  535.     {) Q' `% ?; H, m3 ^3 i+ F
  536.       CloseHandle(mutex);' P* [% @4 E% S# n6 A" ^, ^
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    & E1 x" o- X/ Z
  538.       return TRUE;$ m0 ^. p3 R; z/ m- g
  539.     }
    ) T) C9 q- s$ j
  540.   }  
    & M( Q  {7 J. o
  541.   CloseHandle(mutex);
    0 n4 ]1 q6 d5 L. q; c

  542.   ]) m5 ]4 l" ^6 H2 Z4 N
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);9 {5 h* p( I2 V( I3 N

  544. / Y% C  n5 q& M6 @
  545.         AfxEnableControlContainer();" Y( X/ ?; A2 r! k4 L# W- v0 S
  546. " N( X/ [# i9 i3 g( b3 Y
  547.   bCanUpdate=FALSE;
    ; R( j1 _8 Z9 ?7 R+ A
  548.   dwStartUpSteps=1;" d' s. _. W- ^. ~; O8 f; I- }
  549.   dwProgramState=AP_NOTHING;
    0 `. {+ A/ E; q  y1 x! X3 H

  550. # J" L/ i& k$ C$ r6 E3 A& c
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    7 V7 j" M7 G1 N+ e0 K" O9 r2 S- @+ ?
  552. ( W2 \7 R  L. ?; A: V
  553.         // Standard initialization; {& P' u; R! @2 p9 t8 h# h/ G* a
  554.         // If you are not using these features and wish to reduce the size
    . |- v2 x- @: e9 e# s
  555.         //  of your final executable, you should remove from the following" N& r9 y' Q0 ^* e
  556.         //  the specific initialization routines you do not need." ]4 I) o- m% E  f
  557. 0 G: f  E6 i( g$ N  x* Z
  558. #ifdef _AFXDLL& M! [/ P& [# `/ y# g' v
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL5 v! s, @# O% y( \2 x
  560. #else
    ! N. w8 y6 j9 k8 t; t5 G5 H& z- \
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically5 P, K- g  |' P% J! ?$ _* v
  562. #endif) [; h4 E# ^- i# u7 K3 E
  563. # Q( c8 R5 u, M
  564.   dlg=new CRevAppDlg;
    ) n1 t& }- x" h: u7 _
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    - v" }3 g' a2 ~- M7 B# d, f
  566.   dlg->ShowWindow(SW_SHOWNORMAL);4 }+ @  W" g% V6 a1 a* D
  567.   m_pMainWnd=dlg;+ ]: k% }7 ?) @' h
  568. & X6 _9 p7 m, B/ i
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 p. }5 D7 K) S/ T; H' ^( U

  570. , B% N7 L2 {0 G: a
  571. //  GdiplusStartupInput gdiplusStartupInput;
    * M0 b% }0 P6 ^3 N) P9 T
  572. //  ULONG_PTR gdiplusToken;' q, ~2 S, D3 r9 F9 U
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    - E" O3 v4 x- Z
  574. 3 L  l6 G, E! c8 M
  575. //        CRevAppDlg dlg;# }. p) p' s5 ]7 }) U* q8 K
  576. //        int nResponse = dlg.DoModal();
    ' q  l6 ]* f. G1 z* K- d# S8 @
  577. //        if (nResponse == IDOK)
    8 K( m' e# c' U& c6 ~7 A* ?
  578. //        {
    : i: n4 N. s  y6 q- W1 _* @
  579. //                // TODO: Place code here to handle when the dialog is$ z3 p* L% f+ c: E& e
  580. //                //  dismissed with OK/ l( O. ]0 m) I0 Y5 I( R$ q
  581. //        }! z3 a! p+ U( Z( Q
  582. //        else if (nResponse == IDCANCEL)
    : m# j& r9 ~- j' x& a) X
  583. //        {! V" v4 v+ U# Y: e
  584. //                // TODO: Place code here to handle when the dialog is
    - N3 S/ ?( H& I8 ]; o. V& E: }
  585. //                //  dismissed with Cancel0 t/ z" t7 j- {3 O' N9 Q
  586. //        }7 p& m# d) ?/ t0 h3 X9 v) a$ g$ c
  587. 0 Q4 M, w; X8 O% }. u( M: @
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    8 z' {; j+ d$ a
  589.         //  application, rather than start the application's message pump.
    1 B& X0 m- ^- I; N
  590.         return TRUE;1 T3 [% N) e% {, C" L4 }9 P( v/ E6 }
  591. }/ [9 ]8 e% \: N2 I2 @

  592. * F& e( |& }0 k$ o' D: ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    $ b! n$ @7 t3 `0 Q. C5 [2 f
  594. {+ O& j& V0 M0 t( p, K
  595.   int i;8 d. t) }3 x, @/ S1 g& `
  596.   char *szRet;( c* F4 X, F6 J' [) _2 J( M6 j
  597. ) x( f( t+ G0 L6 p
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    9 v/ o% T( r$ p( z$ P- ?- B
  599.   if(sztoken)
    + D2 B7 v9 s7 A* B2 v& s0 D/ S* ~( a
  600.   {. _& j0 A3 P" @( I, T
  601.     szRet=&sztoken[itoken];2 v3 F" ]3 v$ a* c: v/ _* ]+ \2 ]
  602.     while(sztoken[itoken])3 f. ?' f5 B" q9 ^3 r0 J7 ~
  603.     {/ @4 f* D5 |0 s6 N* w" v
  604.       for(i=0;i<(int)strlen(token);i++)2 T; D; Z7 Q4 w/ r
  605.       {
    . F; N& N' h$ G" s
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])% p+ p! U6 T! c
  607.         {- |/ J9 E. {* a. c6 l
  608.           sztoken[itoken++]=0;
    ; J4 C) f( J* Y$ X$ d; H
  609.           sztoken[itoken++]=0;
    ( l, l5 P; ~$ Y# ^5 Y
  610.           return szRet;
    : a/ r( Z; f# |$ i
  611.         }
    : [8 I. M# Y3 N8 P( c2 e
  612.       }2 L; q- j( x1 Q0 j0 N/ h/ L
  613.       itoken++;0 ]# Q- j% I' l! s
  614.     }; r' D8 H- W2 n+ P" Y# N
  615.   }
    * P% ?( p1 R% h
  616.   return NULL;( Z$ P4 J0 x$ v* ?
  617. }% @3 f: o  U" h8 i+ m6 p
  618. , S' s  ]! o; S1 ]  y
  619. void ProcessProc(long Total,long Current)
    ; O* w, T2 s: `
  620. {+ u) _1 H& X# w8 ~
  621.         MSG msg;& q3 k) |% N" ~, g' Q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    $ X: h: W2 i: y! f+ g( f
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));- b. V9 I# A0 K& h
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))& U8 _8 p( ~2 b7 F
  625.         {
    " F+ e/ m4 ~' S9 h! H. m) P. N
  626.                 if(!GetMessage(&msg,NULL,0,0))! v3 X7 R. r& Z" y& M7 R4 z
  627.                 {
    8 v- X5 K, `4 d6 b, a  }) Q. q
  628.                         return;4 ~( U# \! Z- v( \6 c! d! Q
  629.                 }8 R/ ~2 a7 N6 ^
  630.                 TranslateMessage(&msg);3 M8 O  b) n( u& i; \0 l
  631.                 DispatchMessage(&msg);
    / M0 V; E* ~% g7 b& M
  632.         }       
    . b1 `- S0 V2 V/ W
  633. }3 e$ q: F9 |8 L: u0 {& v
  634. * n3 x/ c) P! f& F; a
  635. BOOL bFirstChar=TRUE;
    8 f# {( W  j0 K* L: M

  636. % a5 E! s3 C" G, T; |) K* Q8 }
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    " z2 j- p( X0 |! |. ?) k
  638. {
    1 d; E" K  H3 p! i. b9 Y
  639.         // TODO: Add your specialized code here and/or call the base class
    / n2 w, F* O2 j: V% O9 Z. s
  640.   switch(dwProgramState)) s, d, j3 q- l, p" Y
  641.   {! H+ _* M. \* _" C2 L0 h
  642.   case AP_NOTHING:
    " w2 e# e' v/ y
  643.     switch(dwStartUpSteps)
    $ y$ w! ^& r& M0 U  z
  644.     {
    6 S# Y; \* a6 g# O
  645.     case 1:- w+ f8 U2 F' l. [; f$ f8 `6 M
  646.       {3 w# X. A  Y& x  q
  647.         int i;
    ' S: X$ F, ]* g9 |
  648.         CDC *pCDC=dlg->GetDC();/ q3 g9 k$ A# J4 t$ Z) g5 N& \
  649.         HDC hdcwnd=pCDC->m_hDC;, A  M. }; X# O6 Y5 Y! K
  650. //        Graphics graphics(hdcwnd);% U; @$ H3 w' T" U; ~+ u( S; A
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");  x6 V% U7 P8 b" u# T: T
  652. //        INT iWidth=bitmap.GetWidth();7 |/ w0 h3 W# J+ a4 H. J: I
  653. //        INT iHeight=bitmap.GetHeight();- J5 T3 T% Z/ w1 g8 ?
  654. //        Color color,colorTemp;
    $ ~2 R0 s$ C8 Y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ' p! g/ ?8 s7 f- u3 q
  656. //        {5 l, w3 `$ Z- h5 e1 O
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( a* y* L1 P) V& a4 Y) b5 U# Q
  658. //          {
    ( S% K5 f9 t2 D% y  |8 {
  659. //            bitmap.GetPixel(iColumn,iRow,&color);# X6 T/ v% m% `- X2 c0 O
  660. //            colorTemp.SetValue(color.MakeARGB(
    ; \6 U* U9 a( |
  661. //              (BYTE)(255*iColumn/iWidth),
    6 |! g1 O# E& X* I) O1 _
  662. //              color.GetRed(),0 g* X2 |8 T1 B: _
  663. //              color.GetGreen(),
    2 `6 O4 u% j, d; j
  664. //              color.GetBlue()));
    4 b5 [9 ~3 t4 g  E
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    $ m2 V) I5 q4 X) i0 {/ ?6 w6 m% y' z
  666. //          }( H% [9 h: j' }6 W
  667. //        }
    2 R. h/ A) v5 B# P! M  `7 B; e0 q
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    6 a  a9 V% u" P
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; g) f$ s" e: b& Y3 X1 Z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    / p3 n* L' G4 ^" u$ F; v
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- Y* |0 A' a) N. Q; [. b
  672.         for(i=0;i<240;i+=8)7 L4 l. P' P- ^$ X# Z
  673.         {/ L' n1 z, z/ B1 |) o# l8 ^( F
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " {6 A% k* y! w6 K/ [. X. u; H2 N% S
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 F& H8 t' L4 d* }% y% ]
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    2 _6 c1 v. P  y, z! @
  677.           Sleep(33);
    " \7 ^5 h' y0 c3 F" v; M. w" v0 J+ X
  678.         }
    , k: f. z( j- U$ {  f7 ]5 f1 ~( i; I. j
  679.         Sleep(1000);
    0 u' q/ m6 K7 d4 s9 I3 V; h
  680.         for(i=240;i>0;i-=8)& c1 ~1 k* g" J# R4 v: J( l5 m- r( P
  681.         {
    ) A9 o/ \& t$ [7 Z8 @8 U
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 Y. ]9 c. B  {$ k2 h# z+ u7 \
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 K6 p6 a+ x& C: s3 o0 Y" z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) w3 S) U1 k. u6 P0 ^( R: p3 f
  685.           Sleep(33);
    4 S7 Y- w8 z, Z! u7 F" s7 @0 f
  686.         }4 H: b9 V5 ]4 n: u8 }* F) f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);2 `. c+ C8 p; U& |6 ~
  688.         dlg->ReleaseDC(pCDC);
    5 @3 `- ^: W2 X7 `# L1 F4 h6 a- t
  689.         DeleteDC(hdctar);3 a5 \* W- z! q+ C, ]
  690.         DeleteDC(hdcsrc);
    : P, D& |9 _1 A- I+ e
  691.         DeleteDC(hdcorg);
    - C. L2 D# s2 }* K8 {7 v, y1 H
  692.       }
    7 a( i  y: x: h; K# k8 }; g
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    8 M2 z2 n0 L6 p$ J4 D8 D5 S+ W
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    5 G: m7 y7 N, I' p" D! n3 r0 q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    + V- v- ]% i" c1 [% y$ b  K
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");7 E8 T# E6 j; n0 Q" Y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. b7 p6 F, _% m7 y! J* {5 S
  698.       if(!Dn.Connected())
    / c, L( h. A1 N& X2 z
  699.       {0 j6 `0 P( d) U/ L( N/ k7 L
  700.         dwTotalFiles=1;3 R' I( p9 G2 {0 `4 G/ X
  701.         dwDownLoaded=0;: V8 U" g0 d0 g& v& q
  702.         bSilentStep=TRUE;! ]+ W$ l/ h7 E1 S8 |& s9 k3 p4 K
  703.         bCompressed=FALSE;8 T# E. o8 R' H8 j6 E
  704.         strExtLocal.Empty();- D6 @9 w; ?) s+ x7 J
  705.         strFullName="readme.txt";
    ( K" d7 [5 J0 {& j  r. `; |  v& I
  706.         dwProgramState=AP_CONNECT;. j) \( X" s- c; f0 x0 Z
  707.       }
    3 {) }: h. d: H9 {7 e3 v: ]- R8 D; R7 D
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    * F2 J: ?- b4 k  P6 B
  709.       dwStartUpSteps=2;' n! O# s  C3 ^; r) @- J! L
  710.       break;
    2 f, L) N, {* x7 g7 O* J. k7 c3 d4 K6 Q
  711.     case 2:
    ( g$ b% T- w) L0 ?- W, `" _/ V
  712.       {1 G# P( l# M3 H3 P( d2 r* B- j# _5 p
  713.         int iEOF;
    1 ]$ q7 Y$ x4 h. ]# R; Q6 o+ K
  714.         FILE *fp;% T7 l: G0 V& P9 T  c9 |  Y
  715.         char szString[512];! D% x8 c: P; ?, L' E; l+ m) o# N
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");/ t9 V9 k9 `$ h9 T
  717.         if(fp)
    $ n, b/ W4 a/ K+ Y6 w, E
  718.         {
    , C5 x' s+ O: [- F
  719.           do& s' f# _: k# }5 ~
  720.           {2 {) c0 U, Y6 A& Y8 b& a
  721.             iEOF=fscanf(fp,"%s",szString);0 X" G% l  b3 t4 X# B
  722.             if(strlen(szString))5 N7 k( u% @! B! R
  723.             {7 p* d: g; G- g- ~; X; O- v) B5 i
  724.               if(bFirstChar)6 ^! W$ G& m$ ~6 E2 Q  }
  725.               {6 E5 ?+ f+ S7 \" j. `$ Z; K
  726.                 bFirstChar=FALSE;+ J1 [7 ~8 A( U1 x& G
  727.                 bConnectIsBig5=FALSE;
    1 I- [8 X7 @& z  f* i/ P+ ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; }' B8 k" f2 u+ b8 \+ Y& X2 ^. }
  729.               }
    . _/ D7 A$ c/ X1 m, @  b- w" V2 P
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));3 a9 U2 j$ u2 @4 p/ x/ T4 U0 t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));& J, l  j' M9 r: z
  732.               dlg->m_ListText.AddString(szString);: Q( C% S2 p( l' F6 s& l0 B" e5 ]
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 i+ O  O1 |5 @' p9 Y  M
  734.               *szString=0;
    0 f) L  m, I2 m+ T
  735.             }
    7 S. G  \+ ^- M1 V( o
  736.           } while(iEOF!=EOF);
    9 q2 X0 Q2 |7 i# i) @9 ?' |- M/ s
  737.           fclose(fp);
    ( x$ i: M& f( ]( V: e. T. ?, u
  738.           unlink(".\\DownLoad\\readme.txt");8 W7 ]$ y1 t: @& l+ a( e/ A& w
  739.           dwStartUpSteps=3;
    ' P$ @+ q% s0 i' p6 i( B, N: Y
  740.         }
    3 [. G) z3 C! c
  741.       }" \& `9 F4 B7 Q' \6 ^3 [
  742.       break;
    2 y# v9 D4 ?9 O+ h6 x- t
  743.     case 3:
    ' C6 ?* }! _+ V! ~  g
  744.       if(!Dn.Connected())
    9 f& Z% V' t# }. ]3 Y1 z
  745.       {- o7 x2 e/ `7 [0 ~1 G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);& \# E5 K) G* S6 E
  747.         dwTotalFiles=1;5 H4 ^; h, j; G/ k( L( F/ R
  748.         dwDownLoaded=0;
    $ _* ^# C  j' s' C4 H: a$ Q- z
  749.         bSilentStep=TRUE;4 J7 F; ]& @+ m2 ]" b2 @7 m4 [+ m+ b# q
  750.         bCompressed=FALSE;
    4 Z% t; J' Z) ]) i: D
  751.         strExtLocal.Empty();
    ' L& a- c6 l( w2 J3 `$ u  p4 `7 K3 R
  752.         strFullName="checkversion.txt";
    $ X: M7 W& D) ~5 O( g$ p
  753.         dwProgramState=AP_CONNECT;
    : u+ c  [& A6 |. D3 Y6 d- P6 `
  754.       }
    , k& B4 E4 `" `6 `* c0 P
  755.       dwStartUpSteps=4;
    # q7 y6 C0 ^; b  `) G6 m9 M
  756.       break;" o8 d, i; I/ R  D3 Z/ v
  757.     case 4:
    1 T: ]4 F- ~1 }
  758.       {' T6 @( r- w3 m( G1 e6 t  u( c/ \$ l
  759.         FILE *fp;# G% W5 M- o/ S/ n6 B- Z
  760.         char szString1[128];
    0 j! N; ^5 U' @! Y: m' d- s+ Y
  761.         char szString2[128];4 _, X; f( _- i
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    % l% j  j: c2 i9 H- }
  763.         if(fp)
    * e" a+ N7 }5 g/ M8 b
  764.         {
    % \: }4 g3 T* f
  765.           fscanf(fp,"%s",szString1);
    * l% d. ^! N4 l
  766.           fclose(fp);. [( T8 f+ M- u4 O. |# r
  767.           fCheckVersion=atof(szString1);
    9 F1 J6 {, j  r. c8 L8 X9 f1 Y
  768.           fp=fopen(".\\checkversion.dat","r");
    % E: d3 V3 `7 B0 _
  769.           if(fp)
    ! O$ `: C& }8 U, B5 M
  770.           {* w5 c% i- i3 }1 h- S+ I# H/ O0 f
  771.             fscanf(fp,"%s",szString2);3 g! ^3 T9 k) l* U1 G: l
  772.             fclose(fp);
    % Q/ R  A, O/ X* f
  773.             if(atof(szString1)!=atof(szString2))
    / `+ K% t7 K, \9 c
  774.             {
    7 V/ E" O, Q. o$ J9 N
  775.               if(!Dn.Connected())
    : Q7 u2 V: v- q, A" w$ S. X
  776.               {
    6 @# B4 L; ?. r. a
  777.                 bFirstUpdate=TRUE;
    5 \1 p3 I7 L; V% o1 V% ?
  778.                 dwTotalFiles=1;+ z3 M+ T7 Q* ~+ G3 d$ ~
  779.                 dwDownLoaded=0;
    # D5 I! C. C4 K1 V. x4 w8 x
  780.                 bSilentStep=FALSE;9 {6 B9 j. C7 g* i. W
  781.                 bCompressed=TRUE;
    , w! [, n( B; R/ C; A7 [
  782.                 strExtLocal=".\\DownLoad\";( C: D( K, e+ {; N( Z
  783.                 strFullName="update.txt";% c6 y% G( R8 |: A
  784.                 dwProgramState=AP_CONNECT;
    % ?5 |4 B& o' g8 l( o, o3 g
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * q+ a8 g% _  H
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ e5 K  \* P7 v) @
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # I4 _" E0 L- t* |
  788. " c) }4 O+ D5 |$ ]! U7 r
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' X3 t( B% s, c( K" t
  790.                 unlink(".\\DownLoad\\checkversion.txt");7 K* y3 y: V# I3 ^
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    2 c' M( V& ?6 N  K1 o3 t% {
  792.                 {
      b: S5 g/ ~: T' G" G
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& |1 d* g6 N6 n+ Z" E' f, s$ Y% s. k3 Q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    1 z7 o# ]6 V$ F+ M
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");' |  t- x* C0 p. ~! \. r$ V5 u6 U
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. M  K, o; e3 C
  797. 1 ^# ]) L  a! C9 c6 F
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : Q( f/ Y7 H; x2 ~5 x1 z5 J2 V
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    9 O# I8 y3 U- x( A7 ~: P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) [. v5 Z( t, O) U3 ^
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 A3 ?0 D8 t7 \- X& D0 V: J  h; A/ B* `
  802.                 }
    / @/ b, f/ H% q2 R8 e0 U' Z
  803.                 dwStartUpSteps=5;1 j# {  Z$ {) |) J' p8 @
  804.               }8 z# y3 B5 \5 h
  805.             }& w; i3 `* X' b9 M3 }
  806.             else+ n  W% D, h  o* A
  807.             {* J- c  q+ v+ d% b
  808.               unlink(".\\DownLoad\\checkversion.txt");1 O( i5 |0 [; {- |0 }$ a! ~
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . H5 D5 Y: T1 H6 i
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# R# [; B/ @6 F$ O$ k$ v+ h) V$ D
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 \: ?( t" x) H) [: f: k

  812. 5 d" @" O. l( H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' m- b2 g4 i* `; B% x2 d1 R
  814.               dwStartUpSteps=99;: |  d# u; a4 N7 u
  815.               bFinishUpdated=TRUE;3 G9 B1 X: T( f6 _( ^5 R9 `
  816.               bCanUpdate=TRUE;( w! _9 g3 H4 f" {% C3 v$ |
  817.             }
    ! B( l) z$ @# E; G
  818.           }5 q9 }, t- S/ b% C9 Q
  819.           else
    $ ]( z& j3 X3 K) r& ?# U2 M
  820.           {
    - ?7 }; w% {2 F6 h4 C1 R& h
  821.             if(!Dn.Connected())
    ! Q2 z6 }( [; O! ?5 B9 h& v
  822.             {
    1 |5 w2 q( u6 F
  823.               bFirstUpdate=TRUE;5 k9 Y: p! n6 G! j" F! T" Z
  824.               dwTotalFiles=1;
    , g, s% e/ n3 J! c- E6 q3 v) m
  825.               dwDownLoaded=0;. Z' i5 J& w+ R0 ]3 W; E2 p9 q
  826.               bSilentStep=FALSE;
    ) K$ L" G0 o9 @2 o, [5 M* `
  827.               bCompressed=TRUE;
    : V' g7 L) I+ l" ?  s4 N9 C
  828.               strExtLocal=".\\DownLoad\";) i' g* s% ?0 e4 ?0 R# K( P0 |- x
  829.               strFullName="update.txt";, M6 ]: X: U/ K: E1 v9 ^
  830.               dwProgramState=AP_CONNECT;
    # i, O8 z% _6 {2 k9 x
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 Q5 m* a( j5 \0 v8 W
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 i( ^, ~( k- G1 L  \( G6 l
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 B+ a! l& v( s  F  ~6 Y+ K
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; T7 N; V- w0 T' G$ m9 m0 B0 l, i
  835.               unlink(".\\DownLoad\\checkversion.txt");
    - T  m& A" b. d3 Q* v9 m
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    - x* q" Q( P. c, g( W2 p, w
  837.               {
    7 b! c) Z7 Y$ n" l) D
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    5 D' t' L" R1 l' ?1 q4 y
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");% v. ?  f. ?1 Q0 s! G' {
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    : D, ^  z/ n2 N8 l$ U
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 ?& N( F) X; I7 r3 v
  842.                
    " p* q6 I. P; G# a; I; \
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 [4 q$ O1 G/ [1 J
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 T. I+ t6 w0 ]0 H1 P
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");5 V2 n+ m# t6 A2 H
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ H; I& r8 B, J8 w) ^/ N
  847.               }) T2 p! }" Q2 I7 X, I2 R/ j/ f% ~) h
  848.               dwStartUpSteps=5;+ ~$ t. [$ O6 N; D& g$ v
  849.             }
    0 A$ f2 z% K0 q
  850.           }
    + _: C  p: I/ F7 h1 K
  851.         }1 [6 c3 q1 Y  ?5 _( n9 y
  852.         else
    : M$ d5 A2 u+ [/ b5 F9 p$ i
  853.         {
    : k9 J& \* ^: |( \2 s# |7 [% h, E
  854.           dwStartUpSteps=3;
    1 A! T& `: t6 R- G
  855.         }, `5 F( E% I) P! k: s
  856.       }& ?7 c+ n  c1 c6 l
  857.       break;1 c: L- V9 d9 C; o* @5 I* c
  858.     case 5:
    $ e& ^# ?& j; b% v
  859.       {" w* w7 L  A: a5 P2 A* E) t; J7 ?& u
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)) x0 M9 W+ z/ L+ m
  861.         {
      t) \1 Q& u" [0 t2 n+ {2 `
  862.           int opt_overwrite=1;7 |: X& N" |' |
  863.           int opt_do_extract_withoutpath=0;" ]: Z, u/ e( u7 @; k" |
  864.           unzFile uf=NULL;& z$ a  v. F: k

  865. ) Q' l# w/ e3 Y" W# {
  866.           uf=unzOpen("Wsa.zip");4 d* l+ u9 A7 s9 c
  867.           if(uf)* |. L/ [' D3 W6 D6 k8 _. @1 f9 @
  868.           {
      O7 t; j, x/ K, V3 y6 c7 X/ `. T: c7 @
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    , `- V- P" v' S
  870.             unzClose(uf);) Q% g% q; m) @; V' S
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* e- y+ r; N7 S6 u* ~, d" _
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    : S# l8 D- r$ w0 _# ~0 }* e# v
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    . ~4 {! q& ^0 {) m$ K" R- k2 g
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 c4 T8 @/ ]. O; c. T
  875.           }
    , H+ {. O% G( |  C( n' g2 o  s: d* r6 r2 M
  876.           DeleteFile("Wsa.zip" );1 b" M; W; |9 P) j  b
  877.         }1 G/ s/ h' a. {7 H, Q

  878. ' R2 Z1 k9 M; |+ t4 u  b0 ]' e
  879.         if(CheckLocalVersion())$ h! _" Z' I. b: S8 C
  880.         {
    1 `" o" k, \( s% F1 s3 {
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");+ h8 |# C7 i* f1 x
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");9 U9 j: a' i! h+ T( X  }
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");# G0 j0 E( l. I9 i0 v+ w
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) P- A. P% G0 R( x0 F( ]8 R
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    . c, T2 B: }# Y! H5 i
  886.           dwStartUpSteps=99;
    9 W7 s9 p( {3 w* y: ^
  887.         }
    ) Z% A: h! L  h9 t( ]
  888.         else0 M$ x7 J# T  V) b
  889.         {
    " X- l, z! H9 n
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! k7 x8 X% E% d
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 b' a' X( G; Y' r
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");) B& M2 s9 q) j# u) ^* E

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

/ w+ r2 F$ k2 H$ u/ v8 J# C
1 Y9 f- {3 f+ b  J* r, e6 n: F& K

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_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
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部