CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
. c2 I' P- e5 `7 J* q& k3 A5 i
  1. / RevApp.cpp : Defines the class behaviors for the application.; `1 _$ R: R6 u% v
  2. //
    ' J2 c) T: |3 ?: F
  3. ( W, y! [2 H( a9 q9 _
  4. #include "stdafx.h"
    * Y! P; _& Q* h% ^$ f7 T
  5. ' L$ c$ O& ~" c+ F
  6. //#define UNICODE1 x' e$ ^9 ~* h* R
  7. //#include <gdiplus.h>
    $ X* j* c' d1 g4 U3 `$ p/ D
  8. //using namespace Gdiplus;1 ]* n& }. o+ }% l$ D$ q) e. b

  9. 5 f; s. M( c1 `% _8 t  ^  j- s
  10. #include "RevApp.h"/ t( I) j: `2 Y1 B: Q+ d5 G
  11. #include "RevAppDlg.h"% }. R$ W+ w/ q1 j; e1 @
  12. , t3 b. z- s0 Q3 {# w% |
  13. #pragma warning(disable:4786)8 E* B+ a, V7 |) p1 s$ C
  14. #include <map>" p/ O1 w& F* _/ e% X, [
  15. #include <list>& h; Z5 c" [+ x" {1 l/ S' t2 a
  16. #include <direct.h>/ R! ?8 f; d# w: g  l. L
  17. , k+ A( J* t) k- }
  18. #ifdef _DEBUG
    9 U7 f2 b- W* r. X/ Y- o
  19. #define new DEBUG_NEW
    4 v$ B  y( Q! G( d- F  |
  20. #undef THIS_FILE% i0 R$ _; F0 W
  21. static char THIS_FILE[] = __FILE__;' c: M* V1 `* b$ f, x* {2 w
  22. #endif) r& }7 ~: e# E+ e3 D0 |
  23. #include "SkinResDef.h"+ M2 _4 r& ^$ ?6 V; T' u0 m2 D
  24. #include "ChangeBG.h"8 P3 X) m" `1 G! I2 O) g2 D
  25. #include "AFXINET.H"
    % ?4 C, A0 Z: ~, _, A  C; a/ |
  26. 5 T  d5 r: o( R. B! r' @
  27. #define TRADITIONAL_CHINESE 0+ U# _2 V5 U0 A8 F2 a6 l
  28. #define SIMPLIFY_CHINESE 1$ `' W" q- R5 g( e- b6 B
  29. #define ENGLISH 2
    - {/ P: l3 ]- q( q' @* z, u; X% V
  30. int m_iLanguage = ENGLISH;( m/ M# Y/ W1 R4 I
  31. /////////////////////////////////////////////////////////////////////////////. S8 Y9 \# ^) h) G7 B! a, I; N
  32. // CRevAppApp9 I1 L% U) F% U6 D* p
  33. & [4 L* x0 r2 x
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)0 J$ n. \. f' P: t5 \
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    1 R  B! w. i; C0 N  Z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.: r2 f# g+ w. O' D$ G
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ! U. p% M! m: ?. Q3 D3 g* u% k4 Y
  38.         //}}AFX_MSG
    , ?6 W$ }2 E  n9 ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)2 [! L% `) D) Q# x& f/ M9 r
  40. END_MESSAGE_MAP()/ k/ \5 N0 ^) |6 o, {. P1 ~4 H4 b
  41. , |( T* G8 b" j2 W
  42. /////////////////////////////////////////////////////////////////////////////
    7 d0 S# V3 P& a; N. ^( g
  43. // CRevAppApp construction
    - d3 O9 ^- K) }8 r) T. V
  44. . G6 {0 Q) _1 p6 G3 V
  45. CRevAppApp::CRevAppApp()
    5 X) ~- |. L2 X! R  n
  46. {% r( \4 g' Y5 x2 j( N1 ]
  47.         // TODO: add construction code here,+ P. p  F, I" e& n. A4 Q
  48.         // Place all significant initialization in InitInstance
    2 U% a/ B# g% {7 H' `
  49.   bDisplayIsBig5=FALSE;
    1 Z! Z/ g5 e' i# `! ]+ C
  50.   bRestartUpdater=FALSE;2 C1 o) x* O/ s
  51.   bFinishUpdated=FALSE;
    7 l, n2 V, _# R$ R6 [1 R
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;6 H$ V/ J) [1 ^$ S6 K! x
  53.   InitChangeDataBig52GBKS();6 x/ `' b- L7 n4 p
  54.   InitChangeDataGBKS2Big5();
    2 h. q4 i# j3 c  B
  55.         //
      D2 T# R" o% d
  56.         bClickRunExe = FALSE;, u$ w1 ]1 p+ \% _! q
  57.         //
    - l7 X" L. }0 V5 u4 X5 ]% a3 h& y. G
  58. }# @3 \3 v3 m/ M9 ]3 p; p3 k

  59. 9 _; i3 n, `# M. q  E4 A
  60. CRevAppApp::~CRevAppApp()
    ) I. {; U! c- w& Y1 o$ P
  61. {' ~* _- `" r" }/ H
  62.         // TODO: add construction code here,: J9 u, E) k1 c' Y) t. ?. k8 i
  63.         // Place all significant initialization in InitInstance
    ; @; Q: Z2 {2 Z# ~
  64.   EndChangeData();0 U. }3 W& T: b+ j6 r' A9 k
  65. }$ X* i4 c) K/ f8 {; Z$ `+ x! ~: d& t. N

  66. / ^, P" i/ r" V
  67. /////////////////////////////////////////////////////////////////////////////
    2 X! ~, \( u" `( |
  68. // The one and only CRevAppApp object
    : l3 j- r3 c) F1 x( C$ F# Q

  69. 6 _# O% K1 y$ W- o' |9 A
  70. CRevAppApp theApp;& x# i. d, \0 f
  71. - x2 v3 a+ P. B; a5 \
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)2 F. R  @" a) w: Y1 g
  73. {
    : Q7 M% C5 H' {$ u9 p/ h
  74.   int iEOF=0;1 i/ v0 ^8 {* c: y7 z2 P$ `
  75.   char szTempName[MAX_PATH];
    * z3 Z7 Q; H2 p
  76.   *szFileName=0;
    , N. Y9 \! `; }8 k
  77.   iEOF=fscanf(fp,"%s",szTempName);* y) x0 p% k- |4 u6 c
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')0 \0 r: {3 h$ X8 M% o+ v2 S1 A- x
  79.   {
    6 b1 K. ?1 n1 ?' ~! d, y& {# ~
  80.     strcpy(szFileName,&szTempName[1]);' w1 {+ a- P0 m; h2 Z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    $ l/ J1 ~, M6 b, }) q0 X
  82.     {+ a3 p) V8 u4 Z5 l2 `
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & e& d" P* g) A1 Y7 @  j% [
  84.       strcat(szFileName," ");; e1 O. M5 Q! \+ V' v
  85.       strcat(szFileName,szTempName);
    % V% @+ U5 `, \) _3 `: J  p8 i
  86.     }
    % p; f7 n, d$ _5 a! Q9 V: i0 s- ]7 D
  87.     if(strlen(szFileName)>=1)
    0 q, q) W9 E, D5 e0 `
  88.     {
    / D8 q( i0 |, A; F7 V' W  k3 k& p
  89.       szFileName[strlen(szFileName)-1]=0;
    * M. k8 W  V3 t) A7 e( J; }
  90.     }
    9 m- G% M; J( I; B6 V
  91.   }
    9 e8 P- R& `4 U2 N: i% B
  92.   return szFileName;' `. M6 h' U9 @  W( z1 a
  93. }* M3 z6 X/ i, @2 A3 g( ~
  94. 7 E* q, X  }! j
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    # o! G: k' u1 N* Q: l6 i$ h; `5 J
  96. {
    5 _1 F* X0 D8 T( I8 X" W$ p  A& T
  97.   FILE *fp;6 q; I* {( H4 L1 N
  98.   char *key=NULL;
    . C' z' j" [" x# L
  99.   char version[MAX_PATH];
    7 \8 N% t, |+ m1 S- g$ e
  100.   LPUPDATEFILE file,olds;+ v/ b# r8 Y1 T* w& i. e
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & @& J: b' O( X5 T; v, _* L
  102. * _6 k. e- g+ z
  103.   UpdateList.clear();- S0 c; a! x% D: n& z! v
  104.   UpdateFile.clear();
    * c& x5 I) V$ }5 g3 v/ [$ e
  105.   if(GetFileAttributes(filename)==-1) return false;' d7 Z3 ]- X: t4 M7 T+ _
  106.   if(!(fp=fopen(filename,"r"))) return false;2 z+ O8 A) l- \
  107.   fscanf(fp,"%s",version);( L& J" ^4 u# W9 ^% C* ^
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    3 ^. b8 }. f% F2 Y5 L$ x7 i
  109.   while(fscanf(fp,"%s",version)!=EOF)
    3 ?/ r, n" R* t2 O* B4 j1 R
  110.   {3 J$ E  S9 e0 ?3 y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; L$ Z( D$ T9 }3 @" C, s3 O
  112.     fscanf(fp,"%s",file->path);$ d6 Q/ ]; `+ {. ?- S, s
  113.     ReadFileNames(fp,file->file);
    5 y8 `+ v- a2 B# ~
  114.     strcpy(file->full,".");- ^, j8 o" q' Q  F3 @% L0 `
  115.     strcat(file->full,file->path);8 K5 a( W5 ^. [
  116.     strcat(file->full,file->file);& x$ U/ M6 e, e: N2 a0 i
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    , L# v/ W# l- Z1 C
  118.     {# {' c: o, r; S, R1 m4 d
  119.       file->vers=(float)atof(version);
    2 _$ B  w( b1 X1 D8 `8 F
  120.       UpdateList.push_back(file->full);
    % x3 |1 t8 l# }" P6 E: Q: a; ~' \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));  V6 `9 J1 v! R+ ?- Z$ b& C; Y
  122.     }
    ' ~6 E& Q+ J# t* _3 M
  123.     else
    6 @- S' k& a# }+ y
  124.     {& o$ I& J/ P( D& T; w, h
  125.       olds=(*p).second;2 a. A6 k0 s  M5 Z9 Q& T3 i0 p
  126.       if(olds->vers<(float)atof(version))5 s7 E5 ]' @/ ~
  127.       {
    1 E* _/ I( _- n: T+ M; r
  128.         olds->vers=(float)atof(version);) A, X; c' I6 D
  129.       }
    2 ?" [, R" V" J1 t! e0 N
  130.       free(file);. H  X9 H% B* U, E; d
  131.     }
    3 N6 [% N6 z& S% a
  132.   }
    9 Z+ I# a1 y' v- g/ q* E) P' u. V
  133.   fclose(fp);, Z- P9 ]! v, n' \- R8 R& g
  134.   return true;: h& t5 ]; ~& y4 [4 O& y
  135. }) J  Z8 ?6 z* s. ?

  136. 1 C4 {7 ~" y: W$ s
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    : J' B$ ]7 g: N5 w8 b3 F  Y
  138. {
    . @2 _  ^" v) Y. e
  139.   TCHAR  szFull[MAX_PATH];
    ) B0 u( s+ f1 B
  140.   TCHAR *token,*inter;
    ! i6 N4 |8 ~% X, U2 b8 b# M4 X
  141.   *szPath=0;' t5 [+ p1 M" g( E; n- B0 v+ Z) _
  142.   strcpy(szFull,szFullPath);3 L8 x3 }7 g- n  d6 i% ?0 W
  143.   token=strtok(szFull,"\\/");; a2 p. v, p! a/ @) T
  144.   inter=token;/ @; u) ?8 c' V: x
  145.   while(token=strtok(NULL,"\\/"))8 f- c2 f) |: O& W( M
  146.   {
    + t. H6 c# ^+ c* p1 A# K$ ^5 v
  147.     strcat(szPath,inter);1 S" y8 {. p% T  e' Y# o) V
  148.     strcat(szPath,"\");. }. w0 L8 _, f
  149.     inter=token;' ]. V9 e. Y3 G9 m( [9 [( a; @) H
  150.   }/ P: W: n9 G3 v* e8 I* @( X. v
  151.   return strlen(szPath);3 x0 R4 O# s3 o9 W6 J
  152. }
    : Z# ~* b/ s8 H( A
  153. 5 O, _! y' [# k
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) }5 q6 M+ e; m+ o
  155. {- x# [9 @1 U, |: S  ~
  156.   DWORD attrib=GetFileAttributes(Target);
      k' P, O2 j+ P* u* [' ]. y# b
  157.   if(attrib!=-1); k% C# _1 H! b$ A4 C3 j
  158.   {
    ! Z! [/ N2 P# X
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ( j: }. M) d( d
  160.     {& u! y5 t. a8 ]; l
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    4 i# r. Q0 s- o
  162.       SetFileAttributes(Target,attrib);/ x" R% ~1 x& X- Z5 d: W
  163.     }1 O' B7 i2 f( K5 s
  164.   }
    5 K- s& C6 `0 o2 X' l- ?
  165.   CopyFile(Source,Target,Erase);/ f% {, O2 Z! X4 v! G: I
  166. }& p" z5 O$ m1 t$ f
  167. , h- v; S) R1 z8 ^. `. c9 v
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...): K9 ^1 A: d4 J7 \' t. g. N
  169. {
    - X9 x2 r: o$ B* {9 f$ o0 p8 n% k
  170.      FILE *fp;
    - [% t2 w9 A' X2 c. |
  171.      char  szBuffer[8192];# U' k0 q- I8 ^3 }) P) s
  172.   va_list  argptr;- h2 C2 y' f2 {' b

  173. 7 _5 p5 d1 O5 ]& D
  174.         va_start(argptr,message);8 d% C2 ~; d6 z! x$ s7 k
  175.         vsprintf(szBuffer,message,argptr);
    7 Y7 Y8 ^. s- z6 ^+ T. |9 B
  176.         va_end(argptr);& j8 \" m3 \' r5 g$ d: S( ?
  177.   fp=fopen(FileName,"a");
    ) p) p  p4 o5 ?: i* Z  N4 P# D
  178.   if(fp)
      m+ O. U. h# M* j4 F- C
  179.   {: M$ K. F8 Y7 ]4 S1 o) U9 |
  180.     fprintf(fp,szBuffer);: K' ]0 T) V% m4 r1 ~2 c
  181.     fclose(fp);
    - c# f' ?2 y2 E1 a& |5 b
  182.           _flushall();# r  t. F7 @5 ]4 R0 ?
  183.   }' X2 a+ `8 O0 Q: E( ^5 d
  184. }) s! K! j+ s8 L) h# e" w5 M2 }1 O
  185. 5 [: e8 p0 g1 [$ `. Z) }
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ' d1 ^" J' X* x( Z
  187. {# S6 @# @- k- ~
  188.      FILE *fp;
    ( @3 `2 N( a' }, t+ K
  189.     DWORD  attrib;5 C  G) g& Q4 m* W6 [
  190.   attrib=GetFileAttributes(FileName);
    / Q7 A# |$ Y& v
  191.   if(attrib!=-1)
    6 K$ ~/ J- I) b( ]6 J
  192.   {
    / L" b, j8 N- b2 ?, o! F9 b/ z4 q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      H3 [0 e% ^, w. }: ^  u) q
  194.     if(!SetFileAttributes(FileName,attrib))
    / Z) L+ N" B4 ]8 e
  195.     {
    , U) i3 ^  p& m4 t/ s( k
  196.       return FALSE;
    5 j2 C: o/ ?5 `
  197.     }$ y. n# n0 b' k
  198.   }
      w; E+ H. v- u- o4 A
  199.   fp=fopen(FileName,"wb");
    0 s  e  s6 p. q
  200.   if(fp)! J8 S, p  n- D8 s+ `7 J
  201.   {
    9 H% W: y) \# F# G4 ?
  202.     fclose(fp);4 N" _) ?: Z4 J1 s+ x0 J1 }
  203.   }
    # d" |( D' q) z$ x, Q. `5 k
  204.   return TRUE;9 J  C6 t0 l  C
  205. }6 R; X0 ?) w9 k! u
  206. 2 X" T7 W7 w! H
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 I4 C) l+ H. @
  208. {( ]" D; t* r* z- a8 R
  209.   char filename[MAX_PATH];
    / _( F9 e% e" v7 F+ Z
  210.   LPUPDATEFILE file,olds;7 `3 n' i# `! h" w
  211.   std::map<int,CString>::iterator i;: e: E7 `/ t  B7 }+ @: P2 U5 X+ }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' i$ d0 L3 U+ ?6 s# @7 F9 F
  213.   std::list<CString>::iterator l;9 x8 X& i- r. w8 q; P
  214. $ w/ P! k8 E. T2 L8 P8 [# ?7 U
  215.   if(bFirstUpdate)
    5 A& g# h8 |! f+ S
  216.   {
    6 ^) m8 T( X: J7 F$ p) `7 W
  217.     dwCurrFile=0;
    . m6 \; b2 i, E8 M. z8 z8 D
  218.     bFirstUpdate=FALSE;
    " C0 B4 E, Z' X
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 ]$ y/ ]0 t3 _" e+ D
  220.     {
      s  d$ V2 B% G+ J3 _1 f
  221.       dwTotalFiles=UpdateLocal.size();
    + H. v6 u8 t3 v2 c' `8 j
  222.       dwDownLoaded=0;6 ?) R' X) E9 A
  223.       bSilentStep=FALSE;
    $ N; `3 `9 R8 m* n
  224.       bCompressed=TRUE;! `9 \1 x3 `8 a, C+ @0 h4 j1 ?, d
  225.       strExtLocal.Empty();
    5 }( h4 Z/ M7 }/ }
  226.       strFullName=(*i).second;
    * p' p- N  a0 N/ N# M
  227.       dwProgramState=AP_CONNECT;& C$ I( w$ Q! g  w5 k
  228.       return TRUE;3 ]0 Z6 }7 U# ]7 y2 _8 Y/ T
  229.     }
    $ |$ K% n6 c+ z  V
  230.   }2 g, Z8 U) K6 q5 T6 u0 c
  231.   else if(bRestartUpdater==FALSE)
    , h9 D0 R: L% I. I: d
  232.   {
    % ?9 O  r( o: Q' |$ a
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())) U! K, c7 d6 {( h
  234.     {
    ! w1 w4 w" C. Y; S; `) c" D
  235.       file=(*p).second;
    5 N9 J$ A- c$ ~4 b% x9 e
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())2 Y6 v! y- F1 i; T, g8 H1 V# O: Y
  237.       {
    $ I$ f7 p8 d% g6 _8 j
  238.         olds=(*p).second;
    2 F; ?8 H' b* S: F6 p4 w1 @  v
  239.         olds->vers=file->vers;* y4 w. Q0 ~" ^  `7 v7 G2 n
  240.       }
    9 F5 y) S) `- |3 a8 l' S  M4 q4 \
  241.       else
    # u3 ]- t0 Y. T8 ]
  242.       {0 O- I' n- R0 L. F; y9 L; a
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% t* s8 |1 X/ Q; R/ W/ h$ S
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    8 T$ P1 M" [% L/ q" A0 Y$ H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    % b  S8 ~- z& W8 Y5 X% a
  246.       }; l6 c$ A- e( h% f5 q6 B5 B
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");+ Z% l2 f" j! J% A
  248.       sprintf(filename,"(%s)",file->file);
    ) @" e. i7 G  D; L) g# z- K. J1 Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , T" W* c* z9 V# V6 x4 ]
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }# ]. p. |+ J3 r7 m3 G) @
  251.     }
    / s1 ~: A2 n: U) w% v. I
  252.     dwCurrFile++;1 s8 k+ l5 ?! {, O8 ]( Q0 `1 ~
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# a- P+ z" X- x- |- A2 D
  254.     {
    3 S9 l8 ^$ I4 }1 d
  255.       bSilentStep=FALSE;
    1 e, l3 d( W. S0 A8 f) z0 \
  256.       bCompressed=TRUE;; r- ?! R" n; D; z8 D
  257.       strExtLocal.Empty();8 j% Y5 p0 w& k
  258.       strFullName=(*i).second;
    ( T$ ^9 T$ Z1 t2 i0 p9 `' |8 G
  259.       dwProgramState=AP_CONNECT;
    9 D2 R% G3 t% B0 M$ e8 p
  260.       return TRUE;; Y# m1 K7 N4 a5 j: l* u4 ?
  261.     }
    * j* A4 I, Y9 C$ n" u- W
  262.     if(!bRestartUpdater)
    & ?7 U3 X% C8 G% _+ R
  263.     {
    , i- [. L- T7 J9 \3 E( j
  264.       int iCurrSize,iFileSize;
    0 b6 D& N6 l' O# n: |8 ]. ?$ ?% c
  265.       iCurrSize=0;6 \; ]) Q( M& h7 h
  266.       iFileSize=UpdateList2.size();
    + U' q0 @# j8 Z9 h' ~4 p
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 ^6 ^0 w0 }) m. t  x
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ( w! K/ S4 y: q3 ]% E
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    4 Z: o$ v! H2 j. G/ H
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " V0 @% a. r( o6 T4 U; ]1 r
  271.       Fclearf(".\\update.dat");
    # h: d. V6 X$ B/ C% m
  272.       Fprintf(".\\update.dat","Bloodyf\n");( L/ N$ L8 Q! G& J3 i% a0 G6 K
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++); A2 E8 K4 M( G7 C
  274.       {7 n3 |" A3 D: a- R4 j/ {
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 P) U& e) h+ m8 W
  276.         {
    4 b! E2 G. i+ o8 B& N9 z8 f+ Q
  277.           file=(*p).second;3 ^% |* b# }. B
  278.           sprintf(filename,"(%s)",file->file);
    1 ~: H4 K9 \8 o: @& m0 l% W
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; n: K( B) `+ u6 l$ U) f
  280.           iCurrSize++;
    # L; G% e' K9 ]& C  u
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % S( ]( F% H& i  n' `
  282.         }
    : w5 P4 a9 s+ k
  283.       }
    ) Z1 |) O# m$ ?4 `. W# f4 `
  284.       unlink(".\\update.txt");
    ! H4 o& x# M# E3 a! v" L5 c0 T
  285.       unlink(".\\update.tmp");' z; l/ A; }9 c6 T1 }! `; i
  286.       Fclearf(".\\checkversion.dat");. L. {- F5 E1 v% W, [
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    . Q. a% g7 A' W
  288.       if(UpdateLocal.size())
    # l' v: J( F9 w0 I9 r* Q9 d
  289.       {5 R! c1 L/ f1 ^, }! i1 I/ Z0 `
  290.         UpdateLocal.clear();2 r3 m, X- T: E: ?- w
  291.       }
    . D6 ^( Y, n6 y5 ^  Q8 v7 d
  292.       if(UpdateFile3.size())- z0 T2 d$ z) s, {1 _( S$ x
  293.       {1 r' A3 a! D" M
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). V/ _+ q1 A2 [1 e  j- ^# Z
  295.         {
    8 G+ o  Z' `; p
  296.           file=(*p).second;. Y/ V" N; t& g& O6 L: R+ b' E
  297.           free(file);; b; c# W5 H" l
  298.         }
    * ]0 Z) I* Y; m
  299.         UpdateFile3.clear();
    ( H; }' x# `. R0 A5 s
  300.         UpdateList3.clear();7 ]0 d: t3 v. F7 X7 q, g
  301.       }
    9 A' u* C" n3 R" j) X! j$ F- H  x
  302.       if(UpdateFile2.size())
    8 H5 N8 N1 e( \4 R
  303.       {: Z( j4 K& t, w( \, q- N2 z
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % f; g+ V' r8 m- @( Q0 w& z8 x
  305.         {
    $ l; `2 c  W7 F; m9 ^
  306.           file=(*p).second;6 M) s  s- c" B
  307.           free(file);- P4 \/ d' Q- A  U3 G
  308.         }% y8 b+ l4 v: R
  309.         UpdateFile2.clear();/ M( _, _8 ~" E8 s
  310.         UpdateList2.clear();
    2 n% n) F' ~$ n  S/ Z
  311.       }9 }, u% {% |& g% l# N
  312.       if(UpdateFile1.size())4 P* w2 y: D# q9 r4 q
  313.       {3 x8 m- T2 j# R9 R, v/ g
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): u3 u4 y: o2 E9 T* q' c. U" g
  315.         {
    # Y0 I% Q' A0 o0 O8 F
  316.           file=(*p).second;
    8 U( J) F7 m3 u; a% c
  317.           free(file);, d2 J" k  S! W7 k- M5 [
  318.         }4 i# g* H* w: e9 {1 G
  319.         UpdateFile1.clear();! L% @! t! K2 @  V/ }
  320.         UpdateList1.clear();
    ; c  @- g- `. S) O% H4 J
  321.       }
    4 U" r# A3 N: G2 i; Q" _( T
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % L) f! l  v( k( N8 E4 r1 o
  323.     }
    . Z) n2 O; ^: _* Y8 K
  324.   }
    & H: o, F8 v8 f# A' l
  325.   return FALSE;
    ( L2 O- K- ~, o1 s4 ~9 \6 [; E  R
  326. }
    * w4 f& S! s( a' K/ j" R% q3 E
  327. ; {8 a7 b9 c- |, k7 N7 Z
  328. void CRevAppApp::ClearAll(void)4 w* M. C# b" H/ E
  329. {$ H/ O' ~- ?! `
  330.   LPUPDATEFILE file;' S2 p2 y* L, {5 j1 D
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ a) L4 h  F# C: r% D

  332. ) p) ~3 H" f0 r  [7 h* s
  333.   if(UpdateLocal.size())
    8 Z3 y4 ?) t# Y3 S+ o3 s6 T! L
  334.   {0 t7 M  N0 u" Z9 l5 x# q* s
  335.     UpdateLocal.clear();" |# k5 W" }; l; N8 L
  336.   }
    ) |$ _5 j0 Y0 m$ ~. I
  337.   if(UpdateFile3.size())" ]2 \: a$ W, j7 U% J/ d
  338.   {! c- @4 \; l+ j
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + t4 c  x& w( F5 w/ W3 d& V: R
  340.     {
    1 K( Q5 ]; p+ [7 [
  341.       file=(*p).second;
    9 v0 K$ r) s3 Q  n/ k+ v
  342.       free(file);' T/ C* g! }; P5 O4 M) _
  343.     }
    ! O+ T1 P! `& W* W' H2 u6 a8 j1 d4 w
  344.     UpdateFile3.clear();
    9 ?8 J& S4 k3 P+ y2 _* H6 N5 `/ W5 B
  345.     UpdateList3.clear();, R$ Z& b" M" {+ C2 ~+ G
  346.   }( @6 k# s. T$ W6 C' F' a. e1 u
  347.   if(UpdateFile2.size())
    . J: d! n; X# V/ ]9 y6 W
  348.   {6 Y' Z. C) |/ A% K; m! t
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ; _3 S- f7 f5 H* O8 }* q) |
  350.     {
    9 H9 g3 Z3 r3 r7 {
  351.       file=(*p).second;
    4 {3 J2 T: X3 W2 T% L- y; A; F
  352.       free(file);
    * N0 a* B) P1 C# w% W7 y! b& r
  353.     }: _3 l3 h5 p7 N# I* o2 _( [
  354.     UpdateFile2.clear();
    8 u' g, R% W- R0 l$ N4 U9 h+ {
  355.     UpdateList2.clear();* J) Z' d7 \9 E$ s+ T# v
  356.   }( h7 e4 E$ g, ^- m+ i  S
  357.   if(UpdateFile1.size())7 C/ \; d4 s6 K3 Q
  358.   {( a6 x8 x! O, U0 t- y  r
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 {7 i# b% z- q; [* A( P
  360.     {, V8 p# J& o% _" M
  361.       file=(*p).second;
    ) M# `2 u; ?3 |2 l# A
  362.       free(file);
    % b2 Y5 {" k$ j6 }2 i* O; t; b
  363.     }
    5 e4 \0 G  f* N5 o7 o- I
  364.     UpdateFile1.clear();. h  i6 k* K( @" C; o
  365.     UpdateList1.clear();
    " c) b$ \4 u  p9 q
  366.   }4 U5 ~9 j& U7 V% ~/ \. K* K- s
  367. }  # p6 \4 I1 c$ h, \' {9 \' W
  368.   3 L% e  R: c! E' ?  ^. K: F
  369. BOOL CRevAppApp::CheckLocalVersion(void)9 G3 l) {1 W% L6 {! d! x
  370. {+ Y- i" n0 I& D4 Q  W& M4 y
  371.   int c;; |8 J* O, q8 F' F
  372.   LPUPDATEFILE file1,file2;
    2 o; h% q4 e3 H, A, g( R
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    - o- u5 ^$ y7 N4 ?! J
  374.   std::list<CString>::iterator l;
    & C  _" _5 r& C, [: b9 F6 |/ d3 Z

  375. / K: s+ J( J3 G% _0 ~- y! `
  376.   UpdateLocal.clear();) i) s/ e5 u  M8 [2 k* |( C$ s4 J
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);7 ^% \9 p3 X, l; a- n3 s1 h( z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    : p0 A3 @3 Y4 W
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ( ?- |+ W8 Y: }$ F; Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ; k* G9 ?% J, e: s6 T$ `. t
  381.   if(UpdateFile3.size())$ H+ O3 Y2 \0 L0 H- \) r; L
  382.   {  h* u3 o9 r1 Y$ o6 S% G9 w
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    2 Y; v3 O0 O4 r1 w) ^; f
  384.     {
    9 o) `$ m) f& `1 ]! ~) d1 f
  385.       file2=(LPUPDATEFILE)(*i).second;
    " h# t8 y0 }( s! g' p9 D
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      o" R4 O* i$ D. c" d& D5 T& Q
  387.       {$ N) X' g; E+ S0 ?7 Q
  388.         file1=(LPUPDATEFILE)(*p).second;
    3 J8 m9 b" q" ^6 k
  389.         file1->vers=file2->vers;
    1 c6 ^6 Y- a  `, [% H9 {+ ?5 M
  390.       }2 V' T6 P+ l5 z  C' k# M# `) X
  391.       else
    9 I! f5 _, [$ a4 o9 j2 ?7 h7 d
  392.       {
    $ w: o( n' c! _) h* _6 e  \
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ a0 a5 }4 b4 _) n) J
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 L, u; K2 p& w" l
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ) ~. ?% N' E0 `6 X- `
  396.       }
    2 v) J! h7 q' [2 C" H  H3 v: X+ E/ Y- N
  397.     }2 Z& a  {! M* {' b" C# U
  398.   }
    9 o, v5 V" ^- n; H3 x: I
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)+ I% g; E: J" s8 i- b
  400.   {
    $ D4 U0 f4 @& E" z5 z/ V/ w' H
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    , ]& J+ [/ U5 U0 t
  402.     {
    0 o) P/ H/ I7 [& G# z/ Y
  403.       file2=(LPUPDATEFILE)(*i).second;
    ' n/ x5 b! m/ J& S
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 w% B% s& p! h* ^+ U4 |
  405.       {
    2 e# `; J/ |2 n, d2 K
  406.         file1=(LPUPDATEFILE)(*p).second;$ y# U1 U! _4 I1 d. H! p
  407.         if(file1->vers!=file2->vers)
    ! s; a8 A3 H& ~' e" T
  408.         {
    4 S& h1 }7 S: \: n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 f* c2 y* x- l3 z
  410.           c++;* U- F/ N: T6 v+ U$ ^+ r
  411.         }
    - \; n  b, \+ P. I
  412.       }
    & {0 f) q, U2 {1 y
  413.       else
    9 b' g# ~3 x. C# L
  414.       {
    % T- g( t2 T! }
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 E! b/ h1 j" f+ n4 C% B6 ^2 P
  416.         c++;
    , M' c1 F9 \, v& N: Z  r1 |: S
  417.       }
    4 S  C8 ^# Q! Y4 J: `
  418.     }
    % \8 k/ A$ h4 F* k  J. P/ t7 H
  419.   }$ m$ S# P* y. X3 f  B! U
  420.   unlink(".\\DownLoad\\update.txt");& l1 D! l) p# k; w- E+ h( l) l
  421.   if(UpdateLocal.size()) return TRUE;
    1 F2 P4 W: E. ^8 {+ j$ R
  422.   else                   return FALSE;
    6 T% P1 }* g8 }) J. f& G
  423. }
    4 J+ V; X. S# D0 B! q. u
  424. " O( q1 L  j8 B( B& M9 H
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"* x; O! N$ g: G! p4 f" u
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - L% U6 D% h6 o+ U% \8 c
  427. 6 o0 Z# }8 q* i& k2 d5 P" u8 x. ^2 _
  428.   N* C( s4 }3 u( p' N- A

  429. * p! B7 B$ e! n5 C4 v
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile), S+ _8 a$ t+ ?8 Q# d, D
  431. {
    2 F' L' k* i+ L8 l; i, j* P+ h5 O
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;" U% e7 w+ M$ ~
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1). \1 Z' Y. B, h  p+ ~
  434.   {
    . Y' R  V% J% c
  435.     char szLanguage[50];# {- W) X- t% }2 F! S+ ^
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 m; _* l3 G, P' q+ e) F
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;$ D0 |, f) R) p& c& A8 C9 U+ W/ V
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! [. k& g) @! N, V' y( L3 e" H& {
  439.     else                                   m_iLanguage=ENGLISH;3 [4 K# q0 V, V' ^
  440.     char szRegister[100];
    / i! ~3 Y$ v6 A" Y. x0 C5 L5 l
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");* N8 o2 t" I; p4 T0 [& U0 _/ R
  442.     strRegsName=szRegister;5 a5 D7 k( U5 r( @% B# x
  443.     char szPatchURL[100];
    # {3 u! n% ]' E: P
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 y* a+ J$ q, a3 s% }2 X% \- B# L
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: R/ b- ^1 y. R4 `: s$ B! @$ I+ L
  446.   }- @& W2 @9 ^# |1 g* B! I9 `
  447.   else/ O9 H1 q* @7 s
  448.   {6 W% c7 l7 I6 \- h9 k/ [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 B7 ^+ U* m. c) ^; T- r
  450.     strRegsName=DEFAULT_REG_URL;; {4 H1 ?6 T. y
  451.   }
    3 _: p6 Z# c( l4 w' _) P
  452.   if(GetFileAttributes("hosts.ini")!=-1); G$ Q) h# m2 \' ~3 T  ^
  453.   {; n' \& R0 T% ^) F
  454.     char szIP[50];
    4 D: X3 K2 c  i
  455.     char szDIR[300];
    + k8 J" t, p. [$ u/ q  I
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    , z) F9 ]7 s( L) n, C# T, ]7 n
  457.     {' |& \* p: [! [& J% ?
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ' h0 d9 k5 S% w  w- j
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");8 I: p, z1 K  _5 G- p
  460.       strHostName=szIP;+ r- Z1 I3 f! h$ V; o8 k4 y- R8 q
  461.       strHostPath.Format("/%s",szDIR);0 ]" k9 T& w8 n! z7 A' q! N3 e
  462.     }
    & f6 \5 j5 u* Y
  463.     else2 Y% A+ n' Y* i7 x$ I! f1 a4 f
  464.     {
    3 J; x3 L+ R- E+ @, X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / z: q, i6 _" x3 P4 `, w# `5 x
  466.       {, ~8 O* [3 y! A+ v0 S
  467.         char szLanguage[50];
      g- [$ m3 N: @( g5 U; ~  T3 Z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 S! z2 b# d$ V! M3 L) a
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ N. w# K9 \; b% z/ E
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  g" ]7 c& }. e# K- _. ?" a
  471.         else                                   m_iLanguage=ENGLISH;; C5 J: O, N: u+ D: c% g
  472.         char szRegister[100];
    ' P+ b, f" P6 O* A3 |+ A8 x
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . r* z) M9 W# v* \, j3 `
  474.         strRegsName=szRegister;+ g/ z; U2 }5 c, w; M! X
  475.         char szPatchURL[100];. ]/ t+ v8 k: Y. K1 }
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 V5 \, {$ ?8 v  X/ l
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 b  ^6 ?! l, O4 J& p" m- H6 Y
  478.       }
    & I7 @4 ~  B- v
  479.       else! D9 L9 d9 o& w* p% g; B5 ^
  480.       {$ O6 X+ X$ d( u# q3 j6 F
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 q, @; |4 K! n$ S3 `( u
  482.         strRegsName=DEFAULT_REG_URL;
    ) d- p4 }- ^, K
  483.       }
    ! u# R) P) @' N! J$ C9 x  a
  484.     }6 V% T. w* k9 {6 {' f# n6 w9 @0 f" N6 O
  485.   }
    % I, F5 {  B2 w3 c# n
  486.   return true;
    ! C! f) P) R# a* u3 g+ M! j
  487. }* k+ c8 X8 w1 B& w$ k' r/ H4 p
  488. " v4 L- w9 s- t5 t7 V
  489. #include ".\ZLib\unzip.h"
    6 u9 I0 L* v$ \# i" }. O- K  w
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);/ O9 `; l9 k9 H- J. p; h4 z
  491. /////////////////////////////////////////////////////////////////////////////
    . L/ ^  ]. I7 o
  492. // CRevAppApp initialization8 M0 t5 y+ x( m2 ~* Y& K
  493. ' l3 b8 c" c6 I8 @) v3 {, G
  494. BOOL CRevAppApp::InitInstance()' J# m0 Z  P9 T( I9 O
  495. {/ }% {5 S) {7 Y7 D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];% @7 @8 K( m! G0 ^

  497. 3 v" ]8 e1 g& f8 x, ?
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  ]# V$ v/ H6 X4 |& a- r0 f4 j
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    % y: F3 j9 @4 K: u: a  Z
  500.   {$ E" f/ F5 Z, j. W" I5 I+ o
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    - ?% [6 v3 `# K$ w( b' r  s
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 h( m/ k: n3 ^& V8 W( i
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    / |: j; n/ {8 M* a; x3 l: y0 L* i
  504.     {
    # Y. [1 r9 Z* o' \+ `
  505.       strcpy(szPath,szPathTarget);
    * ~3 T) E! t  D7 Y3 n$ B, F
  506.       SetCurrentDirectory(szPath);
    ( I7 Y% T$ e2 y. C
  507.     }. N& W: H# S4 l8 }
  508.   }0 p2 h; g+ |6 c- ?
  509. #ifdef _DEBUG$ U& S6 \8 Z/ o. f+ ^2 z5 e' A
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 j" }" A" z: |- z
  511. #else# L- s  w7 P* |1 Q& C
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& q- R1 C# Y! N/ \: B) {
  513. #endif
    , Z4 a3 g& o# @' q" Q
  514.   {* k! a+ O, J7 [' q$ I
  515.     char tempFileName[MAX_PATH];
    & ~7 o% A% w' k7 t. W
  516.     strcpy(tempFileName,szPathSource);* r% M5 _: D* D; w4 w
  517.     tempFileName[strlen(szPathSource)-12]=0;3 \7 ?' l! O9 ?5 Z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    & e: W' `7 e4 V2 {8 a! W
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 S8 i$ ~* m) o  ]7 ?
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);( ~$ M% u. v8 H# a/ u2 E
  521.     return TRUE;5 |/ O: [' p2 S9 i
  522.   }$ I1 R3 l3 R/ W- Z( J3 o
  523.   // Nuke 0118: Delete run.exe
    5 f1 }* }) p! l3 I" B" R& V) X
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );4 q9 i0 v- G. w# z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ) _" t9 z4 n9 C; ?4 p
  526.   if(!ReadCfgFile("Config.ini"))" J% }+ y2 F* H$ e# o1 d6 \
  527.   {& q+ r& V* h8 N! t" g/ i
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
      [9 c, w, W2 v
  529.     return TRUE;
    4 k/ R- o+ a# W3 P% S8 _
  530.   }
    # Y0 G1 E1 u# c
  531.   HANDLE mutex;; O8 i1 G0 G' J( _. z7 ]$ C
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")). R7 I( `2 O+ ?8 s4 {. z; k+ t
  533.   {
    ; a6 H1 @# M4 O* l
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    " N) h& N" O$ b8 z$ y$ R2 b
  535.     {1 u1 b; `3 ]6 l7 R; G5 L2 A# B5 |
  536.       CloseHandle(mutex);
      w5 x5 P. J! b- b  t" K. \7 k2 r3 n
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);' C( u: V( K0 c% k: {( s; z( \( K4 t1 \) {& d
  538.       return TRUE;
    ; D/ f: d$ Y8 S( ], z" H& E
  539.     }; S& d6 q0 v! ?/ h
  540.   }  
    1 h4 ]5 s3 b, E+ b
  541.   CloseHandle(mutex);
    2 W; Z6 D8 d0 B3 y4 v0 x- {
  542. 9 i! m. p+ ~6 m* c; b  T
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);/ P) M! |' s1 s9 I+ c
  544. 4 Y1 J; s3 d( p9 ^+ ]1 T- e. Z
  545.         AfxEnableControlContainer();
    0 M# Y5 J* T: j. O

  546. . [# z0 J% \) }8 i0 d
  547.   bCanUpdate=FALSE;
    + S' R3 C1 q+ H5 a
  548.   dwStartUpSteps=1;- L1 g/ @* w' i/ k' I) X
  549.   dwProgramState=AP_NOTHING;/ }, \* f8 t/ F2 n! V$ p* V1 S
  550. 2 }( j/ c* Z, L" h
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    # @1 Y( l3 H/ T$ V5 s9 x* |

  552. + T3 b4 i# c6 @) t9 D2 u. R" e. ?" U
  553.         // Standard initialization# u3 P7 ]0 F; a# Z7 ~' h9 W
  554.         // If you are not using these features and wish to reduce the size
    3 F2 q5 _1 t& K  ~# g: t
  555.         //  of your final executable, you should remove from the following) ?4 Q4 @! w" d& |+ ?7 _7 q
  556.         //  the specific initialization routines you do not need." l$ J8 X7 T; ?+ c7 P

  557. . e. N& T  H3 e$ w% `  Z9 W( A/ b. E. Z
  558. #ifdef _AFXDLL+ j4 l3 R0 c. E, P
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    5 o4 A- I! @2 e$ `
  560. #else  _$ G# U, j0 z; `) c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    * q( p6 N$ e- a4 B* x1 S
  562. #endif. v8 U, x4 M" v- H9 \* E6 g' c
  563. ! ^2 t+ u6 X0 Q  n
  564.   dlg=new CRevAppDlg;, d9 |, y! U7 C3 {& \
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    " ]2 E; P) z  q( F! o
  566.   dlg->ShowWindow(SW_SHOWNORMAL);# N! b5 U7 }  ?
  567.   m_pMainWnd=dlg;! P% X* e' F/ s0 ]/ g/ ^8 B% e
  568. - M  l: G! G0 ^0 i; \& v
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);- n1 ?$ v! g; ~0 S( Z% W; i1 h% g
  570. / ^# l' I4 Z6 v/ O) x( q
  571. //  GdiplusStartupInput gdiplusStartupInput;
    3 k. r7 j1 e2 [5 V  H7 K+ ?* e
  572. //  ULONG_PTR gdiplusToken;8 Z/ M- @) b) b8 A0 h8 r
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);3 K3 R# f0 h* c" f3 [4 F4 C! ?  G

  574. 2 _3 t4 u3 u! |! y
  575. //        CRevAppDlg dlg;
    3 a' C/ f: X% M9 G. Z' ^1 q( X
  576. //        int nResponse = dlg.DoModal();
    - k1 [1 \' v5 C7 }
  577. //        if (nResponse == IDOK)
    ; k, s3 m' L. j* z6 ?9 `9 U4 l
  578. //        {
    9 t+ ^+ K/ k1 a
  579. //                // TODO: Place code here to handle when the dialog is9 A3 o3 V; N* _4 G' Z; v
  580. //                //  dismissed with OK0 P; A' J2 z8 }% @
  581. //        }7 ^1 E0 E; N  w/ G" ~
  582. //        else if (nResponse == IDCANCEL)2 L% C/ Q2 N9 `& @- m8 q  U
  583. //        {
    . g+ D6 y; I9 i6 A
  584. //                // TODO: Place code here to handle when the dialog is' `6 W" `+ `' }: ?3 t4 V6 Y
  585. //                //  dismissed with Cancel
    & @) s1 i& Q% z. S
  586. //        }
    7 ?) ?, M- F+ p+ T$ b
  587. # U$ U+ X* G9 e% q; o9 S0 l  A
  588.         // Since the dialog has been closed, return FALSE so that we exit the) I* B+ Z' V% K) l- s
  589.         //  application, rather than start the application's message pump.9 p) Z1 c" y! E1 {" j
  590.         return TRUE;
    , h5 H6 p$ F1 J& u0 M2 {8 u
  591. }" l8 P7 e0 e6 V* c/ ]
  592. 9 K' A3 ^7 o& A, Y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * H) j* s5 L- @* T. k5 M/ a+ Y
  594. {
    $ Z6 T, ]/ h  A) e
  595.   int i;' C. ^* d/ R1 E- }$ E4 ^
  596.   char *szRet;
    / j' l9 S* Y$ I3 n5 j' \

  597. * V. q  T6 c2 M! d9 u# Y7 V
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ' P# ]8 a3 [) s' w# l, Z1 M
  599.   if(sztoken)5 l- p, ]7 o  \0 a/ C9 h1 l6 t, H
  600.   {
    ( z7 g- q# H0 n
  601.     szRet=&sztoken[itoken];2 I( n& _* a) }( c2 I
  602.     while(sztoken[itoken])
    : g: X2 {) [0 n+ I0 e
  603.     {0 H+ M5 U2 o( T4 H
  604.       for(i=0;i<(int)strlen(token);i++)" Y; V+ y( m& p% b8 o5 n& T. ^
  605.       {
    - {0 C0 x* `3 a8 m: \4 f
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    : L# Z7 Y( z; \$ c2 A
  607.         {/ B: G/ B0 @$ K! v
  608.           sztoken[itoken++]=0;# n, c! ^6 K( X
  609.           sztoken[itoken++]=0;, w5 e6 b) s5 u2 h3 r1 w! I
  610.           return szRet;1 [5 j' `) K. X& t: q, z
  611.         }
    2 z8 i6 ?, t1 N
  612.       }* ^3 E& K0 D5 Y7 n$ s
  613.       itoken++;/ |# F" W9 E9 G4 z3 U
  614.     }) A% J) J% r0 o: |. b
  615.   }
    ' G+ C6 |& ]  d' J
  616.   return NULL;
    ( a9 m5 }( ?' F9 P3 a0 F$ W2 I( O
  617. }
    * c  a! O% y* u4 w1 z

  618. 5 e" N5 `- L8 H2 h" c: K- R4 d
  619. void ProcessProc(long Total,long Current)
    5 |! r* h5 c( z7 L
  620. {
    & p! r0 M1 F5 `" T/ j  j
  621.         MSG msg;1 A0 ~% K4 N+ J  z3 p
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);9 V# k8 ^2 L: ~$ K1 ?4 C
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));) J$ [& k: B  L+ ?& o
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ) F, ]" |* d9 x1 T: s
  625.         {: Q* F* s5 ~3 T" J% q# V
  626.                 if(!GetMessage(&msg,NULL,0,0))8 n2 E4 A2 O0 U2 G9 K6 N
  627.                 {" W8 c7 y+ `9 f( T% D
  628.                         return;
    6 O, q- T' S' m5 p+ o  N# ^
  629.                 }' `( k" D% K1 D, P2 l5 C  ^
  630.                 TranslateMessage(&msg);
    # ?" j1 C; U' D* ]
  631.                 DispatchMessage(&msg);
    " V% T2 }: B1 f' b6 b- @
  632.         }        ) C' Y! p5 c' P! T1 f9 ], L
  633. }: H  p+ p: P" I8 ]

  634.   b) e' Y- W  J2 m
  635. BOOL bFirstChar=TRUE;
    9 W2 c2 ?$ c- k! }9 r% Y9 s# ~* F/ y/ L

  636. , G3 G# [" F- O9 R2 `- q5 M, V
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    & B3 j  H& J$ i7 J) G
  638. {
    " \" f1 l8 q" {# K4 @
  639.         // TODO: Add your specialized code here and/or call the base class; A) p) E1 x  M% M  _
  640.   switch(dwProgramState)
    # `; P) d; \: L, C* a
  641.   {, |9 b; x" |! ]8 P) c2 y
  642.   case AP_NOTHING:7 J4 I) e5 }' `
  643.     switch(dwStartUpSteps)
    9 P- i5 G* X! G2 t9 G
  644.     {+ Z, {7 v( Q" j/ ?% P+ |1 t
  645.     case 1:3 {/ q- q6 K2 v0 V" ?9 [3 O
  646.       {
    1 C( L7 f6 L9 p7 E
  647.         int i;
    ' m5 d; p$ n( ~. u" v+ k
  648.         CDC *pCDC=dlg->GetDC();
    ( O. u2 r$ Y+ M0 G2 Z) ]
  649.         HDC hdcwnd=pCDC->m_hDC;
    0 h; j5 \/ {+ Y3 c4 i0 V
  650. //        Graphics graphics(hdcwnd);. ~. X. [& V4 ^# m6 \  L
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    8 d+ C+ s9 C. w! o2 M
  652. //        INT iWidth=bitmap.GetWidth();
    " ~4 R! a, j" d  b0 ^4 \* d
  653. //        INT iHeight=bitmap.GetHeight();( L8 U& L+ F3 q) C7 [3 c6 s
  654. //        Color color,colorTemp;. b/ x( @9 A, B& |2 k( r
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)3 T& o1 c( L, {
  656. //        {' H/ G/ g6 V. E' M( l
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    0 G5 y5 R0 O0 n
  658. //          {4 e3 k; T6 w$ m' e  Z. l- R1 t
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 [0 B0 N9 u9 o! L
  660. //            colorTemp.SetValue(color.MakeARGB(
    + a! Y0 g$ u& I
  661. //              (BYTE)(255*iColumn/iWidth),
    4 Z: g. v6 V7 j3 l
  662. //              color.GetRed(),
    9 Z) p0 r# |: e1 w
  663. //              color.GetGreen(),# A0 h( G8 ~+ I
  664. //              color.GetBlue()));: u+ J$ d# A, L7 F) C
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    / T2 T$ I2 ]: Q% d3 q) Z( N
  666. //          }
    + H! [  {. n( A  {% i
  667. //        }# q* i" X  v# {; E; y4 {. t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);4 z7 M8 y, M0 x8 f
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");) w7 e$ S! [4 _6 c8 U3 E3 @' F6 @$ {
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");7 L4 i* c, N' ?% c1 i% c0 J
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ H7 D+ n% u* \( b2 r  ?6 V
  672.         for(i=0;i<240;i+=8)6 |8 q4 J7 A) [
  673.         {
      Y6 o  G: x$ C: Q) O
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" o' G% W% e+ U) r% t7 ?, F7 M2 T
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);1 Y6 Q4 M* y+ M6 A& }' k
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # Q* I. T5 N- _0 w8 ^6 B8 U6 m5 `
  677.           Sleep(33);
    ! G6 H) b# _: ?
  678.         }
    " E: O, @9 I# M8 ^5 t) M: S
  679.         Sleep(1000);
    1 S1 S( ^4 L4 ^/ E/ ?
  680.         for(i=240;i>0;i-=8)
    ' F" O. g8 Q: H5 E/ q; C$ l, O
  681.         {
    ! b1 w2 P- j8 \' g& I
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) j! z& |! a) }1 x
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - J3 {8 M4 ^! ]& m2 c
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ ~6 m7 }2 ], K: u- K- c
  685.           Sleep(33);
      H  j- \0 l) L- c( O
  686.         }
      t- a3 G! ]& a$ h; R6 G# E# K3 q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 X4 i+ G% v# ]( q) j
  688.         dlg->ReleaseDC(pCDC);, C/ Z  ~6 L, Y: s0 G% D" b4 p
  689.         DeleteDC(hdctar);
    + j9 ?, {$ f( l
  690.         DeleteDC(hdcsrc);
    ! k% y6 o  v1 O6 j# g# |
  691.         DeleteDC(hdcorg);
    " ]% [: h& a7 }  _
  692.       }( I4 ~7 {0 {% {0 N! {
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; _) T  Z$ o, J# {4 f# F* ^8 J
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  f! U/ L4 R* B, A, d* l
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");- x7 a0 f, T; ?1 E$ F: T
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , q+ [/ T1 H+ i  ~7 {3 V
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 s- F2 T; J9 a1 f- ]9 `/ r
  698.       if(!Dn.Connected())
    $ b( B% Z" b, I& _- z8 M1 g
  699.       {! b% }4 [9 q& E1 B- J* \
  700.         dwTotalFiles=1;1 x1 D; u) k2 W4 O) O9 W
  701.         dwDownLoaded=0;
    # w- M0 S+ }, m0 }
  702.         bSilentStep=TRUE;
    & W8 e. V' g! l: I. q; ~8 I
  703.         bCompressed=FALSE;0 r, w+ s3 F# ?+ k  S
  704.         strExtLocal.Empty();5 C  s3 Q5 U; ^4 _) y
  705.         strFullName="readme.txt";/ y2 |$ F% N. k( W6 Q  R$ K
  706.         dwProgramState=AP_CONNECT;
    * v" Z- C" G7 d: v
  707.       }
    . Y: e0 `4 L4 A
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 L9 s. q8 }+ d; s
  709.       dwStartUpSteps=2;
    ! \0 ~8 X. J* {0 U' J* N
  710.       break;7 \* n7 X1 }( V6 A, E  f
  711.     case 2:
    : j. u% U$ Y: V4 T1 P6 w
  712.       {
    3 h; [2 G  e; j5 {! |
  713.         int iEOF;
    + H" |3 \4 V% j4 x+ @6 I/ C
  714.         FILE *fp;
    4 w/ O& ~0 n" M3 ~6 K( \
  715.         char szString[512];+ ]9 c+ h- j# {5 Q$ w
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");0 ~( a; a& ^" W
  717.         if(fp)
    0 g' j' b8 b1 Z; d0 b3 K
  718.         {
    7 H3 U" U6 T, e$ A4 ]# p( K1 i
  719.           do% \" S) {2 [: U+ G# I, C# |4 l+ F
  720.           {! K7 ?# `  a5 ~0 W1 a' V
  721.             iEOF=fscanf(fp,"%s",szString);0 }3 _  X# R& Q, t
  722.             if(strlen(szString))
    8 Q. g! h+ D; V) B) @
  723.             {
    & }) v# T) ]9 \6 D2 i
  724.               if(bFirstChar)
    ) i8 W/ W' N3 S1 n, S/ w
  725.               {
    2 ^- ]" h/ Z; b/ c! s- J
  726.                 bFirstChar=FALSE;
    2 q" i* M2 q0 ]- W2 G6 P
  727.                 bConnectIsBig5=FALSE;8 y) F0 S0 Y5 b0 Y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;  z0 |' a: o2 {% h* `  {9 v  v
  729.               }
    ( T: u. `$ |7 A' o
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    3 `! a, b0 ~* M3 |1 _' l  n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));$ H  e! H4 G% y: `% R) _
  732.               dlg->m_ListText.AddString(szString);/ f8 H, U3 }( L1 ~$ N5 _8 z/ ~
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . V( h* M1 P) W: N$ A: u8 W: L7 n
  734.               *szString=0;
    6 H  X4 {$ E) A6 I
  735.             }1 z! J5 `' @9 N( z, Q  w7 j0 ^
  736.           } while(iEOF!=EOF);1 x0 X  ]1 Y; ?- [: D
  737.           fclose(fp);6 z! H% N; J* ~7 H! i" y! O7 p8 |
  738.           unlink(".\\DownLoad\\readme.txt");
    : B7 K5 e* q' M3 @0 a. e6 o
  739.           dwStartUpSteps=3;
    # q$ L* u- s2 R& k' t) o
  740.         }3 f2 F; m- y3 k$ Y1 w6 z8 Q
  741.       }
    * R) D+ V! d3 s# n  o6 ^
  742.       break;* P8 s) u  [: w3 [+ C1 h" p, }
  743.     case 3:1 U' H1 t8 F2 u5 D$ _
  744.       if(!Dn.Connected())7 g5 @- K$ u# j: \
  745.       {
    9 q4 E: q3 w6 U$ |6 A+ F$ _2 l
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);) J0 ]5 l; i1 Y) D) s# P
  747.         dwTotalFiles=1;
    - [3 ?, C% K4 E. z% w
  748.         dwDownLoaded=0;2 n/ P2 K( _, i# y0 m
  749.         bSilentStep=TRUE;% Y; ]: }, k4 H, c/ @' A
  750.         bCompressed=FALSE;6 y8 s3 I* p; ^9 l* ?' x1 h* |
  751.         strExtLocal.Empty();
    / }! |) D/ S) o" A! g) ]
  752.         strFullName="checkversion.txt";5 D; B& v' q. U; C7 [" Z# P
  753.         dwProgramState=AP_CONNECT;
    6 E5 G) M# b* N. e7 G3 i- s
  754.       }
    ' v  L& i( v0 n- a5 _) w5 i9 X
  755.       dwStartUpSteps=4;# r: H/ s, J5 d6 L
  756.       break;& J7 \/ ]7 E: k. B: u  W
  757.     case 4:
    ) i3 i* {9 I' q0 s
  758.       {
      V5 `4 w. Z4 M6 Q& b% P; }% e" g
  759.         FILE *fp;
    ' h4 T  n) i8 _! M% F7 o
  760.         char szString1[128];0 r- _% ^4 k  @- B# A- L
  761.         char szString2[128];* y/ e8 L- o: i6 @1 E: A* @
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    3 u) n6 v" P+ H6 i) s
  763.         if(fp)
    ( T& n( B* x4 E( f5 N9 y& M7 M# o
  764.         {0 A0 c# }" u' \% r: t) e" U7 t
  765.           fscanf(fp,"%s",szString1);. Z! m) c3 |/ T. u/ z
  766.           fclose(fp);* d, c) a1 D6 R0 u1 x; ~
  767.           fCheckVersion=atof(szString1);
    + h: R/ r: `) ]; p2 Y  s! a% k( D9 x
  768.           fp=fopen(".\\checkversion.dat","r");1 ~; ^+ \/ j9 I. i4 E; Y
  769.           if(fp)
    % f5 P" i1 E) z
  770.           {
    1 s7 V; z% U# A* f8 {7 l% B
  771.             fscanf(fp,"%s",szString2);
    4 e3 B: D+ V+ D# z
  772.             fclose(fp);5 z( r* V; D/ Q2 E/ \
  773.             if(atof(szString1)!=atof(szString2))
    : G" y" J3 a( ~& z! \9 R% p
  774.             {: E- S/ a0 Q9 w  F
  775.               if(!Dn.Connected())
    . h: {. ?, G% R' E
  776.               {- C- a  r& k& b0 @8 c. l
  777.                 bFirstUpdate=TRUE;
    " _# i: t4 z- X0 N# F
  778.                 dwTotalFiles=1;
    . l1 N$ I; S2 B5 x( y, O7 [
  779.                 dwDownLoaded=0;
    ; O; F/ P3 ?+ x9 K
  780.                 bSilentStep=FALSE;, o2 D! h' x( t. {
  781.                 bCompressed=TRUE;
    7 F" y" {( v0 }  ?3 \
  782.                 strExtLocal=".\\DownLoad\";
    3 l, N3 Z3 w& c  Z# ?+ @
  783.                 strFullName="update.txt";
    # Z3 i* F" c' K) J
  784.                 dwProgramState=AP_CONNECT;* @2 F% p  w3 d( s$ U' G
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & g. Q8 N, L" r: X7 V$ o
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# \) _' F  o( q2 ^; D$ a" T
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # E7 R1 T* M  Z: C

  788. . P* {: Q: ~" {7 K1 G
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : e1 \! j0 _+ H+ i% T! I5 A7 |
  790.                 unlink(".\\DownLoad\\checkversion.txt");6 k. c2 p7 S: Z3 k
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)% `! `/ n8 a: U, P+ y
  792.                 {& W( B  O! H* `
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! G5 T0 o; `" f, d( ]. z
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    4 S1 e6 o( k- i
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");0 |6 H: V6 w% F, N1 Q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 R/ k' `1 s0 p) h$ G3 l
  797. # a* l$ X  K5 ?0 Y4 ^$ @
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , }* d+ y+ _( o# j1 s# U  P* z& X' d
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* D5 b& @  Y. s7 R% ~% E. k! w* w0 R; T
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ! l7 }* O/ T: e' q( G9 ^
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % \# Z0 C6 i% |. y5 v
  802.                 }/ N+ C  f4 D" W' R" c6 w8 e$ D% h+ e3 T
  803.                 dwStartUpSteps=5;& k" G4 \3 d8 ?; j  l, _) j
  804.               }. X6 N6 V3 M  R+ |: o
  805.             }2 O0 z) ^& L5 h: \% I* ~+ f1 a' V
  806.             else
    8 N0 _! z$ r1 _) j$ l. u
  807.             {
    ; o# [1 Z- @8 O3 ^3 _" l# \
  808.               unlink(".\\DownLoad\\checkversion.txt");
      Q" Q8 ]- b& z+ u# z( H! x
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% k8 ^* U! P' B1 V7 O) F
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ D: a! Z, t/ c9 q0 i3 j( G
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");% n5 l1 G# D! n5 I+ e
  812. - N. d. C1 X6 N+ v# f% S4 M
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " z$ F4 B$ D6 m$ h9 P
  814.               dwStartUpSteps=99;
    ; Z# g7 `3 |( B3 S+ ^
  815.               bFinishUpdated=TRUE;* `' h* `0 }. z% F
  816.               bCanUpdate=TRUE;
    - j7 \3 w. T/ f+ k& w) s
  817.             }
    0 R. u' a- t8 P# I% P
  818.           }4 `6 P# |8 y0 b+ p+ b' e) k& R0 v
  819.           else
    / E' T( d2 c; X; B1 a
  820.           {
    ) ~) `( R- |, V% ~2 w
  821.             if(!Dn.Connected())0 f2 L- r# t8 R7 q$ j
  822.             {
    & B# _2 Q, S- C: d2 Z! _# {1 b
  823.               bFirstUpdate=TRUE;
    - R: ?+ F0 T2 A2 X3 {
  824.               dwTotalFiles=1;
    - u, c6 }, e- G5 O" h
  825.               dwDownLoaded=0;
    2 q2 d8 z) M( P. ]5 E1 \- P; t
  826.               bSilentStep=FALSE;, L4 X0 k4 i" z: O2 W* m% |
  827.               bCompressed=TRUE;
    : k( @' d2 d2 g
  828.               strExtLocal=".\\DownLoad\";2 p, S' v1 U  z! Q, f
  829.               strFullName="update.txt";  B7 x5 |; G8 z% _! @
  830.               dwProgramState=AP_CONNECT;. k9 _: K; f! K7 M& S
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");& }! Q+ b1 `9 d: d5 Q
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    $ T( Q* E& S# ^/ w: i) k, U
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");# }4 Z. h) F! r: G( ]
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ E- P" O; I! f2 g) m
  835.               unlink(".\\DownLoad\\checkversion.txt");
    - |5 \/ r& b+ @5 s
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)( p7 R: j5 v9 X2 d  p
  837.               {& Q5 l$ ~0 r* j& d' B0 z
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");7 {  E! Q6 ^0 f2 P; d# j
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    0 P; Z3 E! i6 O% K4 l, H6 L8 H! ]
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");) B+ B( p/ U0 j; i6 }7 a$ M
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% C+ L# i$ C  [& ~: o0 e: \' k
  842.                
    ( @. c; N- n; O7 R; i( p; E
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  n, X9 s6 [! A- U; r& K3 E
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , k! m- F4 m, Z7 O+ C7 f1 k3 |
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ ]4 s4 n/ c8 e, H2 G: G3 g9 }
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 g5 Y7 t" r$ ?& U- N5 B  t" y
  847.               }4 w0 W: I! W! H* _' @3 V
  848.               dwStartUpSteps=5;
    1 O2 V6 c! O' @* G$ Y7 w. e4 g
  849.             }
    6 |8 m# E$ J: P' y4 X: A) e
  850.           }
    $ q! L1 L- E' F4 c! O+ A/ v
  851.         }
    - m& a0 P/ Y2 A! i0 X
  852.         else
    3 }" F9 f, \" k& C$ ?- ]! V' O
  853.         {
    6 d6 ~3 V$ S. D4 J$ [! r+ \- o7 `2 c, k$ C
  854.           dwStartUpSteps=3;4 k# j: J5 P1 c8 j, s0 |
  855.         }
    7 K* \; k5 O+ _5 o# C
  856.       }
    - |+ N* `9 p" H
  857.       break;/ C) M1 k3 Q0 S0 u2 x
  858.     case 5:  o: K% {: X( ]: k$ }7 y
  859.       {7 z4 W4 X) k7 Z+ x* c1 q3 X
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) Q8 ]; y: u" u
  861.         {/ M$ ]; C( Y( {# D$ Z; H8 P
  862.           int opt_overwrite=1;" C+ q, H8 `% ~+ s7 k+ r
  863.           int opt_do_extract_withoutpath=0;/ E: o% Q! x+ _) C; m* w
  864.           unzFile uf=NULL;0 k, a6 z$ J) X

  865. " I" c4 S! v/ {1 O8 {/ `
  866.           uf=unzOpen("Wsa.zip");6 I8 _& [1 c! g3 S% \6 S
  867.           if(uf)2 m- Q. m4 L& K8 c3 B+ v
  868.           {
    / u. q7 @6 A2 @* [
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    9 r5 o. o( @' F; j! a5 ?
  870.             unzClose(uf);% n7 z8 r0 @* _8 ~, t* I6 _
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    , {" j4 H2 c2 @" j- v) G# E0 l! J6 L$ W
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    : U* G2 |* l+ i7 y4 j
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");9 t9 m# s7 u* ?% o: Y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % k4 |  \  M+ N
  875.           }
    ; W& i* A; P/ u6 f8 t/ {* O
  876.           DeleteFile("Wsa.zip" );4 \) @& M2 k  N9 c/ H
  877.         }
    " E4 f/ L: a# `0 e2 v

  878. : J$ |' i& X. y) g8 h9 Y1 w* H
  879.         if(CheckLocalVersion())
    $ F9 J$ B) q' U1 B
  880.         {3 M) S9 u! T* c& q0 j) {4 d2 d1 M
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");, T5 m+ i/ ~0 @9 H9 f
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");' o4 K* {9 b! L# I3 F
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");8 h* \! i% ]) a) m  `) r. z
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 a; W7 ?" W/ ~3 m
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);- Z3 T+ a( K1 ~- Q# M# k
  886.           dwStartUpSteps=99;
    + b9 R0 e& Z: X- Y
  887.         }
    " c) {% P6 C; D; }* `# Q4 q
  888.         else
    : S; x. j8 }4 f* p" Q
  889.         {7 }7 @4 A; S2 S' R
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% Y: r, p3 a. u* ]) z. @( S- @4 @
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");) G6 C% ?% q! x- W: X$ |7 h
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    , Y( b: ?# c, t+ b0 z7 y

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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