找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
) M- ~3 ^% p* N0 |/ [4 i6 o
  1. / RevApp.cpp : Defines the class behaviors for the application.
    0 c* Z5 c& N  i  @( p, ?: Q' N
  2. //0 ]; O, Z- r) l" G" Z; m' z7 ]
  3. - d1 E1 F+ p( Z' I, s2 F! M
  4. #include "stdafx.h"8 i# b  x$ S: N8 W. V
  5. ! O$ x) ^4 F# ?1 f, x+ m2 v; {
  6. //#define UNICODE3 y0 U7 }. I0 n* t$ F- x$ U
  7. //#include <gdiplus.h>! k5 G9 y( u) A" u# d
  8. //using namespace Gdiplus;5 Z" I1 `; f* N$ e. N  I

  9. , X, @3 P9 v# W4 o4 A5 N
  10. #include "RevApp.h"! l9 D) R- H) q; W1 Y
  11. #include "RevAppDlg.h"
    5 k) j' [( V; ^* u, w

  12. 5 b0 A) p7 D7 w2 Z# Y5 I# U
  13. #pragma warning(disable:4786)
    " |- ?+ _6 W5 n8 v6 V0 o( K, o
  14. #include <map>- U, S7 v" I) I- ]( s
  15. #include <list>' f6 I- j1 e! x2 Q9 p" E4 d
  16. #include <direct.h>
    3 _  C  a0 K7 r% w
  17. , x* Q  ?* o1 W9 O
  18. #ifdef _DEBUG. l5 u% h2 r4 s5 _
  19. #define new DEBUG_NEW
    6 G; {  g& H5 B9 G( j) e/ r
  20. #undef THIS_FILE
    ! _0 b  a: I# ~
  21. static char THIS_FILE[] = __FILE__;
    2 W7 u" j; w, E" w# q* ?  ?( {
  22. #endif+ T$ Y' g3 G/ v5 n5 a: k8 u( ^( `
  23. #include "SkinResDef.h"$ o( Z5 k( s. d- f8 Q4 t. v  Q# ]
  24. #include "ChangeBG.h"
    ' M& y$ m2 Z6 a
  25. #include "AFXINET.H"
    6 H4 c1 P2 g$ u& ]' Y& Q/ B! ~
  26. ; i' v1 S4 j6 l/ C3 \' A
  27. #define TRADITIONAL_CHINESE 01 F1 I3 x/ `  Q0 l" f; t) u1 c9 E1 m
  28. #define SIMPLIFY_CHINESE 1
    $ G3 H, p0 _3 y9 G
  29. #define ENGLISH 2) f+ M  A5 n# P! ^" `! x
  30. int m_iLanguage = ENGLISH;
    6 |  _$ f" e: @; M/ R% c
  31. /////////////////////////////////////////////////////////////////////////////
    4 z+ J* K8 f" K" ]# J
  32. // CRevAppApp; `  ]" K0 g) p0 d' I0 k3 {% x2 `0 N

  33. $ P! ?0 w4 t, b) C$ ~( T1 X
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)  }- X# i; Z4 n! z" {: P, N
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    0 g8 t+ |$ f6 Z' Q/ f. t* T! x: f8 v
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 V, e) }0 S/ v4 f2 `  o& x
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    # C, c( ?2 x$ Q! }0 v- R
  38.         //}}AFX_MSG5 w; q2 [% K7 C  F
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)5 W$ O5 }. @7 p8 ^+ l
  40. END_MESSAGE_MAP()
    * T  m# P6 q! E! z; @# {: E

  41.   `  K- n* E! M) W4 m1 Y& W
  42. /////////////////////////////////////////////////////////////////////////////8 X2 F" ^6 ^7 k; R
  43. // CRevAppApp construction
    4 O$ q& f  E& H* A9 w( L& i
  44. 9 [3 {0 b- }* V2 i
  45. CRevAppApp::CRevAppApp()
    ; m9 {; t% x& ?8 |& O
  46. {; R9 e  I1 U" ]7 I2 O$ }
  47.         // TODO: add construction code here,
    * G6 n* p" Z$ \" a
  48.         // Place all significant initialization in InitInstance  H2 O9 `" ]4 T7 B0 x
  49.   bDisplayIsBig5=FALSE;
    ; g) e! ^, F! b( `# d" I
  50.   bRestartUpdater=FALSE;
    ' `( \; G# Y! a9 N2 ^0 k$ q
  51.   bFinishUpdated=FALSE;2 {9 D- q5 M) V6 V7 S$ G
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    / K& s, K( j5 |6 j1 y
  53.   InitChangeDataBig52GBKS();- L5 D& A4 ^' U0 j% P2 K
  54.   InitChangeDataGBKS2Big5();
    7 u# `8 N6 q7 U# p7 r) |. V1 L
  55.         //" W5 U* X/ ~, m
  56.         bClickRunExe = FALSE;
    7 R* n: f: j2 B4 M
  57.         //
      U2 Q/ d. y- y3 [2 K% C
  58. }
    4 |9 d. n+ X" V$ c

  59. / G! c- y, t% u6 e1 j9 @
  60. CRevAppApp::~CRevAppApp()
    : j" e% e' }. U$ j) d# I- h
  61. {
    & X% |8 W3 c5 s" P6 L/ |
  62.         // TODO: add construction code here,
    3 ^+ F0 _3 K( I: O
  63.         // Place all significant initialization in InitInstance
    & b- y$ w/ s5 e# c5 E
  64.   EndChangeData();
    & j3 G/ _& y1 y' z% B. Q
  65. }* N7 b1 f* R' q) ]! i
  66. + s* ~- N0 Q' f& R$ P; U
  67. /////////////////////////////////////////////////////////////////////////////6 i' c; X: \9 J1 M  Z4 v
  68. // The one and only CRevAppApp object
    $ E% f+ p5 m% l; o# p: Q% w4 n9 f- I- d

  69. " ]9 N: F; v& n6 ]  Y. H% _
  70. CRevAppApp theApp;. i4 T+ _; Y# L3 f: L7 x' ]7 e
  71. ! K* p0 H  }$ P# o
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    - s0 n) b) x9 I6 ~& j6 q8 S
  73. {
    9 i/ R+ }1 _+ j9 V, ]) s+ u
  74.   int iEOF=0;; q8 e! M  N/ a( Z" ~1 W
  75.   char szTempName[MAX_PATH];  `% M- X6 y4 [. D
  76.   *szFileName=0;3 t* }( [0 F% V
  77.   iEOF=fscanf(fp,"%s",szTempName);$ f7 x5 ~; x& F4 h0 J6 _* b! v
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')4 ]& K5 i+ E/ ]) w. ]- h% B) {
  79.   {
    ) K& {3 B' C- S
  80.     strcpy(szFileName,&szTempName[1]);
    2 U* v( S" b+ @1 I
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    7 C1 v! z+ }  V7 J% m
  82.     {+ G/ t  r! e2 H
  83.       iEOF=fscanf(fp,"%s",szTempName);( j/ j7 r% V, ~' h/ n
  84.       strcat(szFileName," ");
      g% G0 Z  y% r4 O# Z
  85.       strcat(szFileName,szTempName);; M: L" N' K6 b0 f8 y- Y. o/ ^; ?
  86.     }
    ' f9 x5 |0 t3 C$ L, w  t
  87.     if(strlen(szFileName)>=1)
    " W; O/ o' i+ z4 g: z
  88.     {
    " [5 S5 j& r$ J1 O, d' g
  89.       szFileName[strlen(szFileName)-1]=0;
    0 J1 C) B5 v+ `* V6 q
  90.     }
    " ?1 F4 ~2 _0 G& G8 X
  91.   }
    . |! B6 c* j* B  S/ F  G% i3 a
  92.   return szFileName;
    7 Q' D+ l4 n8 K9 w. D5 G/ e6 Z* {
  93. }
    0 N7 m' o, h! r9 k6 p5 z5 `
  94. * c+ C7 ]' V- d4 S7 @) f; l
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    5 N( _' R: A2 z2 [% r# Y7 f
  96. {
    $ l. b5 ]9 t% a! q1 d
  97.   FILE *fp;
    ! k  h% q. G0 U7 i5 w$ x
  98.   char *key=NULL;' ~7 M% K# v* Z$ z( o8 m& z" H2 P
  99.   char version[MAX_PATH];
    $ D9 a5 Y# {$ s  Q1 r8 K
  100.   LPUPDATEFILE file,olds;0 F* x4 L% ^! ]( A
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' k7 F3 c$ W7 h: v) q8 a
  102. ; L- D. C1 r  y) @
  103.   UpdateList.clear();' i  v6 D6 X' c: g3 X; `
  104.   UpdateFile.clear();9 m$ f/ Y3 N: \8 W' X2 V
  105.   if(GetFileAttributes(filename)==-1) return false;( y+ _+ O3 N0 t1 {5 U- M7 L) o: V
  106.   if(!(fp=fopen(filename,"r"))) return false;
    - a" a- }4 Q( p. J! T3 s6 b, `
  107.   fscanf(fp,"%s",version);
    + R+ f- y3 }1 R2 C' C) m3 O8 \9 U
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . e, O* c7 a" f$ ]/ j2 [' L2 E/ u/ Q
  109.   while(fscanf(fp,"%s",version)!=EOF): ~1 Y; ~. f5 y8 g) j& D8 F
  110.   {1 H% _$ i: ]  J3 t( ?
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ m/ y: D7 K$ s3 N& \
  112.     fscanf(fp,"%s",file->path);( v; A. V& t- C6 g
  113.     ReadFileNames(fp,file->file);
    / {) J0 J/ g; \  F& Z( B5 L7 P4 U4 v2 |
  114.     strcpy(file->full,".");2 O' a0 O; s* w2 a/ }
  115.     strcat(file->full,file->path);+ b4 i% j. @, O
  116.     strcat(file->full,file->file);4 @: s, ~# @, \* x
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())6 u& J- G- G1 Q! V
  118.     {3 b) o; P# g: O* c. S+ S- ?
  119.       file->vers=(float)atof(version);" Y7 r' G0 @! H/ r) B! {
  120.       UpdateList.push_back(file->full);  G! U8 k# d/ L& u  _
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));' ?6 C4 t$ ]6 Z& z0 y
  122.     }) S& \9 {+ P' T% p: a
  123.     else
    3 m4 h! w8 t' k( M& Y/ q
  124.     {5 o1 H. I$ [: ?: C' f1 I1 ^
  125.       olds=(*p).second;# d- n* S/ }( f* P+ V8 s5 @
  126.       if(olds->vers<(float)atof(version))" @! G+ ~; b& P7 c, S6 J
  127.       {# E3 Y6 u, U9 {2 }+ p
  128.         olds->vers=(float)atof(version);! c, A% y* q1 ]" q5 ]
  129.       }2 k4 y1 a0 \; e" {* \! P
  130.       free(file);
    # h+ V- y' Z6 Y" a% O8 W
  131.     }( n# }7 O( N! }: m+ F% K! _
  132.   }
    4 g" s- A. j9 n/ k5 D: R8 q
  133.   fclose(fp);5 e+ B+ K- Y8 D5 |; x4 g7 t; D* q! k
  134.   return true;
    / w: j8 V  M+ l! w( G
  135. }
    . x1 \( g1 P0 s: f9 T/ |

  136. " \, j7 F0 v  C9 O/ k5 T# X
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)) }$ G& M( H9 x7 A: W
  138. {$ L6 `2 l+ h# Q- }0 y
  139.   TCHAR  szFull[MAX_PATH];4 x* F. k6 @' y& x1 }; A5 ]
  140.   TCHAR *token,*inter;
    ; k( F$ A5 X5 u) {) k; ?$ D  u0 s' K
  141.   *szPath=0;
    ( k9 O1 F* J% J# _! Q
  142.   strcpy(szFull,szFullPath);
    9 l8 Y4 I/ q6 }+ [. o" R# N
  143.   token=strtok(szFull,"\\/");
    / e- j- D$ ^# K1 X8 L6 ?0 a5 Q4 T9 T
  144.   inter=token;: q" r0 }+ a6 a+ c
  145.   while(token=strtok(NULL,"\\/"))1 q2 u; _$ [- C  n4 O! a" q1 i5 [& w) ^
  146.   {
    9 l7 c3 ~/ Z8 K( b6 @/ r9 T6 J& Z
  147.     strcat(szPath,inter);
    : _# w# O" F  M" e2 U/ r3 e" Z
  148.     strcat(szPath,"\");0 z7 x( v6 Y- _! R& z) J
  149.     inter=token;
    4 ]. p& }$ N, w7 w2 k5 z
  150.   }: i. f( G, W; J2 k0 \% |: |. f5 K2 a
  151.   return strlen(szPath);8 ^* U5 R0 N3 K7 I- H
  152. }
    ) x. A; q+ B) z8 X4 J5 x* c' o
  153. ; }: q% h( f( L$ Z! f# ^. J
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)4 D9 p5 J8 [: L
  155. {' _$ g" }6 Y( n3 l- n0 D& F4 U
  156.   DWORD attrib=GetFileAttributes(Target);
    . f+ Z" o  I) o( ?% e
  157.   if(attrib!=-1)4 L% l5 o' R& f- d" Y* z
  158.   {8 ~- Q% b- f9 t0 s& I. L' K
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))( g1 C: |5 A5 g: }( x7 ~  o
  160.     {
    # y5 J; m0 x) E8 N- D: t
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);0 T# y- q3 O+ o
  162.       SetFileAttributes(Target,attrib);8 \5 m7 `+ [+ F. h; q5 A5 B& c
  163.     }( m( E5 ]1 q& K0 ]/ t0 N6 E
  164.   }
    0 ]4 j- D8 n& S4 g. o4 z7 N& Q, @
  165.   CopyFile(Source,Target,Erase);5 l- K3 K2 v% k" X3 z
  166. }
    3 F- H& I% z; F
  167. ' Z0 E" `3 m' W( E+ i* H: d
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)! O* H4 R) n/ f# S! b; D, E; u
  169. {, K- U5 U+ |+ @. e# }! z" `
  170.      FILE *fp;: I6 }/ U6 U* Y7 N
  171.      char  szBuffer[8192];: S! F( V5 W) D7 n
  172.   va_list  argptr;+ L/ z/ u; V# a8 z

  173. 9 I+ q3 A1 X$ Z( c/ m: d
  174.         va_start(argptr,message);% Q9 ~8 }: w# s- Y5 S
  175.         vsprintf(szBuffer,message,argptr);
    ) ~: S4 \' D' N- N9 o+ }# y* g# Q
  176.         va_end(argptr);9 x3 D3 D; c' r' `6 ?: A
  177.   fp=fopen(FileName,"a");
    1 R, ^* s' I8 {4 i' f/ s# l6 ]
  178.   if(fp)+ B# j! }3 s$ p' V) l! H. p
  179.   {
    2 Y8 @3 U5 F0 Z' _$ J: c
  180.     fprintf(fp,szBuffer);
    4 N2 N% d; _8 t5 b; K" M7 H4 _; E
  181.     fclose(fp);
    6 u0 B9 ^' h2 M; h) k
  182.           _flushall();
    + Z, E/ g+ x2 Y6 F7 p0 Q+ V8 f3 G% Q! _
  183.   }
    3 k8 T) j: Y( p0 {0 j4 K; E# M
  184. }  v! z5 L# G$ J) E  m& A

  185. $ `4 S7 J/ v# K4 U3 t+ G
  186. BOOL CRevAppApp::Fclearf(char *FileName)' t" P  C( y/ }) N" J
  187. {
    # l% N0 ?! f5 _
  188.      FILE *fp;7 @% Q1 `; [- s/ z( I
  189.     DWORD  attrib;! N5 K( a' G, F; E% P
  190.   attrib=GetFileAttributes(FileName);! h; j1 e6 q! Q% z3 R
  191.   if(attrib!=-1)
    : a( |9 @; T. z3 s- ?) M! B9 s
  192.   {
    + P5 E% r  C0 U  N9 o% p
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    , M1 E5 O  j, ?4 d; ?
  194.     if(!SetFileAttributes(FileName,attrib))
    5 L, i' \: o. Y, z4 }+ f6 X& I
  195.     {( o8 t  C$ D7 P+ k% r9 i& @
  196.       return FALSE;
    2 a' B7 ?& n* G: Q: i" r9 f& `/ d
  197.     }
    * c; h" F1 f6 D7 R& f: J& t5 G. C: @
  198.   }5 Q: U% k  [! V: P' [, {
  199.   fp=fopen(FileName,"wb");
    ! Y1 \. p- H# Q8 Q- n/ K( k: [7 D
  200.   if(fp); U, R. A& @+ J) T$ _* e
  201.   {4 j: {) Y3 U2 n: Z) O! s2 s, Q
  202.     fclose(fp);
    7 d- a3 _4 u6 V  ~0 _  v
  203.   }3 S$ A( ]/ c; y9 O* p
  204.   return TRUE;. g) u( v" a( b! u6 w" O
  205. }/ {7 S$ X- x" L6 v. }, H; {4 f* n
  206. % J9 v# x2 x. l+ K0 H. A
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 L4 x' ], C8 ]: I
  208. {
    9 a8 Y5 o" }1 K7 |
  209.   char filename[MAX_PATH];# a3 w: s$ v; R, W' {
  210.   LPUPDATEFILE file,olds;5 i, A+ z7 u* E0 ?: y0 b
  211.   std::map<int,CString>::iterator i;
    ' ]: [+ x2 U0 ?6 v' a& H  g
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' ]7 Y/ q: _0 _  f  E1 q; Q
  213.   std::list<CString>::iterator l;5 A2 M  A0 f6 C! P4 \; M

  214. $ X7 X1 `! C# O
  215.   if(bFirstUpdate)" M5 [1 Y% w7 b- P- j, t
  216.   {
    1 b$ G9 @5 Z2 B' G7 a7 Z# w2 `
  217.     dwCurrFile=0;2 t5 b) H6 [( c! c' e
  218.     bFirstUpdate=FALSE;3 L( ~' K. x& w; F5 X" S2 a
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 \) D: G# m7 I
  220.     {4 Q; O$ b1 g, w. m3 P  {
  221.       dwTotalFiles=UpdateLocal.size();
    2 x. h# g$ a8 I5 I  g( I$ h
  222.       dwDownLoaded=0;
    $ {1 Z( d% h- Z) A: k
  223.       bSilentStep=FALSE;
    ! r7 D9 G8 w  E' @( g7 t
  224.       bCompressed=TRUE;1 o3 R7 H! v. z4 d$ e1 h# N3 l
  225.       strExtLocal.Empty();
      ?! y2 v5 f3 G7 T
  226.       strFullName=(*i).second;
    ( k" U% q8 x$ C# i% H: t
  227.       dwProgramState=AP_CONNECT;; N# j- z* V. O1 i
  228.       return TRUE;) _: j# D  _1 e9 m( a" H; g, E
  229.     }; j* i* l2 G) j; ]
  230.   }" e4 }" h5 P5 b# s
  231.   else if(bRestartUpdater==FALSE)
    " V% j9 I/ L8 Y- z3 c
  232.   {
    1 k4 S5 f% o8 W6 C9 j% O
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 T6 j/ w  M3 _( P% R' e
  234.     {
    $ }& e4 K" ~0 i! m
  235.       file=(*p).second;  Q  ?) S# W. N' h" U2 W6 Q3 w
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    2 Y) M% ]  H" L
  237.       {! N5 ?5 l: X6 q- [" G
  238.         olds=(*p).second;
    9 V2 Z1 l' I4 z( [
  239.         olds->vers=file->vers;
    . Y* B( w$ j  A" |6 _1 A
  240.       }
    " T/ I* {6 E. E; W
  241.       else6 b2 V& `& V( K& {1 u
  242.       {
    6 i" Q3 q* U2 L7 I, H& k
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* B6 x) m! v& L$ U
  244.         memcpy(olds,file,sizeof(UPDATEFILE));$ N& I9 l) r/ T4 j
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    . j4 W  \% j% n
  246.       }: b. s" U# i6 a. x" v) S* S: l
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");8 u' P' d4 H! T
  248.       sprintf(filename,"(%s)",file->file);* e4 [1 i7 K8 C- E: {+ @* E  x2 F, ]
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # k3 `9 W" a* \( B8 c* \
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : T2 g2 F& X/ y" z
  251.     }
    $ N5 b4 ]- I* e  B4 q
  252.     dwCurrFile++;
    8 d  R2 I" @7 r1 D# V. w
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( Z) y# g% V: A# h8 O8 m
  254.     {/ E9 x! Q' I. C( |
  255.       bSilentStep=FALSE;1 b+ m) ?8 C. }& t
  256.       bCompressed=TRUE;
    $ I  A- f8 w) U( `- u/ A& k, b
  257.       strExtLocal.Empty();4 `$ Z7 l0 H+ Z, }% \
  258.       strFullName=(*i).second;
    0 p) e( a" G( t0 J
  259.       dwProgramState=AP_CONNECT;
    . d. [4 L$ o) B  W
  260.       return TRUE;
    + f' J9 _% l( ?( k5 H, l
  261.     }+ @+ g5 @1 k, F" y
  262.     if(!bRestartUpdater)# b0 p- z2 X' N9 d, M0 N
  263.     {
    # \8 k2 \# M+ S' H2 u5 f
  264.       int iCurrSize,iFileSize;
    + I& q; n) Q0 C1 {3 z
  265.       iCurrSize=0;
    , n% d) b2 d, n9 J7 y! V' e1 \' V
  266.       iFileSize=UpdateList2.size();
    : ~' i- O$ u1 R! P
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");$ n& J# y. u, K$ O& l4 S
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");" q" I0 h1 }" n' Y. V: g
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");% n* h# ]# W- ?- e7 j; A
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 B9 @, D9 Y1 I1 O/ j% R4 K/ N) b
  271.       Fclearf(".\\update.dat");
    ( a. u: K, X/ ^* y! j3 ?8 j
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    : x+ K* {' J9 d9 t6 l
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)5 \3 b! Y  y. a4 i
  274.       {
    * [6 m9 \1 R5 f5 h+ }7 |
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 b+ J4 O2 D9 j- Y0 s1 O$ p+ {: ~
  276.         {
    ; v' |( _  c; z
  277.           file=(*p).second;6 H3 Z* D4 ?+ ^
  278.           sprintf(filename,"(%s)",file->file);
    : F. I3 K, Q0 T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 o# ]1 g& P9 j* F8 Z' ^
  280.           iCurrSize++;6 H1 Q! X7 Q/ I  G
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));1 Z, [' H; `$ r4 D1 b
  282.         }
    ) X% i# p1 T0 q) s/ h- f; B
  283.       }
    % N: M& F: x: R( ~
  284.       unlink(".\\update.txt");+ d" U7 U  y+ h* X* o
  285.       unlink(".\\update.tmp");
    * U% N( x$ T5 Q' f9 s
  286.       Fclearf(".\\checkversion.dat");
    & S/ H2 a4 l% [
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' |9 V3 w3 F" P2 r
  288.       if(UpdateLocal.size())
    5 b/ g5 b5 h6 O% g
  289.       {
    % w0 r/ j6 J; D- m/ v
  290.         UpdateLocal.clear();
    9 I  l: y! e" ~
  291.       }+ X( |6 F; T4 X- C* ?
  292.       if(UpdateFile3.size()). k0 _0 f5 O1 |4 j1 z) }6 X
  293.       {! G8 W2 `% @/ V' e# I
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); E# z, t% v; c
  295.         {
    7 J1 U: H5 n2 U- M0 u: E
  296.           file=(*p).second;* d& a5 ]3 f% c( Y# p/ F
  297.           free(file);
    * r* \" B0 Z, M$ l7 \5 D3 K8 _( j
  298.         }9 j+ p, |8 G) O! ?- r5 t) B, q6 J  I
  299.         UpdateFile3.clear();6 `* B4 l+ H" F% o. @
  300.         UpdateList3.clear();9 z  L2 L/ w) z% @, l/ r
  301.       }" q5 C, ?( J4 w1 H! w
  302.       if(UpdateFile2.size())2 N3 x9 Z& I& E: {  M& D6 I
  303.       {
    3 c( d- b! A1 W* |* s& U  u
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* \$ {+ E7 y( B* G+ l( i
  305.         {8 G# E+ _% D+ W$ y
  306.           file=(*p).second;
    " K2 P/ g- ~2 X: I
  307.           free(file);% x( L0 M$ O/ D( m. n" r
  308.         }
    6 d$ S' w( Q& v# M& U
  309.         UpdateFile2.clear();
    $ o! @/ ]' c" n( X
  310.         UpdateList2.clear();
    . d  M) [; M+ J4 S/ G" _& s
  311.       }4 p5 |. g$ X8 F
  312.       if(UpdateFile1.size())+ Y7 x( w# o9 O
  313.       {
    ' l1 y$ D( P* N4 j3 L# i/ l
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 t2 ?6 q% a; `- ]
  315.         {) Z# x+ R. a: c9 v
  316.           file=(*p).second;
    8 R3 R: \1 r" R- ~% _
  317.           free(file);1 R( N! A# K2 v7 r% p  B2 o/ ~8 R1 _
  318.         }8 j, f4 Q; R$ h
  319.         UpdateFile1.clear();
    0 t3 S5 c. l; k) }
  320.         UpdateList1.clear();2 A) K7 q" j' S  z. v
  321.       }9 ]9 T" H7 \4 g9 X: Q! T6 k
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));8 c3 v3 @  K+ p7 ]1 G" i% w
  323.     }! z7 r5 Z0 J3 v& X5 m% J
  324.   }) k7 R6 H6 e! A6 Y
  325.   return FALSE;" h/ y: r0 T7 W6 t) F/ `; o
  326. }* y$ X) M5 k4 e1 i
  327. ' E' y9 f0 F: q! \7 z
  328. void CRevAppApp::ClearAll(void)
    8 L9 S# |7 N+ h' [. A
  329. {5 N& c+ [8 ^6 Q* d; V4 `
  330.   LPUPDATEFILE file;
    * O- u8 C) p/ A' _9 L) Y9 n9 u. g. F
  331.   std::map<CString,LPUPDATEFILE>::iterator p;; Z0 k& Y6 n& z, ~
  332. & c9 f% A1 H+ K  k  L, g
  333.   if(UpdateLocal.size())
    * t; w8 w5 m  ?7 {9 S3 [
  334.   {
    6 p( U* u) U. @3 H: u* v( C
  335.     UpdateLocal.clear();# _( a% O+ {( R5 h( }+ y
  336.   }. ~% C. e! t. w* v7 b7 g! p3 p2 m
  337.   if(UpdateFile3.size())
    ; m+ j0 F# h  v! ^
  338.   {
    7 c& U5 e( `% X- @
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  I1 f/ `: I5 P+ F
  340.     {
    7 Y/ S9 H0 o( |. _( N* b9 P
  341.       file=(*p).second;
    % s5 ^9 k+ \$ X& b& j* u0 y( o
  342.       free(file);0 _: T" Q- |' r4 L5 a/ ?' a
  343.     }
      F4 ]6 z% ^" O( g2 q
  344.     UpdateFile3.clear();/ f% f. z( M! I2 X0 ^: k5 G
  345.     UpdateList3.clear();8 H( R9 S# D. F5 g+ K$ r
  346.   }& s) G" m% _( b
  347.   if(UpdateFile2.size()), m  _6 D+ S6 j7 i$ w  @. `' A
  348.   {
    2 k, D8 M$ Q" P; v- ~- m
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ t3 O+ n+ Y6 J" h/ {
  350.     {
    3 J, B) j; j) r, x# @# U0 p
  351.       file=(*p).second;
    6 a  E% n/ z6 U( H. i1 s- U( P
  352.       free(file);
    * y# y' m$ E* P5 {2 M( T
  353.     }8 r! S8 d: |. Q3 K: K) g
  354.     UpdateFile2.clear();+ H, |/ G7 d' P
  355.     UpdateList2.clear();
    $ s. Q  w* d0 n8 N" C
  356.   }
    * ~$ X  P2 \: s! e- K) @( H+ l8 Y
  357.   if(UpdateFile1.size())/ [% i, r7 r2 j
  358.   {
    ' q5 m  d6 O0 U* \3 b
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . f/ P3 H! u7 t5 u
  360.     {
      w: E/ c. s5 m9 E* u; h
  361.       file=(*p).second;
    % f  `. y! f$ c/ t* b
  362.       free(file);
    3 `5 M4 _6 T3 ~0 g0 X
  363.     }: f6 f6 @; `" a7 q
  364.     UpdateFile1.clear();
    ) K7 d7 L8 R* W
  365.     UpdateList1.clear();
    " H6 f) z6 r; L7 r9 Y: |
  366.   }1 n9 r$ T# W" M! f% z' P, S; n2 {
  367. }  
    * C3 \5 E% s, t( h8 R2 y
  368.   , A6 ~! J3 I/ Y5 u" w4 L" ^" b
  369. BOOL CRevAppApp::CheckLocalVersion(void)5 D5 g3 E" e) i9 L; M; Z
  370. {: b9 W4 @' g& U3 a! B3 _
  371.   int c;' J# u! ]: W8 m
  372.   LPUPDATEFILE file1,file2;* O* i( j. g, e3 N) t
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;* J2 {+ E* C/ }' C
  374.   std::list<CString>::iterator l;8 z0 r4 I# E1 ]( m) z6 E) }- H

  375. % G/ c) I: F; G1 t; C
  376.   UpdateLocal.clear();1 y9 T9 k+ F( O4 y* b. Y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);! m) r) c: k; g1 k  i! ^8 [! E& [
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);. M, Q, Z* g* d: y: i
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);6 L( t" c2 z- p  Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 C- c9 K+ M, X0 r: {- X) h, L2 d
  381.   if(UpdateFile3.size())1 a* z; x1 _( T4 a" N# g
  382.   {* v* }+ U0 @5 ~3 F
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    & f- z) i% Y4 `; e1 ]5 F
  384.     {
    7 Z5 D1 g- \6 D- i4 e
  385.       file2=(LPUPDATEFILE)(*i).second;4 E. @& C* A, C5 [
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 Q4 z: q! w$ F
  387.       {
    ; R4 N# S' ~1 W0 S% N
  388.         file1=(LPUPDATEFILE)(*p).second;
    1 j. N% _+ J" a# M8 M, `
  389.         file1->vers=file2->vers;9 J. O- @& Q& ]
  390.       }
    ( V; ~1 ?8 _3 V9 K7 m2 f
  391.       else
    7 Q4 h- z3 v/ `  h) ^5 t' w
  392.       {
    & E) N3 ?8 l, Q/ V, S6 g+ v
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 Q3 k/ H& r" A; W
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    5 R, `4 j9 m# ^9 }1 T' t' K
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));8 D9 |2 U3 m4 @* ~: K
  396.       }
    * L% h( M3 o1 W, d( p3 L: s$ S
  397.     }
    4 z5 b6 \8 r8 }
  398.   }
    ) I* K8 _  ?$ n% q9 x
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)' c/ q7 R' N. }; `
  400.   {
    1 H! C5 Q, t( d( }) K
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    , u) N& Q' V  |
  402.     {
    5 d0 ]8 I1 I! a) h" T' X
  403.       file2=(LPUPDATEFILE)(*i).second;' p0 B$ y8 E1 v; A+ ~  J6 Q: E# B
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! ?& B# H1 m  n( s. L
  405.       {
    & N  ^0 y+ Z5 ^8 K; I
  406.         file1=(LPUPDATEFILE)(*p).second;
    % M' n! Q! C, {  X! e
  407.         if(file1->vers!=file2->vers)# N# I8 w3 T: K) d3 ?5 D, C
  408.         {
    . p- \0 I; j" h/ q+ s
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 x8 D4 Q! y3 {5 H: @; z" b3 y
  410.           c++;/ H3 X$ Z% }  m! P0 Y. D4 [
  411.         }
    . u' N* t) X8 W, r5 N0 r
  412.       }, v! m% b& J, T: M4 l" k
  413.       else
    2 R+ m! F$ @# w+ p; w& S% D
  414.       {; k# K# W+ D; s$ s/ }6 y, l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  B$ [& l# N8 E: f# z4 @5 a8 T
  416.         c++;
    7 L, h! k5 p7 s
  417.       }
    . g8 }/ ]0 x. R
  418.     }
    2 A3 a5 l  N  \
  419.   }$ [8 \0 l- r: w* E' n! @
  420.   unlink(".\\DownLoad\\update.txt");, o! P) p& }! j& C0 C
  421.   if(UpdateLocal.size()) return TRUE;% {) I' X/ h" s( E# ]8 r. s* j
  422.   else                   return FALSE;7 g  F3 U+ `6 r. O+ [
  423. }
    & S) E. `& u: o
  424. 5 h' ?5 `$ t5 w5 f) r
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! `# y: p. p0 v% S
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - ~& m* k  v& \( q7 d
  427. , u3 U8 e9 J/ u- `

  428. + X* x( }' y0 b% k

  429. 7 R1 l* ~; D" T7 W& T( b
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 T5 V# Y1 K9 j: \
  431. {' ]4 _: }8 K% t
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ) R: x0 w5 h+ i
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . }) H* _! D3 @
  434.   {# i- E0 }5 v5 ^2 A4 ]% j8 y% [  F
  435.     char szLanguage[50];
    ' `; V+ w0 {8 ]) V
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' Q$ {# N4 e! {+ ~/ _' l
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 _9 x1 g1 J) ]! g2 @4 ~# y" B
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& A: Z' K7 ]3 r1 [' J4 _0 n7 ~7 H& K
  439.     else                                   m_iLanguage=ENGLISH;4 p, G& z; C8 @2 C9 g! \
  440.     char szRegister[100];; I0 u2 L) o! y' `7 c5 @, R
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& h( M  S; T# j0 D+ V% ~4 U
  442.     strRegsName=szRegister;
    ; D! Z- ~8 u9 M$ j3 [& V6 S
  443.     char szPatchURL[100];
    * o) y3 Y- H! T1 j3 z" E# R- e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ; M0 g4 B) g, `
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 p3 x% _6 n- f; e1 D
  446.   }
      z- N) h; o$ M, E: q1 e% j
  447.   else& P- X& s/ q6 k& ]# I% X5 b
  448.   {
    5 r# `' B  X% f$ \9 O
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. B9 M" F4 a3 }8 O( P) f5 v
  450.     strRegsName=DEFAULT_REG_URL;. U. R! L+ [3 O7 F8 {6 {% N- i
  451.   }$ V5 a3 D( w" N. z% F8 s  y1 }+ d
  452.   if(GetFileAttributes("hosts.ini")!=-1); w  f/ b* W5 t- n% `; i1 W1 L9 f
  453.   {
    : G; U7 M4 v7 t  P' b; O
  454.     char szIP[50];
    : }+ R, b. c* P: |6 q
  455.     char szDIR[300];( ~' }# C5 @5 Z; ]
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    : P0 a- n! @' d% C2 e4 Z( C
  457.     {
    6 ]( y4 y4 i, N8 ^: k+ a
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    - j5 f# v# Y4 g/ u4 E
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");/ x1 S- O! j4 N0 W" Q* W( k1 I5 Q
  460.       strHostName=szIP;1 I' F+ k; X1 y2 e2 e" H7 ~# n3 P
  461.       strHostPath.Format("/%s",szDIR);
    7 N: N, p3 p- `/ a7 P0 `+ k  Z9 w
  462.     }) J- H$ c' j' h0 [
  463.     else+ h' V! N7 J7 K% i1 z
  464.     {
    % @! x' h" H; O( {
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- W$ T, P- \+ b. W. M1 i
  466.       {
    1 F# D& y3 o6 d, L/ }
  467.         char szLanguage[50];
    2 Q/ c7 v% R2 G" d# E
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 S/ ?3 q& c9 n7 |) \; D
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% L/ N  r; U5 E1 G3 s& V
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 |1 \' X* O" b9 |! ?
  471.         else                                   m_iLanguage=ENGLISH;' Y) ~, b/ f4 V* [# o- y! }8 m. Y
  472.         char szRegister[100];- X; J; J5 g+ f0 e' I! ~
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" _, d- h# ^. C: |* k6 g: V) d) T
  474.         strRegsName=szRegister;
    + T3 M& r5 M* a# k
  475.         char szPatchURL[100];( r5 z1 s# l$ @1 {* w8 q
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 e, }( f& L5 L, |% ?
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 W* {8 r0 q! e4 Q+ ?
  478.       }, Y- F5 A6 e; T5 p6 N
  479.       else
    & L  I& t+ h' |- P6 g3 c& d+ i' X* W' p
  480.       {( j# O$ m/ R$ _- Z! T! L3 d
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 a. r9 X/ X( B- Y
  482.         strRegsName=DEFAULT_REG_URL;
    & x; m+ [# n3 P
  483.       }/ f( P# R; e: N2 I+ @3 [9 Z; B) W
  484.     }
    ( n* x9 @& W) W% E9 ~3 ]' m
  485.   }
      l. r5 R( W& {
  486.   return true;
    ( y0 l8 C* G- ~8 g. D3 _
  487. }% U2 u& C' e- F+ C. C

  488. # d3 v2 I5 C$ d2 M
  489. #include ".\ZLib\unzip.h"3 A6 b# @( D( s; }
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);) R/ T  J( `3 |5 ]. q7 }
  491. /////////////////////////////////////////////////////////////////////////////
    9 S4 Q- h5 `. t0 {# b* w% F1 l
  492. // CRevAppApp initialization, O$ L/ u5 s  M8 l: v8 ^

  493. ! i& S- ^' q5 B
  494. BOOL CRevAppApp::InitInstance()' h% d. m! [) X1 T0 S
  495. {
    " y1 M3 v7 G  n! U" u
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    . k8 ]! J) q( d) M9 Q' k/ j

  497. 6 T5 ^$ }$ Y( x2 y# z6 r! R
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    8 T! n+ F9 p) I  }  W
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . k1 Z  M( f4 B  l9 u
  500.   {' V  _* t* Y0 c# p7 g3 v- h
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ; O, m: V; ^; v
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ! [" e; |4 h6 a' _+ U% Y) X
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))# l% W4 V5 {# O4 q
  504.     {2 J- Y7 _' y* o  O4 L
  505.       strcpy(szPath,szPathTarget);) {( V/ _9 X, I8 |8 V, o  ]
  506.       SetCurrentDirectory(szPath);
    7 k6 s; m  U6 o4 j
  507.     }, C) a' D$ C) e
  508.   }7 `7 ^& s; g5 W6 C
  509. #ifdef _DEBUG
    5 Q7 [5 l# T# U4 v- n9 h
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! w) j* M9 @. ]0 m2 T, O
  511. #else
      v4 _2 `! i& _' s
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ ~1 N* G9 {1 R; b6 k+ ?$ v6 V
  513. #endif
    . S* k9 c4 d( ~9 S& U- ]6 x$ f; h0 f
  514.   {
    # t: E* f- o' G( P  b0 \, r+ s
  515.     char tempFileName[MAX_PATH];' u' I1 |4 K, g' ^7 i
  516.     strcpy(tempFileName,szPathSource);
    / P+ D( s) Q- t7 [) l' o5 t
  517.     tempFileName[strlen(szPathSource)-12]=0;+ ?% E) o! {  Q/ A. v/ D
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    # d7 G7 a, H3 {: Q$ J
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);5 p& W& T  [4 B) x+ x, o
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ( p) q" s8 z$ ^1 `1 i
  521.     return TRUE;1 V8 Y0 |2 I3 e: u$ }
  522.   }& ^+ n+ ~+ r, R' k% Z7 l' n
  523.   // Nuke 0118: Delete run.exe
    & b- J+ g8 U/ W& ]3 b9 k; E
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );6 [- _) ^( `/ g9 O6 }7 v5 A: Z  n
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");  V6 J9 y/ U' k: s: B
  526.   if(!ReadCfgFile("Config.ini"))
    1 \+ `7 b2 U; q# [3 d
  527.   {/ s/ j; G# F% \# x+ a
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);1 X- I4 M  W& L- s9 t
  529.     return TRUE;
    " C2 y: M- B/ F1 T% P0 j
  530.   }
    / r" x3 |, J* C* H3 f" Z
  531.   HANDLE mutex;8 M2 D5 e' ~+ ]& r. K0 w2 u. P
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))6 Y" a/ F9 I$ Q
  533.   {+ ^# Z, L& R9 j5 O; h. z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)% D# Q6 v( s  h" @1 X
  535.     {2 t. o5 `3 o+ H# F1 \! T5 J- F9 R
  536.       CloseHandle(mutex);" \  d( s; f3 ~$ q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    7 Y3 z$ I0 X' M8 ]6 N
  538.       return TRUE;2 g* }. q" v3 z8 ?, o
  539.     }
    6 C& s2 ?3 B1 \
  540.   }  
    " h3 ^% s2 z. z& k
  541.   CloseHandle(mutex);' [$ Z" `. x; |" Y. ?. `
  542. : y$ \5 d% i) _$ P; v
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # F+ i0 d/ r' i* T( W

  544. ' W3 r" a' @' U$ A% N: X
  545.         AfxEnableControlContainer();
    - U0 N  i+ j( o' Z  s
  546. 0 b/ `9 ?$ D. E1 ~
  547.   bCanUpdate=FALSE;
    * T- e  E+ r& B% q) ^5 b2 M* \3 Y
  548.   dwStartUpSteps=1;
    $ l- H1 |9 H  J9 b4 E
  549.   dwProgramState=AP_NOTHING;' ]8 G. L- a. \# G$ Y% N7 ~; b

  550. + |1 J" s7 w. C6 K4 `8 L8 G; z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);+ ^, ^8 e- r- ]0 ?$ f0 {

  552. ; s" }8 }" K, Z& f" g# ?
  553.         // Standard initialization
    7 T/ U( T+ F* v9 S' W- z% J, ?
  554.         // If you are not using these features and wish to reduce the size
    8 D" S* k% \' b/ s3 |: c. m
  555.         //  of your final executable, you should remove from the following
    0 U7 y: v: J9 }6 Q- f- i3 U, N
  556.         //  the specific initialization routines you do not need.' Z. l7 N' ~7 Y; B

  557.   a& i9 {, {! A% B
  558. #ifdef _AFXDLL
    . @8 x# X. P4 ~* u; z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' J+ L& d4 l8 i! R  b
  560. #else  h" A& D. P+ b
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically5 J. x7 s6 K% Z" I. q( o
  562. #endif7 G* u" E' A/ f4 o  d
  563. : I: f2 x6 J" n" h7 `- r
  564.   dlg=new CRevAppDlg;
    9 L2 c8 W" ]$ n6 J3 d7 Z: C. J; N  c
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 I  ?6 w  J) z8 T! {
  566.   dlg->ShowWindow(SW_SHOWNORMAL);& k! e% G; U: {  _5 x5 Q4 I
  567.   m_pMainWnd=dlg;
      j# {* A: u: Y6 L. D0 n7 V

  568. , p' D: x- d( f" W' V  D+ b- c
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    4 _. ~2 u( q% M! ?

  570. 3 p( |+ q% V9 G3 }
  571. //  GdiplusStartupInput gdiplusStartupInput;; m) T) H* R/ f
  572. //  ULONG_PTR gdiplusToken;
    ' E$ P" r6 {& d3 X) T# b) ~- p# y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);8 U' e! c' |$ ^8 {. M. e4 H" j4 U
  574. ; z9 Y0 t/ h( s( k9 n& M; U
  575. //        CRevAppDlg dlg;
    # ?: R+ n$ N3 t% T" I
  576. //        int nResponse = dlg.DoModal();
      g+ d0 M) c; {! M
  577. //        if (nResponse == IDOK)
    6 k( r: H( G* e" ?5 e' ]
  578. //        {
    + K* Y2 ~: o/ {9 }/ Q9 _/ q" q5 f
  579. //                // TODO: Place code here to handle when the dialog is
    3 i1 o! M) L! m
  580. //                //  dismissed with OK; b8 b4 E8 Y, n" J2 h3 Z. q4 Q
  581. //        }
    8 L! c! y* m" m
  582. //        else if (nResponse == IDCANCEL)0 J+ I5 O  t: c" o5 ^& ?, j
  583. //        {* t7 a3 b' b. Z! Z9 S
  584. //                // TODO: Place code here to handle when the dialog is4 _. R4 ^) u6 j, V
  585. //                //  dismissed with Cancel
    ) `0 }( I  @& b# D# O, ~8 V
  586. //        }
    9 {8 x9 h  _! {  ]/ S
  587. " `: ^6 R* e* `$ N8 B4 V$ h9 ?
  588.         // Since the dialog has been closed, return FALSE so that we exit the; D! j! e) O! ^: e
  589.         //  application, rather than start the application's message pump.
    + u" p) P4 P9 c
  590.         return TRUE;
      k0 F: _6 K) N& J1 l5 b5 M
  591. }9 @/ E; T  D) {" _# Y% P

  592. / Y! G+ g1 O1 r1 n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)( q# F7 \( h! C/ V
  594. {
    # @+ \, b; U7 l0 F, ]
  595.   int i;
    6 N# S+ ?. s) H5 j/ e# A
  596.   char *szRet;
    % J8 A% c' T7 `3 X( f
  597. 2 V* o" d9 n$ o6 b
  598.   if(pSource) { itoken=0; sztoken=pSource; }) r; }! I: x  X: d4 E$ X. z
  599.   if(sztoken)- q8 {4 }) x2 U9 F
  600.   {& J, u, G/ U$ M5 x' m
  601.     szRet=&sztoken[itoken];
    * X2 Q2 |* b  l
  602.     while(sztoken[itoken])
    " A& q/ p% [7 |. ^/ f3 j" Z5 H
  603.     {
    ) a5 L- I. z+ o7 b
  604.       for(i=0;i<(int)strlen(token);i++)2 f% Z' c4 Y7 o. f+ q
  605.       {0 y' Y6 N6 n+ E! D+ X% K! m& r8 Y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    # w$ U! y: Z' r( X
  607.         {# S8 H. F( k! x3 ^7 {2 E
  608.           sztoken[itoken++]=0;# E, u. F$ y6 n& I0 w0 c
  609.           sztoken[itoken++]=0;( N) p- F. R0 i+ b( {5 r
  610.           return szRet;
    ) J' _* m) X% f, T9 N+ |/ ]/ {( i
  611.         }
    3 o' n: R- i% v- d8 g# O0 G! Y3 {
  612.       }' l' |/ a/ M# }! m' [
  613.       itoken++;
    9 ~' [3 H4 R: o
  614.     }: f  K: a/ H$ o# i9 P: n
  615.   }8 k4 z8 p# a+ K+ O
  616.   return NULL;. \$ J8 ^& |9 F+ u
  617. }% r( I! B2 r. @1 Y( ?; ]
  618. - n5 s3 e5 J  ?, v% N7 S
  619. void ProcessProc(long Total,long Current)
    3 Z2 H5 n7 S( c
  620. {
    2 C, I. f9 G7 _) Q
  621.         MSG msg;$ L- m) |; [$ D6 O
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ) p+ F- R& Q5 ?
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
      K& C* K: \% E6 v( V3 d
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))( H6 k; n' f' A' ]
  625.         {3 Y9 B1 g! x: e0 b. [1 a) \+ V
  626.                 if(!GetMessage(&msg,NULL,0,0))  D$ ?! y" _/ I& x' f# \- i
  627.                 {
    # P" m& @# u' r" R4 R9 m4 x+ F
  628.                         return;
    & \# r9 p$ F4 Q# u# u
  629.                 }5 n) s" [, E# c# S0 C
  630.                 TranslateMessage(&msg);+ Y8 Q) I: r# X, Q% i
  631.                 DispatchMessage(&msg);
    7 c# W" d% C" [5 E9 T2 w
  632.         }       
    / \' p4 s$ W1 Y' V5 u: O4 s5 F6 Q
  633. }8 g, Z$ m" V& w4 L3 Q, |0 w
  634. , W" V: h2 ^; L; G( i
  635. BOOL bFirstChar=TRUE;1 d+ b, E% `1 S+ a5 d4 @( _

  636. 5 B( `6 o' p0 a+ |8 d0 F6 m$ L0 [
  637. BOOL CRevAppApp::OnIdle(LONG lCount)& @9 Z; s% v# B$ D
  638. {
    . w. W0 k9 W1 w- D, o7 ?+ K1 j* x
  639.         // TODO: Add your specialized code here and/or call the base class. R* B( G1 ~. b/ L
  640.   switch(dwProgramState)1 _" T, m! L* \3 R. s1 i" @# k
  641.   {
    ( U7 L# W1 _7 s: e" O$ N
  642.   case AP_NOTHING:
    - Z! A1 X; w  d/ w  ]1 F) m
  643.     switch(dwStartUpSteps)
    . P9 [4 b8 J5 ^: j! T+ N0 h* P
  644.     {
    - F% h. I) F$ [+ Q1 u' l0 U
  645.     case 1:( k8 h# ?% c# J
  646.       {
    3 `; m! H+ i% l) h2 S6 ]
  647.         int i;% C+ z7 r7 Y- J0 w8 L+ o- _
  648.         CDC *pCDC=dlg->GetDC();2 d/ Q. `: }/ O; E' J
  649.         HDC hdcwnd=pCDC->m_hDC;- a- p0 U+ e! _# s4 {' S# W+ d
  650. //        Graphics graphics(hdcwnd);6 Q4 T' x; G9 J1 h8 r4 g# S
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    8 M* a" F) [  P% u8 q
  652. //        INT iWidth=bitmap.GetWidth();# [5 e$ R3 r- ]- P8 M
  653. //        INT iHeight=bitmap.GetHeight();
    ! _5 [- V5 ^( X
  654. //        Color color,colorTemp;/ U* |! y/ ?1 D5 Q8 R
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
      Q5 v$ J5 n7 \$ ^
  656. //        {- L8 E+ |2 J- r4 Y5 c2 e7 U6 q9 V
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)( J1 \. ~; Q, f
  658. //          {# E/ b: v1 v; q1 M0 I7 @% F$ ^
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    6 e6 I3 M6 x0 V  J9 w
  660. //            colorTemp.SetValue(color.MakeARGB(
    7 [+ a' J2 V9 g: v; b
  661. //              (BYTE)(255*iColumn/iWidth),! Z" {- d. B& p
  662. //              color.GetRed(),' D3 J2 k7 |5 U- ?4 T# b
  663. //              color.GetGreen(),
    ) b' j8 `. j4 u- m. u% X
  664. //              color.GetBlue()));% [3 ?9 C0 K* g- {% [$ S1 b( L
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);* A# B' x* y  s
  666. //          }" b9 _' Y8 V( z  w) ~
  667. //        }
    7 [! {0 j! F8 C% k
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);$ v6 I) h0 o/ t9 g* G. @- a
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : b. N4 E. S7 P( [
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");! ?3 _0 Z5 a& J* g. a2 o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 w% l/ o7 ^# o, o
  672.         for(i=0;i<240;i+=8)
    . x$ f! y& @( J- i* j& ?& S5 ]
  673.         {* v5 k9 T5 E( z* k& N" L( V
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 ^7 m, r+ u, ^6 q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 i, }: y0 ?" @- Z' B
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);! N1 H! H) w. J4 }# y
  677.           Sleep(33);+ B1 L) S3 x6 C" T! |9 ^6 }3 k  _
  678.         }5 s; b7 B0 H" t% ^
  679.         Sleep(1000);
    $ U. V3 h3 v4 V( A) S( A
  680.         for(i=240;i>0;i-=8)& c. W  X, r9 R: Y. F4 R% s5 P
  681.         {
    . K( N- {3 s3 b) c7 n7 N
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);8 E0 [4 e8 V; [+ |4 a) w
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( o- U; n% G' |; ~5 t; h! W
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . \: K' W* l+ X/ Y4 i! f) I
  685.           Sleep(33);
    . Y+ r5 P8 x8 f# R
  686.         }' U# d' q* {3 S% [( U3 h
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    / z& _) t# T+ ~
  688.         dlg->ReleaseDC(pCDC);  `& U6 V5 H( v7 w
  689.         DeleteDC(hdctar);
    ( Q# v2 p" j( A0 G4 u
  690.         DeleteDC(hdcsrc);
    ( G3 B, E' L& x( y9 b+ e( q/ T
  691.         DeleteDC(hdcorg);
    + r' ^' V+ l! Z1 m4 }6 [  n5 [
  692.       }
    9 {" P0 L% e. o  S
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);* |  _2 ]) [( I: N' y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");1 a7 O: n0 |: w$ i' R& }1 t6 x
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ; L& K% I3 n! C) H  E! S
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");6 i! X/ {5 i1 Y3 Y- P, B6 G
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 e( H; D( z! h1 N! [+ r6 T
  698.       if(!Dn.Connected())
    - N! _3 f$ v( L( {
  699.       {7 v- w) y- ]5 ]! l3 s7 ]: J+ j
  700.         dwTotalFiles=1;
    , [! [8 `  @/ O
  701.         dwDownLoaded=0;- E  d& z+ e0 s- T+ X  `; c
  702.         bSilentStep=TRUE;- t7 y; c& J0 b8 X! j/ F& ?- D
  703.         bCompressed=FALSE;
    5 J( V2 b* Z1 S
  704.         strExtLocal.Empty();& x* h3 F5 a% F' G
  705.         strFullName="readme.txt";
    % w8 k$ h( V9 _# G
  706.         dwProgramState=AP_CONNECT;
    ) ]! Z3 `. D$ m. {
  707.       }' n3 b( O" ^+ I* b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();8 E3 \. z3 _5 }  |' P
  709.       dwStartUpSteps=2;
    1 S2 w! ]0 n$ R6 j) |; V8 B
  710.       break;% x) @! V8 [! k" G  K/ `
  711.     case 2:
    . t5 ]6 v; ?& [
  712.       {, O0 }# @( g4 X) D* W3 _; P
  713.         int iEOF;: q% @5 D' W, @) h  ]
  714.         FILE *fp;
    $ y: U+ x3 f0 e. P- F4 _
  715.         char szString[512];/ Z# z2 H6 C  E% o; ?: ^" l
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");) u) d  C% h4 z$ L+ w  x
  717.         if(fp)+ M8 x7 n+ z2 Q
  718.         {" E' g0 ]/ h* t
  719.           do! w- @' ]% y4 Z* s, T9 q
  720.           {! P- _* z0 M6 F7 }5 F
  721.             iEOF=fscanf(fp,"%s",szString);9 _" E9 u4 O# h3 V
  722.             if(strlen(szString))1 o6 Q) S4 v7 t0 ~" B/ G: x- i* m5 \
  723.             {% u3 y& Y; k/ z: G$ S- Y# e
  724.               if(bFirstChar)( {2 p9 g# j7 p$ |2 o' K
  725.               {
    ' N, G7 i0 E$ S0 v8 o& q$ L  \
  726.                 bFirstChar=FALSE;8 w/ U  a1 u8 R) w. p
  727.                 bConnectIsBig5=FALSE;
    5 W$ k. p+ R' G: k5 D
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;7 S/ u" m) N/ W) _
  729.               }
    ( k9 V, P% c. t% \$ R& b6 n
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . \9 J; B; K- x! ]* L  K* V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));. @7 A! n) Q: N, }, D3 w
  732.               dlg->m_ListText.AddString(szString);
    1 @) {  |" H4 X( `1 |
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( o* o$ r& n, u0 r4 Y7 Q0 y
  734.               *szString=0;
    # p+ u/ I: C) @; m5 h2 a& p
  735.             }6 X8 T, B" A% @' F+ I' S
  736.           } while(iEOF!=EOF);
    ; ~- b& h' b8 L+ C9 |" m
  737.           fclose(fp);
    7 U- d: r; J  c3 W" X$ e, ?# a  v
  738.           unlink(".\\DownLoad\\readme.txt");
    / p+ u; K* @: ^- F4 {
  739.           dwStartUpSteps=3;1 D! j- e6 e/ I9 m. b
  740.         }! s. u9 V# u' {" Z$ {( y
  741.       }$ T$ ~0 g5 k' T: i
  742.       break;
    3 n" Z: ]0 [6 r( Y: b6 |
  743.     case 3:3 C/ ?* u9 k( B2 o& L) i
  744.       if(!Dn.Connected())
    3 i) o6 f" W7 o- I, \
  745.       {1 _/ C4 ]0 H  ?
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);) p, z! d0 [9 Z
  747.         dwTotalFiles=1;
    2 Q. u6 I4 K5 h2 ]) I7 E7 _5 b
  748.         dwDownLoaded=0;. M) r; O7 ~; Z. g6 D- Z/ `
  749.         bSilentStep=TRUE;
    ( ]/ y0 C5 ^8 z" v. N
  750.         bCompressed=FALSE;0 G. O: Z) x1 y4 s% W5 U% Q" u& A
  751.         strExtLocal.Empty();
    , f/ l$ R" w0 L2 l
  752.         strFullName="checkversion.txt";
    # w6 R+ E$ |' _
  753.         dwProgramState=AP_CONNECT;5 U$ p" _* Y( t5 f/ Q
  754.       }9 ?3 R/ L& L& G, v1 @, Q4 E. D$ L' o
  755.       dwStartUpSteps=4;) Y; t% p# h9 p% l$ r. [8 j& @2 R* [
  756.       break;
    - U5 d5 {; \$ S& T9 M, A7 U
  757.     case 4:
    ( t( O5 U- G. e9 m( y  a
  758.       {
    9 ]% W' N/ P) P. L5 ?
  759.         FILE *fp;
    ) G. ~6 b2 Q7 F$ f& c7 Z6 G
  760.         char szString1[128];
    / x' R6 o- [. }) G3 {# n) v  k
  761.         char szString2[128];5 k8 X6 R+ g! u8 d3 w, x- z: H
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    4 S# d0 Q2 f+ E
  763.         if(fp)
    . P0 @- x* f1 T6 o% T- m" K. H6 a* [0 U
  764.         {  y. p6 o) _" E3 z! e; [
  765.           fscanf(fp,"%s",szString1);: F+ c  D/ l$ u3 x
  766.           fclose(fp);
    ! }/ I& Y* X/ C6 M, ?0 Z6 D: ~
  767.           fCheckVersion=atof(szString1);
    / L; _# k  N2 o6 D  B
  768.           fp=fopen(".\\checkversion.dat","r");
    ( J1 u) @  q! Q2 H/ s
  769.           if(fp)
    6 O3 {( S; u4 K! _1 w! ]7 M) V
  770.           {' V: _+ ^6 O  `& G
  771.             fscanf(fp,"%s",szString2);
    $ e; D/ U2 V' ?+ y
  772.             fclose(fp);
    ' e  ^6 L3 Z+ y6 M8 e
  773.             if(atof(szString1)!=atof(szString2))0 u1 b# }* P) Q* S/ O; v( i* e
  774.             {
    * F6 q# s/ {0 w$ f' x* Y
  775.               if(!Dn.Connected())( A, v1 J9 Z0 u, I1 Q+ c6 a5 @6 H
  776.               {
    6 L7 z9 Z$ L0 r, q& T
  777.                 bFirstUpdate=TRUE;- \' p- v( P4 Z- f8 C; T1 Y
  778.                 dwTotalFiles=1;& U6 O- |1 k2 ~; `8 U
  779.                 dwDownLoaded=0;) g0 J: k# B% R% G8 T) e9 O. [! i& V
  780.                 bSilentStep=FALSE;
    - V0 c; l. \4 z+ h$ w) I4 w& S- c5 F
  781.                 bCompressed=TRUE;4 S4 ]4 R4 H/ t7 ?2 _! {2 V
  782.                 strExtLocal=".\\DownLoad\";: N9 a" T9 _" c1 ~' Y( m
  783.                 strFullName="update.txt";# u) Y' q/ u) c0 \
  784.                 dwProgramState=AP_CONNECT;
    8 K, k: m- G. A, P& p) Q1 q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! L2 w  \7 w& l" d
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! E7 m& q1 b+ b) S( b8 |  j1 n
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 D+ T7 F& Y, e" h/ r: h/ B
  788. ; a+ J1 b3 ]# g  A4 {
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 \' k& q6 O' h2 ]
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ! I- ~& V# a  f0 q+ w& \
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ! B! r2 X. H! d8 {" }% E+ `$ z
  792.                 {
    . Y; h6 q; y) @, d
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 [' S: k* r9 P0 [- X7 a3 x
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" z2 y5 N& ^: Y$ ^  Z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    8 L. k5 {7 {$ \, N( z! O' y- l
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ j3 i2 v4 q& k: a1 L

  797. - s& o& l7 h* L3 m! ~+ V
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    3 B& X7 R9 V  r1 X+ R' s" c2 b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    9 y4 c4 T& D  J2 [9 O5 F4 v
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");+ Z% D* M" {- k* f) L. j- B
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, C2 {* E8 `, N! g- \4 M
  802.                 }6 w' X+ w, ^7 X, p/ f+ u* Q
  803.                 dwStartUpSteps=5;# T4 D- g) I: @, ^9 V, s* t+ ~" U( R
  804.               }% |/ ^0 N/ H( I3 Z" a/ C6 ~1 [
  805.             }5 `7 q, v5 ?+ r9 x3 f
  806.             else
    3 F8 n- f$ k9 Y6 _! P
  807.             {: A( Y+ I. z1 i
  808.               unlink(".\\DownLoad\\checkversion.txt");
    5 {) M# |( [. s! O5 M- p% ?7 \
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");0 A/ y7 _& o1 x8 D: r, ?; S
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");7 N' P! {1 `& S  H$ i" x2 w. q
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ( r: I; @& P, B/ ]2 W
  812. + y6 F3 p% j) Z) w; f
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 W1 D; @1 h( Q" z0 _
  814.               dwStartUpSteps=99;; g( w" S, I4 o9 Z9 S& f
  815.               bFinishUpdated=TRUE;
    % F/ F9 e4 \2 i; F
  816.               bCanUpdate=TRUE;( b3 T# B+ \# o
  817.             }
    4 s! U( O% }# x3 z
  818.           }
    $ A/ d0 t' ^4 W. C. ]9 v* _
  819.           else8 Z3 V9 U5 I9 w' B5 B
  820.           {
    1 n% g1 a+ ?8 _/ g: I# X! J. ?% e
  821.             if(!Dn.Connected())
    ; M! n3 ~, M$ n0 z. O! x2 v
  822.             {+ @: Z2 J: v" T: t% J6 z. ?
  823.               bFirstUpdate=TRUE;
    : z4 z4 e/ K& u  @. z* E4 c( E
  824.               dwTotalFiles=1;: y# v! W( R) M1 \) Q
  825.               dwDownLoaded=0;
    * s! ~' _2 M+ V! Q4 q2 \0 h
  826.               bSilentStep=FALSE;1 @; @9 l( [* \* e" \1 E# o
  827.               bCompressed=TRUE;
    + @- a5 \6 _% U; p- ]4 s
  828.               strExtLocal=".\\DownLoad\";
    0 z% j, d/ j+ t- L! h
  829.               strFullName="update.txt";
      E) U" w) |7 k: Z* h) X2 ?' D
  830.               dwProgramState=AP_CONNECT;' @7 n0 w- M2 T" q, K9 U
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + `. R0 l3 ]" F$ H0 `2 l; k! I6 U
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 G$ A# I& I9 d" {" p" D( l$ {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / n; t4 y% L* R# s  y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 g' N+ _0 p9 o& ~
  835.               unlink(".\\DownLoad\\checkversion.txt");" G8 P  p& `# [) ]6 T5 I
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)& `+ f8 Q% L+ d8 ~0 t* ]
  837.               {
    ; O9 m; H7 L. K$ ~5 B4 Z: V. Y0 N
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");2 d3 o+ N3 J% q5 a! g5 t/ v% o) m
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");( V2 ^5 U6 w1 |- m1 L# h
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");7 [/ j2 E9 H# y  c7 U
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 p! l/ i; J* d) o
  842.                 ) K& N) b; [; ?  M0 A: H, W
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    8 I9 r% @$ O0 g! z3 I
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 Y# C4 M7 k6 t5 x/ T/ H
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ `2 [- [5 j# D8 Y( v' ]1 \/ N: y2 r
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - y. ?1 ]' Y6 n; l& i8 v. J
  847.               }
    ) Q( z% U1 z8 v+ C5 f1 E& n
  848.               dwStartUpSteps=5;: l0 D/ i, _, V4 b* |% k
  849.             }, i7 Q8 P& P) Z
  850.           }
    5 L5 s" I, G8 s+ L& ?6 i
  851.         }
    % o" q) }3 z+ J* r1 }  C
  852.         else- ?2 s. l7 f+ U. F4 w
  853.         {
    . H$ ]$ Z; h$ O# e
  854.           dwStartUpSteps=3;1 M) e* d! e7 g, M. P9 @
  855.         }- @5 U( l6 w5 U$ o8 F
  856.       }
    * S/ u# P, E* M( `6 _" x
  857.       break;1 Q* m& n# E- `$ c8 V. [+ E: s
  858.     case 5:
    % z7 b. x9 u; q: E* t/ v
  859.       {4 V+ W6 y2 R# w! u# W2 @- v% P/ N
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ' n  \: V# L* w. u7 ~' _
  861.         {+ @/ f$ W- e; m/ j7 y
  862.           int opt_overwrite=1;
    6 a# J) V& \7 y# I) b. M
  863.           int opt_do_extract_withoutpath=0;) o4 L0 t5 C, W3 B
  864.           unzFile uf=NULL;0 C& _& |6 V7 O

  865. 4 `/ ?1 @: \3 Y' }: C- r
  866.           uf=unzOpen("Wsa.zip");
    . y  L  M$ N" N* b# M" z) ?
  867.           if(uf)' {* S( [) F, E& @4 ]
  868.           {
    : c. o! J5 c% K. _, d3 u- |- ^
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    & u5 }5 L1 k; n9 L: j8 B2 d
  870.             unzClose(uf);
    ! O2 n& `$ S$ E  o3 F! P) N$ y
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");; o3 ~- D3 F3 `) ~. ?+ }/ |0 W
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    . y: J3 M. T+ e/ d: V' S& O+ t
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    % G0 g5 U0 c9 _* `2 i
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 m; A: b# C, ?( E# U, V
  875.           }
    3 R. K- p# T' k; b5 z% S
  876.           DeleteFile("Wsa.zip" );
    $ f1 Y$ m7 z& E5 w( d
  877.         }; p' H$ {) c" v; ?% x2 B
  878. $ J' Z  y5 ]2 I& S  @# i# S
  879.         if(CheckLocalVersion()). W& V! k" C" s
  880.         {6 ?- y0 s) l( b9 m
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");2 T* z* r, r2 w* R
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ( y; y$ }& M( f' W. @- U
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");% s- y; m3 `) ~) _0 M/ Y
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 h& l- M' t. ~5 ^8 ?4 A
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
      e* S7 F, P6 {
  886.           dwStartUpSteps=99;
    1 F$ y+ Z. w( z' F, A4 Y! [
  887.         }
    ( X3 G; R9 E4 Y- C5 |
  888.         else
    + s0 [7 c/ e8 U# T
  889.         {3 g  h, ~# J: n2 v8 b; C# j6 p
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 c' V; m* n/ L
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");) g4 Z2 c4 a# A3 ], z3 H' O
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");4 O7 x- h3 N0 a6 }  @, K, b

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

; o* q: q/ K% v# E
# L6 T6 H) x+ P  \' O

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-9 04:15

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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