找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式

7 f* K7 ?3 a9 u3 n
  1. / RevApp.cpp : Defines the class behaviors for the application., F2 S4 B. k) ~/ x, q* r
  2. //
    + q  T; F. V3 k4 ]
  3. / o5 G! Z) B% S3 S9 O7 _" X! }7 A) Y
  4. #include "stdafx.h"
    7 j6 H- [2 j! w; [+ t: _  G
  5. 6 {* _1 I8 W( l3 {9 I, u
  6. //#define UNICODE+ m! v& U3 j% Y0 e( O$ F5 K
  7. //#include <gdiplus.h>
    $ B! p- W0 i; i
  8. //using namespace Gdiplus;' W& P, e6 h& Y

  9. 4 g: X* y6 `6 B; p# \
  10. #include "RevApp.h"% m% M  h4 I7 P+ ^
  11. #include "RevAppDlg.h"/ Z) {* o# ^; o9 ~2 p: a
  12. ! [6 B: L; a9 D5 @5 H, s& ~
  13. #pragma warning(disable:4786)
    3 \1 E$ T2 t6 s$ I; c' ?
  14. #include <map>
    5 u! [! A6 S4 D0 g2 p1 H2 F
  15. #include <list>0 w. R. Q. _8 d; n4 J# z. m! Q
  16. #include <direct.h>4 a: t( D+ x5 p
  17. / O2 D8 b) _) H8 \2 q" [: L' h: g8 ~
  18. #ifdef _DEBUG; ?+ F- `# r: R
  19. #define new DEBUG_NEW
    , P8 |" `  ?4 E8 _$ ?' ^) b; S
  20. #undef THIS_FILE3 W5 i( N  O- `
  21. static char THIS_FILE[] = __FILE__;
    ; {4 Z1 [7 t  k0 ?6 d! _9 r
  22. #endif" i  u7 k& S- ?% R/ i' o
  23. #include "SkinResDef.h"
    # X- B0 y+ T% a  P8 ~
  24. #include "ChangeBG.h"# g4 k1 m) `' E7 X+ D, {
  25. #include "AFXINET.H"8 @& F" R, k# H2 U' r% k  D
  26. ' [/ Y9 G6 c" T( E2 l
  27. #define TRADITIONAL_CHINESE 0
    ) a. t; R1 o1 ~  a# b8 j
  28. #define SIMPLIFY_CHINESE 1
    9 y: R) v3 @3 I4 q8 z4 S: n
  29. #define ENGLISH 2
    ( n/ q1 q4 ?: ~3 D9 a+ A5 v! O
  30. int m_iLanguage = ENGLISH;6 R6 ~$ W( d& E3 N( O
  31. /////////////////////////////////////////////////////////////////////////////; a, v7 R, u! @& W
  32. // CRevAppApp
    : [( J# H* Y2 Y: d

  33. / n4 B2 r! ^! ^
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    0 u4 {) v# Y  w4 U5 G" d( l, D
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    9 F1 }' t" a5 M( H. D3 a" {0 b( f
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.  y, `, r# C$ ^, J8 O+ ]; H
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!  m. h# [& x" B. X& I" S
  38.         //}}AFX_MSG
    / ~/ R# N5 A, S9 G  o0 |8 Y- S
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ) h' j1 k3 P& a+ [$ V. J- V( X
  40. END_MESSAGE_MAP()1 W( @  d4 Q) k! m
  41. & B- Y& K! A4 }. Q
  42. /////////////////////////////////////////////////////////////////////////////) M9 s! Q7 B# Z8 e
  43. // CRevAppApp construction
    / B) P% n5 h' \
  44. / r# R( D6 R/ r3 S4 Q% Z
  45. CRevAppApp::CRevAppApp()
    4 [$ S+ @6 V. r1 h
  46. {- D% x" n( N5 O2 z- Y9 R
  47.         // TODO: add construction code here,
    7 D* J$ @" F" R$ k
  48.         // Place all significant initialization in InitInstance1 `5 s, {. J5 O$ d
  49.   bDisplayIsBig5=FALSE;9 v  f' f9 m8 D
  50.   bRestartUpdater=FALSE;
    1 k( }. m$ S; K3 @3 |* R; w
  51.   bFinishUpdated=FALSE;
    : {& O: e. H# i& _
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;' i! O  M4 c  `% E1 T
  53.   InitChangeDataBig52GBKS();' [0 W2 R5 ]" d2 ^, S7 q! B/ @
  54.   InitChangeDataGBKS2Big5();( o2 T6 f! t8 X6 t0 V8 d
  55.         //8 Z  D- u! I* n* r( ~, q
  56.         bClickRunExe = FALSE;! X, m& a* E8 X1 {  B% G
  57.         //
    % R- K. e9 J/ e3 }
  58. }  H% ]5 c. J# j9 o; J# d( T

  59. 7 r9 ~0 G$ i% g* j) C' K- ]; d
  60. CRevAppApp::~CRevAppApp()
    ! m6 W( B% S/ K# L+ u  Z4 m  Z8 R
  61. {+ R) f/ c7 Z7 M+ Y; B% o2 g! z
  62.         // TODO: add construction code here,
    ( V" F* f. z9 ^0 H& W+ j5 F7 G- i
  63.         // Place all significant initialization in InitInstance
    8 n6 N3 }4 B/ H! \$ e! t, b
  64.   EndChangeData();
    # l2 G6 a/ l0 p- u
  65. }
    2 J3 x% k' S* O% A; _  y4 G* r* C- c

  66. " D6 M) j9 w( `( H
  67. /////////////////////////////////////////////////////////////////////////////; F9 X% d8 u% p. m' \! E5 P  ?
  68. // The one and only CRevAppApp object( l% i; `0 R! F% K- }5 i" D; a4 j0 {; k% n
  69. 0 D3 d- \( v/ B% A8 g% g9 \
  70. CRevAppApp theApp;  j4 D6 [, }1 ]- K2 h) G
  71. 6 A7 Z, J/ r, Y: B$ i3 k5 g) Z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)1 B9 j3 K7 |* g0 Y3 h% f( t
  73. {& ^3 w9 Y4 s8 ]$ P$ ^
  74.   int iEOF=0;" t; C/ D* C  ~) M7 t
  75.   char szTempName[MAX_PATH];/ S% [2 m8 W7 f: Q
  76.   *szFileName=0;
    4 B: x% T1 m0 l6 b) N
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ) c. }0 B3 h7 u2 F( l
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')$ [& G7 F) \  O* z
  79.   {$ r5 V" S* C7 u+ X0 {
  80.     strcpy(szFileName,&szTempName[1]);9 x; ~6 q4 p( T7 G( ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    $ y  m3 G- I2 U8 V4 t7 k. {  m
  82.     {
    3 X4 |, [0 a; G9 F8 m+ D" |/ F
  83.       iEOF=fscanf(fp,"%s",szTempName);
    0 |( l/ t) |% B: W
  84.       strcat(szFileName," ");, Z: q. ^' j, y& Q+ s
  85.       strcat(szFileName,szTempName);
    # D: U6 ~. y& c* J3 H( k" t4 _4 h
  86.     }. X+ Z. u5 K  h9 \# ]  N
  87.     if(strlen(szFileName)>=1)
    % k2 }; n. ^5 r& {
  88.     {
    ) v. E! I1 n6 Q5 q: H0 S
  89.       szFileName[strlen(szFileName)-1]=0;
    1 U& H0 o' a: C3 X5 C! x# d
  90.     }
    - w/ S0 v) [, w
  91.   }9 {" l6 T2 W/ ?) P0 l" M) @
  92.   return szFileName;# O: v8 B4 K% ?* s8 p+ |: o# f
  93. }
    % {; J# L) |) `1 a

  94. " K8 u9 c: `. Z* t$ m
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    6 ]8 [# c+ C7 [+ T$ S
  96. {! S3 h% N" ]! {4 ]9 L- H- J1 I! T' t
  97.   FILE *fp;4 g$ `! W5 ?" Q& t" y- ^* U
  98.   char *key=NULL;
    4 [8 \& @; `; S. I
  99.   char version[MAX_PATH];
    + H2 E: d1 q( n% K9 i9 @7 @' i
  100.   LPUPDATEFILE file,olds;
    : {, l, j$ C8 g) \2 J! A
  101.   std::map<CString,LPUPDATEFILE>::iterator p;' o$ ]9 w) e; e# i# {
  102. 4 A5 j+ ^- i! A% v( B' i! ^
  103.   UpdateList.clear();
    8 G0 [5 m4 ^' O
  104.   UpdateFile.clear();
    2 d# ^0 l3 g0 [: ^+ K$ w
  105.   if(GetFileAttributes(filename)==-1) return false;& e" [. k" l/ ]$ p/ \- v# `
  106.   if(!(fp=fopen(filename,"r"))) return false;% [4 i; [5 x& @) {& D: Y3 l% I" w
  107.   fscanf(fp,"%s",version);
    1 P  C6 R. [# i; ~7 v5 z1 _
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }0 v5 C/ N! A- V( W+ Y
  109.   while(fscanf(fp,"%s",version)!=EOF)8 z( Z$ Q& }: c# X% n+ P
  110.   {& x6 G( r+ q, O$ k$ i) A, D% e4 h
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; N& M$ P6 Y& m; b5 ^: @
  112.     fscanf(fp,"%s",file->path);
    3 K! K5 ?- y. g4 w* u* f/ t1 {
  113.     ReadFileNames(fp,file->file);
    * k& R% ?. I6 J# P0 \
  114.     strcpy(file->full,".");
    8 v' K/ N4 e2 j
  115.     strcat(file->full,file->path);
    , v! H" g) x: u8 d% X1 \
  116.     strcat(file->full,file->file);
    9 e. p0 E6 ~/ ?9 Y; W6 f7 }( Z- x
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    * T% S6 O% \5 Y8 B- S3 g
  118.     {6 x( W% Q7 J% m4 s
  119.       file->vers=(float)atof(version);
    2 P& X: `) L* c' [# l1 }
  120.       UpdateList.push_back(file->full);
    . [& @. D* U' ]) ^) \$ r8 V6 ]
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));3 e3 T5 ^7 a$ U! j* A. T( u
  122.     }
    % q. ^+ w2 t* Q: L- ]8 J
  123.     else
    * b" I+ e5 d( }2 t
  124.     {  M4 ^; g# ]/ o: l( ?6 V
  125.       olds=(*p).second;
    0 q) ^  u. s& W) q
  126.       if(olds->vers<(float)atof(version))
    ) R' H1 s' V6 I; j9 D
  127.       {
    9 o; A, v6 }5 g+ ~  f' Y
  128.         olds->vers=(float)atof(version);  U6 W. q4 w* N6 b/ K9 V4 y
  129.       }
    ' D8 l: E+ p8 p5 b( B( |
  130.       free(file);
    : l4 m* X5 ^# u# U" I+ {3 f
  131.     }
    4 V% ]5 [3 p  v2 K
  132.   }9 s! c3 g5 L& x: y# k& n6 n$ `
  133.   fclose(fp);
    : J: k* `$ k/ e$ _  J9 s3 f
  134.   return true;
    - Y! U2 D. Y# l: g3 I
  135. }
    " c. o* |, ^$ Z6 k4 k9 [# o

  136. ' C* ^' F* S5 u2 m% @- o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    - |4 }; e% q5 G% }# ^! V% ~
  138. {
    ! ~& j; L$ O$ c4 R- g- B
  139.   TCHAR  szFull[MAX_PATH];- h" e1 M# d! j- E; G
  140.   TCHAR *token,*inter;* E% T8 t8 i0 q3 j7 C0 D4 [
  141.   *szPath=0;
    ; ~8 j: w  o+ Q* J2 k5 @) X2 |3 v
  142.   strcpy(szFull,szFullPath);
    2 s' H* I7 u0 K5 M' h
  143.   token=strtok(szFull,"\\/");' u5 C. r9 M% W8 N, e8 _/ Y/ N
  144.   inter=token;
    & }* p9 K; L3 u6 G
  145.   while(token=strtok(NULL,"\\/"))* Z$ c( S8 P4 D1 D
  146.   {
    ! H5 O; Z$ e: [7 p
  147.     strcat(szPath,inter);
    4 L( t: [2 M+ S' s% B
  148.     strcat(szPath,"\");9 z, P" R* C: {3 X! D8 ~) ~+ k% p
  149.     inter=token;
    , J& k0 S7 v. R7 z5 Y5 r
  150.   }1 f0 W0 O+ r% m
  151.   return strlen(szPath);; e! U4 n/ Q) o4 t# A( e3 R9 N$ a
  152. }' M  y4 \" _! Q

  153. 7 r  o, V( D& b9 p6 G+ e
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)& g$ ^& x* _8 R6 n6 a
  155. {
      g0 P5 P7 n) o
  156.   DWORD attrib=GetFileAttributes(Target);  j# `0 T2 g- N- ]7 P5 Q
  157.   if(attrib!=-1)+ \+ K* B/ Z" s& w
  158.   {
    $ b1 D, Y1 k1 a9 F: T) ^6 z8 G3 Q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ ^* W9 B; K4 r5 V- d
  160.     {
    ( E; Z" `5 ~2 A8 F% `; c
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ) F& b4 y: J* e' m. t/ X
  162.       SetFileAttributes(Target,attrib);
    / ?3 r! q4 A) T$ u$ K. s
  163.     }
    # o& U" u2 {8 b: g
  164.   }" I; v( e  N/ z9 ^: ^: J# v" A7 `
  165.   CopyFile(Source,Target,Erase);4 f+ P# {8 h/ C+ e3 R
  166. }
    , e# `  B2 `& d. ?2 x6 x

  167. 9 a' O6 V* u- O0 M9 T/ n
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    2 u/ d  P' ~% R: {+ A7 _
  169. {
    8 k0 m# N. t+ ]: {" M
  170.      FILE *fp;
    " W7 X2 b( O6 A- A
  171.      char  szBuffer[8192];; I* g, h$ y" B8 N5 z! P
  172.   va_list  argptr;
    - I7 p4 `. \7 s; v9 @& Y
  173. ; z" Q2 S+ X0 b: [2 `6 d  p
  174.         va_start(argptr,message);
    ) h- ]3 z# ^8 G( J" j
  175.         vsprintf(szBuffer,message,argptr);
    6 m2 f; W2 O; A9 r
  176.         va_end(argptr);
    $ d6 O, c- K3 [8 L7 z- B
  177.   fp=fopen(FileName,"a");( _! Z* U" x$ Q+ ]' M. w
  178.   if(fp), H+ A- D5 M& g
  179.   {6 ^  ]/ ^5 u" Q3 r& V  ^$ n
  180.     fprintf(fp,szBuffer);4 O& T/ O- ^4 m  ~
  181.     fclose(fp);6 D/ D- G2 C: Q" F
  182.           _flushall();
    2 N, M8 I2 @* |5 p3 c  v" O/ Z: c8 V
  183.   }( Y9 ]8 ^6 L6 Z" \% ~" k
  184. }
    ( K4 G& J% W! x0 K
  185. 0 x! k6 L0 j# h( a1 S+ N* C1 _3 h
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    - V% l, y5 _" {5 z) v
  187. {/ E" W: [* g. q$ }4 v
  188.      FILE *fp;% h. ]9 F0 s- j5 g; S0 {- l
  189.     DWORD  attrib;
    8 D4 Y( |, `! y
  190.   attrib=GetFileAttributes(FileName);
    ( s0 c: i+ e" S* K3 a/ i
  191.   if(attrib!=-1)
    7 t* U+ u& t( m/ V% _4 m+ e
  192.   {
    3 l- h. ^6 v! I2 N8 o7 L  W
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);' K) j$ z1 N1 g! z  t
  194.     if(!SetFileAttributes(FileName,attrib))3 R2 [3 z: e8 ^
  195.     {- `! e$ p. r! A& v
  196.       return FALSE;
    % S- V% v8 {* r2 ^8 L
  197.     }& b. }7 p1 f0 ]1 ~
  198.   }$ i( o" r, G+ K6 m* o' l
  199.   fp=fopen(FileName,"wb");
    9 N! |9 X( u9 W: H- M. e( {  p
  200.   if(fp)" B9 \& h7 H2 I" r1 C
  201.   {
    ; g! c) G+ A7 s: @4 {$ J) a0 v
  202.     fclose(fp);
    - W8 ]4 |( \. o5 T# s  m. E8 @
  203.   }
    $ F4 n9 E2 F6 m8 ?& L0 K$ n
  204.   return TRUE;! b/ c5 |2 J" `* b
  205. }
    0 A; W& {+ T# f8 L
  206. ( ~% T7 k# p: `5 x" ~  G
  207. BOOL CRevAppApp::UpdateLocalVersion(void)8 h) `5 p3 d- j! R* v+ z' w
  208. {; _7 r: n% T2 I8 A# u
  209.   char filename[MAX_PATH];% K* K# ^7 ]% M2 ~( F+ ?
  210.   LPUPDATEFILE file,olds;: s: Y+ I6 Z5 y: z* R: X# A
  211.   std::map<int,CString>::iterator i;$ G% J1 X' {  d) |
  212.   std::map<CString,LPUPDATEFILE>::iterator p;# V2 R4 S: b: B1 H% [
  213.   std::list<CString>::iterator l;: G4 Y# Q% n/ c& ]; O2 w

  214. " T. U8 O% X( {+ ]$ U
  215.   if(bFirstUpdate)  k. Z( ~& t: `8 @6 y
  216.   {
    1 l' i9 k% i$ h3 n! Z' f
  217.     dwCurrFile=0;
    - c& ^6 X' }, t- U
  218.     bFirstUpdate=FALSE;& y9 J: t; _8 L, [: c
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # ~2 ?: i( B+ F7 G3 ?7 j( L
  220.     {8 Q, ?- ?' C7 N7 k: b" Q
  221.       dwTotalFiles=UpdateLocal.size();
    6 E7 Z+ V$ e/ p6 A
  222.       dwDownLoaded=0;" |: M3 Q4 ]) H" T/ N
  223.       bSilentStep=FALSE;6 F2 Y+ [) l) Z& G  ~
  224.       bCompressed=TRUE;
    " M2 l, m& @0 H
  225.       strExtLocal.Empty();" R2 T3 j4 Q+ U+ l/ A
  226.       strFullName=(*i).second;
    ! b4 o. a& n6 C5 T6 k) b
  227.       dwProgramState=AP_CONNECT;
    0 s  K# M* o, [' a
  228.       return TRUE;, ^  T  ?4 d/ v" u" v+ q
  229.     }% Q) M* u( E9 e6 |
  230.   }
    8 L1 e4 G3 f! F4 P: V7 q9 n
  231.   else if(bRestartUpdater==FALSE)
    6 f) R* e" |- ]  g
  232.   {
      o& ]2 |6 j( {1 j* W, d! U
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())9 @: y' a" c! v# {6 e6 i- q
  234.     {4 o* `# t& a2 Q% m% j
  235.       file=(*p).second;
      U+ Z# N) x' t2 M" ^
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' D2 o* r5 @( F
  237.       {6 R; k1 }8 x8 v6 R( [- |
  238.         olds=(*p).second;
    % h1 S  ?8 g) _; ]
  239.         olds->vers=file->vers;
    ) U* U5 F0 r9 y; u; Y
  240.       }# y$ b( K1 \  h# T4 V0 t
  241.       else: N: d9 t# ]2 l# s8 |5 {1 ?
  242.       {9 ^+ `! i3 o* e% |1 Z4 m- ?( m: Q8 L
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; g( U3 W- Z  C+ @7 ]& k
  244.         memcpy(olds,file,sizeof(UPDATEFILE));# V& m5 G( ]- h  g& L$ v
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    & k* ]& }8 Q  W& D, K* F5 A6 A
  246.       }) r4 [. I& v5 W0 \
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");* R) x& t+ P: D+ s2 I/ B/ I% d5 {
  248.       sprintf(filename,"(%s)",file->file);1 a( {3 U& e2 M. S9 Z/ V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- Q' o' D6 b+ y) r
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    # k/ m3 o! G4 e0 p5 t
  251.     }
    4 A& U# e2 a9 {0 X4 [4 V& m0 Y
  252.     dwCurrFile++;9 o8 l  Q% r% L7 A' w) i7 M' Y
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      z, R4 P2 }) Q; k+ W+ |# y/ r( [
  254.     {
    9 i' h" D9 _" p" P( E+ F0 H
  255.       bSilentStep=FALSE;) f( O" r7 S: O/ m) ]2 {# B. J# N4 ]
  256.       bCompressed=TRUE;
    - `) i) ?9 H2 G0 q
  257.       strExtLocal.Empty();. ]1 r! J+ n, M* e' ?7 A
  258.       strFullName=(*i).second;4 t9 g) n  C. l- c8 X2 q. I
  259.       dwProgramState=AP_CONNECT;9 W( M5 j/ n1 o7 J1 s
  260.       return TRUE;! D. T- [: r- O9 q
  261.     }
    / G0 z0 ^+ c9 a7 G
  262.     if(!bRestartUpdater)
      }' D: r  u$ y  k0 p
  263.     {' }4 `9 f  b  B' y  i! Y
  264.       int iCurrSize,iFileSize;3 p5 _5 T7 \# v5 `2 Z
  265.       iCurrSize=0;
    " b( X* V8 s7 ]& C% t1 C7 l
  266.       iFileSize=UpdateList2.size();
      n; _/ \6 n  o6 K  O
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    3 s+ z6 }. B; s
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    " ]- z+ ~$ b8 S& t
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 d8 S: x0 C3 E( Z- q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , C& n8 B* \. @9 n  g
  271.       Fclearf(".\\update.dat");
    & c9 B' h( R. c7 n/ J
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    # K- l* f/ K- {4 q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 Z: {; s! H* O/ y, P4 L7 M5 B( V
  274.       {1 E. B" {7 W+ Q4 F5 ?
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    " m3 e% t; M. O' \9 p
  276.         {
    * u# d  U+ i6 |1 g
  277.           file=(*p).second;# z+ }- t0 t3 H6 e6 `
  278.           sprintf(filename,"(%s)",file->file);
    * N8 [7 {2 B/ _
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 y- ]% o0 T' a# }
  280.           iCurrSize++;
    5 v/ _& ~4 t$ V( t9 q8 @8 @3 i
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    6 I. `# d  q" A2 i" [5 V& ?# h
  282.         }
    * Z' J+ O* c3 p+ p% Z! W3 ]* E: W
  283.       }; n! T7 G, X0 H9 y; d
  284.       unlink(".\\update.txt");/ g+ A  F  L2 C- r% |& a
  285.       unlink(".\\update.tmp");! f/ @; d! E2 x+ O* T! A" g
  286.       Fclearf(".\\checkversion.dat");
    $ E5 _4 c* L; J5 f/ R1 _
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ! B8 k0 B. E3 E+ C* O' T+ w
  288.       if(UpdateLocal.size())" k! n4 ]: F' g9 e& u; Q
  289.       {
    ) d$ I( s2 t! s* l
  290.         UpdateLocal.clear();8 w7 `# u1 L- \2 J( C4 Y, N2 P! e
  291.       }' x  G7 _3 C0 A8 U& U2 y" _4 ?% `
  292.       if(UpdateFile3.size())
    2 n) }. z9 S8 n
  293.       {
    # ~! {5 e+ Q4 D$ b4 J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " K9 j+ V8 R# C9 A
  295.         {0 A9 B& S$ \  s( p
  296.           file=(*p).second;1 t) X# [7 a8 b+ e: L  V3 J4 l
  297.           free(file);
    ) u( ]- H* @; K/ B8 r, l
  298.         }" {  j6 {0 ~% N3 W( c
  299.         UpdateFile3.clear();% g9 W/ L$ W/ p# N( {5 p
  300.         UpdateList3.clear();& e0 D* I/ A4 @* d6 B% c  n) E1 N  Y
  301.       }7 P) r5 v7 i- ?0 `9 m9 h9 d
  302.       if(UpdateFile2.size())4 D" O6 W% O/ _, C* z9 H
  303.       {
    * _9 C, ~" l, \9 A7 ]) X$ s! E; W* o
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# U. Q. }' c: a# `
  305.         {1 Z9 _8 G9 l$ L, d
  306.           file=(*p).second;- D. z* a* o; c/ k2 k* T
  307.           free(file);, E7 v9 H! x- S# H9 O
  308.         }
    ! {. c5 s( Z+ @( S
  309.         UpdateFile2.clear();$ r( ~7 u  d* R; g, `% H3 J& j" f
  310.         UpdateList2.clear();1 }0 @& L: T: P# C8 @
  311.       }+ x2 J0 S7 ]5 h) V7 h  ]1 ~6 R
  312.       if(UpdateFile1.size())) \: Q# e7 j: }. Q
  313.       {
    ' W8 ^/ p; o; O; s! K
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . `" H4 `; }! N% _. P
  315.         {2 q# \% o% H3 h# s7 T$ a
  316.           file=(*p).second;
    % F$ j. z0 i7 B+ }
  317.           free(file);  _. d# J0 i2 U8 U9 x8 f
  318.         }
    * }2 H7 l7 @' f7 T
  319.         UpdateFile1.clear();
    ( `& W. `+ i' C) Z
  320.         UpdateList1.clear();* Q) ~% ~% u9 V- {/ m9 _
  321.       }
    ; {; R( }% x* o1 ~/ m
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ) B' H/ H& q, q! y
  323.     }
    / Z5 l( l' c7 }# C- a5 k% _- W$ g
  324.   }
    ) X$ o6 c3 y, t3 b, R
  325.   return FALSE;
    0 R4 i. s1 L6 `
  326. }2 V* P' T* r  Y# |
  327. " @/ e0 \6 V  P5 ]4 q) m. {
  328. void CRevAppApp::ClearAll(void)
    2 a8 r9 R9 K" R3 E& M- \
  329. {+ |- L. l8 f$ x0 z' k: U2 E
  330.   LPUPDATEFILE file;" D( o7 ?% c; {* D: I1 ~; y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
      ^, J$ C2 E6 i* j5 g

  332. ! f7 I/ _/ G/ _, f9 T) ?/ Y! u
  333.   if(UpdateLocal.size())# }, {: N+ u  p6 Z+ n, e6 t# T  \+ y
  334.   {
    : y  a# X( @+ D
  335.     UpdateLocal.clear();% _3 P  @/ E$ S, b1 Y
  336.   }
    - R0 `  g$ C2 u$ U3 a0 l
  337.   if(UpdateFile3.size())3 k* n1 k7 @6 R: R" m6 [4 a0 {
  338.   {; a# v- a8 d" \+ W. P, P( h
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 {! R/ R' B* A  t4 a' E
  340.     {8 g/ b/ d; p, H9 {2 F
  341.       file=(*p).second;+ z6 }6 A: {4 E/ M
  342.       free(file);
    / W+ j* \4 m9 g; I
  343.     }9 f. T+ F+ [& k5 Y" d/ c% L/ }+ |4 u. d
  344.     UpdateFile3.clear();
    - ?+ n+ Y) |9 X6 i5 n# I* Z& [0 V
  345.     UpdateList3.clear();
    ; q1 p, z* p& A9 i! H) |
  346.   }
    ( Q% F/ U! L3 V, C8 Y
  347.   if(UpdateFile2.size())) I: L9 m  d* n
  348.   {
    # j. z3 t8 e( Y4 g, x
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      o8 N9 v& V4 D( z3 Q
  350.     {
    ( |& U; _! ^" u8 D) i% f/ }" D: ^
  351.       file=(*p).second;
    6 ~8 t9 c9 r; r9 r5 Q( T
  352.       free(file);
    / \& e# F% [3 O- b3 C- g1 n# T$ n
  353.     }7 Z1 {2 }" e" e& `- j
  354.     UpdateFile2.clear();
    7 R' i. W0 j6 Y; x* I
  355.     UpdateList2.clear();
    7 p+ S1 h, P) S& a; m0 R: J
  356.   }
    . B4 j& {# k: y8 K: Z) G9 q
  357.   if(UpdateFile1.size())4 Y* g9 f$ F  k1 i9 o( x$ ]/ [
  358.   {
    ' o+ A3 m; v4 \, B
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 ?% D2 m/ F0 s
  360.     {6 E. _2 h( V8 ]' F$ ]
  361.       file=(*p).second;
    # A, k. R  c8 l; O) @
  362.       free(file);8 P$ b) q% I* ~3 P, p) g
  363.     }
    4 }  N% }1 s9 `7 Q
  364.     UpdateFile1.clear();
    . K. S5 ~# i, W+ k6 j6 b
  365.     UpdateList1.clear();! }( H8 i2 A  K9 U1 N
  366.   }% L9 o. O9 o3 t
  367. }  7 e  {- H5 m" I, L
  368.   % E  n6 g3 c* n! G! L& a$ g# p( k
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    & p8 H& B1 H7 c7 X- s! ]% U7 N
  370. {/ x$ n8 U: l) \
  371.   int c;, o" q: s$ V  s2 J9 _9 I
  372.   LPUPDATEFILE file1,file2;/ M! _% S8 f8 A) `) c
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    . C5 x! W' L5 E9 }6 @! X2 ^8 R( Z
  374.   std::list<CString>::iterator l;+ H( e! Y5 J" T

  375. % J6 M2 h6 H4 A. [
  376.   UpdateLocal.clear();: F: g* g; ?  Y" m* a5 u
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 e+ B: U4 i* c/ G) W- }* @: q
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    / e9 i9 a( s9 S
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);: E% X6 ^/ f, A- J4 b& E9 C
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);2 C% x6 [3 o. i4 I% D( G! v
  381.   if(UpdateFile3.size())8 g1 V7 z9 m  ?+ Z& A
  382.   {
    ' T9 K1 U, @/ ~) W& h1 q7 h
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)2 a, t! b' M' }3 h/ I
  384.     {
    ) B8 Z- ~- \$ e9 A3 ?: [9 F
  385.       file2=(LPUPDATEFILE)(*i).second;% W2 d% F8 |2 r0 o; R* F
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 p9 G3 d. b4 _2 K4 g% O6 k
  387.       {
    9 A! K2 @# j* d, A9 |$ x
  388.         file1=(LPUPDATEFILE)(*p).second;+ b  @- `% F0 X3 m
  389.         file1->vers=file2->vers;
    ( r' m; x/ }* H. {- g! ?
  390.       }
    ( U2 s/ {' v# q8 D% H" O
  391.       else; c4 K, A8 s" q- F! A- {
  392.       {
    + F- G& y# \7 A  L' j% t' B
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 h- \4 Q, ?; z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    , i* r. {  q' m( ?
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ S" m$ E: k' z- G
  396.       }
    3 B/ v, \# F# m  S  N$ w; P% n7 J
  397.     }0 n" l4 \- E! a  y
  398.   }" p6 c" H; _+ j$ Y$ G. z! t* g5 U9 d! x
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # o: R! j& D1 D$ b1 [
  400.   {
    2 p  i" M6 a0 o: e: g5 \  A5 d
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())% v( m$ n7 Q- i% F  V3 ?7 {
  402.     {
    4 Z5 L9 z# l) K! l% y9 m
  403.       file2=(LPUPDATEFILE)(*i).second;
    8 z: o/ z7 f! N6 F- R
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 O2 R  l3 u: z
  405.       {
    $ \! {+ l3 Q: U% S
  406.         file1=(LPUPDATEFILE)(*p).second;( }9 ]1 \$ |+ E5 K
  407.         if(file1->vers!=file2->vers)+ t9 M, g: U! y
  408.         {+ u# p) R# B" h6 q& ^1 d4 A
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ v2 y) u( a+ J6 r0 t1 ?) y
  410.           c++;& {, b  _+ _9 \  r
  411.         }/ ?+ i! Z+ L- q
  412.       }
    , n1 k% {9 \( @2 d: k
  413.       else
    6 s9 ~0 R& Z2 x. k
  414.       {: [8 v% d) r5 E& n! v
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 I9 I. x+ Q5 z3 D% }! u+ N% `# I
  416.         c++;
    $ ^. w3 s% z/ X9 ]. m
  417.       }+ v4 I3 }8 N$ P; e4 q) I
  418.     }# c% ?  ~$ j* H- O9 H9 P0 s! _
  419.   }/ P; \% H5 T9 P( _
  420.   unlink(".\\DownLoad\\update.txt");6 @. L, J/ _) R8 ^( e! g) T
  421.   if(UpdateLocal.size()) return TRUE;
    4 ]- F% q8 H; p! R: Z
  422.   else                   return FALSE;
    & ?4 d1 ]; n$ W4 o, n2 P+ D' o
  423. }
    0 a6 Y) ~' ]" z* G
  424. * A7 N& [! g. V" t( h/ H/ }6 v
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"& `* _# U  U; @
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    " I  f! I! @, i1 |

  427. 1 l" l/ N; K  ]7 [9 C

  428. 6 @2 x8 K' f& z: r2 p; L3 Z$ {7 v( ]
  429. ( j( u6 |2 T8 Q- B9 D- `
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; l- Y* `2 m4 t; ?) m, R
  431. {
    & B' H- A/ L' h2 \
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    7 |5 j7 `' ?. r- u" [
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      C3 O" C3 ]$ I
  434.   {6 s* l3 K0 Y5 h9 @
  435.     char szLanguage[50];
    / f/ V5 B) t/ S1 z8 |4 W
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; Q3 [& I  P1 c: u
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 p7 }! t: a, v
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ ~8 k, M# ^5 Z% t9 N3 g
  439.     else                                   m_iLanguage=ENGLISH;: T+ E. w7 N8 C, T, L
  440.     char szRegister[100];; g7 ^; N  a  J" J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; l* J- }% a6 t$ l- K6 d
  442.     strRegsName=szRegister;
      U' c# c" p: ~' e" I
  443.     char szPatchURL[100];
    ' W! w: v8 {4 ]; J6 l' Q7 w& @
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 y4 ^: G" j/ [- t
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # O7 C' Z# T$ D1 K
  446.   }/ y6 e/ o* l4 w  ^; P9 x: \
  447.   else
    : }$ C% N) S! \9 }
  448.   {* C, d7 l1 i+ d
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ I! d( c' n, R- t7 }7 X
  450.     strRegsName=DEFAULT_REG_URL;
    / s, w5 F  ^& B$ B! o
  451.   }
    + S' @! O! C: u! ^" K  N
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 |$ D  D  M  W4 A  K% R4 ^
  453.   {3 ]) O5 a7 g0 u1 D
  454.     char szIP[50];- x% p" n$ V, n5 ]9 }: e
  455.     char szDIR[300];; n) x8 Y3 f, N0 O: x( t
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")). c, N2 b5 R& R: B/ O- Q
  457.     {
    ' k/ N% d% r& g: f+ q9 E
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");6 l6 a5 i" t2 \4 @6 a& Y5 k
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");5 h3 T/ n1 W# V' b' A' ?9 _
  460.       strHostName=szIP;5 h7 W. r' D$ o# x7 w
  461.       strHostPath.Format("/%s",szDIR);
    3 q8 U# X" B& w
  462.     }
    0 [/ e' {; z" n9 o( [' C1 Y% l  z
  463.     else2 `7 h" ]6 S) {6 L
  464.     {
    8 s2 I; V+ W8 D6 x' z2 G( E7 y8 @
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( b3 j2 ^# `1 Q5 S
  466.       {/ M  I( }* z( {. u; N# k7 ^: R
  467.         char szLanguage[50];
    / g/ \9 ?7 ^- T6 R! M/ Q  y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 S0 e! l1 ^$ ~1 E" v4 f
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 y  {3 u- Y3 I  b
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; \# v& c7 V, P' H
  471.         else                                   m_iLanguage=ENGLISH;& n9 F2 @$ W4 R; h
  472.         char szRegister[100];  }8 p  |0 I7 [; ]" W3 o
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % u1 Q: P% V# p7 P' |
  474.         strRegsName=szRegister;* u: s+ V) E5 B2 _
  475.         char szPatchURL[100];
    8 ~$ v% ^, e* l" `3 d
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ n) w' e4 |2 \0 C
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( H( j8 Z9 B5 a& }
  478.       }
    0 [; f% T8 I  g5 n' }
  479.       else* `& W& M9 c; i# `
  480.       {
    0 e) ?0 f$ ?2 J  f9 M
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! \3 o5 `7 @0 ?, i7 U. i% `: z
  482.         strRegsName=DEFAULT_REG_URL;
    * Q- ~( \9 g) l5 x
  483.       }; a# d  r# q1 [
  484.     }3 u; u6 B* {! q5 @5 K
  485.   }4 q& T- _# o8 w) n/ [2 ]
  486.   return true;+ t* J0 b& o. S0 ^' _, P
  487. }/ l, t& p# x9 u' M+ _' U0 Q9 d
  488. 7 T7 V( f. D4 h4 B' S
  489. #include ".\ZLib\unzip.h") F, m! }- P8 N$ C
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 [2 |9 _- l* _
  491. /////////////////////////////////////////////////////////////////////////////
      p) \# v2 a6 m2 Q# x. l
  492. // CRevAppApp initialization0 j  o' ~3 {: g$ R) G4 _/ I" y% N& a

  493. , {* c, C2 O& d  Y
  494. BOOL CRevAppApp::InitInstance()
    6 E, K3 a8 q% W; k7 N" f
  495. {4 [# A4 U& j9 X
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' r! f; t7 C( u+ j
  497.   I- \* M3 @& P7 k- Z% G
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);* Z0 n& l3 {* R, L
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))8 Q# h* _: ]) h8 h5 q
  500.   {
    ' S8 e% k" A2 B7 t/ Z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");. s! n. P* Z% D8 }# o' n+ f: X8 }# i& o7 ^
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    1 H$ H5 f& ~5 |$ s9 Y; f
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))9 x; l- a9 i( H$ N% W- U% R
  504.     {
    1 m3 _) j5 d% Y5 U
  505.       strcpy(szPath,szPathTarget);
    9 H) H# Z- R! u* L" {
  506.       SetCurrentDirectory(szPath);1 _* n( L9 V  e0 ]4 T0 L
  507.     }
    8 h! J, M6 [+ ]9 l& c0 B
  508.   }1 u; P: x7 M# r, ]
  509. #ifdef _DEBUG
    * u8 z$ v6 ^) |
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + \) b$ w& V$ \; j2 P# t( P
  511. #else; s  j1 w3 b. X' R6 J0 G8 d+ i
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 u! l! j7 x1 o4 h: |. l
  513. #endif, L9 Y* N2 P/ Q# s
  514.   {
    1 Z5 F5 m/ G4 M  z7 t) X9 m
  515.     char tempFileName[MAX_PATH];) E" l* p( E* H& N- j
  516.     strcpy(tempFileName,szPathSource);
    7 b/ K  V* J- |5 m) c& C4 G# t
  517.     tempFileName[strlen(szPathSource)-12]=0;
    * T( }$ s2 g( j* |& \
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    , @! Y5 H  ^2 L4 |# Z, i6 Y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);) q. Z7 f; c9 d% n
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);2 q1 I0 R7 ~  ^* R
  521.     return TRUE;
    9 T) }# l& a  ~2 f. q( U0 v4 w9 C
  522.   }4 \: u7 E) E8 ?) z) Y
  523.   // Nuke 0118: Delete run.exe/ g& r  C$ ?2 O1 g
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    . z1 ]& y; w! g3 O; g) n% s; H! J
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) J8 c& L* E0 V$ w7 l
  526.   if(!ReadCfgFile("Config.ini"))3 k+ x- p) r( {4 Q5 h9 {
  527.   {4 {4 B4 f$ q1 n! q: r# Z2 ]% O
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    3 V5 X$ }1 C% P  \9 i* T$ t
  529.     return TRUE;; a$ k7 ?' X7 `) z! Q
  530.   }
    ( P- D1 w8 W- ^: `! l0 H5 D6 ?$ s
  531.   HANDLE mutex;
    ) z! A2 I- K$ ?' z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; B% B+ r2 q$ [, c
  533.   {
    % w% x0 z! y6 z" S! I
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
      q1 I5 s. A9 [, C  Q
  535.     {# Y% m4 v/ p& r5 w/ E
  536.       CloseHandle(mutex);
    ! k* g2 U: L0 {
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);3 L* [% @/ V: t+ E& W3 |- g
  538.       return TRUE;
    ; t( k* o: D5 N* t5 g/ ~, C$ y
  539.     }
    7 ?3 t3 U* V, E
  540.   }  / U# _! ?$ p' G" }8 b# |6 w5 i
  541.   CloseHandle(mutex);
    + E* c% H( I* H4 k5 T* {
  542. 4 C; _9 _. I0 w( \
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    0 o0 O- T: [; f, j7 c

  544. ' m! J2 Y" N1 J) N) ~
  545.         AfxEnableControlContainer();
    8 a( {: b$ A) k

  546. + ~  e0 v3 A0 |& T& U
  547.   bCanUpdate=FALSE;
    ' \- O  @9 m8 j, e) `
  548.   dwStartUpSteps=1;: i3 Z9 L$ K: e5 p! P  l7 V
  549.   dwProgramState=AP_NOTHING;2 w" z& L3 a' i$ Y- [- Q
  550. + t! G; L9 n. K/ S0 G/ y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    6 ^5 H) |3 E; g, [4 P
  552.   `. w4 q( R! \; W1 `
  553.         // Standard initialization& L& j. q7 J, J: F+ P$ l
  554.         // If you are not using these features and wish to reduce the size# r4 f% n. k/ y% h& r. \
  555.         //  of your final executable, you should remove from the following* T" C$ @' f- I1 U8 {
  556.         //  the specific initialization routines you do not need.
    ' q5 B/ P3 z2 g" a5 p8 q5 ]9 g& v' \

  557. ; x  n- l7 P, Z& H7 h
  558. #ifdef _AFXDLL
    6 T8 I5 f0 K# O1 C; U+ d& }
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL0 m, W6 O) Y0 G" _& }
  560. #else, w/ Z3 {' \3 z4 C: g$ |
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    0 k! p9 V3 _- n4 ?- f4 z
  562. #endif" D: D+ a1 s* @$ E2 v8 d* {3 b

  563.   ]+ O& [3 e. d0 s) w7 J
  564.   dlg=new CRevAppDlg;
    , D; S& A/ C/ w  [0 R& {
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    $ m4 g, K, l5 s  L+ v- L0 t
  566.   dlg->ShowWindow(SW_SHOWNORMAL);+ |9 T0 B+ G& I$ }
  567.   m_pMainWnd=dlg;5 A& [  \& N# p2 [$ ?# y
  568. 6 D: A- q( j5 I: F, V: M& q# R+ R1 S
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);6 E1 L: V/ D* c- c+ `) v: L
  570. ( K" q* i7 L9 U0 S2 R6 P! B
  571. //  GdiplusStartupInput gdiplusStartupInput;
    3 x; e& h0 ^) I8 |: l% F
  572. //  ULONG_PTR gdiplusToken;
    1 E- m8 ^. [4 t* v* z% h( E; Q8 }
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ) h! X  [$ l, Z4 e& M# I. H6 f

  574. ; E; \- ^& A5 {( y' w2 j  v
  575. //        CRevAppDlg dlg;
    $ X8 y, I2 y9 `* a: k6 U! o7 y+ M% h
  576. //        int nResponse = dlg.DoModal();; o. K& G* o8 c3 N- N
  577. //        if (nResponse == IDOK)* g2 x. f* S% e4 Q; q+ u
  578. //        {5 I9 @# A$ m8 O! d  u: s
  579. //                // TODO: Place code here to handle when the dialog is
    * o$ Q9 O7 R! Z/ c
  580. //                //  dismissed with OK
    0 \# D9 v4 n2 }. d4 f! l* z
  581. //        }; k+ {, B0 `4 ]! B
  582. //        else if (nResponse == IDCANCEL)+ q$ d) ?0 g3 z/ t
  583. //        {
    1 r6 ^3 U. _6 R, O+ x+ R
  584. //                // TODO: Place code here to handle when the dialog is3 Z  c) @/ \  x9 t5 c
  585. //                //  dismissed with Cancel
    # C4 E1 ?1 s# \! o1 m
  586. //        }% l( M, O/ h3 O) L( d
  587. & o  ], l6 w. B% D7 N
  588.         // Since the dialog has been closed, return FALSE so that we exit the  ^$ h! C" w, [! _  P. ]) {9 S0 [
  589.         //  application, rather than start the application's message pump.: w! Y, ?+ V% a' {
  590.         return TRUE;
    # Q, S3 ~! u/ @" Z
  591. }
    # a) p3 K! G5 [1 Y" r

  592. ! T) ?9 r& s+ T+ ]1 A- J! a$ M5 G
  593. char *CRevAppApp::strtok3(char *pSource,char *token), F, O$ `4 e. a: i6 O% R( G1 M
  594. {
    9 a' y  d/ x, W( r4 H" k
  595.   int i;; l6 g; I& l! H$ C2 X7 T
  596.   char *szRet;
    ) ^% {. e$ g& M% r. E* b) ?
  597. 1 |; g/ q  X: P: Z
  598.   if(pSource) { itoken=0; sztoken=pSource; }, Q( T; F. H, B8 q6 m( s# B
  599.   if(sztoken)- I( q* {, p3 z
  600.   {: Q# d: S% g' a* w0 ]
  601.     szRet=&sztoken[itoken];- R. C+ v- T/ M( {0 x8 I
  602.     while(sztoken[itoken])& S2 O  s- J' f; ]! }
  603.     {
      P7 |4 u% g0 a. T0 S" W7 k
  604.       for(i=0;i<(int)strlen(token);i++)
    3 I* [' h. U. r. n- \
  605.       {' F) T# y0 `5 b' y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])* P% M4 l3 `$ U; `6 u1 d4 w
  607.         {1 n3 q3 R6 d$ v- x
  608.           sztoken[itoken++]=0;
    # f, X( j, D% D  s/ d; S2 Q9 @3 M
  609.           sztoken[itoken++]=0;
    ( o6 l6 [- y; \, ]
  610.           return szRet;9 j3 i/ I6 b3 s. ?* b! V
  611.         }
    : R& w+ H4 m7 Q! i
  612.       }' M8 N7 N8 j, `- K& X& q1 P
  613.       itoken++;4 ]5 l* H' W4 s5 I0 _# x
  614.     }
    9 Z- b; _. k# o5 i4 E0 }
  615.   }6 b3 H7 w) Y/ x# [  R
  616.   return NULL;
    & p6 ?: s; f) q  D0 x& Y. M7 O
  617. }1 g/ X, ~" v. G* F7 h

  618. ( Z8 x  g" e4 P9 M/ h  n
  619. void ProcessProc(long Total,long Current)6 l3 q0 d( M! i  @3 ^: _
  620. {
    : F( Z6 y7 n) E& J( n$ h/ c/ {1 o) m
  621.         MSG msg;
    % Z* X4 c2 X. C1 U+ K
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ! o) K* \  q; m! h0 ?1 r
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - f! d' u' ?3 ?/ E
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    7 |! I  L5 g: x8 H8 }
  625.         {3 ?9 y& n" i& q/ N5 ]- g. Z
  626.                 if(!GetMessage(&msg,NULL,0,0))$ p& {3 s2 F" n8 \! {' S  Q% W5 |" f
  627.                 {
    % \# T1 m& t1 {
  628.                         return;
    0 F5 |, o: }* ]5 a0 o1 E
  629.                 }( H8 i* w+ }; i3 v
  630.                 TranslateMessage(&msg);
    / H' e5 N0 s( d" d: ^  x, \& e
  631.                 DispatchMessage(&msg);
    6 b6 l8 g/ Y9 S! \5 }
  632.         }       
    ( K* S& x: y3 a% d
  633. }" x9 r* y' j) \* \

  634. 2 k; b( F! w' u, u
  635. BOOL bFirstChar=TRUE;
    , K5 _1 P# \: P& o0 o

  636. 5 E1 a( d1 [: @7 T9 p0 Q5 c
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 F) f. y( l7 C" d- z- K! I* d' k" Y
  638. {
    ! M$ ~& Q0 Z/ \" D  r
  639.         // TODO: Add your specialized code here and/or call the base class" d! R7 _9 |. I7 z! ]( t. F5 u
  640.   switch(dwProgramState)
    4 W4 c3 o7 @- u  G' O- ^
  641.   {
    . Q9 f9 n! H% J: z4 ?$ A$ J  F: _
  642.   case AP_NOTHING:- ~2 q: L+ o  N+ W: n5 [! v
  643.     switch(dwStartUpSteps)4 T' U" P7 A0 u( W7 t
  644.     {
    2 X  h8 l! M' p6 A: P
  645.     case 1:
    1 H+ R+ Q- _6 S# r% K
  646.       {9 p0 A$ v2 N% Q% i9 `
  647.         int i;
    ; A( m3 m1 F  v1 y
  648.         CDC *pCDC=dlg->GetDC();8 C8 M9 ?' {$ F# R
  649.         HDC hdcwnd=pCDC->m_hDC;1 l; i* W" a$ o
  650. //        Graphics graphics(hdcwnd);, W1 C% I  q. `9 d0 }. I0 t5 w3 b
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    1 H8 O/ _" X( B/ w: v4 s* y- U
  652. //        INT iWidth=bitmap.GetWidth();
    1 n5 C7 }" Y/ T1 }/ k! r0 D
  653. //        INT iHeight=bitmap.GetHeight();
    ( g' a0 M. ]! K* ]1 q4 U
  654. //        Color color,colorTemp;
    - W7 e) V. x5 i% t+ Q: t' [8 \# q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ; |* {5 h& O1 y* [. F( H: f
  656. //        {
    ( w; M2 ~' X$ S* N  _. G+ Y7 `
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)2 q& L+ w3 w! G" i" y- o
  658. //          {# {7 V; s/ [1 p$ v- W( T2 r
  659. //            bitmap.GetPixel(iColumn,iRow,&color);& j3 k$ }' M/ P9 V" `
  660. //            colorTemp.SetValue(color.MakeARGB(
    $ `7 W7 E+ a7 R: F. {
  661. //              (BYTE)(255*iColumn/iWidth),
    9 P% {+ n* E0 M9 p+ N4 ]# E$ G6 V7 W
  662. //              color.GetRed(),! a, t- |7 ?  |' Q5 I0 Q
  663. //              color.GetGreen(),
    & \" m: X# p# a# u( A) Y  l4 ^
  664. //              color.GetBlue()));1 q" P: Q  N& U7 C7 B1 t# t; D
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);: L0 ?# [) P( z
  666. //          }2 B7 n1 h  ?* H' @7 {
  667. //        }
    ) x+ u1 V2 L  N8 `: B
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    * R8 X) X" f$ R( W5 X' a
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");4 i* K3 }7 m! U/ o. q; G5 X
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");) v- e2 }6 R7 u4 B
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # T( H. q7 `6 L" v) D1 r$ a
  672.         for(i=0;i<240;i+=8)6 V  F+ u2 A6 I+ i; Q: \
  673.         {
    , W1 n' \) N. T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & f( o, U$ f3 ~& s8 D3 M3 M
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . o' f" i. W. a5 o! L! Q. K6 K, I
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# w" h+ N& _  H8 ?$ F
  677.           Sleep(33);
    ; F3 L! ^9 A+ L& ^; L1 r( r3 [
  678.         }
    0 f" ?3 Q: U+ \" L2 s$ F* q/ s2 C- P
  679.         Sleep(1000);
    4 ?; q9 J4 _; t4 E
  680.         for(i=240;i>0;i-=8)( w. B$ ~0 |. h1 X' k
  681.         {
    * H! [& B3 b( B, n  Z0 ]( X9 _
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ a1 v4 R( T* w: E
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 ^3 d$ {/ h$ V
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 d) J& o" Y1 X1 @+ t$ N
  685.           Sleep(33);
    : |: z8 p4 T' I/ I' }3 b0 `4 g
  686.         }9 Y' V  T, s0 a( G4 U! n
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 I( O* a' F0 G7 \
  688.         dlg->ReleaseDC(pCDC);+ o$ |7 a: u. g1 f1 c3 V1 h
  689.         DeleteDC(hdctar);
    5 m' @/ b% g6 R
  690.         DeleteDC(hdcsrc);9 d% Z* f% A: L) A. Y: P$ {
  691.         DeleteDC(hdcorg);
    ' ^0 C; S- o8 A4 B4 d0 K
  692.       }  c# L+ v% H3 a. q: U$ q- R+ D
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);4 n' G# u( b7 Y" F
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");% p/ F5 y* S  q+ \' \
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");$ j, ^6 I9 @: A7 F, O! w, b
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    $ o% o3 \; \8 M+ w0 A
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' L/ C2 q* p- s+ `8 o
  698.       if(!Dn.Connected())
    & h, [: \, e2 S4 x: a
  699.       {
    8 `4 S3 C" ?" p9 `; F
  700.         dwTotalFiles=1;7 v5 m: N6 `, f5 k0 W
  701.         dwDownLoaded=0;
      }' K( t" ^& k  \* F$ ]; I
  702.         bSilentStep=TRUE;
    ( z( T3 I% \: i9 `
  703.         bCompressed=FALSE;
    + V9 V; I% }+ W
  704.         strExtLocal.Empty();& @. n7 ]% w: \0 g: N
  705.         strFullName="readme.txt";
    : z8 ^( j2 p) E8 a- J
  706.         dwProgramState=AP_CONNECT;# s' h* q( a) z& P
  707.       }/ Q& I) R1 K# D/ ]; @
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    . f/ R1 d+ \! q" [" \! L
  709.       dwStartUpSteps=2;$ H5 }% A; y* e
  710.       break;
    - e1 ?. L( t7 m  `  p
  711.     case 2:1 p& A" w( O, y% P
  712.       {$ M& q" m/ w+ j/ {% N* G2 w  F
  713.         int iEOF;
    . j8 V5 u) t; v) w! w; e' Z
  714.         FILE *fp;9 k/ |9 a) x2 [. q
  715.         char szString[512];( @; Y6 A$ m0 r8 u6 f
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    % Z# c. z! [/ `
  717.         if(fp)9 G! r/ U, n8 }& e" o* t0 c: C
  718.         {
    1 r* P0 E. A: }
  719.           do$ c) H( b4 J1 I
  720.           {
    : A1 y, @: f, h- Y3 ?
  721.             iEOF=fscanf(fp,"%s",szString);. a  D  _, e4 o- ]
  722.             if(strlen(szString))3 D% o/ B* P* Y
  723.             {
    ; D' ?3 N: U3 I4 q* I8 w1 n+ |
  724.               if(bFirstChar)
    + R5 d2 e6 t. X+ V; ]  K8 ?0 r
  725.               {
    5 X% j. c- K, f8 ~& `8 T, y
  726.                 bFirstChar=FALSE;. T' n! O) C) z
  727.                 bConnectIsBig5=FALSE;1 k* c9 v5 G) v4 u& x0 h. E* \# g
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;8 Y4 p' Y/ d# m/ W
  729.               }/ D; G; w( \/ ?0 i3 j/ O
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    + T- i, `; J6 w
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    6 t. w' Y( Z. c+ A
  732.               dlg->m_ListText.AddString(szString);) F5 q# \  U* h( l9 f/ U
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / p$ c; ~5 b) v5 ~: G$ H+ V
  734.               *szString=0;
    7 c: t3 g8 H# U) ?7 {
  735.             }
    1 }$ J8 B4 R, v5 e6 e2 m# W1 Y' M0 m+ `+ `
  736.           } while(iEOF!=EOF);, O3 N( {, p6 l9 ]1 C$ J
  737.           fclose(fp);: ?6 K" c- G4 W5 b; ]" W
  738.           unlink(".\\DownLoad\\readme.txt");3 J. v+ G9 C4 O3 z/ `
  739.           dwStartUpSteps=3;% R2 J# T6 G5 ~& l
  740.         }
    1 U6 m/ }: h5 _3 R) Q" W
  741.       }! b  o+ t: i2 A  Z& X5 P$ s
  742.       break;
    " {/ x! d; r/ ]; \& d
  743.     case 3:
    1 l! D2 k. m% h3 y, k
  744.       if(!Dn.Connected())" ^. p. d7 n2 Z5 \5 T2 s. @
  745.       {( x2 a  |, Z. D' f
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    9 r; Q+ m- b. _7 v6 n
  747.         dwTotalFiles=1;
    , a& ~9 C' _+ K: _; w
  748.         dwDownLoaded=0;6 K  N$ F4 A9 V3 ^2 _: q, Y$ T
  749.         bSilentStep=TRUE;1 T4 a+ D. y7 n
  750.         bCompressed=FALSE;/ T; V+ L2 K: a4 o6 K/ x6 s" a
  751.         strExtLocal.Empty();
    $ m! Y- e- I# {6 U
  752.         strFullName="checkversion.txt";3 Z) I5 A/ \$ m8 F2 v# N+ R& A
  753.         dwProgramState=AP_CONNECT;! w( I& u6 |$ d
  754.       }
    / O, `3 e# Y5 |" S8 q) i. a
  755.       dwStartUpSteps=4;0 g, Y3 V0 G( [- s' g
  756.       break;
    # w+ h: f" c5 ?2 ?+ K0 \
  757.     case 4:
    % \) L* L) `: q; T7 k
  758.       {4 @5 w/ Z; J0 J0 V) {3 z
  759.         FILE *fp;
    3 F/ _+ M5 b* }% V  g+ Y
  760.         char szString1[128];4 z, v4 @+ Y9 [/ @0 d/ W& \  v
  761.         char szString2[128];
    4 o* l( |1 Y" A& \8 a' T% E
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 h0 q9 w2 j- P- M; W
  763.         if(fp)
    3 m4 K8 N+ }' E9 M  ]+ y& ^% Y
  764.         {
    ! d, y, u2 n! [; d# t' f/ M
  765.           fscanf(fp,"%s",szString1);4 o" \% D+ D) T# d) Z
  766.           fclose(fp);
    4 k$ ]5 c; T$ r
  767.           fCheckVersion=atof(szString1);- r; g' Q3 {+ L1 Q# W
  768.           fp=fopen(".\\checkversion.dat","r");7 {5 W3 e, m5 z) f$ A5 G! s) D
  769.           if(fp)* t& e% g- G) ]5 B) [4 n& P6 y9 A: s
  770.           {$ R/ T+ S0 Z* |5 @
  771.             fscanf(fp,"%s",szString2);1 j) }( h/ d+ k, T
  772.             fclose(fp);2 L1 g: i' M' m$ f% h
  773.             if(atof(szString1)!=atof(szString2))- Z" r* w7 a- Z" T3 u+ i
  774.             {2 f& ~8 o' U8 i/ L1 Y: e/ y5 \
  775.               if(!Dn.Connected()), H0 a+ }& Q3 D3 n6 W
  776.               {/ F4 H8 ]2 Q% A* S: z; j) S
  777.                 bFirstUpdate=TRUE;0 X/ k* v+ E; Q! M
  778.                 dwTotalFiles=1;
    6 o; V+ O/ u# y5 @. e- A
  779.                 dwDownLoaded=0;$ D8 ?; x9 V' f! k
  780.                 bSilentStep=FALSE;- ?1 r: d$ _: t  _! X
  781.                 bCompressed=TRUE;
    0 ~: s0 p, I  ?4 c/ k
  782.                 strExtLocal=".\\DownLoad\";" M5 ?# ]4 |3 d# \
  783.                 strFullName="update.txt";, \2 z/ ^% J3 _
  784.                 dwProgramState=AP_CONNECT;
    # t$ B6 W) H3 C7 K
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: e8 ]5 _4 ^& Z; M
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");! q. T% x9 v+ ]; C
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    9 l1 ]. d/ W! `% r6 q/ q

  788. * N) z* b1 ]5 S# U3 G% [
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) o" n* e, Q; X
  790.                 unlink(".\\DownLoad\\checkversion.txt");" l$ K3 j* k  y" k* U) x0 f. ^
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)0 q  h/ |+ F, o! n& t
  792.                 {! V# w2 I2 H; V" O
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& Y0 m' G8 @( E; b3 ^" F# x
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");2 v* T8 v  I$ n- [4 l/ _7 o
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % `- e) F: E) e9 J3 q7 O1 M
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : W* _) C2 F) e; L0 Y

  797. - ^0 V) X+ N" E! i! G: M0 w7 B
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) d6 q- _5 V2 k: m5 G$ e
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 H1 m+ Z2 t3 P8 {: [
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");4 R: t( w0 [  G6 P
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " R1 t" P0 Y2 \
  802.                 }+ u" m& o0 ]- ]1 m- C. e6 H
  803.                 dwStartUpSteps=5;; T& X5 M( X: s) r% [$ o
  804.               }
    6 ~1 Y% |* {* G% [+ ?
  805.             }
    3 u( D) Y( \/ ]' {5 V
  806.             else
    ; U3 C$ \7 _9 h/ f% D1 J* m
  807.             {# k4 k. |* Q6 b1 [* l
  808.               unlink(".\\DownLoad\\checkversion.txt");
    " R% R9 b7 J* [2 F3 a
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- a, ]) N4 }: r. V
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ l) J% x2 J- U+ \8 D9 x. b
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");7 M* `  t. f% m

  812. 0 }0 z/ H% T. X: r, x
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , V# P% b, {2 [- z$ v
  814.               dwStartUpSteps=99;
    - R8 J3 i- N9 I' o
  815.               bFinishUpdated=TRUE;
    1 y& Q" ?" @( ?3 k# q
  816.               bCanUpdate=TRUE;. v& v. f% [# K  x) M7 @2 x
  817.             }
    + Y1 h3 r+ P- O' ^- w$ }/ S
  818.           }( L2 G7 M: L* B/ B3 `9 G0 F
  819.           else, I2 ]3 I/ ]1 ^. Y
  820.           {
    9 ?6 y  C0 Y* g5 k$ b& u
  821.             if(!Dn.Connected())
    ! j! h" C7 m% E! B2 m; m6 p; D
  822.             {
    5 Z, A! o( u8 Z
  823.               bFirstUpdate=TRUE;
    + s. h& {) m" o0 p- z7 m$ A. I
  824.               dwTotalFiles=1;- O9 Q, X7 n8 T, N9 `% u
  825.               dwDownLoaded=0;; p/ D% x( |$ z! m& F" V, c
  826.               bSilentStep=FALSE;
    / c$ d- r- e) B+ K( Q
  827.               bCompressed=TRUE;& P- M/ d9 F! z. r; K
  828.               strExtLocal=".\\DownLoad\";
    3 J8 o8 g2 v& i! d; n
  829.               strFullName="update.txt";
    ; O) V+ b7 ]4 o/ S* F' m
  830.               dwProgramState=AP_CONNECT;
      X! Q( O! t6 v. g
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ h: m$ V& e& ]4 v. `2 n
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");* b6 f& |/ {# t6 G7 \4 O/ f
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 w6 r) ?9 ]! V/ N( x
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. D2 ^" B+ a! ]9 c: p: G3 V1 G; L
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ' W+ L: m. D5 e. ?* n
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    : \3 ^  z( Y  U$ k7 w! A
  837.               {2 {! e" o3 }& q$ Z0 V' n
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ) ~; `$ r! }, d8 K2 \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # j; g, S- g7 |2 }2 o/ I
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");9 A2 W" W9 u. a  S5 H3 U' T7 E. P
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & C8 P) ~- n# H/ i7 }) J: o, _
  842.                
    2 G+ V. ~4 ]. N: K1 U7 Y
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");/ @9 r  h, B  l' T# d) o
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 e" j4 `* R! Q4 N; T6 C
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; ]) O* T+ x4 B9 s
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 |  g; X( L& A: a& R
  847.               }4 {; @2 L9 {/ K: }0 K: h. O
  848.               dwStartUpSteps=5;
    - @  W  \, t4 y5 O4 w4 d7 L
  849.             }
    ( X2 z2 u2 r8 o4 f' j+ N
  850.           }
    8 \# W2 @  w0 S6 v4 N) N) y0 Y: Q0 m
  851.         }
    ) G: ?9 z: k) W. X/ \- O. W" B& t
  852.         else8 u& e1 a  b: U1 u4 ~
  853.         {
    5 Q0 A) ?0 h9 k- P$ y3 W
  854.           dwStartUpSteps=3;
    7 X6 M7 {) R  Z( s0 T( f) `  R
  855.         }
    8 f  G5 Y8 D. M% K/ C8 `( ?( L# F
  856.       }
    " F1 w9 R8 e" D# E
  857.       break;, e7 z, Y) T3 u/ j$ M5 h
  858.     case 5:2 O# K6 M+ d5 h1 }( s6 A6 K
  859.       {
    3 ?  T; _$ {1 ~
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)  z# b' @* K; @1 l) B8 q$ l
  861.         {' r! m" ?5 J! U( U/ l: F
  862.           int opt_overwrite=1;
    1 Z* h5 J& K4 d; T/ Z' W9 H  M
  863.           int opt_do_extract_withoutpath=0;1 Z1 N" K7 d6 v7 r
  864.           unzFile uf=NULL;( R. F" L. s# A; Y3 p( ]
  865. ( m0 `5 M7 Y# c
  866.           uf=unzOpen("Wsa.zip");7 w+ Q- S( {7 \$ E$ H5 I
  867.           if(uf)8 U1 |1 X' q9 I7 s% o
  868.           {
    - p! U6 {) l  }2 y  F, g, z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);0 x+ s* t6 |7 m$ t" e
  870.             unzClose(uf);1 R  Z; Q+ W$ J, ]* [6 C
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");/ P, U+ E6 E+ p+ t" L* m$ D
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");8 ^8 q) ^7 i5 s
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ; U7 M& f, i4 O
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! W+ G4 c. ^9 z6 G) m  m
  875.           }% E* L+ Y3 k* ?# T& R( t
  876.           DeleteFile("Wsa.zip" );
    5 D; R7 A7 p3 U1 |- K
  877.         }( l/ d$ P7 G, @9 r+ U9 u

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-6 02:22

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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