找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
7 w# T3 ?! F, X/ s& \) u
  1. / RevApp.cpp : Defines the class behaviors for the application.
    " C# l: r9 G4 {% v9 D! G7 G+ D5 N
  2. //& o/ {+ }! F# E, x5 G) l  Q/ p* Q
  3. # o2 W8 E  D0 q8 @9 j) G" n
  4. #include "stdafx.h"4 A4 Q, _) n; J: x1 U
  5. 0 k# D2 O" n0 W. A1 }6 e; U
  6. //#define UNICODE
    2 s9 {& C& b$ Z8 t
  7. //#include <gdiplus.h>
    * S8 I+ X4 _/ d9 Q
  8. //using namespace Gdiplus;8 q& o1 i1 ?; L$ [! s6 ]0 b* _
  9. 6 G( c1 K' r# R& @
  10. #include "RevApp.h"3 s- [# [) V1 E4 b: [
  11. #include "RevAppDlg.h"
    ; |, S% e( l+ k4 _4 t) L- }: _

  12.   h9 B% e( c' T% X2 v
  13. #pragma warning(disable:4786)
    0 D( W0 [& n4 f, `% m6 ?% ]# l
  14. #include <map>
    8 a# p. v/ v2 J9 v# a8 U7 ]( ]
  15. #include <list>  e. |. E4 V: i% g+ q
  16. #include <direct.h>
    4 X& a, U5 N  ]4 A+ [3 T! b# R

  17. + y- j1 c5 ~) ~& A; z- P& K
  18. #ifdef _DEBUG7 u7 l/ x5 E& n5 y$ O2 U
  19. #define new DEBUG_NEW
    2 m3 E! g& W- v# R: p. ^
  20. #undef THIS_FILE
    ! N# T# c" P$ L. s0 E) C* F
  21. static char THIS_FILE[] = __FILE__;
    - y& x5 \. t! g3 e  O1 i
  22. #endif
    1 u8 w4 s8 l' R7 |. {
  23. #include "SkinResDef.h"0 Z4 Z9 z! l0 y$ O' ?2 _
  24. #include "ChangeBG.h"
    7 ]* d6 q4 S* C+ x  K
  25. #include "AFXINET.H"  z0 y, ]: ?9 W5 z9 p5 [
  26. ' P- a5 v5 u& Z; X
  27. #define TRADITIONAL_CHINESE 0% _& C# c& s7 C4 f1 d- G
  28. #define SIMPLIFY_CHINESE 1  M9 b8 W3 |. y5 u+ d6 K6 z0 f! {
  29. #define ENGLISH 2
    $ N" V7 [! X0 @% q) `* V0 N4 r
  30. int m_iLanguage = ENGLISH;/ z1 Q" {$ g3 a( M& d9 N
  31. /////////////////////////////////////////////////////////////////////////////
    + p/ Y7 K  [. V0 }6 W5 b
  32. // CRevAppApp3 V& l& e' p; T0 R/ Z( l, [

  33. : s* t+ r; K' o( w/ E: V
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    4 F6 R( i5 A5 I. L$ ^# g/ I* B
  35.         //{{AFX_MSG_MAP(CRevAppApp)* B; n4 J/ b0 P2 l' |8 ^8 }( J* [  m
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.7 Z: g( n0 B: O% M& ^) _
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!! |9 A$ J8 R: L+ F: y; P
  38.         //}}AFX_MSG  A* F4 b: a2 Y6 J2 g
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ; x* {4 L; e: I# y2 a
  40. END_MESSAGE_MAP()4 U- n+ _" }1 o6 ]4 t) c! T
  41. $ V4 q" k: x# L! S) y; q0 Y
  42. /////////////////////////////////////////////////////////////////////////////
    ) p' i! E: Q, j. [- p/ B
  43. // CRevAppApp construction( Z: |  i  g1 L1 {) k
  44. % S5 Y* n8 R0 f! G% k- e; P
  45. CRevAppApp::CRevAppApp()
    8 G" L( l& r+ b4 Z. }
  46. {
    - |1 G  K" F; J. g
  47.         // TODO: add construction code here,  X0 E1 k% B# N$ G' I
  48.         // Place all significant initialization in InitInstance
    * M2 W+ h" M- g' Q' r
  49.   bDisplayIsBig5=FALSE;5 k3 L% P) x! r' q( w
  50.   bRestartUpdater=FALSE;
    5 t% M, W  x4 M) s! a4 T1 V9 _
  51.   bFinishUpdated=FALSE;
    3 A; w+ J7 B( _) J
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ; s& V$ O" r+ b7 G: Q
  53.   InitChangeDataBig52GBKS();" d' \) V/ m+ V" a& ]0 i
  54.   InitChangeDataGBKS2Big5();( ^5 e/ F2 `+ h! }* {9 Q5 u
  55.         //
    8 T& L8 W: @/ c+ h
  56.         bClickRunExe = FALSE;/ f2 u3 \/ P, i3 z0 j
  57.         //
    0 ^8 N; V3 a& N( W& ?) a
  58. }% k) m4 d9 C( s2 C7 }1 [/ @5 T6 N
  59. * z6 ]  u; g) |, m2 |
  60. CRevAppApp::~CRevAppApp()
    . c4 m5 f3 m$ ^: W3 H/ X4 @/ o
  61. {
    ; O) C2 M8 z- C. T; [1 H' X/ z
  62.         // TODO: add construction code here,
    ) }& L& q3 g8 m) o$ d
  63.         // Place all significant initialization in InitInstance5 Z! d+ m7 }4 `5 R
  64.   EndChangeData();
    5 t4 w# F* n9 ]& w
  65. }/ c, k- i, b- K8 d: V! k. S

  66. 7 V9 c9 }; S& n2 L
  67. /////////////////////////////////////////////////////////////////////////////6 F* _, \9 |% v) Y& X8 g( ~0 f& v+ t
  68. // The one and only CRevAppApp object6 g. I, e' s! D! r! l
  69. ; F0 ^' D/ i$ h4 m8 {: ^
  70. CRevAppApp theApp;
    ) Y; A4 |/ H7 [, D; }

  71. + P6 H3 M! F. Q& c
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)7 l- A# ~, E$ Q; z
  73. {
    0 e" y- e' y1 {3 @
  74.   int iEOF=0;
    5 E& g; z: o$ C/ p1 Y% n
  75.   char szTempName[MAX_PATH];
    4 m6 n6 J$ l1 e( ~+ l
  76.   *szFileName=0;
    / |9 K0 f9 j( F7 n0 W
  77.   iEOF=fscanf(fp,"%s",szTempName);7 D* Y4 f# y8 f# @
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    " e. C0 g0 }* F5 v5 J& v# `: W/ Z0 u( I6 S
  79.   {
    ( g( s* C+ Q2 `  m: h( h+ x9 M
  80.     strcpy(szFileName,&szTempName[1]);6 `. `2 P2 C& S  @1 \. P
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): o9 H3 h# T# i' a3 |0 Z
  82.     {  V8 U- i' F$ p0 I
  83.       iEOF=fscanf(fp,"%s",szTempName);
    5 I% \! [+ j$ Y3 N) q: ^% x3 k: S
  84.       strcat(szFileName," ");
    8 X; M' }/ C3 d+ H' ]
  85.       strcat(szFileName,szTempName);
    1 M" u" c, ?4 o$ I6 C) v$ s5 l: R
  86.     }
    2 b3 ]+ q" s) L: h
  87.     if(strlen(szFileName)>=1)! y. R, G- I" f& P9 q& o, `+ u5 ?
  88.     {* F9 a( h- g3 w
  89.       szFileName[strlen(szFileName)-1]=0;- i2 X; g9 i# `( p% {
  90.     }0 A1 d& S. S- O+ j! N
  91.   }
    % n; u! y" B  U
  92.   return szFileName;, J' [( S9 `& \) @* |1 l6 G2 i
  93. }
    0 H3 D9 ?1 M3 e3 [, ^- B2 d5 ]

  94. / P- k6 o, t* i, t% m% \
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)9 Q4 A: [# J3 c" p% S# ]3 U' d" U
  96. {
    " m! L5 R" [4 o, R- B% D
  97.   FILE *fp;
    1 s4 S" d6 `3 R/ L
  98.   char *key=NULL;
    * j% g% b, O( l% j
  99.   char version[MAX_PATH];3 |( K- j: C+ P$ x8 n' Q) F4 M
  100.   LPUPDATEFILE file,olds;
    : n7 ^2 n  M/ Q8 B% a  G! N
  101.   std::map<CString,LPUPDATEFILE>::iterator p;2 g) H+ @& f# L* h/ c0 ]

  102. " K: O5 v; r) l( e0 l0 l  p& D' @& W
  103.   UpdateList.clear();8 `- M& ~% P; U# q" f1 i8 B
  104.   UpdateFile.clear();
    4 D. D5 ^* `/ h( T
  105.   if(GetFileAttributes(filename)==-1) return false;
    - y$ Z6 k0 @9 p* b) T% n' s
  106.   if(!(fp=fopen(filename,"r"))) return false;0 T4 {: C: k3 d$ N' L
  107.   fscanf(fp,"%s",version);
    * z% F% |& y# l! u" q4 V
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }) I, v1 ~" @, p. b7 t
  109.   while(fscanf(fp,"%s",version)!=EOF)
    : A& }2 Y" ^# n: W# q* d- F  o
  110.   {
    ' t+ K2 u: O( q1 u2 g6 N- e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! ]2 u: g1 p) ]+ K. W3 P/ l
  112.     fscanf(fp,"%s",file->path);
    $ t6 @) }; j+ t8 Z3 |! l
  113.     ReadFileNames(fp,file->file);% W* L9 d0 {; h  E/ w1 _: \
  114.     strcpy(file->full,".");
    2 ~- L0 h  A4 \% c: ~
  115.     strcat(file->full,file->path);( J( L+ i2 R4 H
  116.     strcat(file->full,file->file);$ h2 i* y+ Q" z4 H6 t! W
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    / B& Z, Y/ J9 t8 L( w
  118.     {
    / `2 L2 S- K2 @" K: G! I
  119.       file->vers=(float)atof(version);- d5 y& k# {$ d, _
  120.       UpdateList.push_back(file->full);( ]2 u; S4 o" U6 F0 U
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , P% r7 ~+ W. U6 B8 i
  122.     }* T/ ^# d& a* B, n
  123.     else
    5 f4 _& o' r, p6 {
  124.     {
    . J" W+ c6 d2 t
  125.       olds=(*p).second;
    + G; _; v; B5 Q' F
  126.       if(olds->vers<(float)atof(version))
    - i* U: c; Y( M
  127.       {0 U7 q: v0 h! u# e$ E
  128.         olds->vers=(float)atof(version);+ j( M- L, v/ c" X
  129.       }
    " Y% K' G! _, q8 ?. @5 g- A: k
  130.       free(file);
    9 `$ Y; ~* P* _" N
  131.     }3 L- b7 Z/ C/ g8 g+ U; o
  132.   }
    0 k  w4 F5 M0 r7 I' W) ~4 b
  133.   fclose(fp);* l" G" w( Z7 Q& K/ ~; {
  134.   return true;3 {6 S4 ]% U( y7 D1 E5 V% b. h
  135. }
    3 k- J# ]9 ^2 a: b! c# R

  136. ( ^) B( U: u- }; j# z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    . l1 F' L% P; L: i+ L
  138. {
    : G' o" A& u& s8 Z7 c
  139.   TCHAR  szFull[MAX_PATH];
    ! v, l; r+ r- N. m; H
  140.   TCHAR *token,*inter;3 p( V+ D( h, C1 g/ a
  141.   *szPath=0;! e$ |! @7 h( Y4 w4 X' b# M
  142.   strcpy(szFull,szFullPath);
    + E! m# _: C! C  @# ]& k: I- V9 F6 J
  143.   token=strtok(szFull,"\\/");
    " L4 M! G( q1 y. ?6 U3 Q* w- f
  144.   inter=token;, F% G7 L+ K' t4 G8 M
  145.   while(token=strtok(NULL,"\\/"))4 d: m; C$ m4 t& Y
  146.   {
    " _% Q2 }! t: r4 ^
  147.     strcat(szPath,inter);, |9 I0 d4 z/ {1 r' f7 w0 X; @: I
  148.     strcat(szPath,"\");
    7 S- D/ l! q/ a# Y+ T/ r
  149.     inter=token;; H  \" r2 l% y+ i$ k
  150.   }
    , G( N- ^' x, n! v9 I5 t4 K' n% U
  151.   return strlen(szPath);
    1 o$ T, M/ R8 l5 k; X& W3 o4 U& D
  152. }
    7 ~( w' Z" {, P$ r8 ?

  153. $ {& }) V) x, ]8 O  u, h6 ]1 z# p
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    4 A4 \9 Z' W4 @, L( I0 z7 x0 P
  155. {
    - C1 h1 y8 x% {) M* {
  156.   DWORD attrib=GetFileAttributes(Target);
    5 l4 b* K, j4 |$ o" D( n
  157.   if(attrib!=-1)
    % [& m+ _9 C: }1 v6 Z+ ^. l# s
  158.   {# ?; P3 m( N$ \9 Z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ! d: j/ ?& ?4 y; }* l
  160.     {' @' \0 Q6 m/ n: Y# {
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    / [  f1 t# W1 B* V# o
  162.       SetFileAttributes(Target,attrib);* f: s1 p0 F9 a: l
  163.     }
    & U' s4 M1 G; N& g% u) F& v6 f
  164.   }
    7 d7 g+ C8 O6 l! i$ z" ^4 x
  165.   CopyFile(Source,Target,Erase);
    + {8 K8 v* ]- {0 }3 N
  166. }$ {% j' c4 s0 K+ ]
  167. 6 V7 H1 i! z9 K0 R" ~( }& S
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...). T# K. v' j0 b; V
  169. {
    + S' o0 Q0 K7 v2 d8 Q
  170.      FILE *fp;
    % k% F4 x6 c( U# Z- C/ m
  171.      char  szBuffer[8192];- H. Z  m& A  p1 U
  172.   va_list  argptr;
    4 d' w4 @& c5 f2 V. ?
  173. 7 u6 A7 y7 ?0 N! O+ B
  174.         va_start(argptr,message);( W/ g/ z. H9 S, ]& G- {
  175.         vsprintf(szBuffer,message,argptr);3 f: J5 y1 H, q: p7 i! w
  176.         va_end(argptr);
    ! g4 W. \% V& q3 C. W' j
  177.   fp=fopen(FileName,"a");
    " H6 n0 A+ d3 A  y' ^2 w! D4 C
  178.   if(fp)4 T+ P+ {% k- H5 R  y, |
  179.   {
    . G" c1 F& |8 Q' k. Y. E
  180.     fprintf(fp,szBuffer);  s3 o" V4 W3 L. F. A# V8 G- O% A
  181.     fclose(fp);, Y9 O" W5 a: y1 s
  182.           _flushall();
    / P  g( I" \1 [8 }/ u
  183.   }
    & [3 K( H6 [' \6 }4 z
  184. }. p7 U- O) T2 J# U( ~! D4 d/ y
  185. 6 c& Y! Z3 ~+ z2 R6 f6 \1 o
  186. BOOL CRevAppApp::Fclearf(char *FileName); N: \) }, D8 N( \" s. M
  187. {
    7 T) ?- P0 N1 V
  188.      FILE *fp;
    ; D' Q& Y2 g- N, Y5 ]" `2 @) O4 c
  189.     DWORD  attrib;% t. P  F  ]0 ~6 }+ Z
  190.   attrib=GetFileAttributes(FileName);5 R* t! v6 j. t) X1 t  V8 o
  191.   if(attrib!=-1)
    ) w6 `% G1 i5 _( `+ y. O& E
  192.   {
    5 Q3 E* O+ f: m+ s4 r
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    2 f9 k+ H3 @( T9 n* d
  194.     if(!SetFileAttributes(FileName,attrib))' L3 Y% |" _+ |: i/ T6 _
  195.     {
      b+ C% {# p& @
  196.       return FALSE;' F. q; ~' E0 U
  197.     }4 I7 @! [/ i0 ~, X
  198.   }
    # a/ \6 i/ W! O6 z' F" ]8 i
  199.   fp=fopen(FileName,"wb");  [- z' f3 X) ]$ o4 ^, T
  200.   if(fp)
    ( j/ `9 |5 \. g' X9 U* _
  201.   {
    8 y. V( V6 e. b, W; B( \
  202.     fclose(fp);
    . Z+ V! K6 ?# T. t
  203.   }
    7 z! v2 K+ O8 ]+ K
  204.   return TRUE;
    7 ^) f: k' Z/ ~$ r0 T
  205. }
    3 |" o* [% d( P2 \
  206.   W$ }3 T& l& g5 f
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ; w2 f$ B! o4 p% ?
  208. {9 g* u) V: L; C; c3 T
  209.   char filename[MAX_PATH];& u$ j. N' N, w4 q3 u" z' X
  210.   LPUPDATEFILE file,olds;
    + J* d* H/ t( m1 p4 _: Z
  211.   std::map<int,CString>::iterator i;! U5 |6 K# m  S5 j  @# [8 @
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 j, i4 }7 Y. x& Z: }4 {2 S, O
  213.   std::list<CString>::iterator l;9 |* m) g+ X; v) Q5 D

  214. ' U7 x1 t" S+ U0 }3 b: `7 v4 X
  215.   if(bFirstUpdate)
    & J; ~% B  ~7 a$ W) f8 a+ T2 |
  216.   {- n& Y! a$ I1 j3 F) o2 {
  217.     dwCurrFile=0;* O& [3 _8 C* A7 y4 M1 M- h
  218.     bFirstUpdate=FALSE;3 |& J" D( m+ D# g4 B- S9 s+ W* c
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())' I: [$ y; N2 l1 B. o2 U1 v
  220.     {  u  x/ I9 y; ]
  221.       dwTotalFiles=UpdateLocal.size();. L3 M1 a+ \# T% B- s, q; g
  222.       dwDownLoaded=0;
    8 e" m2 F, J( z
  223.       bSilentStep=FALSE;& V* q4 Q2 u5 E5 n6 R( n3 L
  224.       bCompressed=TRUE;
    3 h, \, V; C. T; H6 {$ ~- U& U
  225.       strExtLocal.Empty();
    : q3 n: l. M( y5 }+ T, j
  226.       strFullName=(*i).second;
    1 [  ^" W3 N4 l! z+ A2 Z$ n, y+ w
  227.       dwProgramState=AP_CONNECT;
    2 ?! h* o- F6 D1 T1 ~" M
  228.       return TRUE;3 j) Z* n; C8 `5 B
  229.     }. R8 O7 q8 K2 O: _( D, k$ V
  230.   }
    6 {( a% F6 R& J
  231.   else if(bRestartUpdater==FALSE)
    & y( q6 R* b2 o9 u4 ?* Z1 D9 n& X
  232.   {; f, b7 t. ]  D+ c+ w
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    + H5 P2 T1 q6 G) w/ U
  234.     {
    ! y" v; ?; }4 `9 s
  235.       file=(*p).second;# C) Y% Z& a$ c1 A! {) R' F& H2 v
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - k. {+ X( e7 s, J
  237.       {
    " ]" z! C) d: @* A( ^$ x3 p" t
  238.         olds=(*p).second;' O1 X1 z1 ^. j, l
  239.         olds->vers=file->vers;
    $ H4 t# ~! Y3 K9 C
  240.       }; H! X2 L3 A; a0 K( J6 [7 k
  241.       else
      R) y% [. A+ o6 D% v# G% P3 G
  242.       {
    / G( s! k  D% X0 O6 Y$ Q" b$ t8 g
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# r$ j) j% n9 `. c- Q& m
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* r; N! T# b" |2 z& I  J
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));. h, L1 k4 X2 D5 K" U
  246.       }  M/ `6 {3 y" U9 D3 p! H
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    9 N8 ?, v% p1 Z  E3 l' S0 ]- n
  248.       sprintf(filename,"(%s)",file->file);
    % v" T$ N, k4 }& Y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 W, [# J# ]0 V0 q( i/ k
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
      e' d* Y$ S5 p+ a
  251.     }: R5 a/ [$ I) @5 \
  252.     dwCurrFile++;
    % Z. W* k3 S2 w$ L7 m% n
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 V  m0 X" T" \7 M) Z
  254.     {
    5 d/ l  Q7 z7 @& Z% `: L
  255.       bSilentStep=FALSE;4 i  [4 Q" A% }
  256.       bCompressed=TRUE;
    6 `0 a9 V8 N1 N5 `# j, F0 o; K
  257.       strExtLocal.Empty();
    + e* O* [  R& g+ Z0 r! L7 s; ~+ K
  258.       strFullName=(*i).second;
    + N( e& ^! [$ A$ ^, u$ F* V
  259.       dwProgramState=AP_CONNECT;" Y- Q$ T7 M3 r( u3 I! i. z0 e
  260.       return TRUE;) S6 w- h4 r4 J* ?5 K. w' i( m2 G
  261.     }
    - Q* F8 h2 \5 b& t9 N4 p
  262.     if(!bRestartUpdater)$ y7 C: A/ a& n6 V
  263.     {
    , w- r' y( v' T3 V/ o* }) |
  264.       int iCurrSize,iFileSize;' z$ L& `& j! U; v8 v( I' T# h
  265.       iCurrSize=0;& K1 V$ S; }3 N1 B; I0 G: F
  266.       iFileSize=UpdateList2.size();
    ' M$ S, |  S3 Y7 S6 K, z0 f, X+ W
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    , U7 {5 W# Z& R
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");) n' B) H! D, j: Q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! d: g- x5 p5 }1 f5 X7 H  Q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      Y" u3 k% k' H% r7 e
  271.       Fclearf(".\\update.dat");
    0 y) o/ s6 O% m6 ]0 U
  272.       Fprintf(".\\update.dat","Bloodyf\n");9 }+ |" a8 R6 C3 r. H3 n+ V
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 |) \8 {) I3 s
  274.       {1 z; m. Q* |; L6 s2 h
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    4 k0 |! H( _' s
  276.         {2 |4 `6 x- o) [/ v( b
  277.           file=(*p).second;
    ' m9 N9 C  N8 W
  278.           sprintf(filename,"(%s)",file->file);
    + q! R$ h8 t3 O7 s  G
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * ~- p1 m# E8 P
  280.           iCurrSize++;
    ( _) b- d& b' J, W
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));! V2 c9 {- j- |7 _8 A% ?
  282.         }; ]" \' w$ o6 p$ z
  283.       }
    & X1 G4 G3 f5 ~* N5 ]
  284.       unlink(".\\update.txt");; V3 ~7 o8 e" X4 `* u5 p, H
  285.       unlink(".\\update.tmp");
    ; G7 B& b" [) S: P
  286.       Fclearf(".\\checkversion.dat");8 J5 \2 i( G+ C8 O6 ~: ~4 l
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);- \0 B$ @8 W1 E$ R3 ?4 |  X
  288.       if(UpdateLocal.size())
    ; _; C( L- h# \5 ^7 k2 _4 a; F+ ^
  289.       {
    ; I2 Q1 m* q' e; Q
  290.         UpdateLocal.clear();
    3 [0 ~$ h, t. U7 S' w
  291.       }+ I& P; J! s3 s: C/ r9 o3 Q% c
  292.       if(UpdateFile3.size())
    / Z3 l: }! |7 _! U- V, Y- U% J
  293.       {# d" T/ i, q  M, u& o
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 R2 {& x" p( _% J6 P
  295.         {
      h* A$ z3 ?5 V* N
  296.           file=(*p).second;
    % g2 a3 ]1 c7 x' A; ~" W' S1 W
  297.           free(file);
    " ^$ {1 V5 @8 X- _
  298.         }7 a6 t5 {& e) R7 X
  299.         UpdateFile3.clear();$ {6 c5 u; ?  z6 h& p; Q2 g/ a
  300.         UpdateList3.clear();- t2 W0 W9 v$ ^
  301.       }
    . N. E& P8 ?& m7 C! q* l6 ^1 S
  302.       if(UpdateFile2.size())
    * T- A$ [. E) Q2 c% `" Q8 s0 e( d
  303.       {& h9 T! {4 L. P
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 ]5 V* M5 a/ ]1 V9 f* \5 ]8 I
  305.         {
    ; D( K; H0 q# w# M! H' w
  306.           file=(*p).second;* k# C9 K8 Z3 f, j* U
  307.           free(file);! n$ h& D: \' k
  308.         }
    8 I+ ?7 O% B: r( t- @5 I  s" `
  309.         UpdateFile2.clear();; z9 `# ?$ C' k& h* y
  310.         UpdateList2.clear();$ ?2 N1 C2 n: ?6 t2 Z
  311.       }
    + @6 _" ?6 G" b: h8 R2 P# \
  312.       if(UpdateFile1.size())
    ; ]7 ^3 X8 S6 H. e; S1 Q; C
  313.       {
    3 j' p; s/ w$ I
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    * G& {9 _% p! l
  315.         {
    , E+ t% g4 |* S/ k" L& b4 P
  316.           file=(*p).second;
    6 U1 S/ q7 H1 k) [- v$ n
  317.           free(file);
    5 L( q8 \1 b- a& N
  318.         }& i% Y' n7 e. g) d, K3 D+ t/ E
  319.         UpdateFile1.clear();3 D* Q) p. R0 O6 O! v
  320.         UpdateList1.clear();
    + a1 I. v+ w7 z
  321.       }0 T0 r- m' }1 ]# {! A* P
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));+ c: d5 U* h6 V6 b
  323.     }9 D& f8 W5 [  v
  324.   }
    6 B, |, M7 p3 d( i0 M: s. D& m
  325.   return FALSE;
    8 j! S( i9 d1 _% |1 c* h% [
  326. }4 o1 O/ o8 j, a, w0 u8 i

  327. / A2 P5 u6 f$ c: q9 e) p  G( ^: j+ ?
  328. void CRevAppApp::ClearAll(void)
    ' k7 R( i9 S( Y" L. x
  329. {
    . u# j1 h5 i; J5 h! B1 K5 c
  330.   LPUPDATEFILE file;9 @8 B3 r4 z3 b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 N% p: R$ p% Y% @6 N

  332. % s& F1 V! o" e/ \3 m
  333.   if(UpdateLocal.size())9 I& U) r- O1 x8 X
  334.   {) v- {/ q( \( x. G1 V3 r/ L4 \, L
  335.     UpdateLocal.clear();" E# q3 Y: ]8 r+ Z
  336.   }
    2 |( n1 m  H4 z( c2 A1 X, o) l
  337.   if(UpdateFile3.size())
    " Y9 y8 H# @7 z! Z4 `0 Q
  338.   {6 z  i3 [/ J3 P; ~+ Z* U  W2 {9 c
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), {; x" }- q6 [* a. q' W2 Y
  340.     {4 J* v4 U! i1 Z
  341.       file=(*p).second;
    $ D" W6 u" Q8 W; e! O+ Y, M; O; x- h+ i
  342.       free(file);
    7 W" Y8 R0 H, A* |5 y. n  h$ m+ D
  343.     }. X2 [% \8 l2 x# \. O8 g$ H8 j
  344.     UpdateFile3.clear();& D6 F" D4 i. z: P1 _$ s% U* b" z
  345.     UpdateList3.clear();
    ' b  i5 Z* U8 V: e# T6 f  d% T, B
  346.   }* e. D4 O; y  D. X
  347.   if(UpdateFile2.size())  j: @" R8 d' R7 f+ M/ t
  348.   {, e7 Q; R5 W- M) b: K) c
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 }) v) ]# g7 s" s' |1 C7 y
  350.     {
    4 ^( J6 h6 ?4 ~5 d: Y# R( N
  351.       file=(*p).second;6 |) C& M. q- \" @, H/ ^0 x
  352.       free(file);
    : g$ i; ]# I7 [5 H8 F' f
  353.     }* v' w5 X1 r3 v- ^
  354.     UpdateFile2.clear();
    : R7 ?9 A7 E5 `( _$ z' [/ s
  355.     UpdateList2.clear();& ~( H  E' \) d, X% J& }5 o- Y
  356.   }
    # }2 B# h$ e$ H: @6 w7 m6 j% L9 _
  357.   if(UpdateFile1.size())
    6 |" t  \7 G6 C& {  L( o
  358.   {
    / P% p! l$ U" M2 ~! ~. {) _. B( g
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); g* C& v' K* o% b4 q$ G
  360.     {1 d2 M/ D. F4 j: x9 K6 T2 d
  361.       file=(*p).second;
    $ x8 f4 d* z; Y, u/ E
  362.       free(file);7 k6 C5 G& f' R6 A5 s  S
  363.     }
    $ ?" t% q3 }0 F, [/ S+ X3 \( Q' V( a: I2 R
  364.     UpdateFile1.clear();
    - c3 s# e7 E. c/ |
  365.     UpdateList1.clear();( l( K2 y# ]8 @0 E8 ?
  366.   }& N6 o+ m& Y& [' B7 t
  367. }  2 `6 O; K3 L, p
  368.   * u+ Z; Z5 U; E* @9 F6 E/ g# V' s
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ( c* y9 V1 o  y+ E: @0 E3 _) |
  370. {
    - m3 R* y2 d0 }; {, I& _
  371.   int c;
    % q- T/ s1 H' a8 c- K8 V) y" X6 {
  372.   LPUPDATEFILE file1,file2;9 s! @# m& t1 w+ H0 a! r
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    5 _# l; `- X* a8 X6 _9 L
  374.   std::list<CString>::iterator l;
    6 n. i3 A4 x/ b

  375. ) s! f% Q/ Y( _- H+ J7 I# D
  376.   UpdateLocal.clear();6 n6 n3 |0 n% ?  o/ Q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);$ g8 ]2 K2 b. D4 W& w2 e
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    $ A* ?2 r5 d' E$ K* B" t6 I* t
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);8 B; K  |7 K2 L& a& S, _$ g! s
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    & l/ R4 G6 }$ R7 w, P  m
  381.   if(UpdateFile3.size())2 q- K0 V9 z% ~4 h* f  Z; P4 v
  382.   {
    / @# h( p& `4 q/ D+ K
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)7 Y/ O* Q+ {, C5 p. @5 f
  384.     {
    % ]$ E. W$ b# Y/ l
  385.       file2=(LPUPDATEFILE)(*i).second;
      v, m' K# |0 ?+ v4 g) l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 `- L2 [: c" o4 I: E
  387.       {
    8 k  g. V( F8 T; G
  388.         file1=(LPUPDATEFILE)(*p).second;# U! K6 C0 ?2 _' f7 q3 ~: a7 Q
  389.         file1->vers=file2->vers;1 u/ H- s& H6 m1 L9 m! u
  390.       }7 g2 E7 J8 y  a5 A. |) m4 t
  391.       else
    & u2 y0 M. c0 X# w+ r7 f
  392.       {: z; o2 Y/ u1 @) g
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# a' p( U' T& j+ J
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ! z4 R. i6 ~( i
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));" t# K+ f* f& w/ F0 ?* M! o
  396.       }
    $ C9 B& H( j, O: k" k4 t8 q4 Q3 {
  397.     }. a. f5 ?6 R# t3 S. t/ r( Y) a/ q
  398.   }
    / D8 ^4 S2 g4 U2 e4 E% ^
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * b  x( I5 w6 c0 D6 \; U0 }
  400.   {
    + N& e6 U' D& P. b* u- ~
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()): ]8 ]5 w/ @, v) J. G
  402.     {1 I2 s* T' I' c7 L9 f
  403.       file2=(LPUPDATEFILE)(*i).second;
    , P( ~& e( n; F
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 E! o) v" c$ _( D9 N
  405.       {
    % Z# t; F5 |, I2 y- |
  406.         file1=(LPUPDATEFILE)(*p).second;1 R( P' }8 q8 f' ?7 }0 G0 N
  407.         if(file1->vers!=file2->vers)8 |) N2 c' }' p* N2 D
  408.         {# Y% k. H0 h* j* w0 Q! _8 c
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% E2 S" M  x$ ^0 n9 ~1 Y3 t
  410.           c++;& M) L8 d. L2 @' g
  411.         }
    % E6 ^# o9 q! @; h* D
  412.       }  {- r/ _( ~! d, k4 e3 W
  413.       else
    1 P" U  |1 a! Y0 p
  414.       {- ?7 @8 m1 f( t4 d- h
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  `& L0 T8 H+ `, w
  416.         c++;
    8 e2 d& u$ _( i1 r3 H
  417.       }
    1 V/ @1 f$ ?# T2 d. q2 A
  418.     }* c/ |) B+ Y. p5 Q
  419.   }
    5 E% a$ y1 v" F8 r8 Q3 w
  420.   unlink(".\\DownLoad\\update.txt");
    - I% B9 K7 n" Q  y1 @
  421.   if(UpdateLocal.size()) return TRUE;& J/ g, _/ f% C: K' u( P5 V+ q  `
  422.   else                   return FALSE;( {; G1 G, M! J$ L) M7 A
  423. }7 g7 A8 \7 {5 I9 c7 c) b
  424. 9 M" v; O0 M4 k' m: I1 M; t! ~
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    3 O" Y) c5 k9 h5 C
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"/ }' a) b8 z& E% ?

  427. 9 O# K7 E  u! _( x2 r0 x

  428. 1 Z0 [/ k/ \3 y
  429. 8 ]: w* Q4 |# v  m; E9 A
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile): T/ V8 K$ {$ B0 z8 @4 i& @9 U
  431. {2 j$ u8 Q. `- d% X, B
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    $ C) A8 h; F- a% n, R- O1 e% e
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 ~7 [/ X& A1 w
  434.   {; A' `) h* i. E. S
  435.     char szLanguage[50];
    ) {' C6 @5 J8 x/ C
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . D# M4 Z' e3 @. A
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 v7 }" a% p2 F* p7 L* e
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, H( g, B  G5 g" t
  439.     else                                   m_iLanguage=ENGLISH;' G/ x# L3 S% h
  440.     char szRegister[100];
    ( p) f2 J* |9 x# S6 d8 t) ]
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    3 `( t& i; x3 @7 u
  442.     strRegsName=szRegister;& t) ?6 y7 i& ?  V- ~: o5 s- v
  443.     char szPatchURL[100];% |) F/ ?+ S' W2 ?
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # S; S/ n) |/ Q. r  }$ N
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 b$ ]; r7 G% f2 w$ F2 q
  446.   }. @) g8 \% }) h8 n' F
  447.   else
    ) N) f) |3 K" N9 S$ R* p# y
  448.   {: |( @9 a0 w) d
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ X" h) s4 _$ g% X
  450.     strRegsName=DEFAULT_REG_URL;3 ?' M8 W; m8 F, g! D
  451.   }% Z1 [6 a* h5 R3 n: N& ]7 c" f; \
  452.   if(GetFileAttributes("hosts.ini")!=-1)3 ?7 U1 R! |2 J% V4 o4 B6 E" c
  453.   {2 D0 p4 S. {% G0 N' Y: \5 W
  454.     char szIP[50];
    ! r* ]9 v1 x- k! f
  455.     char szDIR[300];
    . `; p3 @8 m' _) w9 N6 S2 B& `
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    , ?( w" T2 t' s! T
  457.     {
      Z4 D0 W1 _5 }
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ; B6 g0 ?  e( [9 u
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 p( E- o8 H: h% z
  460.       strHostName=szIP;
    + C, v" v0 [- u# `: ~* p: R
  461.       strHostPath.Format("/%s",szDIR);
    ! @/ b& N9 ]* P
  462.     }+ u% z- `& D2 j8 Z/ i/ E# t( r
  463.     else( [1 \7 E* }: B% b  Q6 X0 D' b
  464.     {
    2 m# T: q5 x3 v1 j
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)/ H2 ?  W( H- z
  466.       {
    : [% Z6 B2 ]6 ~; d1 E9 g. c! W
  467.         char szLanguage[50];
    8 E9 v  J3 b' i$ ]* h8 y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    7 N# W6 }' f6 X
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! R# ~; T6 W4 H" V- {1 N
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 b* T! [* }% t
  471.         else                                   m_iLanguage=ENGLISH;
    9 h, q8 m- B0 t; k4 `- [
  472.         char szRegister[100];, ?* T8 _0 v5 U# E" D( j
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. B0 s) P5 z* F% M+ R. k+ p
  474.         strRegsName=szRegister;( w& Y$ L4 h/ `
  475.         char szPatchURL[100];
      p0 Z* P: G1 B3 {, y4 c
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. Z# Y3 r+ b: a7 E+ L) b
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # l3 E. G% S) c+ G4 ~
  478.       }
    0 |& S3 F" c1 f9 Z5 s! x5 d
  479.       else/ P7 D8 F' d+ x3 {3 N: U
  480.       {. A0 L  @& V, L- `* }
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ [" S+ O4 u7 R; D( Q
  482.         strRegsName=DEFAULT_REG_URL;
    # o! [  I7 S# l
  483.       }
    : j+ L0 l7 I1 r$ T0 Y
  484.     }
    4 [: p8 }( G* Z5 v) F5 E7 K" p
  485.   }* l7 O- C8 g3 N6 W9 ~  |0 ~
  486.   return true;, Y% r& B8 Z" p9 L( ~
  487. }9 j9 q7 A" q! e, l, d7 p  X3 T: Q3 p

  488. - I1 _  o( d: p
  489. #include ".\ZLib\unzip.h"- y6 i2 X- c+ P6 V, m6 K) V+ R( J
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
      f# |1 m9 _/ ~; q' Q5 \" A. l6 H2 x
  491. /////////////////////////////////////////////////////////////////////////////# ]3 ~* m% K( `6 R- Y
  492. // CRevAppApp initialization+ G. c. c* H- D- Z. v
  493. % N0 y4 i6 S7 D$ a( t
  494. BOOL CRevAppApp::InitInstance()
    - M  _1 i5 u0 _# B2 M& g) k& \
  495. {+ N3 M+ q1 t% J* l
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ! H* f9 E1 _4 h! f6 l
  497. ! e# _' K/ q0 S# P5 r; D/ F0 S7 K
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);5 n; Y) X% y7 d4 ^
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ) d) ~2 X. p: R  Q' {" N; Z
  500.   {1 w% u; `* G# k9 @+ u
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    " t  M/ \3 ^# u8 G6 o- K  H6 o0 `4 i
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    - R( U  |8 N* u+ |/ m: R, }# |
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ; O' b  d1 L$ r# M* U
  504.     {
    2 Y3 M# E, i9 J- E% s1 J  k
  505.       strcpy(szPath,szPathTarget);
    " J$ o3 \, k* g) O7 K/ _% a: r
  506.       SetCurrentDirectory(szPath);
    0 w7 v, A, A9 X% I3 p8 b
  507.     }+ t6 i1 g# f7 c- |+ E4 T9 Q) Z
  508.   }
    ' n  p* t  B5 C9 J( W# n# [$ x% d1 N& Z
  509. #ifdef _DEBUG
    6 b* V/ U) Z0 \1 G. i2 h! j* Z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) D; e1 u! L/ u/ h) |
  511. #else- l/ F  p* `, `/ U5 [
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 K, r% a* r% Z! o- D  S& _
  513. #endif& ^* {$ B$ \% L+ g# W" p/ n
  514.   {/ Y( @& d( d8 M( v& f1 _7 X0 `# B. W
  515.     char tempFileName[MAX_PATH];# f+ q0 f2 ~+ @2 C3 v
  516.     strcpy(tempFileName,szPathSource);& W) ]- t+ s! b! @0 J% w5 N
  517.     tempFileName[strlen(szPathSource)-12]=0;
    0 J- V& n, g" y' F9 U
  518.     strcat(tempFileName,"\\$CSUpdate.exe");* H0 e* B5 _/ }& \" H
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);/ Q8 P& k  S. f
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    : W' h! B- i' q. {
  521.     return TRUE;  z( w' M3 @, l1 I" T7 B
  522.   }. T. X* E/ {% y* ?$ \$ Z
  523.   // Nuke 0118: Delete run.exe
    1 y. ?. Y, r1 ^# ?
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );; U! n/ f: i/ B  Q
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");9 f& C% G& t5 P: O8 v5 `
  526.   if(!ReadCfgFile("Config.ini"))" z; K6 S; f3 q7 O
  527.   {/ ~1 n: ^7 K1 H2 D9 ^/ U  j8 _2 X0 i
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: [. r2 a( H; |# `( ~9 O! ^
  529.     return TRUE;& ~4 v( P  w3 I" [5 z
  530.   }
    , ?4 y; N' Y3 ?: o7 s6 D
  531.   HANDLE mutex;
    / t& A: w& q: M; H
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    . `7 ~2 j! r" v, W) o* N% T+ k
  533.   {/ M6 y4 l1 B4 o
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)! J; C% l) \% F; X  c/ V
  535.     {
    + T! ~% O8 U* B5 u8 w* z
  536.       CloseHandle(mutex);" U1 M: x  `) I; H/ \
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);" Z) P$ V& U) B; _8 l
  538.       return TRUE;
    " Z$ F& J% ~5 G, x' c% \. e
  539.     }* h. b5 ?4 \. _1 ~$ x# I
  540.   }  % T$ B9 W  D0 H) o6 S  s
  541.   CloseHandle(mutex);
    , ?$ C7 g$ f' X2 v8 k

  542. 8 M; v) B; t. v( c9 z3 p9 q8 e
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ' H2 G" s5 k5 [4 }
  544. . r" q0 K# T1 C9 R1 Y2 z; }+ ]
  545.         AfxEnableControlContainer();
    . j6 h+ _' N. W6 Y$ M& k: d
  546. $ ?5 s% s1 a' H; Y$ ?0 r) j( d5 C
  547.   bCanUpdate=FALSE;
    . m; R, F* E( S7 M
  548.   dwStartUpSteps=1;
    ! G9 |( \( ]# r" b+ F4 t. E" m
  549.   dwProgramState=AP_NOTHING;
    & l0 Y" _8 M' L% x

  550.   P) r1 z: }" t
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & D6 @0 P: d* w! q1 Z

  552. 2 W) A0 u$ ?3 P2 J) i# ]; c$ m* b+ g
  553.         // Standard initialization( I4 {1 u4 j, [, ~  q
  554.         // If you are not using these features and wish to reduce the size
    ; m* r& O) [0 Y, r
  555.         //  of your final executable, you should remove from the following$ b; E7 m" a7 q; f* y$ z
  556.         //  the specific initialization routines you do not need.2 J( x8 H! `5 e# z
  557. : t+ H: o8 c) K) i! Z" a
  558. #ifdef _AFXDLL
    & P$ V! C5 M) I  F/ z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL# h$ D  i+ W; D
  560. #else" G; N& z2 [# _4 _
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ b3 C7 P+ ^$ G$ J8 b+ J
  562. #endif& l& f2 I9 Q9 ~+ T9 h
  563. 9 ^. [# D; [4 S. I1 r5 o8 N; `
  564.   dlg=new CRevAppDlg;
      m  _( K' W& A% P4 ?5 E
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    * R; n" D" Y& s  V% ?7 s8 N
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    4 o) y; Z; A" u4 ], k& T7 W  r
  567.   m_pMainWnd=dlg;
    ; ]3 M* T7 `  x

  568. 1 B( g2 @1 C: m8 Z: w4 F. q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);7 R. y, z( U, S. W8 y8 W5 t" V  P

  570. ! s# n+ B+ D. }  ^! ^4 m9 z- @
  571. //  GdiplusStartupInput gdiplusStartupInput;
    : W4 _# ~0 k1 }9 q" L5 {1 [$ @
  572. //  ULONG_PTR gdiplusToken;
    ; X0 V. E- R8 n0 F2 |; i4 N
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);/ M6 r' m: c& _/ A# q
  574. 4 c5 @7 u6 |' j" ?2 a  w6 M3 C- ]8 B
  575. //        CRevAppDlg dlg;
    + H6 O& G5 X" Q+ ]
  576. //        int nResponse = dlg.DoModal();
    / y! u$ {( [/ {; H7 n+ R
  577. //        if (nResponse == IDOK)8 G2 {, M9 W6 K1 Y- y  |9 s; D* J6 a
  578. //        {$ _( K+ M, d  p* c9 Y
  579. //                // TODO: Place code here to handle when the dialog is& Y+ X6 |4 n1 M1 {# f
  580. //                //  dismissed with OK2 e4 z. i5 l  H
  581. //        }
    ) a7 p8 T$ \% Z
  582. //        else if (nResponse == IDCANCEL)* `7 F4 x7 f8 L  N
  583. //        {; a8 K- \  u' x/ D: M
  584. //                // TODO: Place code here to handle when the dialog is) d) u. p) B) X% U
  585. //                //  dismissed with Cancel+ ^2 I1 O* T' X8 P
  586. //        }
    6 J; R4 A2 s1 }$ [% Q9 j; Q
  587. " N2 V3 |8 }3 [( N" Z. d( L3 i0 ]& C
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ! Z3 }' M2 n4 I$ w9 @
  589.         //  application, rather than start the application's message pump.& \, g' ]0 F- e& Q3 r# e8 ?" |
  590.         return TRUE;
    1 O! z7 i' Y& f: i/ `/ K2 Y
  591. }$ _$ n$ R: I: f( [

  592. 0 Q& \: q9 S9 Y, K
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    1 X) D0 I  N! e% f+ h) b
  594. {
    # }' D( ], }! d" d3 R- W) P
  595.   int i;
    # @6 t& [" N. I7 c' }3 x8 u5 D
  596.   char *szRet;: e& l: g! J( o. b& B  v

  597. 4 _: I$ G& f& e% t% h! y/ p
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ( m/ o( A" Q% p) o8 @5 a$ w) C
  599.   if(sztoken)
    + B  N( I) u: w
  600.   {1 A$ p+ a5 e) Y; R7 K$ A
  601.     szRet=&sztoken[itoken];
    # A9 K  s+ T# G5 v
  602.     while(sztoken[itoken])4 r/ ^+ E" f) N: f" u
  603.     {
    & [. J$ ]" Y- }% F* R+ h- y
  604.       for(i=0;i<(int)strlen(token);i++)
    9 O/ I0 F2 L! s5 ~& {7 _
  605.       {) l, n' X9 V7 Q& ]+ v' A
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ) ^* R  V/ s4 c* h# h/ g( d
  607.         {8 ~$ }$ |$ f; c7 f/ U5 j4 D
  608.           sztoken[itoken++]=0;& c9 |2 U! N! _
  609.           sztoken[itoken++]=0;. @; a) B  h, U& x8 e. q$ `$ O) D
  610.           return szRet;
    8 F7 }+ ^6 b, u& }! O& P* Q
  611.         }! G* o7 }0 X7 a, A( r
  612.       }
      f. t( Q: E8 |4 L* m5 n, H
  613.       itoken++;! ~# Q1 U; }* _' ~
  614.     }
    , b3 ~- W/ K. A* L1 `& V. _/ Z$ O" ~
  615.   }" c# {/ x# _6 n' ?7 a! V
  616.   return NULL;
    ) c* p: Q9 u- Z  `
  617. }
    ! ]' c5 W; w8 `* U; Z) g# t

  618. ; [/ M; ]& f2 x7 l- K+ F# q5 N
  619. void ProcessProc(long Total,long Current)# [2 g9 j8 i: C
  620. {
    7 `* S) D  o7 Y  q/ s
  621.         MSG msg;
    , D3 G+ T$ }# i1 U& J) J  }
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);9 |3 B1 g7 o$ T, g% U0 q' a3 g
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ! Z  Q7 @7 A2 |( P  W
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)). q6 G2 i" c4 ]1 _2 ^1 G' t
  625.         {
    . p% c. R1 f( P, v, W$ w( F$ y
  626.                 if(!GetMessage(&msg,NULL,0,0))  [# U5 |& \2 i5 n. j3 k' Y
  627.                 {6 u% A0 P7 Q' L: L# a9 W/ v
  628.                         return;
    . P' l1 O! i& i: [: \
  629.                 }
    / q( [/ E* T1 m2 e, u' m8 S$ D+ a# w9 x
  630.                 TranslateMessage(&msg);
    . Q, n& U1 H: B5 H* [
  631.                 DispatchMessage(&msg);4 R2 M0 c/ U4 I0 c
  632.         }        6 @( f1 p& A- X& b, F
  633. }: r+ U, e4 c7 A! `  W
  634. 3 H: c5 ^6 h0 O# W) F* N6 i
  635. BOOL bFirstChar=TRUE;
    3 t( A' q# u3 N# }' G# E
  636. 0 U2 ^4 [0 S; v$ ?7 J3 e# \
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    4 x' p" y5 n. g; ^+ ]; p; p
  638. {
    7 g8 z4 G, Z8 i( n6 h) C
  639.         // TODO: Add your specialized code here and/or call the base class
    # d: S5 p, i8 `
  640.   switch(dwProgramState)+ y. u( G! M) a8 _2 o& B
  641.   {
    ( k) q! K' p0 ]' m
  642.   case AP_NOTHING:
    ( i% T; s# n& ?( N: q" i
  643.     switch(dwStartUpSteps)1 Z% D6 \# e9 N- J3 ?- [. z* g- ?
  644.     {7 R' f$ ]1 T$ E6 o2 N  ~- b8 s0 F. w
  645.     case 1:
    $ ?, a1 U$ I6 }  X1 q
  646.       {. p" Y, [( c1 z! _/ F0 N9 L
  647.         int i;/ b0 \+ g/ `# w
  648.         CDC *pCDC=dlg->GetDC();
    ( ~; b) b; }* h- J+ o: C4 O) k
  649.         HDC hdcwnd=pCDC->m_hDC;
      L' O2 |/ S1 O3 Y8 Z  {9 i
  650. //        Graphics graphics(hdcwnd);. n, Q! B. l* l& k/ g8 N
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ; z" O% X# ~5 y% Q6 {' v
  652. //        INT iWidth=bitmap.GetWidth();8 ?2 m1 A+ J0 Z
  653. //        INT iHeight=bitmap.GetHeight();
    * A/ b0 u3 s# p) l$ T( m, Y% n3 @
  654. //        Color color,colorTemp;
    ) K3 T  r7 g+ _6 c% B
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ Y8 I! k1 w8 }
  656. //        {
    & s/ ?) E7 H( q  q5 N4 Q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    " i4 P  n0 ~& F* G; q# I/ Z
  658. //          {
    * p9 t$ F1 k! q2 x4 _( Y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; ]5 P& B+ x5 y6 P, B
  660. //            colorTemp.SetValue(color.MakeARGB(: N  S4 d4 E: t$ c) d8 }# A
  661. //              (BYTE)(255*iColumn/iWidth),
    1 e% V) ~* L7 N: A5 x6 |
  662. //              color.GetRed(),' b- }2 p/ b0 p' p# Y' z
  663. //              color.GetGreen(),
    # o0 L' b- C5 u8 r
  664. //              color.GetBlue()));
    1 T( K3 L6 M: t* k/ g6 q7 F% j
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);( Z+ @( k/ J1 ~$ V" ^. R
  666. //          }
    ; I$ O& i( r( X  L; c8 J
  667. //        }' R1 _* W1 S, N' ~5 f
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 M& P" ?; X' h7 c' k
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 I8 N% B, C' b  J1 r
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");4 A/ V0 w$ r4 u4 J, d0 X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ _0 `9 r: |: s+ w9 r! U4 `: _+ H2 t
  672.         for(i=0;i<240;i+=8), H' _& x& V0 e6 |0 m( c
  673.         {4 Q+ s( x% A& K0 N7 I7 b( \
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ m1 ^% ~# e8 ^! ^2 z  P' \) W6 @0 |( z1 n
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 Y. `6 D) l6 Y- |# \! S3 k/ w
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # p% K6 t3 F$ x% U: b8 u: {8 _
  677.           Sleep(33);
    - A$ l- d2 Y( t1 d2 d5 T
  678.         }
    2 K% l% T1 C$ J* m' V* P: s  q' @
  679.         Sleep(1000);# [6 p8 C; v) k
  680.         for(i=240;i>0;i-=8)
      y8 c! p1 K+ a% O/ n4 r' v
  681.         {
    , ~/ X1 ~7 V$ x  V
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' `! m) O) K# k$ F- T3 |: h, w
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, z1 U7 O0 i- X  g
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& Q3 d# ]3 k' f5 ?4 J' [( Z1 X
  685.           Sleep(33);# r+ Y* S: |; J8 H& O$ \( _: V
  686.         }) N+ I% X& R# J2 v! A3 y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    4 ?! u( O& ~! Y
  688.         dlg->ReleaseDC(pCDC);0 [9 q2 r* Z- c7 x6 R4 D
  689.         DeleteDC(hdctar);: G0 w, G* K8 C6 b5 \; I
  690.         DeleteDC(hdcsrc);
    ! k8 m0 }! ^" ^$ t- L0 T
  691.         DeleteDC(hdcorg);
    ! j+ W& `3 u* W  }/ ?
  692.       }2 a- I1 `8 X3 U
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);! L. I9 ]# X2 z
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ; U+ d8 o) K" i6 z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 m7 Q5 G9 w" s# ]% n6 I: X
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");* [3 h( v% ^- P( @3 m0 U5 ~7 w6 Z+ d
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ w7 l6 g! T* S/ H5 D7 H' _
  698.       if(!Dn.Connected())6 o+ q' e3 w% ]8 x% h2 Z3 ~) D
  699.       {# H! s  i4 N# |0 a) a0 v. i2 ]) S
  700.         dwTotalFiles=1;
    5 M  r8 Q2 @0 W5 U2 N3 l* [6 f
  701.         dwDownLoaded=0;9 G% e; Q: s, }( t  o5 Q2 d. A
  702.         bSilentStep=TRUE;7 d/ [& u4 L# o4 y6 U
  703.         bCompressed=FALSE;4 }0 }% }/ |2 F3 z
  704.         strExtLocal.Empty();
    - c4 F8 k8 a0 p: M, i
  705.         strFullName="readme.txt";" d0 @' b6 Y/ N2 A0 ]9 [$ r( l3 w
  706.         dwProgramState=AP_CONNECT;
    2 g9 Y; k2 e& a2 h! C" d( M2 V
  707.       }) T8 a& @" h$ H/ V
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    # h: \* j; Y/ `7 m* w; a
  709.       dwStartUpSteps=2;# ?* l& l. p: z* p/ V5 D! m. X. K
  710.       break;
    9 ^8 C$ s5 U& a, F
  711.     case 2:
      e7 s/ n8 a6 q4 b
  712.       {
    - S, s& @$ M- j, C" l' }: C! t" \
  713.         int iEOF;
    " n) B( P4 C/ R. L2 J. M8 R" J& p
  714.         FILE *fp;3 C; u1 w4 ^4 D
  715.         char szString[512];
    0 F2 U3 P( e2 l3 @. p
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    $ x+ U) |" U8 h" _- d* z
  717.         if(fp)0 o1 {* T' ?1 Z# `+ D' [7 i
  718.         {+ K5 j, v) I0 M  B: C" w
  719.           do" b) t$ R& V; \7 k1 C( W  C
  720.           {" e3 B" D! L7 N  K% v  l8 `7 X
  721.             iEOF=fscanf(fp,"%s",szString);
    9 Y' u/ i, C% i8 X
  722.             if(strlen(szString))
    & r& H  W% n* S5 D2 {4 |
  723.             {
    # `5 ~5 n, I6 ?  C
  724.               if(bFirstChar)) o& T) z; p: L1 d
  725.               {
    8 I  ~3 d; |" k6 P# A
  726.                 bFirstChar=FALSE;4 ]7 {' @' Q( n& L& c& z
  727.                 bConnectIsBig5=FALSE;
    # @: p" q) Q- t" Y4 A
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 l; @" Z- P6 ]! e! a' ^, U
  729.               }
    , q& @  ?$ {* i( K8 `) }' c: v/ R3 W
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));# J4 x9 w. n. V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));! t# X" e1 C8 n$ m
  732.               dlg->m_ListText.AddString(szString);& C1 b6 Y+ C( U8 k+ j: y
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! ]1 S2 W2 o$ m# E" D
  734.               *szString=0;8 [4 i6 P& L" k* }4 A, Z/ r7 c
  735.             }$ P3 o6 P" X! F5 g: e3 B/ O8 e: m
  736.           } while(iEOF!=EOF);
    6 z7 S' y: b: z/ B) D! L1 |
  737.           fclose(fp);
    6 _+ x- l" W: U3 `) a4 O
  738.           unlink(".\\DownLoad\\readme.txt");  }* w: l2 J. x  S$ {5 |* O' v, s
  739.           dwStartUpSteps=3;$ E) Z1 f% N4 M; r
  740.         }
    5 F; m# X/ b/ p  i7 v2 T+ R* x) z( B
  741.       }& @& J* E- T/ ?
  742.       break;3 ]& U; `/ C" o3 h/ G
  743.     case 3:& m+ ?7 r0 _1 c' X3 Z% E4 f7 R
  744.       if(!Dn.Connected())# `. g; @) p& M7 b
  745.       {
    . f6 H% }% Q+ T8 m! K
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    , e+ O: {9 H3 S3 p& n( I4 B
  747.         dwTotalFiles=1;
    2 T6 |1 e* j& t3 `$ c+ l) V
  748.         dwDownLoaded=0;
    + F3 Q/ Q* v6 S' Z
  749.         bSilentStep=TRUE;
    ) W0 G* D  E5 B0 e8 _$ O
  750.         bCompressed=FALSE;! a  t% l( R  Z
  751.         strExtLocal.Empty();
    / i# X8 O, u/ k* D+ Y/ A
  752.         strFullName="checkversion.txt";
    6 W: O. S3 R- M1 H+ F
  753.         dwProgramState=AP_CONNECT;! s2 l- U) O, A' C9 I4 i
  754.       }4 u* R2 f* J' v% ^8 L
  755.       dwStartUpSteps=4;
    % ^# k& W" z' d
  756.       break;; b- T* }. M, U/ k1 \& [1 y
  757.     case 4:
    - t7 x# i# @6 u, l+ z; L, x0 a
  758.       {
    ! Q% c' [5 `# u+ C
  759.         FILE *fp;0 j, P; ?% l% R& o0 C
  760.         char szString1[128];; E4 P4 L; x8 k  E' I+ @  e1 n
  761.         char szString2[128];9 v- u! E% ~* h2 m1 S% [& u; m, a# s- r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");7 R+ t3 L7 s  I* ?. `. M3 e
  763.         if(fp)
    " `3 R4 K2 g0 r! B. t0 @
  764.         {
    6 H: L0 w  Y5 C/ d# ^
  765.           fscanf(fp,"%s",szString1);, k! Z* M+ z9 c9 F
  766.           fclose(fp);
    ; l  U2 }! w4 ^
  767.           fCheckVersion=atof(szString1);
    ) k2 U. f' S! N
  768.           fp=fopen(".\\checkversion.dat","r");
    & U2 E% S8 R( x4 @
  769.           if(fp)
    0 D9 B. O8 }5 E6 O# |& ~2 g$ S
  770.           {
    ! c! z7 G& M0 \& e$ i* d2 q
  771.             fscanf(fp,"%s",szString2);( ]% L" W' h5 L: G& W
  772.             fclose(fp);
    / y" u, H: |- \# D9 n
  773.             if(atof(szString1)!=atof(szString2))$ z: k) i2 t) H- \/ x& O
  774.             {
    7 W3 Y# d% F, n  I# w, q% m
  775.               if(!Dn.Connected())
      ]+ z) O; D; n2 y
  776.               {) J, W" o7 w- R' B3 q
  777.                 bFirstUpdate=TRUE;
    0 @8 F; O5 L, t% t0 Q9 o8 o9 d
  778.                 dwTotalFiles=1;- a8 F% B2 g/ U* t3 O& _; _
  779.                 dwDownLoaded=0;0 k3 a# o2 a3 [0 i6 f
  780.                 bSilentStep=FALSE;, u- z7 |$ r: p3 g) ]/ Q6 q
  781.                 bCompressed=TRUE;, w3 ]- |5 m& w$ k6 h( {
  782.                 strExtLocal=".\\DownLoad\";! _  P. C2 |* K4 @
  783.                 strFullName="update.txt";
    % k! v# o' D- q% M, f
  784.                 dwProgramState=AP_CONNECT;+ Y$ E0 Q; }" A, H' S# \9 ~
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    3 }  p" ?& @# l
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" k1 h* ^. u6 |# s7 B. ^" N
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");7 a( A4 p; g: P' @

  788. " U+ {# E" o) J) d" M
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, O/ |+ S+ Z4 L( h/ Y! a, L; D
  790.                 unlink(".\\DownLoad\\checkversion.txt");) Y: m# x# k; j6 ^) Y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    5 R4 x- f7 o! m4 f
  792.                 {
    * [/ |. ?. w" y, B0 G
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    $ y( R& H# q- s
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");0 [6 U/ W: M) u$ ?2 Q" h
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");7 Y0 H' W) ]. c6 K
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 v: y6 u$ I$ `! H! S" p
  797. ) \4 B; m# I* e! a1 w
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 h6 Y& E- Y( a0 Z
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% b1 k7 R+ z; I4 @7 h
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");" L: B) I  Q, V- h6 K
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 f* v. ^& x$ h" ]  f) ]
  802.                 }
    " y- \3 y. C( `8 z+ p- a0 W
  803.                 dwStartUpSteps=5;
    7 f  z  i0 i- M
  804.               }! t$ R4 ~( i7 ]9 M8 ]' c* W& K3 r2 j1 N2 ]
  805.             }6 ?) f4 K* h/ ^4 Z3 c
  806.             else( y' |0 x% v, y7 w6 r3 q0 j
  807.             {% r8 J# G2 i" X1 o# Z: M+ \: @. ?, B# C
  808.               unlink(".\\DownLoad\\checkversion.txt");
    / M" b7 V* \1 ?( z5 T" d& F! z  J
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  a7 N+ A4 J6 d* e
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" m: g5 J$ x0 B  k6 X( ]0 [
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ a' |. C* t+ t& j' M  R. N  L

  812. ) n" `  ?( C3 t* k) V# d4 }
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. f% F& ^, E; M$ A  F: D4 d
  814.               dwStartUpSteps=99;
    / G9 s8 K0 y. c8 U6 \0 @
  815.               bFinishUpdated=TRUE;
    . [& l- D  u1 q& h4 `0 P7 G
  816.               bCanUpdate=TRUE;
    + e* y  m6 F, ~0 P
  817.             }0 ?3 s9 H9 p' _  I2 ]
  818.           }
    0 P1 C, W5 T5 G& A+ X3 c
  819.           else/ r1 R/ i0 ?5 b  M" K
  820.           {5 R% I1 i7 [* ~
  821.             if(!Dn.Connected())! `9 h6 Q" _: ]3 A# k
  822.             {2 J  g6 n. @0 F! c* g. J- j) e
  823.               bFirstUpdate=TRUE;/ I" {. g! U7 a7 I+ m- ~4 y
  824.               dwTotalFiles=1;2 ?+ O) \0 B$ _& d% m5 p7 D# L
  825.               dwDownLoaded=0;
    ) Q3 O3 i3 N! X1 r4 q$ n
  826.               bSilentStep=FALSE;
    2 R) Y; G. l' x8 X0 D
  827.               bCompressed=TRUE;/ C' e7 `8 ]( r/ y) Z$ i" N# A
  828.               strExtLocal=".\\DownLoad\";( H, K( V: x2 }$ J5 P
  829.               strFullName="update.txt";( I! e/ `! J& _- g
  830.               dwProgramState=AP_CONNECT;
    5 Y7 D- G/ A; V2 ~7 E
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: i# i# r8 w' p, q, Q% }* z
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & s0 w  y) D3 _% W% Y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");3 _% q8 r( g: s0 K$ l( N
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ C+ \( L: w% c% N0 u8 e/ D
  835.               unlink(".\\DownLoad\\checkversion.txt");
    , K# j+ k6 Z% h9 j
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    + N/ y3 Q. L0 k8 f: I2 g/ [( d
  837.               {
    8 }& N& J6 |  T4 N" ^: I  i
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");6 Q3 L% g9 i1 Z! o! a9 F0 K
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");$ G, j* H% g7 v1 N9 Y# ^
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    " v& A, O8 W! f& B! V0 v* h! i1 N
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; K3 k0 L: z( \& p+ i
  842.                 ' \, N6 A7 o# {. \: ]$ w$ D
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");0 g3 t- G/ f% z; M
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! \: J* ?6 R% A0 \. B2 g
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");! w. v5 p2 Q/ O$ \  {/ ?# t- w: C
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 n! _* [$ S* d- t
  847.               }
    ( a4 `) _5 v" N4 q! X% E" [
  848.               dwStartUpSteps=5;
    / F8 r3 m( D  _! R1 t
  849.             }
    ; V2 X- N* E5 l; ]
  850.           }' P! S/ \) C; l- m
  851.         }
    % U8 }& R# v% @4 |
  852.         else
    # r2 v, v' o7 C) D4 t
  853.         {$ ]9 Y+ ~% d: _- ~% d) Q
  854.           dwStartUpSteps=3;" l4 K% @( R! \6 f# D1 a7 R
  855.         }
    7 ?' m& {8 [$ l8 }8 u
  856.       }5 _' Z/ F/ `4 X2 N' K# h3 N* ~1 `
  857.       break;, a: _" F1 s" f& X
  858.     case 5:+ k& r3 t  f# r* ]; ~: t
  859.       {$ v* u/ w$ r. S. Q  Z$ Y
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ( v4 e# U& \$ D
  861.         {& F6 [* S9 o5 e) X- B+ T
  862.           int opt_overwrite=1;
    # X9 R. l6 f1 Q; g% N( G
  863.           int opt_do_extract_withoutpath=0;* x2 r0 M% G' m7 w! r# B, n
  864.           unzFile uf=NULL;  R; q2 G4 M% A$ x# S
  865. % @8 L6 V" s8 w" d) X4 O# T
  866.           uf=unzOpen("Wsa.zip");  B9 l" W8 G* N" |: [
  867.           if(uf)5 [8 J; u( m! j& `7 j2 U2 ^
  868.           {
    ( m  _& `' ?& {
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    & `( @3 W! [( y9 Y
  870.             unzClose(uf);2 E' Y" S' I. Q0 x
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");" p, |$ ]* D6 H
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    4 C! e4 H8 t  q- [6 B8 e- ?
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");* N: W. T7 Z& q7 f7 p
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 X* x  C6 B% N; j# O
  875.           }* [9 W8 v# A2 V( }. V$ W
  876.           DeleteFile("Wsa.zip" );& u& |) H1 u: t
  877.         }
    , b' i8 w" Q0 K7 D& |3 ?7 E" n$ G

  878. 1 E; t/ _( \7 j
  879.         if(CheckLocalVersion())7 _" t* E% W3 `. u
  880.         {7 \" i+ z0 f; }
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");' c6 K; ~  f" i. L5 y/ I7 e; `
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ! z2 K, f% x+ e9 e  n( o
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");* H  p( d# ]+ E3 H9 G, f& [
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 r5 h& _  F. T* Y
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);/ N, E; T) E, u. a! C8 W9 C! C
  886.           dwStartUpSteps=99;
    ! }8 P5 X1 N0 m' Z
  887.         }) k* n( P: B* c
  888.         else
    9 \( }7 f+ O3 d' T5 _
  889.         {# k7 M+ w5 m& a- F# _: I' ]
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");6 l( J$ {1 g/ D$ n+ Z) p9 d5 v2 f. _
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 O  s6 n5 c, H$ [% p, a
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");2 |& b6 z9 T$ a" o

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

3 z2 g5 k, l8 s0 Z- v& M) D- A4 V) i+ X8 d3 a2 F

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-10 20:06

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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