找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
8 Q9 o) N* R/ i( G9 e1 K5 X
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 S& {% z* p. I) m7 N
  2. //
    $ y& e/ h: n$ T9 n: A3 t

  3. ; o" @& W# E  V$ {; c: C
  4. #include "stdafx.h", r4 D+ {; G; Y# P: O
  5. ; r5 j$ f8 t/ n; v- i" V
  6. //#define UNICODE
    % l' N, Q0 Z  Z! A. E
  7. //#include <gdiplus.h>
    : U3 x& i. w  T# j+ A
  8. //using namespace Gdiplus;0 E2 W$ ^# x0 v

  9. * P$ G' ~% [: `* u! f6 ~1 u+ _
  10. #include "RevApp.h"
    . f% m( B( D  v# {5 w& E. g) |
  11. #include "RevAppDlg.h"
    ( _! v- N) k% }" k; _" G* M
  12. / x( [/ w! @6 d$ _2 P8 ^
  13. #pragma warning(disable:4786)
    2 @  c5 m' }+ U7 R8 x
  14. #include <map>
      P  w: U7 ]" Z6 Z/ ~# Z
  15. #include <list>7 ^& ^: N! s5 H8 a4 O; }2 v
  16. #include <direct.h>
      z  g8 j! ~3 `. X3 @& D5 n

  17. 2 v5 t- V* d: m3 B) j
  18. #ifdef _DEBUG
    ! N, l" B: h& ^- K) ]
  19. #define new DEBUG_NEW
    7 C- e/ ~/ r; g- A  G/ k. t
  20. #undef THIS_FILE
    7 [) n! a! o$ g9 g* A' `' s
  21. static char THIS_FILE[] = __FILE__;
    3 Y  z( E# V2 P5 _0 h( x
  22. #endif
    7 Q1 r7 P0 }9 c" K0 }3 F& A( f
  23. #include "SkinResDef.h"
    $ L( k+ L' E! m* l1 L) H/ A
  24. #include "ChangeBG.h"
    4 H4 V4 S1 k9 c2 c( z7 ~
  25. #include "AFXINET.H"+ @0 c6 I0 y) E0 L' j6 C

  26. ; N- k, ^, M' ]8 g8 _
  27. #define TRADITIONAL_CHINESE 0. D" l# q7 |2 v& b* C- G
  28. #define SIMPLIFY_CHINESE 1! m0 u# N4 t: o0 M* @
  29. #define ENGLISH 2* r( S6 D* p* a* P( ~6 f2 u
  30. int m_iLanguage = ENGLISH;! ]; Z' t! Z3 j2 k2 \
  31. /////////////////////////////////////////////////////////////////////////////" b2 D# T( G4 V) b) B
  32. // CRevAppApp- v, t- ~# [( z# j& f8 \

  33. . u/ M) W+ B+ P) ?
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    - s6 ]6 b% |" {# M( ]/ t7 L" P
  35.         //{{AFX_MSG_MAP(CRevAppApp)% d" o# M1 |) e' c  x
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.( b- Y0 g1 x0 ~0 }# [. e
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    / G4 x( ?" i) i  I  @
  38.         //}}AFX_MSG
      E. _) C9 v% b3 w. `1 K' E) w
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)/ |) G6 `  {5 T! T
  40. END_MESSAGE_MAP()
    ( b) e5 |- {; }

  41. 9 e" x, `  Y; h- }+ X
  42. /////////////////////////////////////////////////////////////////////////////6 t( ^' u& D1 r) O4 Y
  43. // CRevAppApp construction
    $ v6 E# E7 C5 w0 [

  44. # E( w, \/ q% s. D; o+ q7 L" q
  45. CRevAppApp::CRevAppApp()
    * Y, U* F+ x( v$ C! s4 Y& }6 n8 W
  46. {; j; K; C. g& J2 w2 Y& I3 u
  47.         // TODO: add construction code here,: H$ U. e+ o' v/ c  \/ N, y
  48.         // Place all significant initialization in InitInstance
    3 o$ U; R; R& u$ P
  49.   bDisplayIsBig5=FALSE;3 B  G: T! v3 _' C2 L( \/ A
  50.   bRestartUpdater=FALSE;
    ! o- I. U! P4 @) A6 \
  51.   bFinishUpdated=FALSE;
    9 Z0 A$ j( w: L) U9 p8 @5 s
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ( d1 e0 M! o0 V( C
  53.   InitChangeDataBig52GBKS();5 Q! R. e; j! C, H* A/ @$ n% Q
  54.   InitChangeDataGBKS2Big5();
    ) U/ D( B3 e9 {7 S; G3 |
  55.         //) A: U: }5 |" i9 t7 X$ K" X3 f7 t# [5 t
  56.         bClickRunExe = FALSE;
    9 Q! B# Z. u* m# _
  57.         //1 w. \8 R* N' f. z
  58. }& K7 L" F0 W  Z7 R

  59. 0 Y( v& V2 i7 k0 S! n5 w5 |& Z
  60. CRevAppApp::~CRevAppApp()% p, y/ w5 u& U+ _0 O" @  x' _
  61. {
    4 w& r2 r% \- o3 b0 E
  62.         // TODO: add construction code here,
      q5 ~* H" `6 E2 A# k  r( }
  63.         // Place all significant initialization in InitInstance
    1 c" l% c1 I7 z( f$ H3 t5 q) V
  64.   EndChangeData();
    * [" `! r& e5 L7 D7 k  a$ n
  65. }  b( q9 ^% V$ p( @" e( F
  66. + _- R8 I: A% H# z* u4 @! }
  67. /////////////////////////////////////////////////////////////////////////////( ?' }7 Z5 N! d0 {
  68. // The one and only CRevAppApp object5 T5 ^' h# M7 C  n5 ]

  69. . }; J5 G, B- t3 g
  70. CRevAppApp theApp;) S5 v0 f0 X7 H8 a3 @5 d; \4 l
  71. / O- ~3 n' K! p& ~! a- S
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    - I% f8 d; _$ H# o2 R
  73. {
    7 O6 x# [% e$ r- g) q6 V6 O- a5 Y
  74.   int iEOF=0;
    % n2 F! X5 |5 a% m0 P& ^
  75.   char szTempName[MAX_PATH];& g( w: J! `0 Z: q
  76.   *szFileName=0;
    . _; O3 i5 K" G! s8 ~+ \6 H
  77.   iEOF=fscanf(fp,"%s",szTempName);
    $ f0 }5 f6 O6 _* o0 `4 {  B! x
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')" k* b) e' @/ T2 Z3 d5 E. ^
  79.   {* |3 o7 ^1 n4 M. P9 h# Z( c; x
  80.     strcpy(szFileName,&szTempName[1]);4 r( D4 Q+ U0 I6 H) i/ K, Y* W
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 C: L5 ~- V# O7 u9 c- I8 Q
  82.     {" e* A/ |7 ]% R3 g
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ) m4 w2 O8 ?% W; t0 z3 u
  84.       strcat(szFileName," ");
    ( \1 d9 {2 X5 h0 o; e
  85.       strcat(szFileName,szTempName);
    7 L: p+ g* @. h9 E
  86.     }* D( W, i7 u" L( L  z% _8 Q
  87.     if(strlen(szFileName)>=1)
    " Y4 i! H  G3 p  i1 F! Q
  88.     {
    ' g- O* X$ w- e4 |: `1 q
  89.       szFileName[strlen(szFileName)-1]=0;" \. b4 q0 |/ H2 Y; X
  90.     }
    * f1 a7 Q# F  J& _* l- T8 d
  91.   }( s" T% ~- r/ H/ M2 y- R# `
  92.   return szFileName;! B; m/ a  z; R  M% `
  93. }& U/ V" e. z' e4 L' Q

  94. # F, B. O# R, V; w
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    - z1 T$ U' ~3 ]+ B) b. T6 X
  96. {5 @+ H$ s. m/ ?, Q% D
  97.   FILE *fp;
    ! H$ p$ _5 H6 j8 Q& L" c
  98.   char *key=NULL;
    ; m+ y% R  f1 p, H8 M# b" y1 K
  99.   char version[MAX_PATH];
    6 \8 N  {& X4 n! C: {3 j1 A7 c  W
  100.   LPUPDATEFILE file,olds;
    0 s' @/ v: N, m7 D: K
  101.   std::map<CString,LPUPDATEFILE>::iterator p;, o/ t, s( P* A1 i, r9 |. U9 m
  102.   T+ d. O2 V) p" N: K/ a6 l# j
  103.   UpdateList.clear();1 T% N1 x' ?8 ?7 W5 ?
  104.   UpdateFile.clear();
    5 N4 R8 l: w" q$ q1 I9 u1 c! k3 J( \
  105.   if(GetFileAttributes(filename)==-1) return false;3 v7 E! [. e) O9 [" n& X
  106.   if(!(fp=fopen(filename,"r"))) return false;9 R  Z+ v" y8 f. ^/ {" y  A
  107.   fscanf(fp,"%s",version);6 _! ~2 H- _& R7 H0 W
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    2 g! k3 V+ u& z# {! A0 |1 I
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 e/ A3 T1 e: V, x8 C
  110.   {
    7 `. J& a9 \) D3 _# v. A/ i
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 U9 d  O$ d) }, \( |# B
  112.     fscanf(fp,"%s",file->path);
    - ?2 Z5 [% o4 L% L% |. y& k
  113.     ReadFileNames(fp,file->file);" w  q6 v7 I( N) Q) F  L4 T' C$ \
  114.     strcpy(file->full,".");3 ~5 G8 F( H* A; d9 f
  115.     strcat(file->full,file->path);
    ) y8 d5 v' W' I0 f
  116.     strcat(file->full,file->file);: P( Q9 h8 C& d. |8 z. F8 J
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    1 C5 d' ]) o" R6 W, T& M7 W
  118.     {
    ; n3 n9 ~+ s  G! f
  119.       file->vers=(float)atof(version);
    : a7 P( N6 T, l( L
  120.       UpdateList.push_back(file->full);7 a$ v* W, a) _& y. k: I: |: t8 a2 t
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    : ?/ e7 h& n- k# s
  122.     }
    " U5 Y1 o+ {1 u, n4 B) k, F
  123.     else
    0 J) X& }9 x: q: b/ t
  124.     {
    ! K; W" C5 B& V% ]& h9 r! F
  125.       olds=(*p).second;
    3 X3 s* M2 w& v/ r6 o# L
  126.       if(olds->vers<(float)atof(version))
    ) j2 J2 K- N6 }0 _5 d7 R! X
  127.       {
    1 H* Y& o2 p# ?0 r/ Z) V7 z* j1 o
  128.         olds->vers=(float)atof(version);' x5 k& a$ Z; J( B4 P
  129.       }
    & [# R, @# L1 T: n$ ?
  130.       free(file);
    * u9 k- F3 ^' H; _( X; F
  131.     }
    , j- v5 v3 ^. M' a3 {
  132.   }
    7 B7 H0 }8 Q6 [1 Z: [% h4 F7 G. N; Y( t
  133.   fclose(fp);
    6 X0 ^% B1 p; H/ x- ]$ n% {) Y# C
  134.   return true;
    - w0 f4 ]2 H% Q) v: g# ]1 j% @
  135. }
    3 V9 m% |9 s$ W! C2 }1 ~* I
  136. - m- A/ _9 X6 W. y/ @0 [  @7 e9 S
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    " S1 K; m1 B. }# |' B
  138. {
    # h% h3 A/ ~7 e, R; }( w: w
  139.   TCHAR  szFull[MAX_PATH];/ Y+ `! b0 n3 F0 @6 R3 a0 i
  140.   TCHAR *token,*inter;
    ' _1 R% _) ?/ c% Q9 |( u2 A
  141.   *szPath=0;9 ^/ a% w3 O* b
  142.   strcpy(szFull,szFullPath);/ M3 i) B; r. }' [
  143.   token=strtok(szFull,"\\/");
    7 j( k: k: K0 s) j- A; l
  144.   inter=token;5 N: m6 ^1 D1 q7 p1 m6 `" m0 v( ~
  145.   while(token=strtok(NULL,"\\/"))
      w) o. o# y3 A% R9 u" J8 i
  146.   {
    / ]9 B. e) A5 T, ]" n
  147.     strcat(szPath,inter);
    ! |+ E3 i& ~  g6 d3 Z( @; j5 A
  148.     strcat(szPath,"\");4 e2 u4 y. u, t: q# ]& e/ U8 c. Y/ W2 U
  149.     inter=token;
    / s; \8 l, g. o9 K1 `1 [0 j
  150.   }4 t, W* S0 Q0 X( x. U
  151.   return strlen(szPath);" U0 X2 Z, }# y- k- G/ Z
  152. }$ y1 ?9 ~2 T2 A5 o+ Y' J
  153. " |" m8 |& O' s, O5 {
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
      V0 L- T) Q4 E7 z+ x# v
  155. {. m+ \+ t4 R3 x! I! \- R
  156.   DWORD attrib=GetFileAttributes(Target);
    . S) G1 u/ d# U. B) H, A# a
  157.   if(attrib!=-1)
    / |) f1 ^. A; O3 r6 S
  158.   {
    ! q  G& W/ `9 j, o2 A
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ d# N8 c1 Z4 j4 y
  160.     {. A( B/ p/ ~! b% r% \
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 ~* y% }+ x( w- L  Q) M
  162.       SetFileAttributes(Target,attrib);
    8 Z9 H- S, o: m& V
  163.     }
    , G. {3 E& I! S
  164.   }8 Z+ J6 Q3 s* S6 O1 E5 `
  165.   CopyFile(Source,Target,Erase);
    - Y: |. T  D1 U
  166. }: j: Q, u% f4 L1 K0 X$ C5 z
  167. 4 a; i9 y3 V( W& l, y3 G7 d
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...): @3 w! a3 `* A& E" ^3 O
  169. {/ J- u; Z  {% m/ w1 b5 }1 D; y
  170.      FILE *fp;
    . _4 C7 y$ \  k9 j% U
  171.      char  szBuffer[8192];( L# _3 t1 _$ |' q! l; t* `# D) Y! e
  172.   va_list  argptr;
      Q" D( v5 m/ Z  ~: V
  173. 1 u1 ]5 m/ ^% p7 q( s9 L
  174.         va_start(argptr,message);
    % [8 \; k0 D5 q  J
  175.         vsprintf(szBuffer,message,argptr);! `8 j; g5 V) L0 Z- D" X  X
  176.         va_end(argptr);
    4 j; i  _$ T& l! M; m5 W
  177.   fp=fopen(FileName,"a");5 n& U* \. u5 h, _5 K  d
  178.   if(fp)
    1 K' \# d/ X- x4 H9 X
  179.   {% f; ]4 L. \$ {1 r& G
  180.     fprintf(fp,szBuffer);
    $ \7 U" q" M7 n8 U% M/ A! D* M
  181.     fclose(fp);, f7 A; L# z6 d* s/ q& X' L
  182.           _flushall();! R3 k8 b$ ^2 ]1 T
  183.   }! l8 m, j+ y1 G+ O$ _0 g
  184. }
    ' E' l9 v6 B' b) I. C

  185. 7 M! C. b2 ^/ u% J6 u$ w
  186. BOOL CRevAppApp::Fclearf(char *FileName)2 r4 e5 _) E1 A4 u6 Z/ _! z6 j2 P
  187. {
    ( u+ e0 G' h9 ]1 p! ~7 q  O7 |* I
  188.      FILE *fp;
    4 q% {  b" H7 @" m+ c; \
  189.     DWORD  attrib;4 ^8 q$ a) y  E7 F1 ?5 n
  190.   attrib=GetFileAttributes(FileName);# I9 Z" ], h7 {+ u% K
  191.   if(attrib!=-1)
    3 B9 n! |. ]" S1 S8 Y
  192.   {
    ' w& o: H7 `$ Z( m7 w( R
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 P* e! ?8 E  A' b6 n
  194.     if(!SetFileAttributes(FileName,attrib))
      L$ Q6 Q* G. r& U9 X3 ]' Z* l
  195.     {6 {! X# M5 @* _4 a  O
  196.       return FALSE;
      T4 G, d: G& L4 y9 v' A  N
  197.     }
    ) B, t5 \: @, z0 l/ _3 r5 i; Y* l
  198.   }' U! k- Q3 u; J2 |1 j
  199.   fp=fopen(FileName,"wb");5 @4 T* }3 E+ ^* b" H; F9 |; g5 G
  200.   if(fp)
    : T4 f, P3 [! Y: l6 {9 v( x: k
  201.   {2 W5 Z0 P, Y9 Z7 X# Z0 e0 I
  202.     fclose(fp);  _$ S0 v8 z; c5 Z. Q
  203.   }
    ! i: ]  @% S: G1 d% s4 `: ?' Q
  204.   return TRUE;
    + v1 r8 p% _2 O' D2 n
  205. }
    & v; F3 d4 \2 D% P: I

  206. . E" s, A9 U# `, q: C- F/ ~  ]" L
  207. BOOL CRevAppApp::UpdateLocalVersion(void); z* J( A. ]6 Y, k; k
  208. {8 t& f3 U4 d; x4 ?. r0 s' E
  209.   char filename[MAX_PATH];
    8 v4 s2 I! c' Q1 t1 k. F3 Z: a
  210.   LPUPDATEFILE file,olds;
    3 ^/ f! C; a! @, L) n$ M
  211.   std::map<int,CString>::iterator i;! J/ i1 [! M) n& N1 u: }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! v+ @% q" R- j" e! [
  213.   std::list<CString>::iterator l;( @0 k, q, z1 o6 ~
  214. ! A0 \' @( |6 L* ?% H- J1 B- N
  215.   if(bFirstUpdate)
    - @, Z& \: U' ?3 w% ~4 x
  216.   {
    & ?% p& ^9 [( j
  217.     dwCurrFile=0;
    8 ]; F: H0 O7 \& r& K3 s
  218.     bFirstUpdate=FALSE;
    6 y6 Y( L( K: _5 J5 \
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), d$ P+ j/ u* o6 k# L
  220.     {! V9 i" A! Z. u% }" k
  221.       dwTotalFiles=UpdateLocal.size();7 |/ m8 _- z8 S
  222.       dwDownLoaded=0;
    , p6 V3 p4 ~) F7 K) q! ^) h
  223.       bSilentStep=FALSE;# Q' [  M6 W2 H( K) L* G- \
  224.       bCompressed=TRUE;
    1 `8 X6 v% E3 S4 v
  225.       strExtLocal.Empty();
    ' d  c' r2 z" _6 z" o
  226.       strFullName=(*i).second;- J! u$ u! x+ W1 u3 Q
  227.       dwProgramState=AP_CONNECT;0 z- G0 i" g, ]+ t7 ?6 p6 P( L2 E2 Z
  228.       return TRUE;% _, M. U% V1 M: A  H% m
  229.     }7 h1 Z3 \7 G6 ^; _
  230.   }
    : w# S) I0 a5 b" |- L% S: i& B
  231.   else if(bRestartUpdater==FALSE)$ I. \% u( R8 G: p7 p
  232.   {" [1 M3 v  n5 u) {, v4 i2 m
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())! p8 \) }2 S$ A' \5 j; B/ v
  234.     {
    . N3 p& V1 d2 ]0 Y+ I
  235.       file=(*p).second;
    , _/ z  D: N6 `) U! m* b
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())  h* u% L" D' j" t
  237.       {
    5 G5 F  j6 o, Q; x' q' Y0 ?7 D0 ^
  238.         olds=(*p).second;! @4 f' e6 p0 x" U2 I( H1 a$ J9 l5 o
  239.         olds->vers=file->vers;9 W+ i: D% @, G  d6 Y6 {' L" u
  240.       }' f* B; y7 O4 i: x
  241.       else
    - P( l! ]6 o5 x: T8 H5 z
  242.       {/ U% q% _  H4 t
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % d+ s0 w1 D- T3 b. X
  244.         memcpy(olds,file,sizeof(UPDATEFILE));5 L9 c7 k% z5 B9 I( K7 A
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
      S( [' n5 H, d4 ^4 N! i
  246.       }
    ( H+ R9 m% l8 s4 s: l
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 R. {8 K# k9 ^# E$ M+ f6 L. R
  248.       sprintf(filename,"(%s)",file->file);9 B  V' H* D. W$ w4 S' Y% K
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' W4 ~) z, V3 v* h+ |  B
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    9 H6 C" X9 t+ q$ o
  251.     }
    : s4 P3 q1 f) Q( t( f# P% D
  252.     dwCurrFile++;
    7 h9 @- N3 P. d3 @
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- [" X- j5 H, b; A$ B% m
  254.     {
    * Y* b( r9 ?4 f* P, v. p/ U4 D
  255.       bSilentStep=FALSE;. C) g' ]4 ^3 Y0 W. b/ {
  256.       bCompressed=TRUE;+ U9 y; @1 Y0 e$ Y$ y. D
  257.       strExtLocal.Empty();/ p2 [  w5 y. Q; |; Y6 }
  258.       strFullName=(*i).second;$ L5 W5 ^5 m" {* D8 g- B
  259.       dwProgramState=AP_CONNECT;
    6 q+ q/ K! T& q. F
  260.       return TRUE;: M- k5 ^+ p, ^2 b1 `" G' S7 V* v
  261.     }
    ! H$ c& M2 J5 B+ |: b( i
  262.     if(!bRestartUpdater)) F$ x# X6 J  Q9 b1 U" V2 b
  263.     {
    - Y' _& k* {6 U" [
  264.       int iCurrSize,iFileSize;
    ( b5 n/ J1 I( s5 Z
  265.       iCurrSize=0;
    , Q( m- [4 U  C  N  ?/ E: x
  266.       iFileSize=UpdateList2.size();9 v. L: G4 O2 T
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    # P; c, }1 b# g& f; [7 L
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");- ^9 i. ~* S, ~9 [8 f7 x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    " y6 ~; A: ~. O' f, b& B# s
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! \/ M* B) S/ v4 x% {9 \
  271.       Fclearf(".\\update.dat");0 O* L0 U/ o+ y0 R9 T6 t2 h
  272.       Fprintf(".\\update.dat","Bloodyf\n");# N; ~  |1 f  z4 A" j" j  L
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , g8 G* ~4 W  [& R) Z0 P
  274.       {
    : `6 l" z4 C# F# w# Z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()), N6 j: b, J' }  j  P0 J2 G4 P( E
  276.         {- c! m' s5 j. B9 U7 u
  277.           file=(*p).second;
    : n8 T  v! w6 n* W6 R
  278.           sprintf(filename,"(%s)",file->file);
    . ~( M& w1 P4 |" o, n# P: R8 X* D/ }% h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / z" j+ B' g8 o7 K  p; r3 f+ s6 L
  280.           iCurrSize++;4 Y. k" W9 b" Y. G
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    0 T; v$ |* I8 [9 m
  282.         }
    , f; O* ^/ L3 K, J0 @" r
  283.       }
    / O0 Q: X* [- l9 C8 H
  284.       unlink(".\\update.txt");
    2 w4 O8 A! M7 e+ V- p
  285.       unlink(".\\update.tmp");' [  J! d8 ~6 Y% c# o2 \# Y
  286.       Fclearf(".\\checkversion.dat");
    $ v3 r3 j3 E* S' c* K3 E( b
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    # X) A& |0 v9 E
  288.       if(UpdateLocal.size())
    7 b" C7 b9 `0 `9 y& S+ c
  289.       {" g; j, b: r8 `8 J2 M
  290.         UpdateLocal.clear();% W2 T( Q2 I" ~+ ^$ ]5 ^
  291.       }
    3 q0 Z1 m6 ~# C5 |# u! }! \! d. l
  292.       if(UpdateFile3.size())& I" r6 z) T9 n2 Z
  293.       {! c7 p, y; Y+ G! o7 U
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 G; z* W$ p8 @- R/ U6 }
  295.         {
    ; ~# ?, d5 w1 B$ q
  296.           file=(*p).second;8 G" d8 Y7 I( s  ?
  297.           free(file);# f) K% c6 R( K! |. b
  298.         }
    , O2 A9 J, F* E. g
  299.         UpdateFile3.clear();
    4 G/ w5 n! M# j( ^# a
  300.         UpdateList3.clear();$ U8 U- u7 r0 U: Z- }
  301.       }
    5 U7 V0 |  x% s+ F$ D8 W
  302.       if(UpdateFile2.size())% y/ W: G/ n+ R2 z4 G# j
  303.       {
    9 J/ l% R0 A9 H8 a9 i! Z4 R6 s
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! O' Z: K2 J' `- ]" w' l
  305.         {2 Z! J) Z  }! G
  306.           file=(*p).second;. ]+ J% ^! T' U4 W" C& ?+ g' C
  307.           free(file);$ h. V9 _/ W$ p
  308.         }
    # a6 H4 Z8 e& _% Y0 n- V
  309.         UpdateFile2.clear();  I6 t0 h/ o. G% M' C
  310.         UpdateList2.clear();
    7 [* |- i. v" Y) N. U5 l- _% }
  311.       }# [  w. X% g5 r) U
  312.       if(UpdateFile1.size())
    ) L3 m8 K* Q4 f% M7 f3 w/ G
  313.       {
    ! n5 j" l' L- y* @. N
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) W) Y  c; K3 Y' F( ~
  315.         {8 t- d5 k$ \+ A. O, O1 Z
  316.           file=(*p).second;1 x" h& a# ]) z( l, Z/ i# y
  317.           free(file);
    7 O+ l  R& S9 F' y
  318.         }# s' J( ~( Z- ^9 s7 X
  319.         UpdateFile1.clear();* l% V# j: O* B& Z+ h9 z
  320.         UpdateList1.clear();2 x# k) v# N7 r3 `9 u) m/ }
  321.       }* V9 P: u, N3 J: d! F9 R
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    / s" L; y! e5 [0 e
  323.     }3 h6 |. H. I" y) i
  324.   }
    0 g% g+ H! [- B# p) m: `8 V
  325.   return FALSE;
    : @- }; F& R- ^; ?1 F
  326. }9 d, e. w! ^2 ?9 j$ F
  327. 1 \' u+ q4 o; f1 r6 Z
  328. void CRevAppApp::ClearAll(void)
    ' Y6 F: a# c7 t
  329. {
    - a7 K4 n& N* @: m
  330.   LPUPDATEFILE file;3 v1 T! _2 H1 d. K: N5 Y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * S- Q# V2 i" _1 Z% ?
  332. # k  e$ C6 L- V3 s
  333.   if(UpdateLocal.size())3 `: S" A0 `# H$ P
  334.   {
    ; d' }/ X4 n7 I+ N4 k& a+ e0 r
  335.     UpdateLocal.clear();* u- X) a8 o+ V0 ^
  336.   }
    + J" f8 M' y1 K/ Z3 W; N: v- L) Q
  337.   if(UpdateFile3.size())
    5 f5 |& c' B0 N
  338.   {
    * g* Y  `, o3 }* C4 d0 f5 w
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): q: y+ Z- p, {" F
  340.     {
    0 z* e6 ?/ v# r1 e$ f
  341.       file=(*p).second;! M$ w0 ~) A7 B/ r
  342.       free(file);& {- H4 B) G3 }" s
  343.     }
    $ @3 ?; E4 u) W! e6 j: N9 X
  344.     UpdateFile3.clear();% \. }. w6 s( ~7 I' c, i
  345.     UpdateList3.clear();' \1 K1 B% Y- n( v
  346.   }. c- _- S! [9 V) ~- l
  347.   if(UpdateFile2.size())
    ; e3 H& Y: y" u# W$ C" V4 v2 z
  348.   {5 g& d+ M/ p- @
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' }6 y1 a' F* I) w
  350.     {, o6 v  c; _+ f! O5 y
  351.       file=(*p).second;
    1 f. D7 r' F% U7 B. H3 c0 |
  352.       free(file);
    - K+ V; c- B0 `/ W( W7 z7 q8 S
  353.     }
    0 ]1 ]0 q! X3 C% N8 f
  354.     UpdateFile2.clear();
    5 ^4 I0 n% K8 L
  355.     UpdateList2.clear();
    0 }0 B( }  K% Z/ U% ?
  356.   }2 {. w# ^) o5 Y7 s
  357.   if(UpdateFile1.size())$ E& y9 w# m) ]6 @, r
  358.   {. }4 j* m1 g; x: g
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / L3 n6 Q9 P+ d; `/ n) t7 x
  360.     {" D  |8 D+ i6 {7 {# _( V
  361.       file=(*p).second;. {: p- I0 x1 r) \, q0 c
  362.       free(file);
    , ?2 H% V  \1 f5 r) [( W
  363.     }( Y$ G0 u, A" u; }2 D
  364.     UpdateFile1.clear();! R* r9 e! g8 M& }! C  k3 `
  365.     UpdateList1.clear();
    $ h& c8 F0 |6 f; ]4 ~
  366.   }1 D- |* j, p  }" ?, f3 |& h
  367. }  
    2 V+ r9 G: d' P  N( H5 \- f9 h1 b$ u
  368.   
    5 v) B6 }1 J# z0 E9 Y  ~9 ^0 i
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    4 T) G( g8 [2 Y$ G3 [
  370. {* f& w$ U3 J0 m( T- E. z7 M0 W
  371.   int c;% O* f) p+ g) t7 D
  372.   LPUPDATEFILE file1,file2;
    : S9 i8 Q& _- s# D; C7 b% Q  v
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    / w9 `" q' z0 u7 O1 s. a
  374.   std::list<CString>::iterator l;
    ( C$ w. v7 ^3 a: a5 F0 X# B# A

  375. ! ~# `5 D& @) c2 Z/ `, X' f, A% V% }
  376.   UpdateLocal.clear();* Z* b# U* [8 D# l9 F
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    + \; j) S/ V; a' A2 V6 A
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    0 c# ^% q. O& Q% h% u
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    % V3 O! x: x$ c1 G9 }4 a
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    6 _. W! E9 L/ F" V6 [9 E) L
  381.   if(UpdateFile3.size())
    1 G6 u( a7 y3 @0 C2 D: g
  382.   {$ L5 R& K) s" a5 E6 K7 k1 W9 |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)& g3 N$ L8 m5 l1 d: o7 Y
  384.     {
    7 `+ P( W: [) [2 s: l# S
  385.       file2=(LPUPDATEFILE)(*i).second;
    + e6 l  y- K; O7 U5 s( P
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ( J0 ]  ]; }! F) l; H7 X& `$ D$ W
  387.       {4 k" _( c3 S0 H; l$ Q6 c
  388.         file1=(LPUPDATEFILE)(*p).second;% q/ x1 N, y; D' G9 t6 B
  389.         file1->vers=file2->vers;
    + T4 [' {$ F7 I) X' d
  390.       }
    + `/ r, P2 l+ V9 E# b$ L; v- I3 t" z
  391.       else
    5 N3 `# k' ~% j" ]: P+ u
  392.       {
      z6 K- r" }$ |! {, I4 Q/ I4 j
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; I  q5 ]( B% H( x+ I
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));7 J, Q2 a1 V' k5 T5 S
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));" A2 @# x+ j% \( Y
  396.       }
    4 B  U6 @* j2 Z' R( M! U" Q6 P
  397.     }% N* Y5 o' D  p/ G9 U
  398.   }* V4 b4 I" {6 D1 N+ [2 p; k6 j
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++), t2 W# v$ m! }  Z+ q5 }
  400.   {
    , u  P6 V. g& Z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    3 N: d6 ~0 \7 j
  402.     {4 I- U- @/ k4 b1 x+ t
  403.       file2=(LPUPDATEFILE)(*i).second;& V5 C1 m/ R7 y+ l2 p
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())- g2 ]% D7 m/ R: T( d* c( @# j% `
  405.       {8 m6 C/ q  E. Q* o
  406.         file1=(LPUPDATEFILE)(*p).second;) x; i* c/ P5 Q5 K
  407.         if(file1->vers!=file2->vers)0 s* ~* |7 D! q  a4 j9 J# c4 C
  408.         {
    . P, n$ B, C# G, D
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) C; y- U! @3 S9 S9 X9 z$ K
  410.           c++;: q. j- `2 Z: [. b5 S7 F* s
  411.         }$ O- P% _6 @% i! Q
  412.       }
    " @! u3 M' X# P
  413.       else
    : i& E4 Z3 q+ d+ u
  414.       {0 Z" W  p/ ^! [) W
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) u# P5 K; K' V0 z% @# j. W
  416.         c++;0 N0 m; A% L9 V, M) z
  417.       }( [, t" q  `2 n* u& O" d
  418.     }; I* i5 D7 Q& P# o
  419.   }+ E9 B" L9 |- e
  420.   unlink(".\\DownLoad\\update.txt");4 B+ S* r" n) b% W1 o* a9 w
  421.   if(UpdateLocal.size()) return TRUE;
    , {. o2 Y7 f7 X) ^; `
  422.   else                   return FALSE;" t7 p+ ]  m* S& u' I8 U% d
  423. }
    ' p3 }# `$ @8 H, A! F

  424. % h5 ^0 o# o6 }. q2 I
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    " u$ @. h  `8 R# b, f/ n
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    # n3 P- J4 [) [0 V) g1 U1 C8 K8 b. i
  427. * P2 t  C& H' Z/ G
  428. 4 R& o7 ~# `( f$ X6 z8 d" n

  429. , F3 T! [- S$ W) z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    * L) G2 D2 x0 u# ?, Q, \6 K
  431. {
    4 B! D* E# j: F/ P% q: p
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;, i- [& s3 }+ r% _" @3 L# f- C
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 H# P$ V3 c+ X2 Z% M/ t1 ^
  434.   {/ c; j& r8 F* K! m1 _0 m
  435.     char szLanguage[50];( f" p$ C: u) J. {9 ?
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 m! L" c8 C+ C$ \
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% E$ x: m4 l# t3 k( r5 P
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, K* S2 J) M5 y7 P6 A' d
  439.     else                                   m_iLanguage=ENGLISH;
      d) f$ |, Y- V+ E
  440.     char szRegister[100];
      \- a# o2 C) b
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 E) d  P' Z/ o+ P3 k
  442.     strRegsName=szRegister;
    8 _' S: P5 d5 h6 `; a6 I. I/ @4 X# ?5 c
  443.     char szPatchURL[100];
    ) N1 z2 u& D! L8 a* b' m
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. W2 u* C! S' _) [$ |
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + J2 }* D0 b2 p; T
  446.   }
    7 M  t: R: T; m* T
  447.   else; e, d) G+ O5 Y: }9 {
  448.   {
    6 k5 ~) n" Q3 q+ A  H1 j* e
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % O. z6 B: q6 z
  450.     strRegsName=DEFAULT_REG_URL;
    8 w1 s8 t% k& v4 l, m! R
  451.   }. ]8 O  `( H$ G7 |  c8 u/ N
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    4 f4 `1 |% L7 k7 ^; ^- W
  453.   {2 n, x' e  h! t! J2 p. c: j
  454.     char szIP[50];
    : ~) Z' I, K! b6 |
  455.     char szDIR[300];' v( D3 c' z5 t7 F4 @
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    5 P, A- ?3 P+ E% M9 c$ g7 w; c
  457.     {9 ]# ~/ [1 G6 i/ w( v! p1 u
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    - p5 U- I% L9 p+ i4 t
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");' ?" g- n2 i1 b- i
  460.       strHostName=szIP;4 l+ u0 s8 X- ?, ]$ k$ A
  461.       strHostPath.Format("/%s",szDIR);
    % l% T: n: F7 `9 ]# ]( w
  462.     }- G; d2 m6 }% X5 N* H3 r
  463.     else% d1 E+ ?$ [% K$ H
  464.     {
    ! Y) r+ [9 I% Y' v7 n1 e+ w( i
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; J) ~! }; l* t% E
  466.       {0 M4 X& e4 s  [9 P
  467.         char szLanguage[50];
    & ^4 ^6 ^, f% A5 w% n( D
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 z9 _/ T3 B' G6 G, {' }
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; x  c3 ^8 l( y& r. B" x
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;: P$ i! ?8 z9 n( z, P6 e
  471.         else                                   m_iLanguage=ENGLISH;9 ?) I* p; N1 W: n3 h: j+ \+ s9 J$ p) r
  472.         char szRegister[100];
    7 i. M7 J6 b. b: \) v. ~: D3 B( J' X
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " O) O8 R0 R( K/ [' U  z% @
  474.         strRegsName=szRegister;  B; [1 K  V4 H
  475.         char szPatchURL[100];/ }6 z% ^2 d+ \( N
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    & z3 m6 t7 y+ x% J3 s: P
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' |# D7 f  Y/ j5 z) b# |/ N
  478.       }
    ; S4 V9 U1 T0 m3 J* J0 c
  479.       else1 y3 E9 f! R# @, h( {2 V
  480.       {- O4 n8 a9 @6 ]+ I
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; b: A' A$ \/ K9 x1 ^2 t& a
  482.         strRegsName=DEFAULT_REG_URL;  t6 {: E$ Z6 P+ i: c& T
  483.       }
    ; G7 d$ y/ E% `) a9 m' o
  484.     }
    * Y) K2 G7 T/ f  B: X. p
  485.   }
    * L) R9 x, b7 v) S6 J
  486.   return true;
    / o8 |% j! b( o5 N. B5 L2 z
  487. }5 l+ ?! k% }( _9 s
  488. / O- F5 ~% d' A! t
  489. #include ".\ZLib\unzip.h"
    0 m* ?) O/ N" v! }: s; P/ `1 N
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    8 }& C) }) O& J
  491. /////////////////////////////////////////////////////////////////////////////7 |- {, U; T3 }2 Q& H* Q: Y* V
  492. // CRevAppApp initialization: |+ l, p. u4 U+ G

  493. 5 E5 z6 [: L2 q+ [$ H
  494. BOOL CRevAppApp::InitInstance()% D$ |8 F( e5 A
  495. {7 C" `$ a& z' A3 J- X) t0 Y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
      [+ A  T( [! p! \
  497.   d# t0 u2 U1 |& c$ c$ |0 b
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    3 c- N$ N/ J" g' n9 V
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    5 Z1 C- y0 Z; U! x* _" s
  500.   {
    3 H5 \( i; w3 |9 z3 i! }# Y- n
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");# P7 H* ^" ]  @1 L, q
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    1 i- G- `" _% W, ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))7 q# G* I" R& x% A' o6 {, f* c
  504.     {" f* d( q" C0 u2 ^
  505.       strcpy(szPath,szPathTarget);- \0 }: h3 J+ x( M  R+ j0 t
  506.       SetCurrentDirectory(szPath);
    8 ?1 \0 h; u6 G1 O& E6 Z
  507.     }
    . z  \! L8 C$ r1 B' o" Y/ k: b
  508.   }0 v9 [5 M& ^& e& U1 D
  509. #ifdef _DEBUG
    , q! `" z( e) ^1 b* Q
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ _* F* r& X1 W) {6 b
  511. #else
    7 p& i/ ]" E. U1 v* u
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    & _" h/ n0 b+ \9 A
  513. #endif
    ' M! h- g' f; n7 E
  514.   {) Y1 O  o2 p% `% _  L+ i3 |- u
  515.     char tempFileName[MAX_PATH];2 p. i" N0 r" @, V- l
  516.     strcpy(tempFileName,szPathSource);, F9 m1 e/ L. x& K
  517.     tempFileName[strlen(szPathSource)-12]=0;
    5 g. a$ B: n4 L! I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    0 U+ r3 L) T# \& v" F0 W
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 M$ }: G- U  E7 f0 Z# B
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    3 ]  B( L  W5 z0 ~' ]' `  b8 R
  521.     return TRUE;  b6 V) w5 E- }# o% Q
  522.   }5 H3 O6 v' I* f" T
  523.   // Nuke 0118: Delete run.exe* d/ s  b' v" ^1 }  T" t0 K
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    - h8 s# P1 w' n% }5 w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ( d& m1 W7 b1 o- s
  526.   if(!ReadCfgFile("Config.ini"))
    / I8 w" T- c2 U' c" a6 G3 m
  527.   {
    * ^) P) z, x8 n7 U3 `! H
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    9 w/ {7 n9 \! r0 R) @
  529.     return TRUE;
    . U# E! i6 G/ R  @5 P' V
  530.   }
    6 o% W& k- A. }& P
  531.   HANDLE mutex;
    ; w4 y' V5 C, h# I5 f( h* G) U4 k
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")): s4 O7 r& {* ]9 \+ p! c+ R0 V: P
  533.   {/ H6 j" Q& M5 z& D1 l) K
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)/ S+ x, d# H% l" v' [
  535.     {
    8 F4 @( h/ Z# n" T
  536.       CloseHandle(mutex);5 g6 E- J+ k4 T# p4 Z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);4 |/ K' ~# U  }4 u# D3 i! O
  538.       return TRUE;
    6 U8 S- W/ S: W4 Q' e2 d9 J
  539.     }
    / V9 A! p- W, \: o8 E/ `5 _
  540.   }  
    9 ]) l$ W: p' u- K$ p2 F
  541.   CloseHandle(mutex);0 z- m7 c2 X4 [! d) R0 l9 n
  542. ! k9 r! \6 b1 P
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);; ]5 L+ K6 G# D" K% n; R. l

  544. 0 q; s$ c& P$ l1 |8 Y9 J8 o
  545.         AfxEnableControlContainer();
    ; u, n# g1 w5 u2 ]8 m& u
  546. 9 \: O- X' l5 x! T
  547.   bCanUpdate=FALSE;
    & w( Y, y2 d% r: T+ i: l  b; M) Q
  548.   dwStartUpSteps=1;
    ( j8 _3 t" J( F
  549.   dwProgramState=AP_NOTHING;
    $ W/ T3 o! {7 ?3 P" a" n1 p+ z5 e4 n
  550. ) G/ W+ r) ]  t3 f
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    + A/ I# P( S# a+ i+ ~  ?

  552. % s% l! D3 Y, F! o4 h
  553.         // Standard initialization
    : g4 c$ m) T1 k/ L
  554.         // If you are not using these features and wish to reduce the size# a1 B. F% P. Y. j5 H
  555.         //  of your final executable, you should remove from the following
    1 B  A: w# f$ V' ]) |0 A, C8 |" A
  556.         //  the specific initialization routines you do not need.  p7 |0 ?0 z* W1 F: [. ?

  557. 2 ^/ H' l9 ~5 I2 H& D* g2 ^% J
  558. #ifdef _AFXDLL# t+ t) M3 S% G. p# f- s
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL- A/ D1 U, m: L' L$ D
  560. #else+ E2 \/ c5 J! B
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 ?. d9 \/ a% x* ?8 D) K# w
  562. #endif7 c  z$ _; n+ ?

  563. 8 r1 m1 J% n0 c: k
  564.   dlg=new CRevAppDlg;; q! R) ^. Y& s7 k
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 z. K+ F9 n- A; n$ k( M0 D
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ; w4 ^1 g( p1 Y& z% C4 l4 F
  567.   m_pMainWnd=dlg;
    1 \' P% z3 X: p+ [" a
  568. % C  `- D4 G6 B! O
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ( K( w. S: e+ X1 b6 T8 y5 p
  570. # Q3 G$ z3 x; Y: N% m  ], j- H8 v
  571. //  GdiplusStartupInput gdiplusStartupInput;
    3 d4 }: W) t4 @7 X, I5 j# G7 q
  572. //  ULONG_PTR gdiplusToken;$ _; m5 Q2 A- Y" n. b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);8 h8 L7 ~2 m. G
  574. 4 s/ w' f: l' [' Y9 _& t2 t2 Q) R
  575. //        CRevAppDlg dlg;5 E* r% E  u5 t$ N
  576. //        int nResponse = dlg.DoModal();7 U7 R8 o# x0 @$ i5 O0 M
  577. //        if (nResponse == IDOK)
    $ R' f* s3 B, ^7 q4 d( S- y
  578. //        {( J1 H6 m* a2 R3 B. z
  579. //                // TODO: Place code here to handle when the dialog is8 d8 ^5 l" {& X
  580. //                //  dismissed with OK
    9 V( H  r# v; k, A; z7 u5 H- m
  581. //        }& H" d, R- c' D. ], Z/ m! E$ q% j
  582. //        else if (nResponse == IDCANCEL)
    3 U+ A. p9 D3 t' C' U0 X4 }
  583. //        {
    # N+ }0 k0 ?# p% e8 d
  584. //                // TODO: Place code here to handle when the dialog is  k' s9 |4 W2 ^' b3 u$ Q1 X
  585. //                //  dismissed with Cancel
    , B) ~' W' p* }* E, W- F
  586. //        }' ?- A# B0 V. M( r
  587. 3 s/ p" F' j+ W5 C% V" B
  588.         // Since the dialog has been closed, return FALSE so that we exit the- ?/ M0 H8 C9 c( v
  589.         //  application, rather than start the application's message pump.7 K5 ?: o* J: b, a- I6 f
  590.         return TRUE;
    ) q4 \7 t: S( M5 z" ^& l* g
  591. }' G* _) S- n7 N, `# m
  592. . T2 M8 [1 u& h+ }7 h1 k" ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)5 g; _6 i( c$ U* b/ u4 p
  594. {+ W) u- L9 y7 u3 G: t3 Z/ }, C3 V$ l
  595.   int i;9 p; p+ p) P! ]: Z- ?4 z* E3 L( u- D
  596.   char *szRet;7 u! G; Y* T$ f- i. g6 Q" P7 w, K
  597. % `  S' h9 ]  V% f7 j
  598.   if(pSource) { itoken=0; sztoken=pSource; }  I/ C  r, T9 }( t' |
  599.   if(sztoken)$ T0 j& q: N$ u& \7 v4 k
  600.   {! U$ n0 i& b+ S7 n) E+ J
  601.     szRet=&sztoken[itoken];" v: b8 q! y, Q  ?# a
  602.     while(sztoken[itoken])7 p; G0 M0 K& n; p$ S0 b
  603.     {2 {2 `% w( e. [! k
  604.       for(i=0;i<(int)strlen(token);i++)8 V7 q* N7 B4 Q( F7 q
  605.       {2 l5 ]1 M( ^0 M% V; s
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    # g5 n6 }+ R1 M' T
  607.         {
    6 L6 P- R; y- y  B
  608.           sztoken[itoken++]=0;
      G- Z7 g( q" j% ^6 S4 U7 U
  609.           sztoken[itoken++]=0;
    " x8 M2 F6 Q% c6 R; l) D$ C
  610.           return szRet;0 K# L0 A  B3 p1 V6 f1 R6 l# \
  611.         }. E; v4 d- U# e# X$ o6 U
  612.       }- {1 u( ^7 l- S+ m
  613.       itoken++;8 A( e4 D0 Y/ ^. m  c" d5 p& r' Z
  614.     }4 o2 Q* p: e$ G& K' E. \. ?
  615.   }
    ' P* O3 R" K* c0 S
  616.   return NULL;+ L( M7 @/ D) l7 d% l% n' b7 D8 T! R
  617. }2 V7 }5 v+ ~1 c) p2 ^! f6 @6 U( H
  618. / G9 J5 K9 Z, i( t
  619. void ProcessProc(long Total,long Current)
    % w9 b- E+ O4 p) H
  620. {
    , \& ?( D0 m7 i& t  I( I/ e0 p& D
  621.         MSG msg;
    ' b) m8 D( I' v% Z$ `  w4 E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);5 W$ o( w0 ^8 _% W  R
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
      T1 r9 M+ ~3 g7 k; n0 w
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ; _* ]/ D$ f( a! q& [8 r/ d8 H
  625.         {
    * l: v$ Y9 o1 K* o7 S# S0 W
  626.                 if(!GetMessage(&msg,NULL,0,0))6 _" B$ V1 w, i3 |+ R4 n# g
  627.                 {
      |. O" `  {. T( A$ ?: U6 E
  628.                         return;
    4 L0 r" }0 K* Z$ c2 D
  629.                 }
    ) N) W  O3 c+ ^9 b, r
  630.                 TranslateMessage(&msg);) M2 ~3 O: Y. ^- r) w( P
  631.                 DispatchMessage(&msg);. B/ w2 P1 d( U0 o" C* F
  632.         }        . v& p/ _1 u* w- e: ^9 Q. V2 M: D' x
  633. }
    $ ]& v) Z* e8 [; H8 K: z, \2 m1 m: V

  634. % }& o0 d, A, F1 K; s! ~2 r
  635. BOOL bFirstChar=TRUE;7 b# z9 x; _; j* {$ q, S
  636. . H+ c' i( e" S$ u# ?& R
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    . o# b5 U4 P  v; Q0 L0 ]
  638. {: [+ S( z0 k; M& F, E4 Q8 f
  639.         // TODO: Add your specialized code here and/or call the base class% h+ r4 D7 P* q/ U+ c% f$ J1 K7 E
  640.   switch(dwProgramState)
    - m  \& y  C) E
  641.   {# s* v$ T) a0 i& f5 q" D$ A
  642.   case AP_NOTHING:; V) c  ?; m$ F+ g
  643.     switch(dwStartUpSteps)
    ' u: P$ B1 v! h
  644.     {
    * R' l7 x* s" ]$ p' \' }
  645.     case 1:  A  _5 ~' o0 N$ B
  646.       {4 T" _7 E+ Z3 n3 i9 X; Q6 v
  647.         int i;/ q3 R  s, @6 p6 z% u: r
  648.         CDC *pCDC=dlg->GetDC();  H+ c# O7 l. }6 k
  649.         HDC hdcwnd=pCDC->m_hDC;
    4 N+ y; y% |# @
  650. //        Graphics graphics(hdcwnd);$ \0 R+ m0 A" Q( o9 ?
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");' J  ~) q! J8 T- m2 R/ M
  652. //        INT iWidth=bitmap.GetWidth();5 F$ v9 G4 _$ Q1 l) @! L# M
  653. //        INT iHeight=bitmap.GetHeight();" h, H% i! g( Y  U; i8 w
  654. //        Color color,colorTemp;" b. B( d( Y- R1 t
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)' h, n9 v5 `# \; F$ s4 m
  656. //        {# V7 d9 k7 n7 L9 G" u
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)0 N2 {: U- I  L6 n
  658. //          {
    . D/ ^  J4 a: N+ r1 ^$ x
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ( n& }5 @1 h' r' B$ ]
  660. //            colorTemp.SetValue(color.MakeARGB(
    0 n9 C9 H) Y' q
  661. //              (BYTE)(255*iColumn/iWidth),
    0 g. u/ Q; ~& k( T9 j% U5 Z" @
  662. //              color.GetRed(),3 ^; w& k8 J3 H8 N- k- B3 S# {0 b
  663. //              color.GetGreen(),# J2 v$ U$ S8 z, A# b4 N0 X. Q  |
  664. //              color.GetBlue()));
    5 G/ W! L# T" W( i( B! h; Z; _
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ; W& T5 c8 h# H/ {+ C
  666. //          }: z& k* u/ V. Y3 d7 g: @
  667. //        }( t# x) i1 `( ~, y  Q: ^
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);# f5 B- m4 L7 _5 Z: r( i
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - Y: t- }  n& ?: }1 U
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( o0 B: n% ^$ J1 _6 I. D$ M$ Z/ E0 s
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 T3 }0 i( K  A% q9 B
  672.         for(i=0;i<240;i+=8); H3 S% f, C1 [' W. e* |& s
  673.         {
    6 w* _' A, \/ V6 w: n/ y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , o8 g" F" a1 B% R
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 t' _6 X8 L2 _. K
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);2 h7 S2 @1 }/ s. V
  677.           Sleep(33);
    / w1 i. ?0 F9 Q! C: N* L
  678.         }
    6 T, l' N, o; u, }8 ~' i
  679.         Sleep(1000);( N/ Z+ f5 ]: W! X
  680.         for(i=240;i>0;i-=8)
    1 \( B; w) a* @2 f& e
  681.         {
    0 m  @0 j8 W9 Y# W6 t0 [
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" h# h) d+ E+ w! B, s8 ^
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 u6 h9 I# v, C9 |2 x6 V' c
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 {' z$ K- O. }
  685.           Sleep(33);0 E) e* C7 t. u8 m1 e/ ?
  686.         }
    ! J/ H, e0 D" p$ y! P" O
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ! ^3 a0 c5 O" l0 |
  688.         dlg->ReleaseDC(pCDC);1 b' L7 c2 a1 Z8 Q) Z! o
  689.         DeleteDC(hdctar);( L2 V: M; F* O3 D7 ?+ m0 v+ ~4 K
  690.         DeleteDC(hdcsrc);
    4 @' v4 |+ P& B
  691.         DeleteDC(hdcorg);4 ~4 O3 I" e1 h1 r: H
  692.       }% K& I' F6 M0 W' s! R5 b/ E, R; {9 e
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);4 Y6 \6 O6 b: W2 ?
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    . i3 J- y' j; n+ _0 c! \
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");% ]( p# e+ o- H5 [/ U6 @
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    " w) h6 z' J& v3 _$ O+ p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 T+ e: K: d: O/ @: h, h
  698.       if(!Dn.Connected())
    - @9 o  r6 \' `( ?
  699.       {6 `( y$ b. S  N. B
  700.         dwTotalFiles=1;9 L- q, _5 g6 L4 g* Y+ ?1 ~. c
  701.         dwDownLoaded=0;* C2 J7 j( z2 W
  702.         bSilentStep=TRUE;
    0 X6 s- @8 \  T& l1 ^7 i( G( v
  703.         bCompressed=FALSE;
    ' t+ {* Y0 [9 z% N
  704.         strExtLocal.Empty();% b- x- p' ^" j# }% x/ G. {+ I, ]4 t
  705.         strFullName="readme.txt";) ^3 w1 s. q! _4 V7 w
  706.         dwProgramState=AP_CONNECT;
      J  c8 G% B' m& W1 M
  707.       }+ Z4 z5 Z3 f6 ]3 d( h
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    , l) H, f* Z" }4 O- U/ K7 V
  709.       dwStartUpSteps=2;
    $ `  u0 L& C4 f* Y1 t
  710.       break;, v  _* L' v1 y4 \9 r: r2 @, Y, k
  711.     case 2:
    ( Z' A, i3 M, y- ]
  712.       {
    " p& V5 L2 I* z1 L. g: l! {
  713.         int iEOF;
    6 i) U( N' P; h! X* _- @
  714.         FILE *fp;
    ; J' Y6 P( W# F# u* ~' o/ M
  715.         char szString[512];
    * Q/ ?8 p) _' y  v: H0 t$ q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    0 l3 Q: C3 I( y9 C1 t
  717.         if(fp)9 h/ k0 S+ s9 G/ x* D
  718.         {" V- {# {0 b5 E% g5 R
  719.           do/ F5 o: @5 V1 m
  720.           {
    0 X2 n/ m/ \  q. n5 X# X( w
  721.             iEOF=fscanf(fp,"%s",szString);* |$ K5 i/ O# w9 \; y% `3 _2 z
  722.             if(strlen(szString))+ n& {" J# Y; ?; [. t% b
  723.             {7 I" t, i3 s2 }3 \3 ?4 }9 S
  724.               if(bFirstChar)
    - \! v* J& T) n% T) n
  725.               {
    & w# K- z9 ?8 ~: v' P
  726.                 bFirstChar=FALSE;/ j6 S" L  R3 ?
  727.                 bConnectIsBig5=FALSE;( J( ~* |* A, P, f
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;: C5 C7 S* W. I% V$ n3 b
  729.               }9 i9 u; N2 E' j
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));& ^6 v2 ?* a; f. I& V: ?9 d, W$ f
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));; v: Z7 `# W) @5 A2 u
  732.               dlg->m_ListText.AddString(szString);. }- \5 v' O$ t/ j# ^' [, Q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ T* W! I9 v* L
  734.               *szString=0;' w; {4 j7 D6 O+ [0 n' X
  735.             }: I, t' q1 h' f8 K- m9 a3 I
  736.           } while(iEOF!=EOF);
    7 N" V, X* e. ~8 P9 \+ Z$ f! X
  737.           fclose(fp);
    , M" s/ G# r( N7 ~. u% d
  738.           unlink(".\\DownLoad\\readme.txt");4 @8 D1 _1 q4 t) w/ Q0 \' P; }
  739.           dwStartUpSteps=3;6 ~  B" P) y. ~1 {7 z2 c
  740.         }
    6 @4 ]1 {7 d: u. k
  741.       }! T2 P5 `5 ?/ o; e( B! `- c7 [
  742.       break;9 z8 O% M# v9 f0 x- l. |
  743.     case 3:
    " p* B2 b, L; {) P5 s5 X- c, c) @: I" m! A
  744.       if(!Dn.Connected()); n; z. J" G$ x
  745.       {
    / z/ s$ E2 |: N4 K% \
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ( b: ^3 G' _# w' q
  747.         dwTotalFiles=1;
    * j( r# _. ^! o3 f; y2 U
  748.         dwDownLoaded=0;
    & _3 C* |- ^; A; @; n2 p
  749.         bSilentStep=TRUE;4 A! W, e/ M' S' A
  750.         bCompressed=FALSE;
    ) f1 W5 P, @: W: o3 r$ \& |
  751.         strExtLocal.Empty();2 s7 r5 \* L# h$ i. Y& q1 D
  752.         strFullName="checkversion.txt";6 C# A5 d+ n. k
  753.         dwProgramState=AP_CONNECT;- t% b; ?; I* I4 z3 q7 h
  754.       }+ x0 G9 N9 |+ k* v8 x& {
  755.       dwStartUpSteps=4;1 O: C# k: E5 o
  756.       break;
    1 d2 E% E; B0 G6 U8 c) x9 b
  757.     case 4:0 g6 V, H# [% L) ~' u) n( T. r/ A6 t
  758.       {
    9 B! K/ s- i3 Q
  759.         FILE *fp;
    ! i. R' v4 F+ P2 y# K$ @
  760.         char szString1[128];; z, @1 o; U: ^
  761.         char szString2[128];3 s) D! ^# U& n! v5 @
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    3 @# W3 @9 W8 b2 }/ w7 k* t! l
  763.         if(fp)
    / b. R; O* i- {7 K# ?! [5 j
  764.         {
    - U# f& o5 |+ q! L
  765.           fscanf(fp,"%s",szString1);) @2 ?& b# Q. O2 M8 V( ~6 k+ T' X
  766.           fclose(fp);3 Y6 r1 ], F+ ]- X1 C
  767.           fCheckVersion=atof(szString1);
    $ k: r! E! X1 u! y& d
  768.           fp=fopen(".\\checkversion.dat","r");
    , K! P5 _8 p+ @; F: H: ]7 `" f; Q
  769.           if(fp)& j3 T0 A, w$ E3 r$ j) R2 y
  770.           {, x3 a( @- x. v7 k9 N7 N, U1 ]  j
  771.             fscanf(fp,"%s",szString2);
    # `  {" G# L; P: E0 I5 w7 r* [
  772.             fclose(fp);7 |# ^! y5 G- {' h
  773.             if(atof(szString1)!=atof(szString2)); H/ i! e' j$ Q4 ~9 b/ Q
  774.             {
    ) A9 J' B8 o2 a
  775.               if(!Dn.Connected())# t6 A, ^7 ?7 \( w7 k2 k- K
  776.               {
    & x0 p4 k5 i; m1 Z! H9 w) Y$ r
  777.                 bFirstUpdate=TRUE;
    2 v8 y0 x! f4 y8 a2 U# |
  778.                 dwTotalFiles=1;
    & f) @1 B/ y) V* Y" i0 P
  779.                 dwDownLoaded=0;# v" {+ {4 ?6 G' q8 X8 w4 t
  780.                 bSilentStep=FALSE;3 d8 A2 a3 k9 M7 z7 Q0 p2 L8 j
  781.                 bCompressed=TRUE;
    ) C/ Q% Y2 D+ x/ a# [
  782.                 strExtLocal=".\\DownLoad\";
    ' m# A6 K8 P+ e2 y
  783.                 strFullName="update.txt";
    : K0 Y! M0 j! O9 U4 x
  784.                 dwProgramState=AP_CONNECT;
    3 o  H  L0 ]. _- A- ~; b! ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' B6 |' }$ `0 m% p/ M+ p
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. X5 c9 d. T9 ]2 w
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " h4 T3 C3 `: e, Y* P, z
  788. # _, h, v7 s/ v4 `5 a' D2 e4 w- b
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! X7 f2 u9 K; r7 v( _
  790.                 unlink(".\\DownLoad\\checkversion.txt");  Y8 s$ f! h6 W* `
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    * V( h4 B- T+ e# s0 @. E
  792.                 {; o; W$ @% ~0 k6 B2 k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");( |1 c2 M$ m  i& s/ @* X. M$ j" f' K
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");8 Y8 Z' z8 m* r; d1 V: b; O8 |0 h7 C5 a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    . l: z+ R9 P: n
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      q! R. l' {' v4 W/ W
  797. * J8 B6 m3 [5 r6 V% j
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 a+ ?0 |- u3 J0 V1 M3 B) X3 y6 S0 w
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- S0 f- k6 T# c& U. b
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");4 J' R9 n1 w! V# {) p$ V; t
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) b' O" i$ W& P2 {/ ]
  802.                 }
    : P5 Q  v' `4 h! f) s" M
  803.                 dwStartUpSteps=5;
    ; Y% \  I  s$ I0 ~/ {; o( [$ N
  804.               }3 H3 T1 A' a' ?+ \/ v3 Q4 t
  805.             }
    # r& U% o1 S+ d  i; U
  806.             else
    0 _$ t7 F6 {! Q
  807.             {
    ( k3 N& D) V6 q5 Q: ?( R: U
  808.               unlink(".\\DownLoad\\checkversion.txt");! Y$ H; M0 _4 N' y9 F% i
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");. Z; n+ t* z3 i6 \0 V. S& M
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# a( e, p# \- V  p
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 W. t4 }( c# S
  812. & _2 Q9 t7 K0 e( q8 q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 O" h" i; o4 _# |
  814.               dwStartUpSteps=99;; ~/ P  P. D' X$ Z- |
  815.               bFinishUpdated=TRUE;! K- d- f2 G" W8 I# {/ d& _' [
  816.               bCanUpdate=TRUE;
    ! n/ v  P) r1 ]+ h; V% \& x8 Q
  817.             }# ~* g, h; n$ G- i
  818.           }2 [4 M$ X8 h- e6 u
  819.           else: Z- W: F. N2 M- ~5 u
  820.           {( d. ^# n1 \; D( p/ A
  821.             if(!Dn.Connected())
    # A6 }! P9 }; m: I& M4 J3 x
  822.             {' z: m7 d& D" `( w/ W4 l% N7 Z
  823.               bFirstUpdate=TRUE;
    0 X$ }8 @* H! x* R
  824.               dwTotalFiles=1;
    6 g( l( J7 ^- o& W% P+ S( j/ r
  825.               dwDownLoaded=0;
    + x4 V8 u9 r" H0 w4 L
  826.               bSilentStep=FALSE;7 o( B3 A+ w/ {, R; ~
  827.               bCompressed=TRUE;* o' ~, ^" K3 t4 @( K+ U& }# i7 `
  828.               strExtLocal=".\\DownLoad\";) B3 U+ k; O& n9 d9 b; H, P
  829.               strFullName="update.txt";
    1 f9 M* T2 y% Q# Q& {1 a
  830.               dwProgramState=AP_CONNECT;
    - G1 Y! ~- ~" I8 f+ m9 m
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 o3 s% X$ a6 g
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    $ s) h+ h" w8 N' U! i4 C! q
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' F1 u- h8 O0 o1 |$ z
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & v( ?, ?/ Q/ @( Y
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ( K* Y, l0 t- x) B# e8 z1 h$ J
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)" w) J# g, r, R: s2 L4 i
  837.               {
    8 `4 B$ W$ b& h" H0 b
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    % F4 ^, P- l% m2 p. c
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");; ^5 K, ~5 U3 Z, @# U
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    4 C3 W1 w- [# L: w4 q" g9 `
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 A2 K6 a6 d/ A, E
  842.                 ( W. |( i( F. _
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");" Y8 _6 r6 [6 u/ Q2 Z( Y8 g' t
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' d* F+ v1 Y. d! W  k* G& W' E
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");: Y1 v9 e" Y' B' u. l( D' g
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 R2 U4 n0 i" N) n# c
  847.               }
    1 X) B6 j* ^( b' f- y
  848.               dwStartUpSteps=5;
    8 x! b4 [# r! B0 G! f
  849.             }. s1 K7 d5 y' o  [
  850.           }* u$ d, {* d) E
  851.         }7 ?( t8 Z' I/ [- `' r0 D
  852.         else
    9 j  p6 o5 O3 p" W0 i1 W
  853.         {, a% O% j  F7 j& q
  854.           dwStartUpSteps=3;
    - @" Z' f0 X2 u. u
  855.         }
    3 ]9 ?. X6 m0 L) b2 k* @
  856.       }- d' e) d6 v2 @# d. t. [; M
  857.       break;
    * z% R7 X+ t: [: J2 d( D  E6 L
  858.     case 5:5 r9 D" H3 y/ o- g' Q
  859.       {5 s' W% q9 w* ^( s# S5 W0 J2 ~: A
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)  M" E. U. v: s2 Z% J) @
  861.         {
    5 H$ D$ v+ @9 X( t$ A. s
  862.           int opt_overwrite=1;% c7 [5 A3 ~' z9 _9 V
  863.           int opt_do_extract_withoutpath=0;$ _2 H% p, O( }( b5 [
  864.           unzFile uf=NULL;* L, a/ v* I8 X$ `) i

  865. ) I7 v& J9 ?: z3 t8 J( U- J2 ~
  866.           uf=unzOpen("Wsa.zip");
    , V: X" |2 r; R( r% r6 X  O$ i
  867.           if(uf), s9 E; R9 [; V) ^* Z2 m
  868.           {
    " ]) y% c3 r9 O9 d% x# F* h
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ; z# ~) P3 O2 S4 V' t/ ?
  870.             unzClose(uf);  E5 P3 F4 y9 k1 z; T
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");: @; J% C% }. I3 _9 `( w0 z
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    / @# k; d- ~" W- Z
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");7 Y4 M' s2 S# _$ M+ I+ w# T
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 I8 v1 P' Q0 e8 `
  875.           }
    ; {- W! ~6 M8 h. i* V, h9 K
  876.           DeleteFile("Wsa.zip" );
    : {; R3 M# G' M0 d
  877.         }; n0 T  R+ M6 V. ~, u+ }

  878. 9 e7 [8 s, F4 G7 P$ u
  879.         if(CheckLocalVersion())" j) o8 t, `7 L- @
  880.         {
    ! `; t5 d1 z) d
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    , L5 ~4 o/ y' y" |( r3 o
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");/ t2 w: t9 F3 k
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ; P4 m+ g6 ^' P9 a; O6 _! r
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + u+ y# P( n7 R% `7 y' ^
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    : _# e2 y! f! l
  886.           dwStartUpSteps=99;& G$ |7 p* u& v0 h) m* o) p6 ]' v
  887.         }4 K: `1 H5 b1 n; P
  888.         else$ D7 v# @2 d, L% M
  889.         {5 B) ?4 A+ `' t2 Q
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");( L  g: w9 R% i& j0 ?: W6 e" a
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    6 N* b  R9 I9 p) N. _& B  ~1 q6 n; s% [
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 r' }+ U4 \4 {2 Q9 n# A" W

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

3 f& f/ f3 P6 Z4 _: A1 u

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-15 11:36

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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