CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
, \9 G3 w$ p- x+ y' ?5 v
  1. / RevApp.cpp : Defines the class behaviors for the application.
    8 a& a8 L! e* k* t$ ]7 O
  2. //
    8 S/ S) m6 h+ i  l6 x

  3. " w  C' \/ y# P+ ?  y0 D2 r% j
  4. #include "stdafx.h"
    7 _7 S  i( l3 S0 E) `; V9 n. j/ C
  5. 0 Q- m) Z! a8 u9 L
  6. //#define UNICODE
    7 f6 v9 E3 w9 S1 e3 Z0 K
  7. //#include <gdiplus.h>
    . J" ]& O( e. ?7 s
  8. //using namespace Gdiplus;4 J9 L! x: Q* O4 x2 [8 U
  9. ( X7 d( L( V  U0 Z9 `
  10. #include "RevApp.h"
    + m( C7 H" u( Q: O! l  E9 p# \
  11. #include "RevAppDlg.h"
    " r: e5 y7 G! H: p& c/ L+ x

  12. 0 Z  M% @2 b+ C
  13. #pragma warning(disable:4786)
    / t1 [5 A- t, R' N2 k: A
  14. #include <map>
    4 ^  x9 [4 V( v! m( p" H8 b
  15. #include <list>9 ?/ o; G0 ?2 a# }8 @
  16. #include <direct.h>
    " N3 p$ F  }: E% V

  17. . K( m/ G; ], k& L, \; I
  18. #ifdef _DEBUG& d) }( M( Y5 Z" l
  19. #define new DEBUG_NEW1 H- r8 d1 s( j8 a' x, S5 F
  20. #undef THIS_FILE9 o6 W8 e# g( n' I$ [4 S! d' D
  21. static char THIS_FILE[] = __FILE__;- {% y' C7 n6 i2 D9 s) v. I& h
  22. #endif
    ) t, T4 D5 b8 G3 m; b
  23. #include "SkinResDef.h"
    ' Y6 Q& j$ z, C( j$ d
  24. #include "ChangeBG.h". a1 d% c) j; |+ i1 B* N. [
  25. #include "AFXINET.H"
    8 w6 q; q$ z' S
  26.   ?- I, O  `! g0 i! m
  27. #define TRADITIONAL_CHINESE 0# c; x4 k: ^0 t
  28. #define SIMPLIFY_CHINESE 1/ }8 p/ E9 k- q# v' S6 `6 H2 X
  29. #define ENGLISH 2
    ' [8 i8 q3 K  H' }; j
  30. int m_iLanguage = ENGLISH;
    2 M, q* `$ z0 C9 ?' P2 o2 k
  31. /////////////////////////////////////////////////////////////////////////////4 {$ D: o  }1 v3 T+ d
  32. // CRevAppApp
    1 u% ]: T( f" r. w
  33. - J2 ^& O9 ^1 X* M) X# [
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ) r' u" {# G" x
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ' ?- C( x7 _3 \9 ]
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    / Z, W( k+ N! w! {+ e; P
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!; t+ I2 T# @% F) {- {
  38.         //}}AFX_MSG
    . a' X: t- N+ J, F7 q: l- h
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    - S( z5 w! a" c" H$ v
  40. END_MESSAGE_MAP()* Y: ?+ R; h* G' d$ V& Z/ [1 g1 k3 D
  41. ( y5 @5 q( c; Y# `+ c5 {  M- k* _8 o+ l
  42. /////////////////////////////////////////////////////////////////////////////
    * C% ?5 x- M' C) a; f$ l) c
  43. // CRevAppApp construction
    ( i7 y( R+ D" [- s$ ^+ H/ S8 y$ x, B4 D
  44. ) T. e) s/ @% g& N* {7 l* [& S3 ~; `
  45. CRevAppApp::CRevAppApp()& ?% r) J# @) f( Y* ]* H
  46. {2 T$ L- M9 z$ t3 z7 _$ G
  47.         // TODO: add construction code here,  m' y7 r4 j0 m3 }; l: s0 w
  48.         // Place all significant initialization in InitInstance+ I, H2 {. k6 U/ \* W$ t
  49.   bDisplayIsBig5=FALSE;  N3 Y( E2 _& g" ?
  50.   bRestartUpdater=FALSE;
    & f1 D8 `% g& X9 G! ?8 _
  51.   bFinishUpdated=FALSE;
    " F$ ]/ b9 p1 h: G* I7 \0 v
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    / x; |  H$ r, `0 I
  53.   InitChangeDataBig52GBKS();$ T' U6 E! a+ V2 p0 p! A
  54.   InitChangeDataGBKS2Big5();1 B! y4 h9 Y$ R' R6 C9 w
  55.         //
    1 L! ]7 S8 ]# p. ~% B, C
  56.         bClickRunExe = FALSE;
    & ]0 \5 C3 B# G! L% g- c3 Q
  57.         //1 c  ?* s+ B) w" S1 T- A: y9 U
  58. }
    * @$ h% ^& X+ B$ n; |; V7 x

  59. 7 v' K! j& }1 k# V+ B- Y& O
  60. CRevAppApp::~CRevAppApp()
    / a  ?2 t1 D' r) o. S
  61. {: }& m- r! M/ H' r% C) l- x* ?
  62.         // TODO: add construction code here,
    3 F5 h0 E2 [+ u: x/ d' n* h
  63.         // Place all significant initialization in InitInstance- m6 k+ D) p7 O2 p- w/ z6 A6 h) j
  64.   EndChangeData();* c) H0 ]" y* g% N$ d6 |- n; v) Q
  65. }
    ' Q5 h7 U' W" B  w
  66. : [- H4 T0 h9 b  q+ C; z1 J
  67. /////////////////////////////////////////////////////////////////////////////
      M0 ^+ p2 @* Z6 w+ E. u" N1 g1 s2 \
  68. // The one and only CRevAppApp object
    4 q& E5 j, g8 \( s- s* X, Q
  69. ( {2 e) K( P2 C! r+ ^- ^) K. E
  70. CRevAppApp theApp;
    , P# r" `1 o3 q' Z

  71. 9 I( F3 u! ~" `/ V" |
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    4 {8 M" D/ z" _6 S; V% ~/ s8 f
  73. {
    " x0 g5 @" @/ ~8 x- n
  74.   int iEOF=0;
    : P2 H  `& X! Y! p: N# Q  U( o& F
  75.   char szTempName[MAX_PATH];# N0 X  F$ z( z5 J  R: T5 ]% L) A7 P
  76.   *szFileName=0;
    0 q7 K! C+ n: g; Z- i
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ' c0 L" F; W5 L
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')( f8 _& Q4 T$ @0 f, j# `- A% r2 Y
  79.   {! i) _0 ~5 W6 X4 {/ A1 J, x
  80.     strcpy(szFileName,&szTempName[1]);4 \/ y% W) ^$ g( r6 y& ^2 Q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ' @( N9 q% Q' ]# b' v; T4 ]
  82.     {8 s' g/ T2 E0 O% o/ d- _1 G
  83.       iEOF=fscanf(fp,"%s",szTempName);4 l) j1 E% W5 e0 C! C! B& [/ _
  84.       strcat(szFileName," ");
    . A6 u! Q, p( h9 e) W
  85.       strcat(szFileName,szTempName);
    6 E1 o- a4 Q7 z! t- b; \  Z
  86.     }
    $ K% v4 v4 n% Z2 j# }( c
  87.     if(strlen(szFileName)>=1)) ~: K3 ~: w0 W/ @5 i3 H
  88.     {& E/ l3 J7 |# [* V, c. Z; m# _0 x
  89.       szFileName[strlen(szFileName)-1]=0;  o8 a$ C, X' r, ~
  90.     }; G0 F& j+ n7 N9 L5 \) g7 a$ F
  91.   }
    6 i, X$ F. T2 \$ C! {
  92.   return szFileName;
    , S) T9 D4 }9 V5 o& {! |% S4 ~; ~
  93. }: X8 n% j3 q; C2 p* M3 V+ ?
  94. ) E/ W+ x) F* r0 d! T
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
      R, E( `0 [! I1 G
  96. {
    / d& y! p0 u( p, ]) Q4 W& h( l5 a. `
  97.   FILE *fp;! l' t* t$ I6 R+ @1 l5 ^
  98.   char *key=NULL;' T' Q1 X7 y, G* b
  99.   char version[MAX_PATH];
    ! o8 @. r; {3 w$ U) z
  100.   LPUPDATEFILE file,olds;( m; W& }; v7 V0 [% Y7 i3 i
  101.   std::map<CString,LPUPDATEFILE>::iterator p;/ D8 C* b4 G' h: e1 X% e

  102. ' b9 C# ]6 j. t3 S5 k* _7 d
  103.   UpdateList.clear();, G& U) A! k- r7 Z/ R  P
  104.   UpdateFile.clear();
    ' ^+ K) M# |8 J/ {
  105.   if(GetFileAttributes(filename)==-1) return false;
    9 r* V' f6 x( _$ \5 f, C! g
  106.   if(!(fp=fopen(filename,"r"))) return false;
    : I+ o3 i  U% ^% d6 e
  107.   fscanf(fp,"%s",version);
    3 b# J) |( ]7 ]% p* l& v! D. c
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }6 F9 m8 p' e4 x$ \
  109.   while(fscanf(fp,"%s",version)!=EOF)
    4 {7 f! |4 ~! Y/ N, B! A5 Z
  110.   {5 J3 A1 F" t* Y) T) W$ ^6 k4 `
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 |( y& R# M9 J+ T
  112.     fscanf(fp,"%s",file->path);- D4 Z$ o! z6 {6 g! l: M. h" o9 @+ i# }
  113.     ReadFileNames(fp,file->file);+ t) Q& t  [* \% _7 R6 s4 M
  114.     strcpy(file->full,".");  |& F1 V7 J2 {  ]
  115.     strcat(file->full,file->path);! e( F3 G( ^3 K1 M% T2 F; c
  116.     strcat(file->full,file->file);* @5 R6 z5 s# f/ ]7 z8 g9 C
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ! K2 F+ L4 O1 L5 X7 [' |
  118.     {
      H2 P  r! s; U# f8 j, c2 D; e
  119.       file->vers=(float)atof(version);- `! V) o( L2 f% ?) b  B/ j8 P
  120.       UpdateList.push_back(file->full);
    / s9 ~) U" E1 B9 Z2 z, K: X/ W
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));& b8 C7 p. \9 f/ e4 p: [
  122.     }
    " K! Q9 ~$ _" i" n+ b( ?: @  d
  123.     else% `- O' t$ `0 _0 ^) |" d, f
  124.     {( o9 p4 Q& f4 x
  125.       olds=(*p).second;
    7 l. N6 H9 G" [4 C" c) _) [
  126.       if(olds->vers<(float)atof(version))
    1 k0 K' u* i* P" m! n8 a
  127.       {
    2 x# Q4 G6 ^5 C* f
  128.         olds->vers=(float)atof(version);
    ) H$ P8 u4 K% }) l) i, |& {. {. n  `
  129.       }
    , A9 }; L* W2 V9 d1 Y4 z
  130.       free(file);
    ' I* Y& m" ?' I3 }7 v
  131.     }
    ) A  ]2 i6 I. R- [* r' G/ Q$ K
  132.   }
    / }: p6 M" C/ ^
  133.   fclose(fp);1 s$ E' r" A" ]7 O( R
  134.   return true;1 v% E0 k5 R$ _  V( V3 ?
  135. }
    " G. j  ^* p+ R" w) N2 p+ ]

  136. $ Z9 L4 p5 \! s
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    " B1 A- B% o/ {: s  L$ h& D- V1 R* i
  138. {8 @  x1 }( a' }: q
  139.   TCHAR  szFull[MAX_PATH];
    4 i9 I& l2 o3 R& B4 c; R
  140.   TCHAR *token,*inter;- X1 ]. i& H' y+ Z
  141.   *szPath=0;$ F1 s% w: E- o  {" k; z* Z* m
  142.   strcpy(szFull,szFullPath);
    ; }, ]/ B5 y  k& P! _- Q
  143.   token=strtok(szFull,"\\/");
      p8 l8 O: g( j* ^
  144.   inter=token;8 z' i4 D, u7 }
  145.   while(token=strtok(NULL,"\\/"))
    1 K) H& a) j# M
  146.   {+ P. Z4 q. s, r  b" y7 G& y
  147.     strcat(szPath,inter);
    9 O0 Y5 Y3 a* ^: s* b3 N
  148.     strcat(szPath,"\");
    % ?. W, V* q3 b* h4 h7 L
  149.     inter=token;
    7 z% E+ i  C) F- C3 W" n3 e
  150.   }$ F7 n7 Y0 Q2 L5 v% _3 t1 T! V
  151.   return strlen(szPath);
    $ h/ H0 x2 N# Q' G
  152. }) n% N4 F* f3 g4 c
  153. 8 Q5 G+ [* Y* x/ }- E, u: [
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase). l8 p$ M  P) Z7 g: d! e
  155. {; r( \/ G7 @  i$ g3 _8 x
  156.   DWORD attrib=GetFileAttributes(Target);1 y# r( w4 g$ \$ F2 G, K
  157.   if(attrib!=-1)
    5 F3 i+ J9 d5 N  V9 t
  158.   {6 s  E, t# W3 k  I8 t* i
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    8 n# @, d4 M% I9 m/ |1 M5 }
  160.     {
    8 P0 z" r$ b! e5 m# R) e
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    6 w- f7 t# Z1 J1 g
  162.       SetFileAttributes(Target,attrib);. d/ F  B. n+ M2 k: a  _3 R
  163.     }( r2 p; Q6 f& f! v" o. `0 b; S( R
  164.   }
    2 c* \3 w5 i4 E/ G, d) m
  165.   CopyFile(Source,Target,Erase);
    ! d+ @# s  y+ t1 E+ i0 S$ Q
  166. }
    $ E5 v  y: ?- m$ G% F
  167. 4 U0 e' ]9 |- F7 Y. v
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)' h  y: x& J, F  ^1 B1 e% {
  169. {+ x" A& h2 S0 l
  170.      FILE *fp;1 D) v" W/ o* w+ h* y
  171.      char  szBuffer[8192];5 {9 h! f: ?" `. V
  172.   va_list  argptr;
    ' C0 x! n1 z- A! u* z$ \: B8 l

  173. 2 H' I1 ]3 y5 p  B: m5 `
  174.         va_start(argptr,message);
    + L" S) f+ Z) s: x
  175.         vsprintf(szBuffer,message,argptr);3 H. Z4 _1 R4 U2 Q7 D) M
  176.         va_end(argptr);+ N: S0 c6 h; \2 z% V
  177.   fp=fopen(FileName,"a");
    3 U' S: C5 a4 X) _3 A) Q; W
  178.   if(fp)
    9 U# t! p3 d  v# p/ c; f+ J+ [
  179.   {
    ' ^3 ]; l& C1 c+ c
  180.     fprintf(fp,szBuffer);
    1 t3 `9 {  u% V+ B# N( v& _4 X
  181.     fclose(fp);2 i; T6 S* y+ H+ [* z
  182.           _flushall();" [) f( h, L/ k2 I- A, {
  183.   }
    0 p3 c: [  I! `1 K$ I% b
  184. }+ n$ a  t6 h4 U0 l/ N
  185. 5 {9 w" j! a2 |1 p$ o8 ~
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / A& F+ @3 Z" Z9 z+ v
  187. {
    $ \# U# l8 C+ X$ W: `- w
  188.      FILE *fp;
    / j6 B3 S& A2 ~4 U- L  H
  189.     DWORD  attrib;: F& X. f9 [6 E* E% a
  190.   attrib=GetFileAttributes(FileName);
    5 V. U* Y/ U0 X
  191.   if(attrib!=-1)6 ?$ o" E3 v6 L, Z7 y/ s2 r4 ~4 T
  192.   {
    / k2 P% q) H) ]8 H
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);& d1 Y0 y. k9 r4 c: Z
  194.     if(!SetFileAttributes(FileName,attrib)); l+ A( G# c& R. s1 m" r
  195.     {
      ]6 c; s# M( N5 F9 O- z* y. d
  196.       return FALSE;
    . I# b: W3 h! ~* i, Y9 p+ E+ e
  197.     }3 f  ?' ~8 J; C6 P1 Z  S
  198.   }
    & Q7 `, ^$ N) D$ e
  199.   fp=fopen(FileName,"wb");
    * K# O/ M. E. B) {1 |
  200.   if(fp)
    % t  R& C7 j5 u; q
  201.   {0 c  C. o) n8 K' E1 F" j
  202.     fclose(fp);  b/ B; R& t4 q# p
  203.   }
    0 ~7 E: z# x4 J6 l. H$ u
  204.   return TRUE;
    ) _' P) ~+ X) E, L4 r4 r4 e
  205. }
    * ]* t3 K5 B- i+ Y; x4 g2 r
  206. ' {5 Z) l  F; p6 W/ Z+ p
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    & N" p, T) b# o; M) ?0 I
  208. {+ F% U& _' q6 S2 m" A& U& I
  209.   char filename[MAX_PATH];' _9 O. A- L: d8 V2 Q7 {& I
  210.   LPUPDATEFILE file,olds;
    0 O, U3 Q% d( n+ `! |* {
  211.   std::map<int,CString>::iterator i;
    - I9 x) v, q+ g% T2 N
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    " s8 |4 |3 O' B* A7 \( E8 I' J
  213.   std::list<CString>::iterator l;
      l# Y% }* Z0 f+ ]! B2 d) D- b

  214. 7 ]; U2 @6 {' {
  215.   if(bFirstUpdate), H6 d7 {# T4 `4 b0 ?3 H
  216.   {
    ; L0 y' d3 N6 y7 H& g- o* C
  217.     dwCurrFile=0;7 c" J; s0 t! w: L8 X. O: a0 V
  218.     bFirstUpdate=FALSE;9 S9 L. C3 B" j) P! P
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 A9 G/ x/ F3 j& ~$ m5 y* @+ q
  220.     {" ?0 O* n; b% P$ V
  221.       dwTotalFiles=UpdateLocal.size();
    " v0 {" y, o& T/ N& n+ u. E  {
  222.       dwDownLoaded=0;
    # O# y) g: z$ O1 k; c* z% ?
  223.       bSilentStep=FALSE;5 B& L4 I! c, J3 n4 A# T
  224.       bCompressed=TRUE;; x/ f$ x. h) E" i
  225.       strExtLocal.Empty();
    + M& p# e9 j0 J8 }$ Z
  226.       strFullName=(*i).second;6 g1 h5 v: u6 N9 E* y
  227.       dwProgramState=AP_CONNECT;) z8 J& ~/ t" P
  228.       return TRUE;* [* ?3 F8 d" r2 E' [* c1 O
  229.     }9 u% N- t; N% q/ }, P6 j
  230.   }  t, L* x! r5 b$ h* t( Q  V4 Y9 e
  231.   else if(bRestartUpdater==FALSE)& k& P2 u+ X% N. _5 u) e
  232.   {
    - }% ?, T/ h0 g
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ) D- U. ~* d0 c7 M! V! ?
  234.     {
    ) I. G; b4 z) z# _. }7 R
  235.       file=(*p).second;
    5 E7 [' a: e) {) v
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())4 U% u* {( K1 w- H0 V
  237.       {8 R  Z$ ^! u1 Y9 b
  238.         olds=(*p).second;. c2 P: {3 i  Z" S7 i( O, e" ~
  239.         olds->vers=file->vers;
    " Z/ m$ M% f, h7 T' W
  240.       }% }. U- G6 q: o6 c
  241.       else
      p8 A$ U" e5 Y# x; i
  242.       {, z1 y6 g; P+ @4 x% N
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ g. a5 ^& _9 B4 p! S
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    3 d& Z: O& V  n7 k* @. R% [
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 e8 Z( B' k2 `1 z+ \* o
  246.       }
    ) T8 e  t- w/ g! j7 ]' G
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");5 i6 U. h! T* Z8 Y6 q7 Z; n6 q, C
  248.       sprintf(filename,"(%s)",file->file);
    ! ?, N2 m5 q) ~: ^2 ?  J0 D/ o+ v
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # w( ?- E% \; t) ?& R1 u; [
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 |: F1 S; I$ p% V4 ^4 {
  251.     }4 L/ W% @8 J9 r" ~. t. v
  252.     dwCurrFile++;7 X" d$ ~9 A& k9 h* g2 [/ d5 [7 ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ \7 ?8 O: B9 ~' s% x
  254.     {, q0 R8 ]$ Y/ s$ f
  255.       bSilentStep=FALSE;/ `" I% U( o% E  L
  256.       bCompressed=TRUE;. r6 d/ v5 \' e4 d
  257.       strExtLocal.Empty();
    1 q) A) N# s2 z+ C  T, |
  258.       strFullName=(*i).second;, f; {: I- t+ B/ g( ]' D
  259.       dwProgramState=AP_CONNECT;
    7 `: m: ?5 I+ B0 L- a2 H
  260.       return TRUE;
      n3 c2 ?$ {1 o- Z, |9 F/ W4 S
  261.     }0 Q! {: k5 K, C3 L, ^
  262.     if(!bRestartUpdater)" W. Q- E9 a1 [2 Y: G% n: g
  263.     {$ L0 X: t! [5 B+ r* ?! K+ P
  264.       int iCurrSize,iFileSize;
    ! r! h! M; ~8 D4 ?6 w
  265.       iCurrSize=0;& d" V3 q  E; C( P/ h1 s2 h% {
  266.       iFileSize=UpdateList2.size();
    - K* W/ e: F) a  e3 r
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");+ h4 u4 ?2 ^6 N
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");, u; B  o. q9 t
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    1 f' p! J! M# z+ e5 P
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# i9 I2 ]- ]5 e  u6 p5 {1 R
  271.       Fclearf(".\\update.dat");
    ! u5 \2 H$ l4 y& e" ?
  272.       Fprintf(".\\update.dat","Bloodyf\n");* y8 v* h# W! g
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 Z6 z7 u; H5 ?) T$ ~
  274.       {" @8 B8 m$ ^2 b& x$ K2 L" W
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    & t: l4 T3 R$ h2 i4 i" Y/ x6 n
  276.         {0 w# d; F5 o/ ^; W/ m8 P
  277.           file=(*p).second;
    & _9 A, a1 ]/ T/ Q: S
  278.           sprintf(filename,"(%s)",file->file);
    . y! V2 }$ ?4 q3 G
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * P/ l; e: b! e- ^$ }' R$ N' ]
  280.           iCurrSize++;% l: L+ ^, Y, Y5 \, u
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));/ A" y' `; z# F
  282.         }
    # m  x3 L0 _" J2 q& G
  283.       }
    . N6 Y5 p5 t2 s' U% F
  284.       unlink(".\\update.txt");
    5 U9 {7 U, t* g3 E, P) P% j* s0 p
  285.       unlink(".\\update.tmp");
    * d" o! r2 e0 b( _) z% O0 w# p
  286.       Fclearf(".\\checkversion.dat");/ m! m$ O4 w! ^/ G; c
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( c+ V" B' i2 @3 P
  288.       if(UpdateLocal.size())
    6 b; W" ]% W; p( D$ P. m: C2 w1 ]
  289.       {
    0 o! Z; m4 ~7 r
  290.         UpdateLocal.clear();" w& F$ Y* G  N6 \' H
  291.       }
    0 l. d0 ]/ P6 v+ m- G
  292.       if(UpdateFile3.size()); G6 m2 z" M) l# J
  293.       {3 E! O" e( D$ m- |* z' @8 f! i% L9 }
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ U+ \: Z2 L& r- h. Q
  295.         {
    0 X+ |/ N: I" g
  296.           file=(*p).second;
    " E" L) x( M" ~3 @3 v7 k# |6 p2 ~& H
  297.           free(file);. {2 F+ ^/ s- p6 }* X4 g3 w2 ~
  298.         }" m3 _! x4 M& |  e. Y: F8 c+ F
  299.         UpdateFile3.clear();8 }9 s3 z! |: i: H6 _' h$ p# M% f
  300.         UpdateList3.clear();0 q/ I" A% _& v; h$ w7 h' ?
  301.       }4 e2 Y4 l" L& y7 U
  302.       if(UpdateFile2.size()); R# }' E; n- t# y' \- S7 ]
  303.       {
    # k$ l; v+ R3 a+ k5 n! H% [; x& Y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- W  k' n, M" X* |8 j
  305.         {
    ) O% s- ^4 v8 j" G
  306.           file=(*p).second;
    $ P  ?5 R/ a$ a8 H' t! a5 o
  307.           free(file);
    9 |. G4 V0 J, |$ J: G* o- _+ [9 ?
  308.         }9 e* G2 [  W# ]+ V* z5 z
  309.         UpdateFile2.clear();
    . U) Z9 T, q. z# _- T" y2 x
  310.         UpdateList2.clear();" J1 z! P( F" i& E- M: H# E
  311.       }
    2 U* w& ?" Z- N; [3 h
  312.       if(UpdateFile1.size())
      R: N% e/ d& C  w/ [5 c( |2 {
  313.       {
    6 S) C0 b+ B3 ?! N' |
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- t: V; M; Q; v' _
  315.         {" D$ c8 h/ v5 F7 V' i2 `0 h$ [
  316.           file=(*p).second;
    ; m0 b1 n+ u( O9 ~6 n, }" B
  317.           free(file);1 j! H" L0 J3 W2 C% v! y
  318.         }
    ! R) N3 e9 B, {5 E+ K
  319.         UpdateFile1.clear();
    2 D( u& ^' V* l( P6 j
  320.         UpdateList1.clear();
    ! r. ?, J, B( k2 {+ k
  321.       }
    0 E8 p% h& j, E+ {- M
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! c: b! }% }8 U* c8 a; o
  323.     }
    9 Q2 o  m! Y& T
  324.   }5 x; O# E9 X4 I' D( D
  325.   return FALSE;
    - y# _9 K' k% `9 O
  326. }' f1 U% @/ h- v$ e, d
  327. . x* I3 _( W: Z* Q: E: U, M
  328. void CRevAppApp::ClearAll(void)6 a  P0 k# N4 n& O( V% y1 g5 Y  S
  329. {
    + ^' v4 u2 Z- [& _( G
  330.   LPUPDATEFILE file;
    4 R5 ^" y/ T6 Y4 c
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% c0 O" i) m8 I

  332. 9 b+ g8 d7 m  Z0 A8 j2 S3 }
  333.   if(UpdateLocal.size())
    - {" W; V' j7 _4 J3 e6 S# {
  334.   {
    8 `1 ~0 P. I4 a7 g9 C4 F
  335.     UpdateLocal.clear();8 o* j8 t' R8 T8 I1 H+ V
  336.   }$ ^! r+ b$ z( U% {4 D6 M9 F
  337.   if(UpdateFile3.size())
    6 f3 Y& Q7 w* u8 e
  338.   {
    & T5 c* n# j- B
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % p; Y0 ~! a( {
  340.     {
    5 f/ b" A- _$ k( l% n: J; H
  341.       file=(*p).second;% T* H. k4 E* @4 p8 K7 S- k
  342.       free(file);
    ) U1 Z  Q  }* D$ J# ?  `
  343.     }
    ! t1 W1 g3 }: C# D% r2 J
  344.     UpdateFile3.clear();
    , m" g0 t+ L; F, Z; q0 A
  345.     UpdateList3.clear();
    & |; d' m# a, t9 U) u5 p" v
  346.   }
    # i0 Q/ X# B4 G* ^
  347.   if(UpdateFile2.size())
    ! W6 q, {3 z& R. v: a% [
  348.   {1 u( J* y- O5 [+ Y/ U  e8 H1 q$ K
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 u5 w# h# l  j. C' y( `5 N
  350.     {5 c) e5 J, w2 v. g
  351.       file=(*p).second;# t- [. ]% J; z; J: f5 V! j
  352.       free(file);
    8 a% C) e( {" F4 ~; r
  353.     }: ~5 C9 i8 \4 P- z; ]
  354.     UpdateFile2.clear();# S: q& |& @5 b1 B6 r
  355.     UpdateList2.clear();$ L- M% L0 h+ n6 I0 d) p
  356.   }. ^  Y; @6 W1 a  }2 ?
  357.   if(UpdateFile1.size())
    ! a% E9 ]% ~4 B' i5 r
  358.   {' K; W, }" e% t# _
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( m! h- u" Q' r& i; M
  360.     {
    $ b( J. C& U; ^
  361.       file=(*p).second;
    6 [& l+ ~# k' C. g; u5 o# F
  362.       free(file);
    , J& c1 T+ S- u  R
  363.     }1 v& D: n' T0 J
  364.     UpdateFile1.clear();+ j1 z2 C7 @& _3 x% U
  365.     UpdateList1.clear();
    $ }) h$ c* r$ {6 @
  366.   }
    4 D8 A: Z1 j8 ^. K# K
  367. }  
    & c$ G; [' w2 F5 d+ _5 H! O) s. _' M
  368.   
    7 ]1 \) f. [; N0 n
  369. BOOL CRevAppApp::CheckLocalVersion(void)! k% L* G8 [+ P
  370. {
    * s' \: Z: [; B9 [- J4 ^' d
  371.   int c;. A  X1 G3 a" q% N4 Z* S) y/ f" y
  372.   LPUPDATEFILE file1,file2;+ _6 T3 R& G5 U
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;9 T7 t7 J' w; u, ]8 U9 ^
  374.   std::list<CString>::iterator l;
    . d0 D4 @, w7 y4 \+ l6 [6 K, G4 J

  375. + E/ S8 N/ L9 P' l! Q
  376.   UpdateLocal.clear();8 ~; k2 T& N; u" {5 p7 k
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    & c5 f, K9 o- n# [4 D7 q3 V
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + T5 D5 M. Z  O3 }- }/ p8 }/ F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    8 g* C4 U* w$ v" U
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);# q) |- b; J0 u
  381.   if(UpdateFile3.size())  e- U, x4 [4 O& D
  382.   {
    ) b, n3 o3 k/ x  r9 k+ A$ I! _2 }
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ; l1 S/ i% [/ h* s- ?' I8 B
  384.     {
    ' h, f2 H3 c9 z: {% _8 z
  385.       file2=(LPUPDATEFILE)(*i).second;- k- ?1 n5 M3 V- U/ z' H4 }
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    , p# O2 ~( Z8 H6 F" v
  387.       {1 z+ I. M7 u% ~$ I
  388.         file1=(LPUPDATEFILE)(*p).second;
    * d& s; e8 q2 ]5 z: y
  389.         file1->vers=file2->vers;* Y/ i; b; t3 F8 g( M/ N# k4 E/ g) N
  390.       }0 c+ I3 s" \! p; `. v% p
  391.       else
    3 b8 f$ Q! B* G; R3 J5 Z
  392.       {
    ( R* G. E# Z& d7 e' [6 l
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 G8 m8 f2 K0 E1 ^1 a  z4 f# p
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    $ J4 `/ S2 q5 @, F$ K- g
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));- C# x; J; R3 [
  396.       }. y+ s, ]9 V  N3 M, z2 \1 w# C/ I
  397.     }9 t7 ~& M0 c3 H7 C% b
  398.   }
    " z- r, f0 e4 n5 l! e
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 l& j( z& K) N) W* [9 b
  400.   {
    . l; G  z( k; F- Q" Q4 T
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())5 V, \. ]8 m- ^, f( D1 H
  402.     {" d7 S; `8 m5 C  ~. K  R+ a
  403.       file2=(LPUPDATEFILE)(*i).second;: G4 e, G2 u# W
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% I/ d! l/ K* P+ r1 ?3 `& ?
  405.       {6 |4 }* Q, K: f  X4 J3 T) f% P9 n: O
  406.         file1=(LPUPDATEFILE)(*p).second;6 j: ?1 N* K; ]+ W1 F
  407.         if(file1->vers!=file2->vers)( r& [" N, q+ M9 U- [( Z
  408.         {1 K: a0 B& L5 y6 _
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( s& r% q( T! p% t' C
  410.           c++;
    & ^4 @3 _" Z+ t% x, C
  411.         }/ c1 ^. _; q8 P  q- v
  412.       }, M( A& O2 k5 ]; @# S, a9 N
  413.       else
    3 [2 {/ I, ~+ n' `) w4 t$ \
  414.       {4 m# F! i* f8 O) a3 m  d' U
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% r! {" v/ R3 K% g( M4 j. K5 E
  416.         c++;, z) C2 h0 G! a- `7 A  |
  417.       }9 z( u7 f. V+ ^7 N; h% z; i
  418.     }/ g/ r; Z% ~  y- P
  419.   }2 m5 x1 {, S) X7 F# ]
  420.   unlink(".\\DownLoad\\update.txt");
    , V; ?. n& G4 E* i7 x6 j! m8 |
  421.   if(UpdateLocal.size()) return TRUE;1 q3 b% y6 G& |" {& R- W. c
  422.   else                   return FALSE;2 p+ |( N, U' R2 {
  423. }, m5 C( k; M4 A: Q- p
  424. ( d5 \& k3 f7 I/ P" L9 G" N
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    7 d: l( V; ~. v0 }
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' s/ e1 f# Y5 g& k' ~5 O

  427. - P" z) V. l2 t* ~
  428. $ p( X& E/ L' x3 ^

  429. & J' G% @/ z" D: \3 F
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    3 `/ J" _5 H' D9 {5 X1 O
  431. {
    8 R2 x( B3 S: U( d
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;2 D* Y- s& w# k" ^/ J5 a
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% k( Y% D( V! C6 J% H) ^$ x3 R
  434.   {
    3 {  k* s9 `+ f3 _) e5 J
  435.     char szLanguage[50];7 |" w7 k! f/ B6 t
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * ~2 U3 Q' T$ J  Q. n8 G
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . M& O2 m! k- h& ~9 h& [
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! X$ j: Z  p' X$ ]
  439.     else                                   m_iLanguage=ENGLISH;7 }2 r5 a/ h( s, X2 E
  440.     char szRegister[100];3 ?3 v2 Z( d& c
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  y" S% A4 c% Q/ Z% a  V5 S) r
  442.     strRegsName=szRegister;
    ! b! V% O9 S/ ~
  443.     char szPatchURL[100];+ ]3 l) q9 z. b: {3 B7 h% M9 ?$ G
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % [: n1 w$ ~4 }  M& ?/ z  M
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ; T1 ~4 P  w, F* i! z$ `" L5 t
  446.   }$ R* [! ^8 O+ m* t8 ~
  447.   else
    ( }1 B# D8 F, w7 J/ s" M9 z. U) N
  448.   {2 c8 R/ N7 t/ G) I& c. q3 ]
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ {  M$ ?6 H, S! j
  450.     strRegsName=DEFAULT_REG_URL;
    8 x; x' M" u! i5 H8 Y( H+ K
  451.   }$ Q" z! v( F1 G0 |& n/ ^
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    $ L; N/ w& N' i: w5 c5 x
  453.   {# u( p* i( N/ I8 Y; t* n1 }
  454.     char szIP[50];2 U% D9 G3 J7 g7 |& H
  455.     char szDIR[300];% Y3 c7 ^* e1 \; r  K
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))0 B' ?: S8 ~2 E0 a6 h, G: i: T
  457.     {3 U9 l: l% A6 ?- C; ~/ s1 W5 P* {
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    0 }) H% ]- X4 c) q% |9 ^0 p
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    6 m) O: l! j% u+ c2 n( v
  460.       strHostName=szIP;
    6 o% N7 @9 R) ^) \( V2 ~* k9 F+ a
  461.       strHostPath.Format("/%s",szDIR);
    8 L0 g+ o& U4 Z0 \6 r' z
  462.     }" J4 F2 |! H" v: w( d
  463.     else
    $ P( X. p/ a/ M
  464.     {. Z+ V) v& K* g% T
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 o8 C$ D# e8 ~9 H* P8 B9 P( r" O
  466.       {, p1 c, s3 b% H, y+ n
  467.         char szLanguage[50];+ N6 U0 V+ x6 |+ i; I$ \: B
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; E6 u9 W# n0 A0 y& {7 Q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;5 l1 V' L7 i, E7 Z. J
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % K! g3 O) G2 M! h
  471.         else                                   m_iLanguage=ENGLISH;
    # J* L8 u- t5 w
  472.         char szRegister[100];
    $ M: c7 \4 o! A. t% v
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' |  y9 w4 S$ q0 Z5 [5 D
  474.         strRegsName=szRegister;( L. {$ V6 G' L7 q- s& c
  475.         char szPatchURL[100];. I9 ?8 W. h$ ~8 g* a; C
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");, N6 y- i* n  [3 v% w9 w7 m
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! _2 D: z/ r( C; }; C" h, z0 v
  478.       }' |5 _- V8 ^3 z4 K$ m; U
  479.       else
    4 J' s; p  K1 |) T4 H" P5 j
  480.       {
    3 J8 n4 }4 v. N9 m! R$ q0 N. J- Y
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 {' y0 d' d& O$ S
  482.         strRegsName=DEFAULT_REG_URL;
    . _1 J  l, q# e8 D8 n$ I( K, L5 p
  483.       }. f+ T6 V4 ^- B
  484.     }& \, K9 f% X0 n: R7 Q5 Z( H
  485.   }
    5 W" o0 J' j9 S9 K% T% B0 y
  486.   return true;
    ' |' T5 ]/ f9 Q" Q9 Y# D
  487. }3 Y' ^) v: l- Q

  488. 6 n# v2 I3 v$ D& \+ T' q
  489. #include ".\ZLib\unzip.h"5 f0 z$ o5 q/ R( h
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    3 I* S9 q! G3 W4 U
  491. /////////////////////////////////////////////////////////////////////////////9 I/ E3 ?. I3 g3 w$ o8 m4 g% f' @
  492. // CRevAppApp initialization
    7 A6 F+ ?  k1 x6 }$ Y2 |
  493. $ s, y4 }9 }  X* \, s9 a
  494. BOOL CRevAppApp::InitInstance()* _- j6 @- d, S: A, ?" i$ x( `
  495. {: b% f3 I4 \3 g! L. k/ p" ^/ |
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];3 }: r' e/ a) `( {( h6 D/ ]

  497. $ p$ [* a5 I7 V- U# A. I
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);0 i, J% K; Y5 g" Q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
      w& k' S4 \, c. A0 E( t" l9 D, T
  500.   {
    8 h, ~, G. R$ D; L
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! j: f9 ^( n  _" T1 P
  502.     GetPathFromFullPath(szPathTarget,szPathSource);8 G$ c) l; a1 I, W
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))3 o$ ^# O. [; Q) F* _$ c
  504.     {8 k: u( U9 m% L4 P
  505.       strcpy(szPath,szPathTarget);
    ; T7 D- G" ?) d! `4 t* O9 b) [0 Y
  506.       SetCurrentDirectory(szPath);
    ( U. ^5 @+ X+ u. t9 C
  507.     }$ K( K8 [+ d. V7 H/ Q
  508.   }
    5 i) M* {& j2 k9 A2 [, M. K
  509. #ifdef _DEBUG5 p. R: K3 L* M4 H9 z$ @$ U, l5 M
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 u" U! V+ \3 Q7 P
  511. #else0 g6 M$ b( T$ p; \: A4 l: H3 G6 }
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 Y& ?, |+ a9 f5 ?2 m# d; n2 i
  513. #endif4 t- v0 e2 ?. @( F) Z
  514.   {
    " L/ T5 Q$ K  S( n$ P, y
  515.     char tempFileName[MAX_PATH];& C$ Z! ~2 T% }2 F) @* g* q- ^
  516.     strcpy(tempFileName,szPathSource);
    . [. i& m; ?# P
  517.     tempFileName[strlen(szPathSource)-12]=0;
    & \1 U' p  ?; c  @5 L! d
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    - I0 o5 z1 N. j3 r
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);" l5 {$ j4 d* ^4 ^8 P( g6 x
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    3 R# k  D4 l; L0 ~8 ^+ ~
  521.     return TRUE;
    : [. P$ V1 B" [1 T$ K1 X- u' r
  522.   }6 M  S' P4 r( }) S
  523.   // Nuke 0118: Delete run.exe
    ( D  l6 O% W- ]  t$ _9 l
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    5 D  ?2 ~: \8 L, A% o8 U/ C
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");, f$ X+ X9 m' t
  526.   if(!ReadCfgFile("Config.ini"))( Y" }; n2 D( y) a2 g5 \
  527.   {* E7 l5 u% z+ _, j! z8 t3 u
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    + r( \# m6 A. u5 v1 M4 o
  529.     return TRUE;
    7 L* a2 q) R5 a
  530.   }3 E9 p) N( Z: Y
  531.   HANDLE mutex;
    . q% @, ~" K6 d6 n
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
      a% Q$ t& }! ?7 x0 [2 b  e* H$ |
  533.   {. h. Z/ V# V$ u! w
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)/ b5 A7 h  z3 T2 P* }  d7 q
  535.     {
    3 l0 _3 Y' c) r3 E" g
  536.       CloseHandle(mutex);
    ) N2 j  d; o( Y  t
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);7 }' I- K# b% Q& D9 z& u% [
  538.       return TRUE;9 b8 k2 t+ u2 z9 [
  539.     }8 y7 e' i! h& W; ~' c
  540.   }  
    + g) V% c9 Q% Z% Y% F/ b. |
  541.   CloseHandle(mutex);4 A* \5 q1 Y0 `$ q

  542. 5 c3 |- _. L3 y2 S* f# K
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    4 E/ t- Y) c% ^; u% Z
  544. 3 p! w7 e: l% T* H2 I  X: h6 V4 u$ x+ d7 d* C
  545.         AfxEnableControlContainer();6 U6 S8 M5 `# @# }( f

  546. + {1 G7 N2 [9 R7 R& E
  547.   bCanUpdate=FALSE;
    - z( r) j( J6 w3 Y$ G9 N1 {" n
  548.   dwStartUpSteps=1;
    4 b/ \5 i2 Y2 p9 T, @
  549.   dwProgramState=AP_NOTHING;0 c* G6 {+ e% k" W: `
  550. & j  E* `4 {# e2 a1 O
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);: b# t. k6 w+ k$ G: O4 E  \5 @; w
  552. 8 }! {% I7 l5 m1 {& b, [
  553.         // Standard initialization! C7 ^! J. u* k. G  r
  554.         // If you are not using these features and wish to reduce the size
    + ?% v! i8 T, j" C; Q4 R7 B
  555.         //  of your final executable, you should remove from the following$ D3 \* K/ Y8 p) {2 e6 x6 I- j
  556.         //  the specific initialization routines you do not need.9 x# v8 J, i* c7 }, ]7 X9 y

  557. 7 ~* [+ L5 O. x
  558. #ifdef _AFXDLL8 W3 U7 S+ E) S! M
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL* @! ]. K9 k4 n0 X
  560. #else; G" f! D2 a) d
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically. ]4 h9 D1 l  Y
  562. #endif
    1 i9 r+ x0 d: e) Q7 @  _' K6 z- }: V5 V
  563. 8 U& B2 P& D$ ~: J. ?! {1 L% t
  564.   dlg=new CRevAppDlg;
    4 G. g' r4 f) J$ D5 l
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    6 n/ _# x/ i" S5 O
  566.   dlg->ShowWindow(SW_SHOWNORMAL);$ C1 n& o. |& z0 d1 X! D1 ]
  567.   m_pMainWnd=dlg;$ x% f6 A0 P1 ~' z0 `! b$ g
  568. . k" B) Y9 h" J- H' y- Z* t
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    / S1 a" a1 a6 a( H1 Q

  570. 4 j+ l2 g( h! |9 d" K
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ) N6 K1 F' X8 |+ m# X- `
  572. //  ULONG_PTR gdiplusToken;
    0 w9 d7 b# n1 K3 B- ], O3 [
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);. U( d# S) v6 Y' Z- i: B: L% U

  574. - ~! l' M: @  |: z/ k" @
  575. //        CRevAppDlg dlg;) H7 M1 r9 I4 W7 k
  576. //        int nResponse = dlg.DoModal();
    3 ?; ], v- I( C5 U
  577. //        if (nResponse == IDOK), ?7 h8 t: \) e9 u, j% p  X
  578. //        {
    - ?. f$ e/ V/ X6 e2 i  l8 u( c
  579. //                // TODO: Place code here to handle when the dialog is) z! ^# x/ h$ U/ B  H. A. j
  580. //                //  dismissed with OK
    0 u8 |. R# F. U) g5 G& [
  581. //        }
    / ^1 n1 A! p. u
  582. //        else if (nResponse == IDCANCEL)
    ! B6 Z0 n4 B* Z  p" b
  583. //        {
    4 Y+ [. A6 r2 w" O! @. f
  584. //                // TODO: Place code here to handle when the dialog is/ M$ B; V- F2 Y' ^  O: ?
  585. //                //  dismissed with Cancel# \6 F6 b% T4 ]; `- b
  586. //        }9 J& T. O* S( n* s. J9 m+ |
  587. & z- C2 l/ V2 }+ r: E! z
  588.         // Since the dialog has been closed, return FALSE so that we exit the& Z8 @5 E7 `/ H4 B: Y
  589.         //  application, rather than start the application's message pump., O; F3 D7 I0 W& {$ a
  590.         return TRUE;
    + w6 k9 n' J- N+ P$ g8 m
  591. }
    % j2 d" B  Y3 a' \; r
  592. ! \- C6 V+ e( }5 p+ q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    , g) H# V% c4 J7 [& e6 ^! T
  594. {8 e! J+ ~0 b$ M3 Z1 S+ Q* S# m/ C2 @
  595.   int i;% m5 S$ e/ j1 [. @: ]4 W9 j0 K
  596.   char *szRet;
    # H) n% P0 K: X6 x- F& }

  597. ( ^: i" B* b9 A7 d
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    1 a. {1 j$ x/ k" [+ h
  599.   if(sztoken)
    ) e) L8 [& O5 s2 |' S
  600.   {
    ) R; a2 n4 D4 W( |) L. ~- L
  601.     szRet=&sztoken[itoken];
    * @1 ~7 F) M" P7 b$ Z# I& F2 E& p
  602.     while(sztoken[itoken])
    % \- }8 i5 t% `& V, g7 }' |2 g
  603.     {! m3 F' |. Q  {8 R' m& V$ Q
  604.       for(i=0;i<(int)strlen(token);i++)
    & u# J3 y8 h& A/ h( Q0 x
  605.       {; b* B, P3 ~4 j  V* c& m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])" |& h, x" o4 K. y% m' t: B
  607.         {, U- q: r% z4 l9 ]5 |
  608.           sztoken[itoken++]=0;
    ) \3 S" }5 n) i" X: j: l
  609.           sztoken[itoken++]=0;
    0 @: s# ]# V6 a
  610.           return szRet;
    ' H& [. {& h# ?+ u
  611.         }) p# ?" w) y3 H+ b9 t
  612.       }) g( x' V+ [) e% w
  613.       itoken++;: {) D7 B2 ~, J+ S- d: ?+ T0 \4 D
  614.     }
      ?2 Q4 e* I1 {5 z( W
  615.   }
    3 K/ c" x7 [/ s/ Q. o, F
  616.   return NULL;
    ; _4 _+ J/ n( e7 A9 v
  617. }
    ) B9 {+ `. E( s* D2 t. h7 Z, X

  618. : k" m! c: J/ K- b$ e$ n6 B. x1 [
  619. void ProcessProc(long Total,long Current)3 E. V: w5 C# U6 a# Y3 P
  620. {
    9 e# d# u  p( @
  621.         MSG msg;8 j2 S7 K% k1 ]/ \7 J* y" a- p1 ~
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    - R7 A" }: ?* \) w9 e& q/ I
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));7 \4 Y, z% i9 ?. }! U: b0 Y) {8 }
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))2 @9 V# }" k8 o7 F
  625.         {4 t0 ^) `! e/ n/ Z0 X" r6 {( v
  626.                 if(!GetMessage(&msg,NULL,0,0))
    + X; M- i% m* r" o. W9 t& t; B
  627.                 {* @. L$ m  J! N
  628.                         return;" `3 k2 Z" H2 Q9 A  t7 K3 s
  629.                 }# G& I7 X$ s' n# l7 f' v! r4 D' o/ m
  630.                 TranslateMessage(&msg);/ a9 r/ r' t0 e* O9 p
  631.                 DispatchMessage(&msg);
    / Y1 [1 E0 m) C
  632.         }        " w" Q$ i) X9 {0 p
  633. }6 K7 ~* G' E- X2 z$ a8 x

  634. : e, [0 \7 L* }" T8 g
  635. BOOL bFirstChar=TRUE;
    & Z3 p9 ~( i$ I4 `8 k4 n# f

  636. & @/ X2 {! G" ]; n
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ l  k8 _; P7 ?
  638. {6 F& D( Z( O8 T0 V
  639.         // TODO: Add your specialized code here and/or call the base class
      T+ V( [( u' [- r- j
  640.   switch(dwProgramState)
    3 {1 P( N% s& j$ q  `
  641.   {# j! j, X0 u& ~& v% ]5 N* I8 X
  642.   case AP_NOTHING:% d' Y4 G- G6 }  C; K3 d1 O9 b
  643.     switch(dwStartUpSteps)
    9 O3 t6 @, r" \3 @- \5 Y
  644.     {
    / [* w0 ]9 y4 b" N
  645.     case 1:
    . h4 E* x# V) m" r" @( Q% y9 N
  646.       {
    ! R+ X4 U  z8 ?1 g" g* \$ }# z
  647.         int i;& i+ D  t2 C  n. {4 X' f
  648.         CDC *pCDC=dlg->GetDC();
    ! R6 }% |, a) v% L6 X( R2 `
  649.         HDC hdcwnd=pCDC->m_hDC;: x8 G- K: j3 G, L- ~( ?& V' \9 ?4 ]
  650. //        Graphics graphics(hdcwnd);. Y, b, Z# {8 T; T( v, T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ' T# c. z5 H0 F9 a: i; D
  652. //        INT iWidth=bitmap.GetWidth();' u/ s$ ^9 _# C4 |4 n( [2 f0 z
  653. //        INT iHeight=bitmap.GetHeight();
    # R, g; N( Q7 v' o0 N
  654. //        Color color,colorTemp;
    4 o8 H& D( D0 i; r/ f; \( X
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    / T. z7 Q: X: Z$ D1 G! s
  656. //        {" I4 A* {0 ^  `/ M. }! _! l
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)' Q( N, H  _2 U7 i
  658. //          {" Q) L  N. t' L4 p: Z' W8 }; c
  659. //            bitmap.GetPixel(iColumn,iRow,&color);/ l/ {3 s+ [1 ?0 n+ |& I* c
  660. //            colorTemp.SetValue(color.MakeARGB(0 e9 w3 K, a5 _( J" R* X
  661. //              (BYTE)(255*iColumn/iWidth),
    5 y2 w. G7 u8 X3 c
  662. //              color.GetRed(),  D5 I2 ^# Y) C3 W- |9 G
  663. //              color.GetGreen(),
    2 R3 m/ \+ [* K4 b, x
  664. //              color.GetBlue()));8 ]* ]3 s! @4 x, p8 k
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
      p/ n, b2 Q4 k" m7 t
  666. //          }. j  `/ d  t  d" p5 N5 p
  667. //        }6 ?2 ?" P, U0 j3 C! h! ]: c
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ) c5 t/ k3 c9 B- ^& [( E& K- S* Z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      z1 u" c, M! B  ^8 F0 y" f2 B& ~
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");! J8 S+ r) x% E8 A5 G. \8 L# [
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. R: i5 {) @9 z( K; N& r8 P
  672.         for(i=0;i<240;i+=8)$ P' d) P" `4 q- q" s+ |, ]
  673.         {2 {0 h/ f2 i. P- B4 A, K' T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! e% m# ~% }" w) W
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * x" E6 g/ n) _, }4 ]
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 O( v8 a7 @/ ]
  677.           Sleep(33);
    1 w: }- K1 ]0 X, D9 O
  678.         }- x* h; t' ?' V( ?7 m
  679.         Sleep(1000);
    6 m/ \; h9 ?  u1 {! A6 E
  680.         for(i=240;i>0;i-=8)$ E) q6 R; t- w5 c% D' a1 B. G  M* Y8 y
  681.         {# u4 _+ l- w5 O. S
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 ~: j. T- A) a% G% I4 e& e
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 D0 _7 D4 q; ]4 T9 S
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & V, _+ S: U, s$ h8 P) F" s) M
  685.           Sleep(33);: r" n. y" _: h. m8 \* y4 J
  686.         }8 s. D( i$ T; q7 X& N/ Q% h5 }
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);( [1 x( U. i/ H! g( ]1 r$ e  j) X
  688.         dlg->ReleaseDC(pCDC);
    % ]! {  R9 V2 y1 a+ O
  689.         DeleteDC(hdctar);9 U& p8 L) u0 J* b7 _4 v) P: G" B; k
  690.         DeleteDC(hdcsrc);6 M. z1 y9 z1 Z
  691.         DeleteDC(hdcorg);7 x& s$ Y- j5 A' ?  M' I$ m
  692.       }
    0 B( R* i9 a- h! N, @) D" w& N
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    : G4 X, `0 B4 n
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    # f) L5 S$ V7 T& G6 w
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    # _: `8 H# n1 i6 [6 ?( t* o
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");  X" B% ?) l/ o$ ?" p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. ]- U1 `, B) l
  698.       if(!Dn.Connected())
    $ g+ t- A% v+ F0 w
  699.       {# p- p: E9 m2 y7 A5 h: t0 I7 c
  700.         dwTotalFiles=1;" Z, v& f7 r+ @6 q7 u" T- I7 k6 |
  701.         dwDownLoaded=0;; |+ k5 _! A' a, ]0 ~. u% b
  702.         bSilentStep=TRUE;
    8 E: ?. P+ D+ B& B/ a) g
  703.         bCompressed=FALSE;
    ! w! m- a! u8 D0 a( ^
  704.         strExtLocal.Empty();  u! h# F0 @+ I: ^  _- K0 A8 c  c
  705.         strFullName="readme.txt";
    ) m1 n" F+ d0 W- s" ~: s
  706.         dwProgramState=AP_CONNECT;
    % l7 k9 F1 S9 n2 S
  707.       }) T4 j. W& ?! f. C' T2 \
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();- n$ r9 ?2 g1 M
  709.       dwStartUpSteps=2;
    . }% P% F+ q  n" n7 w- Q4 d
  710.       break;
    1 u- Q) {0 E3 ?
  711.     case 2:( j  Z* B; L$ F5 |; K
  712.       {
    1 y8 U6 {! A, P7 N( [4 u
  713.         int iEOF;
    3 f3 U% l0 D$ {4 S) l! v! d
  714.         FILE *fp;! j0 T+ W; T1 c; x
  715.         char szString[512];
    + i8 W+ v: ^  L* D' u/ U9 E; l0 g
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");- K, U# S, V2 A' @9 `) b4 G5 o
  717.         if(fp)/ p8 z2 V' h- _, P/ T
  718.         {
    & |: T/ K2 y- D0 P3 \1 x$ E
  719.           do- k# s1 ]0 |6 F+ C: ~8 F
  720.           {) I7 t! G. }1 \3 g" a. v- Z
  721.             iEOF=fscanf(fp,"%s",szString);
    . X# y' h/ Z- j$ F
  722.             if(strlen(szString))
    + n$ Q9 f2 t) C1 u! a: w/ h
  723.             {  e% B: }; @! H7 Z5 c
  724.               if(bFirstChar)8 Z; d, T% W) V, A7 X" r8 A, H: S' k
  725.               {
    6 ~2 v2 P/ H( P0 ?8 ?4 `
  726.                 bFirstChar=FALSE;
    : |4 R  o  ~6 L% _/ {, c+ X0 O9 D8 ]
  727.                 bConnectIsBig5=FALSE;
      M5 T, l% g7 `% C* S
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;* w0 D  n/ i/ d! o
  729.               }! Q7 W6 Q6 l$ Q7 l( e" B
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    , _9 t" B& O3 i( F; F
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    0 c1 h, a: g; W- B( p8 a' q  M- f2 |
  732.               dlg->m_ListText.AddString(szString);
    . x: c. m2 e- ]2 G
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 L+ x( o' \* d1 l" G" X0 d% F
  734.               *szString=0;
      G+ z( A8 O: ~; A% r; W
  735.             }. r, r8 U8 p7 t1 ~
  736.           } while(iEOF!=EOF);- J1 O( D: S. X9 t' o% [
  737.           fclose(fp);
    ! T! D3 C3 }) e( H8 X$ Q) \; s3 K& `* R
  738.           unlink(".\\DownLoad\\readme.txt");
    % n8 K( z$ q; [" q
  739.           dwStartUpSteps=3;; i/ {& \7 f1 p/ z' V* ~
  740.         }
    ; K# T7 P2 b6 Y) T6 D4 y$ X
  741.       }
    0 K  i1 {; z4 u
  742.       break;3 ]; `2 p8 e1 I& e, ~6 Q0 ~
  743.     case 3:! r. o" r, e9 T0 j3 S9 y0 A
  744.       if(!Dn.Connected())
    & K& \& Y3 C5 u" M+ r* r
  745.       {
    : E9 g% l: l: J0 j6 U- _
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    7 |- N& V1 Q/ M/ ^% u) X% y- \/ n! w
  747.         dwTotalFiles=1;/ y! G+ C9 T$ q2 H) x$ \  r. b( F
  748.         dwDownLoaded=0;- ?+ _/ ], W/ k2 G$ w$ k
  749.         bSilentStep=TRUE;
    ! b3 s+ J+ s3 ~8 i, a  A1 B
  750.         bCompressed=FALSE;
    & w+ v( V+ b1 f( u: N4 q; [
  751.         strExtLocal.Empty();
    & ]! Z* ~, C5 f) q3 ?
  752.         strFullName="checkversion.txt";$ x6 _( O0 s  V1 I
  753.         dwProgramState=AP_CONNECT;
    & P; m; K/ `; F
  754.       }
    # u2 x: ^6 \0 U" {( d( ?# ?' l
  755.       dwStartUpSteps=4;
    " g2 P) D7 s' ]- d# W
  756.       break;
    0 Q) Y& f# S: N4 ?. G
  757.     case 4:
    # `7 I2 @( h0 O7 E) @" ?+ F
  758.       {. x& K' a  I7 c5 X
  759.         FILE *fp;
    , g$ ]; B6 ]& u- t
  760.         char szString1[128];$ o0 x1 n# C; `8 \; V! d
  761.         char szString2[128];9 f: j! y5 I% d5 h# E
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , p1 c5 d4 X3 \6 t' h
  763.         if(fp)
      L8 r1 o& d2 ~, C& J
  764.         {
    6 T' d* w! _( C: c$ r
  765.           fscanf(fp,"%s",szString1);
    4 d, O! u" v0 w9 Y
  766.           fclose(fp);, @/ C3 q. t. U& U/ w
  767.           fCheckVersion=atof(szString1);8 h0 M5 ^! L3 Y3 x  I, I9 P
  768.           fp=fopen(".\\checkversion.dat","r");) W2 B' H1 H4 O. f7 M" o  a  `9 M
  769.           if(fp); k' L7 ]6 r' e; E$ u. e
  770.           {
    ) l2 M; e5 T( |, N  m# |$ r
  771.             fscanf(fp,"%s",szString2);7 L/ n. r+ f' s
  772.             fclose(fp);8 Z* `* C$ p. c" a* A
  773.             if(atof(szString1)!=atof(szString2))
      F1 E1 q, {2 q$ e1 ^) r) d
  774.             {: `1 t; \7 \+ C* }7 c1 W/ ^! r+ Q9 c
  775.               if(!Dn.Connected())
    0 C: |. \/ y2 {" N
  776.               {: ~- R& I: Y- Z5 u
  777.                 bFirstUpdate=TRUE;
    % Y' d# R1 H) c
  778.                 dwTotalFiles=1;
    : T! T4 c: Q1 W4 \; n# h
  779.                 dwDownLoaded=0;" y+ [. N1 A; T
  780.                 bSilentStep=FALSE;' i9 z4 T" p0 Y( j
  781.                 bCompressed=TRUE;
    1 R% N% G1 Q% Z8 h! e; c  B+ T6 k
  782.                 strExtLocal=".\\DownLoad\";! g" I5 w$ {! V$ |
  783.                 strFullName="update.txt";
    5 z# r2 |7 J! A0 d; x. V
  784.                 dwProgramState=AP_CONNECT;
    8 D  {6 p7 D0 _7 n
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    6 `  l$ E7 r8 I; ?1 h# x$ m( ?
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  N9 [2 E3 L1 d
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * m5 l# y, ]. u3 G2 B/ D

  788. ' m' R9 N/ ^" m, b
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" \; s& x5 q! J7 k
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    4 k0 t6 d. v1 E9 \; o
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)3 s) K3 i) [; O5 K# N7 Q" |
  792.                 {& H1 I( `& D0 a0 U$ Y7 `' n
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");# E( {- ^6 ~2 ^& Z" p
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");0 `/ N0 C3 K5 F3 a& [# e! p; V
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");& M  @) H& O+ s& [6 h+ w: d6 _' y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - s4 k; w, j1 x! B# R4 h* {

  797. 2 ?1 i% t- {( t! u7 E( T
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 E) m% F4 O3 r# Y, A- H
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 C4 b1 N* [- n
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");$ E2 I! ?$ y' i% w- {+ j2 q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 M& B& u4 s9 F9 R9 \
  802.                 }
    ! u+ W2 \4 l* R3 J
  803.                 dwStartUpSteps=5;) q3 \3 T+ U$ L& M- q# e) C+ X0 [3 i
  804.               }
    : p: W, C4 B# l
  805.             }3 H, ?/ N4 |# H" F& g& N  M' t
  806.             else- p4 k- W1 v1 _  f5 ]. e+ A* }3 Z. m
  807.             {
    0 m! e4 C& i0 e, L/ `/ F. {
  808.               unlink(".\\DownLoad\\checkversion.txt");
    % Y$ K# Z9 V8 t0 i
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 j# H$ U- ^" B8 P) B
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; t" ^) a, R9 S! r/ U# L6 V
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");8 W( m0 F0 F7 l! r# |0 ~
  812. 8 x8 x2 C' V. K' E
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , {+ ^' @; b' F
  814.               dwStartUpSteps=99;
    5 Z! A# H- r8 K" W/ p( }2 @
  815.               bFinishUpdated=TRUE;" H0 U0 G/ S7 Y9 \: f, I) q
  816.               bCanUpdate=TRUE;
    & ~: U6 r; R7 P7 Q% E
  817.             }
    " n) ~1 r& T; L' F: D2 s
  818.           }/ l! [# Q: _1 [* p: e+ I" I
  819.           else# p/ k9 a0 n: n( h; L7 Q
  820.           {/ M4 x. z4 `) @% J2 D9 Z& {
  821.             if(!Dn.Connected())
    ' n0 W4 \( J+ j( D
  822.             {
    , R2 t3 A5 r2 [, G% g" F1 [- P
  823.               bFirstUpdate=TRUE;
    & W  Q4 e6 |! P) a6 j: H; v
  824.               dwTotalFiles=1;' f! G9 c* {! ?
  825.               dwDownLoaded=0;/ }  V/ p8 m$ B8 s& Q6 y3 X
  826.               bSilentStep=FALSE;( S2 |; n  s  Z
  827.               bCompressed=TRUE;
    - c! N) Z, u1 y2 L
  828.               strExtLocal=".\\DownLoad\";9 q( {3 S% W$ e  W- U- ~5 R: I1 i
  829.               strFullName="update.txt";- x' n: P9 |. m% N9 K6 k7 Z& c
  830.               dwProgramState=AP_CONNECT;: X5 C" F7 W2 j# _% S  H" F
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 k9 R/ f4 n8 h
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 h+ P( N" L- b7 f
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");6 [% x% Y$ X0 B+ w! Q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, X* N# e: H/ w' E: {  W! ?$ c9 Z" i
  835.               unlink(".\\DownLoad\\checkversion.txt");( M- [9 `1 C1 p) P$ u5 I. l, ]
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    0 E9 }0 j- D# {) h5 t2 w3 f
  837.               {
    : p5 V8 U- r3 O; e
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");3 S8 \4 D, J  X  ~
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    7 I5 ]& ?" i3 ?6 v5 b
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    5 A5 l; }2 D0 e4 `0 N
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 p! ?& {% V! W  }8 c4 y: i4 X- v
  842.                 6 `& u+ N6 f6 J. ?
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . d7 }3 a1 u- K  q
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ j3 a$ F# ^) k
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    + ?2 r; r/ c. g& q, y8 I4 ]
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , C& }4 j! R0 p7 U4 B5 d) p
  847.               }6 z; @- O$ Z- V2 Y0 l
  848.               dwStartUpSteps=5;& S- X; ^/ i( y) P" q8 Z
  849.             }1 |0 }5 |9 f  \- U
  850.           }
    ! N' m- r$ q1 N9 ?# z
  851.         }* I  g  B; G9 A( Y1 z* C
  852.         else( Q6 m. z" I& ~. O! S
  853.         {' `- X  q+ a, Q4 W( M" Q
  854.           dwStartUpSteps=3;
    ) ^) A& x* m9 T
  855.         }5 \2 J. |9 l0 T  V4 E, |
  856.       }7 ^1 ]  h! L- M* Q8 t, B
  857.       break;
    & @# x' B* r. n
  858.     case 5:
    , B6 ~8 Y; q4 X# [0 ]( r% ?
  859.       {1 A( S2 c  v% _8 x$ s: y
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    " J: @) ~, ~, d; O- X( M- \
  861.         {
    $ ]* Q- `) U* m8 h! h6 @! r
  862.           int opt_overwrite=1;  Q% A# S) T3 L% N# H/ ~3 H
  863.           int opt_do_extract_withoutpath=0;+ x2 e- b8 z5 H5 p. W8 F" W( i
  864.           unzFile uf=NULL;
      d* ~6 f6 x7 q& V! [
  865. 4 p* ^5 u9 _- o
  866.           uf=unzOpen("Wsa.zip");
    ( w* ?. b# c6 |$ U$ K6 _( y4 V
  867.           if(uf)
    0 e0 z# R, H( C* ~% t, u" y2 H; j' z
  868.           {
    6 }& K; t3 k( X2 x7 S
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);" B" N0 D; `0 W# ^. z3 ]& W$ c
  870.             unzClose(uf);( v4 L: A- S  c0 u7 S. W
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    1 R6 u" o# x* a6 B9 h
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    $ n7 i3 o' ]) Y4 y
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    8 v& X+ {9 E6 D1 F7 V# K8 B/ C# M
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , \" B( n5 ?8 l, n; Y* N
  875.           }; U4 z* I8 {8 l4 W) B6 S
  876.           DeleteFile("Wsa.zip" );
      C2 n: p: }5 ]! n' {
  877.         }! Y4 H& _: i. Q" d, e5 J2 E9 r- \/ k
  878. ' i! @7 T5 p) a
  879.         if(CheckLocalVersion())
    8 e% S# p, s! L1 F8 Z% W7 r: q
  880.         {8 C7 f; Z% m$ @3 G. i* N
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    - _6 A, i+ x2 l7 `% H8 Y
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");6 n" w) P7 n. R5 s- Z( }
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    7 h0 M* x, U9 Q. D
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 p- q1 u; t& Y/ [
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    1 k: |$ v- n' `+ K
  886.           dwStartUpSteps=99;* O! y( ]9 X% w2 i+ V1 r
  887.         }- x6 D$ w$ N  X1 E
  888.         else- f& ~4 e. a' S3 u( b* j2 }) z1 E
  889.         {
    9 R4 `; t) p3 l) K7 L6 a4 ^
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ K+ `( K* F0 K3 R+ A; I$ n' H
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 H+ M7 e% X' m" [, q
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");3 l# M4 b6 |; L( q, k! {

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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