CSUpdate.exe源代码

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

5 c4 \. F- i5 I6 S
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , d9 H+ S! [, D# A. t& y
  2. //) O( P8 x6 m3 K/ c9 Q/ |% j
  3. # ~+ F) p: p+ H
  4. #include "stdafx.h"
    % q/ `2 p1 Y  t! k

  5. 3 `6 I4 l$ b, N7 C5 C
  6. //#define UNICODE: m( f  K4 h3 ^2 f  t4 l
  7. //#include <gdiplus.h>
    # e2 L. c* A7 V* Q, E* r
  8. //using namespace Gdiplus;: a3 {. U6 M$ m- K; F# G$ }

  9. % C6 D0 |7 v2 M9 I- n* B6 x5 H
  10. #include "RevApp.h"( F4 S3 O8 p" L  Y* t
  11. #include "RevAppDlg.h"( U7 y7 T8 s& k: @

  12.   M& R* l  K/ |( y6 y: c2 q
  13. #pragma warning(disable:4786)& G  B4 @/ B3 G: |
  14. #include <map>1 t2 F7 s% Z0 N  o9 [0 _- L* _1 X
  15. #include <list>
    + e* Z5 M9 N" b
  16. #include <direct.h>
    " b# y9 ], A) h. Y) Z$ x8 ~
  17. 1 v( M% T  i# ]5 p  y3 F0 K5 b
  18. #ifdef _DEBUG
    " P3 n4 T5 d, J
  19. #define new DEBUG_NEW
    9 ?& F) F6 ~' }
  20. #undef THIS_FILE! B1 \6 H4 r/ }+ @
  21. static char THIS_FILE[] = __FILE__;
    ! o: n/ I9 h. U7 {' ]0 ?
  22. #endif5 T* i# Z' c) W1 r, Z$ o8 O) w
  23. #include "SkinResDef.h"8 n: Q. W0 `# ~) z: |5 H2 L( E
  24. #include "ChangeBG.h", Q, e  j$ _* j
  25. #include "AFXINET.H"
    0 Q, A" ~6 X0 e7 H; ^
  26. . O; R3 W7 w2 n0 V
  27. #define TRADITIONAL_CHINESE 0( N1 s) A( T6 B5 _. S4 |
  28. #define SIMPLIFY_CHINESE 13 [7 W! `- [- P1 d6 Z
  29. #define ENGLISH 2" n5 F8 z# s, n4 m8 z7 _
  30. int m_iLanguage = ENGLISH;' X' ?3 R6 }, ]5 V
  31. /////////////////////////////////////////////////////////////////////////////
    * }3 i& ?5 d* g  {2 w
  32. // CRevAppApp
    ) J9 R5 o4 q6 B$ ?

  33. ! P2 J* ]( \0 C+ c8 O3 n
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    # _( I/ v6 I2 ]3 \7 E8 Q, n" b( y
  35.         //{{AFX_MSG_MAP(CRevAppApp)
      l3 t1 @+ ~; M" G! m
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    7 e: h+ k/ N  S8 Z- q0 s) J
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    - E3 ~6 Y# L& p, L' y
  38.         //}}AFX_MSG
    7 ^( T4 X4 ?" ?' a: ~
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! u( D2 p; T) s- @1 R8 I  q
  40. END_MESSAGE_MAP()
    0 F) S% a: M# w

  41. 2 z$ ?- w7 _, E0 |" ?: ?
  42. /////////////////////////////////////////////////////////////////////////////
    ! C' w3 a* i0 g: h% ?9 P% p5 n
  43. // CRevAppApp construction
    5 M2 O9 b" s# A. i' u6 Z

  44. - b9 m% a! g5 O9 L5 ]7 i( s8 u
  45. CRevAppApp::CRevAppApp()9 ~- |+ W7 u- m. l3 E. i& @
  46. {& c8 j6 k" m) A3 o, n
  47.         // TODO: add construction code here,# O% g3 |. q5 p4 k0 i
  48.         // Place all significant initialization in InitInstance
    . @6 k- Y# U. I/ l6 V% O
  49.   bDisplayIsBig5=FALSE;
    + ]8 j) N' b( y
  50.   bRestartUpdater=FALSE;
    ) c7 F  X5 J5 p! ?) g
  51.   bFinishUpdated=FALSE;
    ! U; j% W# k6 V
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    - S$ q" Z, R9 U5 r6 ~0 P
  53.   InitChangeDataBig52GBKS();) t2 e- k) ~6 d% G
  54.   InitChangeDataGBKS2Big5();5 k0 d) I& _$ i' u8 R: b
  55.         //, n$ u% b: Y: G" b0 L
  56.         bClickRunExe = FALSE;4 f  H- z2 ~6 g- J: `
  57.         //# U8 A1 A3 Z) _
  58. }. `! l5 l2 b$ C0 Z7 H

  59. 6 X. y0 Y; L1 Y, X! i0 @& L
  60. CRevAppApp::~CRevAppApp()+ k! W: X8 G$ Z8 U5 J6 I6 Z
  61. {0 T/ U0 x' Z0 }/ ]8 @
  62.         // TODO: add construction code here,/ b( Y) t9 i+ _! b6 Q
  63.         // Place all significant initialization in InitInstance' C, \. p* V% B8 ?9 l3 \
  64.   EndChangeData();5 ]/ @9 }$ E/ L! k! o5 ~% s) D
  65. }
    * D5 U$ x$ a! d$ e3 x3 c- w6 @0 @

  66. . _" b# p8 n( r
  67. /////////////////////////////////////////////////////////////////////////////
    7 T5 ?5 c9 F' R9 E5 V& I" U: I
  68. // The one and only CRevAppApp object
    " Z- O3 u+ b! H; D

  69. 9 h2 S% j% z: e# h* X/ P: L9 g+ \
  70. CRevAppApp theApp;7 x% ]+ w7 i; s* y7 m" U5 X
  71. - m. B$ Z" v9 _5 P
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)' G/ E2 o* f5 D$ _/ D) }
  73. {- ], ~* s) I6 S
  74.   int iEOF=0;' w/ B: i8 k* ~6 T( H
  75.   char szTempName[MAX_PATH];5 h- F, k6 N$ ^1 J& Q
  76.   *szFileName=0;1 g/ ?' C( G0 }% y" N0 s5 I
  77.   iEOF=fscanf(fp,"%s",szTempName);8 j' x: I& J+ D9 X- Y* F. Z" [
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    1 _2 A- ~. R9 m9 V5 K% O4 ^3 n
  79.   {
    % H  G+ x: O/ u$ @
  80.     strcpy(szFileName,&szTempName[1]);
    ( S* M( X3 O0 ]% i, t; ^* ~% _. `. o
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    , Q! \! H8 K* E  c5 ~
  82.     {6 F) f) }5 A6 M; h! R
  83.       iEOF=fscanf(fp,"%s",szTempName);# S; Q0 J/ |. b8 z# x  ~+ u
  84.       strcat(szFileName," ");
    , d" _' a/ P/ i7 M/ r2 }7 F
  85.       strcat(szFileName,szTempName);1 c; d: G( A% g
  86.     }6 [# W8 m& ]1 P( n
  87.     if(strlen(szFileName)>=1)
    , G/ A( r  v9 q" Y. m+ W0 b
  88.     {
    5 H8 E! H4 Z5 }/ ~
  89.       szFileName[strlen(szFileName)-1]=0;
    + H9 h. K+ l& J
  90.     }
    3 W+ r! d8 R9 e, k: ^% `
  91.   }
    - g5 J; p$ [2 q3 a4 o
  92.   return szFileName;# }, L( T/ |) v+ X& {9 q% B
  93. }' f' Q, r. y6 ^, a9 H5 q
  94. # L- Z6 A+ p9 o( W1 a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    9 ?/ }$ H- X& n8 j# |0 `8 Q
  96. {9 a# P! i1 T3 v/ k( u
  97.   FILE *fp;2 r2 s! Y6 x( _) g6 n- F
  98.   char *key=NULL;
    7 E  m8 L% E6 Z. q8 X& G
  99.   char version[MAX_PATH];
    $ \% A* B! u# ^0 q, N
  100.   LPUPDATEFILE file,olds;; N. H' y2 m! V1 g. i
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    : j% y, E1 k9 S5 L# e. O' {

  102. / s2 b8 l- R/ H7 C6 u/ h% M
  103.   UpdateList.clear();
    4 N9 ]; S( k; |' y6 ^. H8 x" c# j. a
  104.   UpdateFile.clear();: ]" E8 r% V/ V( p6 c$ F# g4 V* c( o
  105.   if(GetFileAttributes(filename)==-1) return false;5 I* z0 h5 O' y
  106.   if(!(fp=fopen(filename,"r"))) return false;
    + O( d4 E2 G9 @# o6 q, i# ~4 l
  107.   fscanf(fp,"%s",version);- k. T' w4 ?4 }9 g7 t; {  a
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }" H- v. b7 w- S8 g
  109.   while(fscanf(fp,"%s",version)!=EOF); w$ {1 l0 i, `
  110.   {+ }) }9 V6 [% C& o9 B$ r' o
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * H! Z& V. _! s. y
  112.     fscanf(fp,"%s",file->path);
    % p3 p' ]& e+ x7 x+ P4 O
  113.     ReadFileNames(fp,file->file);
    $ ^6 h5 n% v1 M
  114.     strcpy(file->full,".");% N5 f; Q& S% r: x3 C
  115.     strcat(file->full,file->path);' @6 X2 M( ?& t  }) h
  116.     strcat(file->full,file->file);* Z+ i/ I8 g% [/ i! Z' v# A2 n
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    0 A& h+ ?+ d9 ~$ k' }
  118.     {
    9 l3 J" Q) r% C. |5 C! ^' J
  119.       file->vers=(float)atof(version);3 @$ s+ Y$ m& y; }: g) h8 o3 l
  120.       UpdateList.push_back(file->full);
    4 ^  A* s* u4 c, g5 Y: m
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    4 Z2 B9 l/ X& o! T. O
  122.     }
    " b) X& @# p* F& p' R
  123.     else
    ; K. }- P3 P" Q2 B' k) B. P
  124.     {
    2 O1 E& u% ~4 l
  125.       olds=(*p).second;
    . r* f0 \" }; x& R# i9 I. A3 X8 x
  126.       if(olds->vers<(float)atof(version))
    7 [) [: E, r- e- m0 N5 H
  127.       {
    . M* q- |0 w- w! J: b* R- i4 k
  128.         olds->vers=(float)atof(version);
    9 T; \7 o7 S- T3 m" g, Z. }
  129.       }
    ! {! g7 f& Y$ b% _* E- B8 n
  130.       free(file);
    ; w& C# b' _9 q+ ~
  131.     }4 j- g1 F( d1 l9 }, g+ N
  132.   }4 ?- h& ?8 S$ @; ^& G. T/ \
  133.   fclose(fp);7 v  E+ M0 `6 _/ c8 b
  134.   return true;
    * B, M: \7 h( s" `0 |# I+ y0 J
  135. }
    $ T' D7 i9 l- [

  136. & K* o" z8 H2 q" H
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)2 ~7 X* O' Q. z$ U2 `9 m; h
  138. {
    : q% X2 M. v" ?
  139.   TCHAR  szFull[MAX_PATH];( c; A8 y' A8 f7 C0 O
  140.   TCHAR *token,*inter;
    # [8 Y, h1 |" P% P: k. O- \
  141.   *szPath=0;1 ~7 |8 G" i( z3 {0 L
  142.   strcpy(szFull,szFullPath);( f& ]# c8 I3 O. t' L/ X- g6 x
  143.   token=strtok(szFull,"\\/");
    " c: z6 @5 {3 o9 y. S! F+ @. h: @
  144.   inter=token;
    2 `+ Z# |2 m) a' v% a. r  x
  145.   while(token=strtok(NULL,"\\/"))
    + `' }6 r6 J& C8 N2 M& B& e8 Q
  146.   {
    ! W7 f$ H' {- T+ [/ P
  147.     strcat(szPath,inter);4 M" O: D1 y. }5 f
  148.     strcat(szPath,"\");% o. H$ s0 D8 u
  149.     inter=token;
    7 o! _9 A) O7 h3 d
  150.   }
    5 O# [5 I0 C8 N4 G: q
  151.   return strlen(szPath);; O5 |: x7 F: E: M+ c  u" b
  152. }; l2 r( r# B5 [
  153. 4 R& K; d6 }. d' j# X2 j* H, F
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase), M5 N8 r3 ?/ P! x) ?
  155. {+ F/ F  M# U$ o8 b4 K/ Y" x( d
  156.   DWORD attrib=GetFileAttributes(Target);
    9 {) k& b# T2 L' n% |) `
  157.   if(attrib!=-1)  @2 B2 ?- @( a
  158.   {; Z6 R; B1 l) t* _# |2 j
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))0 Z% J7 _) d/ ^# U
  160.     {
    4 k" _) h. d4 F* v- \
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);0 @! l) [" c! V; W# O
  162.       SetFileAttributes(Target,attrib);
    / `( w$ Y  _6 e% V6 X
  163.     }: M  p6 b7 y. L- [% a5 k
  164.   }6 B! B! E- X  N( m- R- W1 |3 n
  165.   CopyFile(Source,Target,Erase);
    ) M+ q( o# o8 `) n& U
  166. }! J7 F4 D+ I5 l' S
  167. , }) {! [5 D! B. U
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : ^# N6 G) c) L, X( L
  169. {
      P9 i& g. o( @: V8 P( @) I& C
  170.      FILE *fp;
    3 Q5 v$ \, `) T  }9 A9 J1 ~+ m
  171.      char  szBuffer[8192];
    , j+ j  R0 ^) @# k
  172.   va_list  argptr;& K( t( Q# V" H5 j( H" A, P/ b
  173. % G% W  m0 S* T9 q
  174.         va_start(argptr,message);- F4 D9 V+ ]7 s7 y; P$ `: G3 C8 I0 e
  175.         vsprintf(szBuffer,message,argptr);0 Z% @: A) |$ u5 W
  176.         va_end(argptr);, v* k1 |8 q! B/ o1 g7 @
  177.   fp=fopen(FileName,"a");  n3 i# \" U/ [4 C* u  D6 e5 {8 k
  178.   if(fp)7 X* ]. c: E+ h$ A
  179.   {
    & ?- S' G6 M$ O: T
  180.     fprintf(fp,szBuffer);2 f, c* E* {& ^- U* i# v( a
  181.     fclose(fp);
    $ x1 G0 U% _8 V* v
  182.           _flushall();5 E0 u, U; Q  _2 `( v" g9 a# y
  183.   }
    / M& ?( @: j1 y9 f9 v; ?
  184. }+ _( b& A, _; b% u$ g1 n/ U7 d$ K

  185. : q7 v2 e2 i  n# G: O
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ' a  m/ j0 r$ o& f
  187. {7 {% r# H: o8 V
  188.      FILE *fp;" k7 a" X, c( Z6 P& y
  189.     DWORD  attrib;
      s  [( Q2 D, b+ Q: @5 e
  190.   attrib=GetFileAttributes(FileName);0 F" n% _1 p$ J
  191.   if(attrib!=-1)
    0 W$ M- I* s- \' O( \
  192.   {9 k! u) \2 T$ j" [
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ; `2 k  h, u% ?/ d* p. e, N; m
  194.     if(!SetFileAttributes(FileName,attrib))
    ' p7 W' J1 i( @1 h: e( |
  195.     {
    : z5 q( k) t" {; ]( E9 @; O- D
  196.       return FALSE;
    - }' F, ]3 q6 X  _3 J  S1 ^0 O# ?
  197.     }9 a! L& |6 C) o  {* O
  198.   }  F" \* S! Y0 p  E6 }
  199.   fp=fopen(FileName,"wb");
    * E, [  F2 h. t: c: ^3 Y+ ]
  200.   if(fp)4 {' P" t; T8 p: Q. X- S$ a
  201.   {3 g& `5 {* B: F7 d- J8 ^* e4 l/ A
  202.     fclose(fp);
    7 i3 D$ y1 o: v5 V
  203.   }
    7 z* Q& J4 j3 u1 M) |9 @1 s
  204.   return TRUE;
    0 ?$ L- u! ]0 s$ e
  205. }6 a3 t. d9 j9 p+ v

  206. 3 @) r- z2 u6 ~: c) b+ I
  207. BOOL CRevAppApp::UpdateLocalVersion(void)! Q8 q: j# @' ]! E' p$ ?/ U- Y" {
  208. {3 n2 O0 D- M) i5 p. J
  209.   char filename[MAX_PATH];" Y5 U0 m1 T1 x8 ~, `
  210.   LPUPDATEFILE file,olds;* ]* |, T3 Y+ y$ Y; L1 @* W
  211.   std::map<int,CString>::iterator i;
    3 i) p8 \* m5 S4 `7 g" R7 o
  212.   std::map<CString,LPUPDATEFILE>::iterator p;# ]: ?' j* T5 F6 x, D1 G
  213.   std::list<CString>::iterator l;" l- q& m0 h, K7 n

  214. ' {# s$ u! e/ _- ]/ c1 |
  215.   if(bFirstUpdate)
    0 v* y5 v8 C  _+ m9 [$ }+ K
  216.   {
    ! D. M' u( b; O5 b6 |
  217.     dwCurrFile=0;0 d& v  j% l+ L; F& E5 l, k
  218.     bFirstUpdate=FALSE;
    & x2 T, w$ \% `* K0 @
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())7 Q9 M2 o/ H& i  f" {
  220.     {
    3 V5 `/ t( M6 u( W
  221.       dwTotalFiles=UpdateLocal.size();
    ( U9 d7 z7 m1 G/ z  r  w
  222.       dwDownLoaded=0;
    8 J/ e: _" O: |; _9 F' J  G
  223.       bSilentStep=FALSE;
    ; c' f4 \6 F* p- b( q, ~( E- @* x
  224.       bCompressed=TRUE;
    " W$ k2 {0 V# x
  225.       strExtLocal.Empty();
    / R" X! ]$ s; c( e6 Z9 x
  226.       strFullName=(*i).second;
    : z5 Q' N' u* u% ?5 |0 e2 Z
  227.       dwProgramState=AP_CONNECT;. ]' W  F  h: o- q. ~8 {2 u
  228.       return TRUE;  V4 K5 \- k, ~: Z. j- {1 ]
  229.     }) h7 v, h( t% @
  230.   }
    ) `  W9 L* S4 o3 D6 D9 p
  231.   else if(bRestartUpdater==FALSE)1 H2 N" w! O& i/ G% l* S' q
  232.   {' B( v& U# R  z% k- G
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    2 r: Y- j  `3 P7 q0 h( ]# ]
  234.     {
    $ g' m& X2 j9 M% F: n
  235.       file=(*p).second;
    0 C+ y; O7 b! H2 j% r) ]
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    3 c* E3 f9 t5 b0 t* C& T# F- M, m
  237.       {
    4 t) D1 F/ h, H& u1 e
  238.         olds=(*p).second;
    / {  _: |4 |) v& Q+ u
  239.         olds->vers=file->vers;/ a2 u# V1 H  j/ B% }0 r- e
  240.       }, O5 b) f4 x! H* n' e1 t: t
  241.       else6 w0 P; ^. y8 ^8 j% Q4 `) z
  242.       {
    . V3 @, B- W7 Z9 F" |  i1 A. H
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " n$ a6 [! O# S: P! F
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) J. X% j7 q# ]
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));5 O7 _2 `, g4 d" p; s3 w2 i! k
  246.       }
    ; z; Z4 w1 O2 {: x
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    $ V& H- G& F- o: q' |
  248.       sprintf(filename,"(%s)",file->file);
    7 S" L6 y2 i  \/ _) k
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 E5 i7 q+ r* I+ d
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }% x) l. `; J2 E  x
  251.     }
    2 Y7 M. P+ R% t1 d. \8 B  y3 g7 k  ~
  252.     dwCurrFile++;
    / l) k! B" x$ i
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())' N/ @2 H, k/ ?/ q; |) H% r
  254.     {
    & Q2 U, }3 q) D  Z
  255.       bSilentStep=FALSE;+ b, U( C( ]9 |' X5 {8 Z# `3 m
  256.       bCompressed=TRUE;7 w+ h4 R6 i& v& |
  257.       strExtLocal.Empty();0 ^/ h: d( y# c" O: l
  258.       strFullName=(*i).second;
    ; \- z% Q% w3 [( a
  259.       dwProgramState=AP_CONNECT;( Z# `$ M' r# A+ K% n
  260.       return TRUE;
    4 S% c( |5 q8 Q6 I2 \
  261.     }
    * c9 o. F3 c2 q3 S& `" e
  262.     if(!bRestartUpdater)
    " {7 j/ a5 O6 l6 l/ P6 k/ x* }
  263.     {/ L- q2 ^% O6 b& s2 n
  264.       int iCurrSize,iFileSize;( `$ U# v- h7 ~& |
  265.       iCurrSize=0;
    % x" \# \( @- F8 y1 L7 I4 T
  266.       iFileSize=UpdateList2.size();, T6 @- b' q1 J! ^9 |7 c
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");  r5 [! [2 ]6 C
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    3 u* D  O% w" o: B& ~, [3 G( Y  k/ s  S
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 Q9 _8 B6 T0 u5 t+ Y! f( i9 ~
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " G8 i4 c' p& U* N0 V6 x) T5 r& ^
  271.       Fclearf(".\\update.dat");: ?: D# `, d8 w
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * z. T+ G2 f; O, }' P2 U
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % d! P( k" V+ v
  274.       {
    % m' e0 J; B, T  m9 M
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 P1 E- H6 P. F1 D8 I9 |
  276.         {
    % ^$ D; i5 \  Q, c
  277.           file=(*p).second;0 J, _1 T' U* |  q% ]" `4 n3 Z/ [6 |
  278.           sprintf(filename,"(%s)",file->file);
    7 d. v( H3 M3 N0 Q
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * U! x2 i* R+ u( s
  280.           iCurrSize++;
    9 l6 q; p# f3 s, D$ O- W
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));& w8 ]2 }% `9 h5 ?
  282.         }( B8 N2 F' B/ V* G( c
  283.       }5 v& }6 i- G& h! R
  284.       unlink(".\\update.txt");; e& N! L* R' s" }. M6 ^! }* u' E+ z
  285.       unlink(".\\update.tmp");
    # P" P! f8 o7 W8 c  ?) y$ |# s
  286.       Fclearf(".\\checkversion.dat");0 b/ x/ ^; R$ t8 s' j
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);5 ~8 M3 I' h% l( Y6 G
  288.       if(UpdateLocal.size()), V0 _" D+ c" o& n6 \
  289.       {
    9 ?* N) I, ^1 H) t
  290.         UpdateLocal.clear();1 c2 s" i# p! R) ]; J" [/ R* F& N
  291.       }- O4 y' q" X" U
  292.       if(UpdateFile3.size())
    1 G" f2 |7 [& n" a* `6 g+ L
  293.       {  M4 S/ x4 B$ r
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* g* G/ o0 e7 A# M
  295.         {9 K: f! e5 i4 f2 ]1 ^3 e% N0 ]& O
  296.           file=(*p).second;
    3 U1 j# A- ^' ~5 Y( C* E
  297.           free(file);3 f2 _( R9 V; g6 ?5 g: d
  298.         }, e- ]  s) Q( E6 M/ @, e1 ]/ p
  299.         UpdateFile3.clear();9 h- Y  h6 m6 E
  300.         UpdateList3.clear();8 ^7 I1 C- T1 Y6 w3 ?6 U
  301.       }
    : x2 I' r# k2 w4 G# L$ r7 J
  302.       if(UpdateFile2.size())+ T8 Z2 o6 a6 H2 J8 L
  303.       {
    + J9 T& N' m: ?# N1 r+ ?( V
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 E3 r' r8 X# k# N6 k* A# U
  305.         {$ E. l2 n1 ?$ |; d& d# J
  306.           file=(*p).second;" Y, Z  i6 d$ w4 m, y" t9 n
  307.           free(file);
    2 n5 m: t0 W- ]2 \6 `# X4 M
  308.         }
    4 u) a. w% l- }" w. W$ U
  309.         UpdateFile2.clear();
    7 B1 B) g+ m9 r; M2 I& u
  310.         UpdateList2.clear();  N9 F- Z& ]  R2 a
  311.       }
    & T$ z1 X8 }9 v* Y6 D7 f
  312.       if(UpdateFile1.size())
    " e: m0 f, g0 [0 u3 X  d9 I
  313.       {
    " Z/ O5 j' B' H; n; k" a
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). j) B* P; t% |3 ]3 s$ M
  315.         {
    , E7 M$ q; x* [4 y" C4 c1 Y9 X4 q
  316.           file=(*p).second;4 v4 U4 P- u+ ]& r, |3 U# m
  317.           free(file);! f: \. X3 j! P" P/ A3 n& b/ N
  318.         }, q* Z% B2 v+ Q1 ~
  319.         UpdateFile1.clear();  L0 U; B  l( _/ A0 Q1 U
  320.         UpdateList1.clear();* Y- `' ~# Z8 r
  321.       }
    ! Q$ Q- ~. v/ r- P: |+ S' _
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));' c% G$ _; Y( m& s# M& C% [
  323.     }
    9 P  b; S  n( `$ S0 R1 t5 K
  324.   }
    8 S0 I& r) p& z/ p1 }! n: t. @- Y
  325.   return FALSE;
    9 B6 Q# p5 U2 L7 j* m& d  g
  326. }4 K. i) `2 w5 C
  327. 3 r6 o7 |# e; l5 l( p- V( q
  328. void CRevAppApp::ClearAll(void)/ R% H. Q3 F- P
  329. {7 d+ f; Q4 d1 V6 g
  330.   LPUPDATEFILE file;( u: j8 n% Y; {# w2 v& u
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    " p/ V& t5 \$ i; n

  332. " K! ?4 c' W) e1 v
  333.   if(UpdateLocal.size())
    " [* D7 G$ O2 j  _+ R" d' P% V
  334.   {4 t  w, n' X- F& y7 k4 B# ~3 X
  335.     UpdateLocal.clear();
    2 [/ g7 P  Y4 a
  336.   }
    4 W3 `+ d+ v' h) ]7 c: ~4 Y
  337.   if(UpdateFile3.size())
    - u! ~1 Q! V0 ^
  338.   {
    - m- Z% L4 }8 E* C
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" E* W7 C  G; l7 |' _
  340.     {
    . q7 r' `; T. X: M# e& j
  341.       file=(*p).second;0 }1 {2 N/ i# U9 c% n' g% A
  342.       free(file);
    $ b0 \: `$ u. H2 C
  343.     }2 e% O' l- r9 z# F* O
  344.     UpdateFile3.clear();
    1 G: D6 C+ q4 m8 ^
  345.     UpdateList3.clear();
    & \6 a( R0 W9 K1 W1 T. a
  346.   }
    ! M: J7 V& Q) Y7 v0 a: C7 E% b2 L
  347.   if(UpdateFile2.size())1 q! z' Z. B. @$ ~8 G" ~$ L5 I
  348.   {7 }* O* x; V5 d8 d6 \
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); r" J0 x( p- D2 e' w9 R
  350.     {8 V( N# l8 f: V# p
  351.       file=(*p).second;
    % _9 C) @4 p' Z
  352.       free(file);0 G% T4 T' ?# F1 y4 J4 e
  353.     }# O6 Q( @5 T& ^; h1 C% L
  354.     UpdateFile2.clear();
    1 d9 g/ Y, b3 M- \# W" ^
  355.     UpdateList2.clear();- z  f9 X, T' j
  356.   }
    ; k. i2 F" T+ j0 k
  357.   if(UpdateFile1.size())2 O- i) g9 e6 }  W" _
  358.   {; f: z* l! F( ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' Z( p0 C9 ]% h5 V3 z* s
  360.     {- d# m1 [7 E$ n" m8 U9 a
  361.       file=(*p).second;# X9 ?( s; l% w' V2 m# v7 @
  362.       free(file);- A5 ~! o8 Z: t" b6 j+ z- A
  363.     }
    , l  j+ _3 s( t
  364.     UpdateFile1.clear();" r1 W% \' K7 v& D4 S, v2 @
  365.     UpdateList1.clear();& C" F$ c' g3 ?2 \
  366.   }6 O5 L- o' L; o9 k. P: w  V
  367. }  1 N! m$ x# n- Q; n' Q
  368.   7 @3 ^- J- [# r$ H' ]
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    7 q1 f, e( e0 c% m
  370. {- [/ ]9 i! A  D% {; M+ b2 ]
  371.   int c;
      j4 b: U& Q7 Y( U! A4 m( l
  372.   LPUPDATEFILE file1,file2;
    3 R: J8 C, ~+ l) ^+ u- f" K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    5 \0 r+ D9 z/ A0 T  ]0 e8 M
  374.   std::list<CString>::iterator l;! l% `, Q4 ^0 o7 w& S
  375. ; I7 ~; k* {; u0 Y) M
  376.   UpdateLocal.clear();
    0 S3 g! ^* Q" W- M9 N
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( _& n; _; G0 J4 P9 H
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);/ Q! h0 a7 r! E- C4 W1 p
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);7 l& |8 J( g) o% H
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    , h4 ^, O) [- S- I/ V# Z7 ]" [% [( X
  381.   if(UpdateFile3.size())& N" d2 C, d0 I( Q6 W
  382.   {
    $ l2 v1 l/ |  Y: v0 e
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    1 T, T; u# p# N2 m0 a
  384.     {
    3 X3 L5 _8 p- I1 s0 u
  385.       file2=(LPUPDATEFILE)(*i).second;# C( H6 S! P6 G; D" A7 f, O
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 ?" Z0 t  c+ n3 G- r5 x
  387.       {" j3 V# e7 ]8 R( R3 X
  388.         file1=(LPUPDATEFILE)(*p).second;5 @- D3 `; A+ z# n
  389.         file1->vers=file2->vers;) n9 m( L6 K4 z/ K
  390.       }/ g) v( k8 Y. f+ U9 g3 @+ _
  391.       else
    # `' K6 s6 p+ I5 J- h. g8 }
  392.       {
    6 w! D( w9 t0 A9 F5 X2 U: e2 H# M
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 z8 l% q. a5 w& b; p) A6 y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));: q: h" e2 Z; i* Q% F( U' o
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));) Y: |. O7 B. A% R) R  @5 ?
  396.       }
    7 C! C) m3 U& I3 q4 @: @
  397.     }
    3 H2 [8 e# ~8 g4 O7 `6 r6 p
  398.   }" k' i7 S7 W- x/ S* i$ C; u
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % f' K5 I4 f9 f0 j
  400.   {
    6 k8 `' x0 `+ O! \; x
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    1 A" s( }& h: H9 x9 Q- _6 w
  402.     {
    / x5 e7 N! d% S- j% ?* |9 @8 C$ Z
  403.       file2=(LPUPDATEFILE)(*i).second;; J  _; h+ J+ \5 w3 S  b6 u9 s% l
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! x! i8 N& R* i! V, }- h
  405.       {
    * ?3 u; M- }1 G2 y6 Y$ h$ O+ N
  406.         file1=(LPUPDATEFILE)(*p).second;3 d! N% Y. z0 d! ?. X- Q4 K
  407.         if(file1->vers!=file2->vers)+ L5 |# d7 ?9 D
  408.         {
    3 ^  ^/ [$ k/ L8 ^6 O( t, ^
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / i% I% C& d& }0 h0 H: n5 D9 O
  410.           c++;
    . t! Z+ H' o- X: |; u
  411.         }
    : n! J0 e  s6 a6 `" S) `$ b2 ]7 D
  412.       }
    & s: C) n4 C& [6 A. L8 x
  413.       else
    6 N+ t, {9 H* ^3 A( J
  414.       {' o# |% ^( t/ Y1 E/ }; _
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! U7 l, x" J9 U2 {# e4 h  R) L
  416.         c++;4 m* q2 H* O5 s& d$ U7 @
  417.       }
    ! d) O5 j! ^3 D2 A
  418.     }9 q" q# ]. S0 y2 g9 @" s( T# k
  419.   }4 v5 l& F8 u8 `! _/ {
  420.   unlink(".\\DownLoad\\update.txt");
    , V$ C* w( D  ]- u
  421.   if(UpdateLocal.size()) return TRUE;* }0 y+ |7 N5 h" d' \( X; Y
  422.   else                   return FALSE;) X) ^3 ~" `0 a" I9 Y5 E* K# G# c$ Z
  423. }
    ' A* P9 M  l6 v$ j

  424. ! \! Y: @( {0 j! t
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , p1 E% W$ r$ V5 S
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ) p8 c' f, _3 J% R' O
  427. 8 E( D( g/ q# q4 {
  428. + ]& ]0 |' d+ ]$ b* U! D) u
  429. + _& l; H% Y. d5 c; n. Z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    - ?4 H8 z' J! {0 ~
  431. {6 b$ v( z; d4 \+ |" s
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;6 m/ s: {' C; P
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' }+ w& |6 }0 q8 Z
  434.   {
    ' m) Q4 Y- G; ?0 T' Q& {
  435.     char szLanguage[50];
    : ]6 X6 p4 c- [3 ]; f6 q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  N" }8 F2 N: o* @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % l' i2 T0 o" y9 d% n
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 B5 |+ ~$ D1 ~1 I6 M
  439.     else                                   m_iLanguage=ENGLISH;* b9 G3 m! ^: q
  440.     char szRegister[100];
    * T1 G- h- z: c
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : \) i+ E8 @+ y" `( u
  442.     strRegsName=szRegister;/ L1 a8 T/ R& A2 ~* l* L
  443.     char szPatchURL[100];+ K; @( P: D9 p& i0 q% Z0 U
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' ]* f4 b* [1 A$ w8 {" N+ v; q# M9 o! _# b
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 X- w' @' ]4 D6 b$ ~' J
  446.   }
    ) \8 q5 o. m% c) J
  447.   else
    , F9 ~6 {* S! K1 n
  448.   {
    8 p" J' F  m- O3 A9 ?& k. Q) C
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) h+ x6 Y, f5 {* o
  450.     strRegsName=DEFAULT_REG_URL;# n2 c- Y) K* q5 o- }: l
  451.   }0 r2 A; x. c2 \) ~- A3 J
  452.   if(GetFileAttributes("hosts.ini")!=-1)  H% ~4 k3 `' ?& h$ S" }' C; Y
  453.   {/ s' L- n" T/ |
  454.     char szIP[50];0 C6 w* {  s: }8 \
  455.     char szDIR[300];! K. x  r5 N/ f  Y  k
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))& ~) g9 w# ?5 K- |* V. i
  457.     {, R9 Q4 |+ |/ @: j' ]1 X
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");& {% G9 b# _4 {+ P6 j: \% n9 ^
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 ]7 f( ?& L" O% A, B6 {0 H, L
  460.       strHostName=szIP;, V6 O5 |/ k, d: X9 W( f6 K
  461.       strHostPath.Format("/%s",szDIR);/ t6 Z9 ~$ n2 h: v# l+ n
  462.     }
    4 h  M* r: S; C5 F; e
  463.     else
    6 }  f, O9 t  x/ C
  464.     {
    . H* X0 P8 E- B; @: W
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* E! F* x4 }3 K& H
  466.       {
    & x. z: @5 F( k) i& x; ]! J
  467.         char szLanguage[50];
    * l2 _- ~0 P1 H
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 E' S, K2 R; z# J/ L/ B+ Y' v
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# T0 ?' J4 {2 \  ~! Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % i* `, h. V+ I7 c4 u% h( Y
  471.         else                                   m_iLanguage=ENGLISH;
    & M4 B3 p: z5 K' W5 i) q1 D
  472.         char szRegister[100];% M# t" j* U7 f' V, U+ B- t6 x  Q
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " V# k2 l+ a1 v' M8 }* n9 d! r
  474.         strRegsName=szRegister;
    " L5 o0 a1 @; C" u- _$ x# y/ i
  475.         char szPatchURL[100];9 F. ]& _1 }& R& C+ U
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: J8 i* M+ t# @
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : G- T: k( [' d
  478.       }
    ) B* N( A: J" z( R" H
  479.       else" c: L8 y/ G9 Y' p6 e
  480.       {
    " T( W# B- s3 v  r" {$ M
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 @: g+ G5 |6 Y& j( a2 C
  482.         strRegsName=DEFAULT_REG_URL;* m& C  W0 `/ o# E6 S
  483.       }
    ; n+ _: M$ G  F
  484.     }
    8 o; j" c+ G! o4 R
  485.   }
    9 [  s- D) r& N: M9 y! ^; W7 q5 \4 r& L
  486.   return true;
    ( t& J0 p) U0 g1 h
  487. }
    4 @8 n! P1 d0 x( V, ^* G) O

  488. 6 j8 [4 R0 M' z* t# \) X. L2 u
  489. #include ".\ZLib\unzip.h"
    # k6 q" P) b* l9 l3 X2 u
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);) E& u7 L5 x1 R
  491. /////////////////////////////////////////////////////////////////////////////
    ( k2 B9 i! t/ k. c& d% e
  492. // CRevAppApp initialization
    ; @, a- I& i5 \7 F. g; D

  493. 6 |1 a) p7 x* @
  494. BOOL CRevAppApp::InitInstance()
    " k: F# J$ c& U4 M$ `- g. w/ F  A$ r
  495. {
    7 z$ E, @. e( ?4 v
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& f% D$ N2 n/ o8 _: G

  497. 0 R' h9 O. y1 T0 n# I7 v9 D
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);6 r! x8 ^7 m+ B. k
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))+ \  U1 R5 n+ H
  500.   {* p# F- A/ C! I# Z- ]7 d
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");% j. r8 U+ X) r& F$ P
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ( j5 @% r! X/ Z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ( j1 V& D4 v5 U5 w1 y
  504.     {- g: @/ d# p  J
  505.       strcpy(szPath,szPathTarget);! y8 G6 W7 \, l- u0 Z) v, f
  506.       SetCurrentDirectory(szPath);- O' {: Y6 n: Z5 T
  507.     }
    9 c# S9 R" h: r( R: X
  508.   }2 o  \+ n# N, H- _  T
  509. #ifdef _DEBUG- w# S( O/ A- r" ]: ?
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- ?. Y$ `' I7 h5 n: y
  511. #else
    ) b* d! B( ?! d  N% B. o
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( R+ h$ Q: E- X! L9 r* n% h! L
  513. #endif8 i! v1 i8 s8 z) H  G! w  i% N% A
  514.   {: H3 T$ t/ j3 O! l7 P2 s* q/ ^
  515.     char tempFileName[MAX_PATH];
    % z- G9 F9 y6 ^
  516.     strcpy(tempFileName,szPathSource);  S. n/ [1 L& g8 g. p
  517.     tempFileName[strlen(szPathSource)-12]=0;/ c3 E8 U. ]3 Y/ u% n
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ; t6 L' t6 P/ T- q4 d; \% P8 e: S
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ( @# ]# ~5 Y+ }. k) r, x
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);- ]0 L# `3 q1 ]1 i' f9 h1 N9 R7 T" m
  521.     return TRUE;
    - h/ r+ `9 G+ F& n: l+ I
  522.   }6 T* K5 i- b3 H# b/ c
  523.   // Nuke 0118: Delete run.exe. C. u2 Y1 q0 n; n
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    7 b! ~: n( }& c$ ?. R) G& ~' W
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / Y7 q' H. Z4 x8 H8 `
  526.   if(!ReadCfgFile("Config.ini"))1 E- `9 _' b0 T; E& h& o. N& l
  527.   {3 d. S+ s+ S) T8 \  b6 [! n' |
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    3 A( x6 o: K( _8 w4 P1 t' y1 ?1 r
  529.     return TRUE;5 H, U% h- H0 K$ p" @
  530.   }
    3 l) ~3 u( x9 ?. b
  531.   HANDLE mutex;6 q* a* W* \( x; _* c8 T
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    # i3 `7 |3 I. X6 a: f. l" y
  533.   {
    2 w$ _! x3 ^& M  _
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)& U( E/ y0 _$ V+ S- {$ F% ~, o! T
  535.     {$ r6 Y" k0 o# X7 }
  536.       CloseHandle(mutex);
    8 g- Z" y# M% E
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);8 ?5 }+ J9 w) T3 R
  538.       return TRUE;
    $ a3 t) Z& D: D+ z8 ]! d% U
  539.     }
    + j$ }$ E  v+ }
  540.   }    N( B, \3 x% @1 S5 t1 _
  541.   CloseHandle(mutex);' c( ^& Z. b( n0 _  ~8 k  Q. i
  542. + g' \) V6 w6 Q" T; r, ^1 H
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    % l/ V, k: d4 T3 X

  544. / W+ V- s, u  O& i
  545.         AfxEnableControlContainer();
    0 [( ], u$ t2 r

  546. % Y2 L9 B9 t, K6 \
  547.   bCanUpdate=FALSE;
    # z1 q! ?' {+ l
  548.   dwStartUpSteps=1;
    & ?+ P1 R7 s  q/ s: _3 v) _
  549.   dwProgramState=AP_NOTHING;
    8 I0 [5 h, x! |7 }

  550. 8 M8 \2 G, j) l
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);  H, S8 R3 B$ @
  552. ) @: q, ?1 x& T+ N% [# B$ x) T+ a
  553.         // Standard initialization, t# o: {, R$ ?5 H3 Z# `4 v
  554.         // If you are not using these features and wish to reduce the size
    $ |$ r6 l* p  V6 y4 A4 b
  555.         //  of your final executable, you should remove from the following" j: w* |* a; `  y, A# ^( o
  556.         //  the specific initialization routines you do not need.
    ' t/ e: t% G/ h4 N9 X8 K/ z
  557.   s4 y+ V! ~  k, ]
  558. #ifdef _AFXDLL5 A! v. C# w3 k* e! S
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    , \, E& ]2 w2 |; D# `* ]
  560. #else" {/ v0 M4 b, H3 i" P
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically- ~+ ]1 I  N/ F0 x
  562. #endif
    4 r5 ~& z" n4 X) ~: H

  563. * b8 T2 @/ {7 c+ Z1 ~# y: R/ P" z
  564.   dlg=new CRevAppDlg;
    2 Z( U5 o/ E. ?) T0 z# `
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    5 X# i1 D/ E2 Y1 i7 z4 @
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    2 _: t: x0 x' ~; G
  567.   m_pMainWnd=dlg;+ T) O$ @- I2 S6 s
  568. & l. \" H  O2 ?% D6 P+ g' u! [
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    + o+ Q# }5 u" o( e
  570. ; |& W* P8 v' F% R0 d
  571. //  GdiplusStartupInput gdiplusStartupInput;5 _( Y0 B# K4 y& [1 b
  572. //  ULONG_PTR gdiplusToken;
    7 A' N- |* M/ _. B4 Q1 A* t
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);+ j2 k( M' I6 i, j) u) \4 I0 W

  574. - q5 x% [( W' r6 K3 T/ E
  575. //        CRevAppDlg dlg;" M, d5 E  Y& W) }
  576. //        int nResponse = dlg.DoModal();
    / Z2 O2 x. c* v) C  A3 v/ R# p
  577. //        if (nResponse == IDOK)( u  T+ X& C. Y+ [
  578. //        {
    0 D3 }  k9 L1 y; \, T
  579. //                // TODO: Place code here to handle when the dialog is
      ?+ X( P" O/ \. x9 X6 q4 F
  580. //                //  dismissed with OK
      C* Z. c3 b# a( b- t- ]' n6 b
  581. //        }* o% {/ V/ m8 K3 i, y4 F$ \( q
  582. //        else if (nResponse == IDCANCEL)2 o4 f$ e: s3 X3 e4 K# G8 |
  583. //        {- @- ]7 _# c2 i" E/ o
  584. //                // TODO: Place code here to handle when the dialog is% }' D+ g, N) f  d' h$ ~/ t
  585. //                //  dismissed with Cancel
    % ?9 W- o- p9 a; B+ V- C2 e
  586. //        }
    3 x: s9 W! Q+ Z( q
  587. 1 r0 d+ b3 k! d. E, p
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ! O- V7 S: M, Y0 u: O
  589.         //  application, rather than start the application's message pump.! m% z" j) G& [0 I
  590.         return TRUE;
    . A- y7 `+ b1 v6 O( b7 ]; L9 Y6 l
  591. }+ w. n4 c; Q8 N8 y4 w6 H

  592. - }; j0 e! [; ^2 s+ w7 d- I
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    2 @  d# x5 v  O( ?; X0 S
  594. {
    . V3 `. B) D$ q
  595.   int i;
    4 {* @) X3 \2 P5 z3 G
  596.   char *szRet;
    6 ?% a. ^* y: v. d
  597. / ?2 p) Q* t" m2 k' a/ u8 T4 Q
  598.   if(pSource) { itoken=0; sztoken=pSource; }3 A! y- v7 V7 S3 ^0 O" P- B
  599.   if(sztoken)
    . u; c! w) \# M: z. [1 C
  600.   {! J, W8 C4 ?$ A# P5 O
  601.     szRet=&sztoken[itoken];
    ) ~; }3 z8 a# A9 n4 @
  602.     while(sztoken[itoken])
    ; [7 Y) U$ @# `& M! I" v& c
  603.     {
    # Y# q0 [5 G" v( S
  604.       for(i=0;i<(int)strlen(token);i++)
    . M: T+ h) ]( Z
  605.       {
    , P# Z% Z  K% w0 ~
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    , J8 [6 |1 `7 L! w. T
  607.         {
    0 E7 n3 _/ @) X
  608.           sztoken[itoken++]=0;
    8 ]( w2 m" O) H8 {. C" _' J
  609.           sztoken[itoken++]=0;
    : q: u  |, u+ U- N3 y7 _8 f
  610.           return szRet;
    0 g8 l: |6 A; @9 @
  611.         }2 P% F' H" G' U" ]" T2 E3 w( q
  612.       }
    3 f# d3 R( U% p* L8 }: U
  613.       itoken++;
    " l8 n9 G. H' y9 H" z+ N
  614.     }: s0 u% T; D' R( f5 w
  615.   }
    , D5 P1 ^# i1 R( B% b7 d
  616.   return NULL;; u1 x9 x4 c% X
  617. }
    ; |1 S+ d$ {6 m' B, C. n  c: G, a

  618. 2 i* x- @/ q  j4 l& D
  619. void ProcessProc(long Total,long Current)
    4 g8 k* M+ L' U6 E" _, g! S7 W+ l6 z
  620. {  p& E3 ?1 @$ p$ N) `! H! R* _4 C& x
  621.         MSG msg;) d) A4 @/ R# W5 }2 {9 J/ C
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);7 \' I# k4 V5 A
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));# l6 M" K1 {, r/ B8 l
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))# E+ y' O+ R. X: E
  625.         {
    / L; g, F+ R+ I) b# _5 `
  626.                 if(!GetMessage(&msg,NULL,0,0))) `5 Y2 v0 X: e3 Z5 `' t3 B# L" \
  627.                 {
    " R) q/ q* @2 E4 d& Z. E" A
  628.                         return;# y/ G8 r- e" f# B
  629.                 }8 C/ s9 }( [" ?  j
  630.                 TranslateMessage(&msg);* _$ D% b2 i6 y
  631.                 DispatchMessage(&msg);
    . h( m- w+ k% P! J
  632.         }        * q. ?) h# ^5 S! `
  633. }
    * C6 I: U- F0 e( m

  634. # T+ Q) p: ]- |/ k( S$ y  u2 _
  635. BOOL bFirstChar=TRUE;
    : t* t2 q: O) t9 |$ `

  636. ! _7 A3 s2 e/ Z$ a
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 P$ `; O- S; Y7 ~+ N
  638. {
    3 D( x+ _: p6 |$ P* y- V: r7 _
  639.         // TODO: Add your specialized code here and/or call the base class
    8 J+ J% F  @+ P7 b
  640.   switch(dwProgramState)
    & v4 ?" Y3 v, }
  641.   {
    . u( e6 G( o) }2 l; v* \  R6 p2 Z5 l
  642.   case AP_NOTHING:
    . `) \3 G/ H) f0 s9 t6 O; X
  643.     switch(dwStartUpSteps)
    % Z" ?- R3 N" u  M  O  u
  644.     {- z" }( K2 ~. _
  645.     case 1:
    ; H% v8 `) Y! C& a5 w; H/ K
  646.       {& K/ g8 ]: F! ?
  647.         int i;
    $ i6 U! y" q: d8 k& c! E8 _
  648.         CDC *pCDC=dlg->GetDC();; \. T' K% q% ?: e  U
  649.         HDC hdcwnd=pCDC->m_hDC;6 P; N5 k9 U2 I( Q
  650. //        Graphics graphics(hdcwnd);
    & R9 T" B/ f) Q4 [# W
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    " ?' H8 d7 |; J
  652. //        INT iWidth=bitmap.GetWidth();0 M+ m. c$ Z2 F
  653. //        INT iHeight=bitmap.GetHeight();
    ; M7 k, \- E& M$ G& S2 D
  654. //        Color color,colorTemp;5 y4 Z  u8 N) p- B9 p9 ^
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)+ \- j4 J/ _% C9 a7 S. O
  656. //        {
    + P1 H4 o) F, G# F2 s6 o: |5 n
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - g  G. d; J9 A0 B$ w% ^: I5 W1 ]
  658. //          {) |$ X$ o6 G- Z; I5 Y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);% H4 k) L- f: v
  660. //            colorTemp.SetValue(color.MakeARGB(: G1 O2 ^1 Q/ y6 n, F% X
  661. //              (BYTE)(255*iColumn/iWidth),
    4 a5 j# b- @6 H, b% I3 j  u/ m
  662. //              color.GetRed(),) a9 y  R3 ^/ Y0 ^; u( a+ H/ c
  663. //              color.GetGreen(),% c9 }4 C: {) Y! E: q
  664. //              color.GetBlue()));" w6 w. i, N7 k  O, X- `
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    9 C4 D7 t! @# t+ J4 P! b
  666. //          }
    2 Y" a/ ^/ A, g' ]5 A
  667. //        }( R  R! W+ D# h$ K1 @
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);( H" x- k  O' ?; g% A, O: e
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 y* T9 \: N, R9 M
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
      J" f& O- F3 J, m' g# @
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");  W( @/ c8 o  r4 s  \" q
  672.         for(i=0;i<240;i+=8)
    ( N- T, n; @6 x5 X  k/ A% g
  673.         {! L! T% h$ m: \9 m4 T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 T/ Y0 G7 y1 Y! h5 K0 K; ?- m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ) v' _" S5 V( U7 e* I' ?" `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 j8 H: @  N; ~
  677.           Sleep(33);; _0 W* I& `* h7 x9 G5 U9 {
  678.         }
    * g$ Q" |. v* w+ h) g; s% [5 f# l
  679.         Sleep(1000);
    + w% [. n: r! n1 c% _
  680.         for(i=240;i>0;i-=8). ]$ Y1 {' J* V& g, v
  681.         {
    + o- A7 O! J) z( f: i% ^0 a3 O2 {
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 A, r9 n9 o# L
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% G, x! `1 M4 G: ~
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ Y0 _6 b+ {+ o% ?
  685.           Sleep(33);* Z7 u; j3 y% f3 f2 C" \9 i
  686.         }( ~, e( ^1 u8 K+ o$ Z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);$ Q  |# T* G" m8 h
  688.         dlg->ReleaseDC(pCDC);
    . ~; D! L6 W, W- o) `  @# C
  689.         DeleteDC(hdctar);! o& C) K' [/ h+ e/ z
  690.         DeleteDC(hdcsrc);* v) f  {& X1 I3 ]1 W6 X' W( Q
  691.         DeleteDC(hdcorg);
    ) \/ H3 p7 O& [5 T5 W
  692.       }  ?4 H! X, M* L' Y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    : h' T- v" F! l! w" a& Y/ h4 U2 S
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");9 H$ L8 V9 z) m
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ( L0 t& T3 A. b0 `" \5 |8 v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    6 y* N; D7 M' u5 R  y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( Z- _6 ^% U) r: `, X
  698.       if(!Dn.Connected())
    ; @/ i# B$ n0 M9 d
  699.       {
    7 \, }! `% D/ }" E0 @! Y" }" K8 O1 K- d
  700.         dwTotalFiles=1;* W1 D8 V: E5 e  j
  701.         dwDownLoaded=0;9 \- a1 c$ N( g  M
  702.         bSilentStep=TRUE;/ b* [  ?3 _0 [0 R  k' J5 W* X
  703.         bCompressed=FALSE;" ?# E3 R" f( q% z
  704.         strExtLocal.Empty();8 K# Q0 C" ~. M' d* H9 B  x
  705.         strFullName="readme.txt";0 V$ |, f: n* i) k3 n$ Y0 ]% j+ @2 ?
  706.         dwProgramState=AP_CONNECT;
    - H. I0 [1 Z* ~
  707.       }
      x  ?4 X# |9 d2 m6 S0 t3 E1 `. R
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();( h$ ^4 h) {  \7 V. M$ e
  709.       dwStartUpSteps=2;2 C9 i; I( q( [6 \5 t
  710.       break;  ^8 i$ Q8 x  T# Z9 {0 F9 Z) p
  711.     case 2:
    9 ]% d& A& Y5 ?, p- F; u6 P
  712.       {; s; c' `  _- S5 O6 S  m8 ~- f
  713.         int iEOF;* z% F2 m; B1 g7 Q- h0 `0 I; Q
  714.         FILE *fp;
    . ^3 Z7 M+ e; P; v4 \; O" Z' L
  715.         char szString[512];2 M5 {1 v9 E* N: j
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    3 d' y; }- ^: `0 H  v
  717.         if(fp)
    / w! R; I% y: N3 V# J
  718.         {3 m9 M. P3 X! D1 I& z! ]$ [& T) Q
  719.           do6 V/ w( Q, g# X, W1 U
  720.           {. i, X6 I2 w2 A+ q  P
  721.             iEOF=fscanf(fp,"%s",szString);8 b% c7 g5 ^( N; w4 `5 ?
  722.             if(strlen(szString))
    , ]2 h. {2 u4 V% H9 q4 W
  723.             {; u( F: X' V! ~
  724.               if(bFirstChar)0 {: U% o! y' ^8 i+ s, r2 W9 }
  725.               {
    : g! D* v, Q* d' V3 f6 y: z
  726.                 bFirstChar=FALSE;
    * s; t9 u& }) l$ Y8 M( r
  727.                 bConnectIsBig5=FALSE;
    " f- D2 L: `6 a* j9 ~
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;/ ^3 |0 K7 X- g5 v7 ^
  729.               }: Q# D7 F' U$ P3 S
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));  ?% B9 u( f3 f
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    2 P4 P9 a7 L2 r. ~2 r/ [4 J  ]
  732.               dlg->m_ListText.AddString(szString);
    " }5 O5 X2 k7 s& }/ h8 h
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / \) O: |6 ]. f- }7 {. J* {
  734.               *szString=0;
    2 \9 F) j: Y% o1 G! z
  735.             }$ J. N" m$ [6 }
  736.           } while(iEOF!=EOF);5 ~: G4 |& ?2 v( P& r, g, A( l
  737.           fclose(fp);6 @) F( F* a8 A5 ?/ q. L
  738.           unlink(".\\DownLoad\\readme.txt");8 f; p2 W% M+ Y; y9 `, p# y2 |7 B
  739.           dwStartUpSteps=3;
    # R# T4 D2 k# ]4 }; H% i- a
  740.         }' U) s/ h4 g' `" E9 l) ^
  741.       }' V2 h/ v7 b4 B% O. K. r
  742.       break;
    - W3 E, S, ~: L1 l/ {! E% H! e0 H
  743.     case 3:" Z6 t  q& p% s5 i7 k" |! p
  744.       if(!Dn.Connected())
    : K. D- Z# I5 O
  745.       {
    7 X. X0 u8 U% e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);4 W8 ?$ ^5 m" {8 X9 k3 Y. z* }
  747.         dwTotalFiles=1;
    1 p, m+ I4 ]7 d# h+ S" u
  748.         dwDownLoaded=0;
    9 Q+ c6 g3 Z' n0 ^6 z7 U( R( q  ?1 d
  749.         bSilentStep=TRUE;/ Y- N6 [, b- @6 o3 k& y' n
  750.         bCompressed=FALSE;
    ! i$ R/ }; G9 ]+ h. }
  751.         strExtLocal.Empty();
      z3 z) h2 b! P
  752.         strFullName="checkversion.txt";% @/ ?! _- `: ?- B2 I' h: x% n# C
  753.         dwProgramState=AP_CONNECT;
    ) O% M( b: Z! J% ]9 x5 a7 E$ T
  754.       }9 V; u' y7 a1 L5 r4 @, W
  755.       dwStartUpSteps=4;) ]& {; p) s7 s" b+ o* q
  756.       break;8 w8 q6 w( k; h; G6 |% C- v# g+ v
  757.     case 4:* f9 x5 Z. \" M# F2 F; h
  758.       {
    0 U$ ?8 P, m2 G2 I
  759.         FILE *fp;( p" C2 Y( m& F: U
  760.         char szString1[128];! E! J3 \# v: M" Y+ c% S% ~
  761.         char szString2[128];
    & x  j' ~7 w' x' J* K
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ( p9 @( t5 z2 r, s( l4 n0 H4 Y; j6 b% K" V
  763.         if(fp)
    * ?& U8 i  y" ?2 T3 L
  764.         {& ?4 i5 ~. y" N2 V( t6 M
  765.           fscanf(fp,"%s",szString1);
    / Q' A0 i6 K2 i! Y# C
  766.           fclose(fp);, p9 B: `9 y( A! G2 K9 |4 R+ S: s! O( S
  767.           fCheckVersion=atof(szString1);
    . I5 J: X5 \9 ?8 s$ X+ r. `
  768.           fp=fopen(".\\checkversion.dat","r");
    6 w' s# X4 P4 a2 J% y8 u2 S
  769.           if(fp)' [5 n9 A1 L% I+ E
  770.           {& \2 `; X+ ?( T5 w) g' }+ P
  771.             fscanf(fp,"%s",szString2);
    & _! C0 N1 m+ m) M
  772.             fclose(fp);( @0 ~) A+ R0 C) l3 F- h' [8 B
  773.             if(atof(szString1)!=atof(szString2))& s6 j: x. R' _" V
  774.             {
    3 Q/ j- X8 _# c- y9 K- s5 s
  775.               if(!Dn.Connected())7 W7 p4 g. R9 F/ F& S5 [0 s
  776.               {) c7 y1 }' i1 ]3 B
  777.                 bFirstUpdate=TRUE;$ M. `! d9 q( ]0 T
  778.                 dwTotalFiles=1;
    ; D  I- |1 p/ A* W0 a) J
  779.                 dwDownLoaded=0;
    ) I% a7 X9 l% V- Q! U0 }6 ]
  780.                 bSilentStep=FALSE;( r2 h# I& L& M$ L: p& N
  781.                 bCompressed=TRUE;# ?5 l: j! O2 B( b
  782.                 strExtLocal=".\\DownLoad\";
    & H" _% Q( ~$ S/ B& `) A4 M8 E
  783.                 strFullName="update.txt";! \' q" |, a$ X" K8 V1 Q' I# z
  784.                 dwProgramState=AP_CONNECT;
    9 }$ w1 }: O! C3 w
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      v' u( b7 f; S7 t* ?
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 h4 o9 y- r% ~6 W& h5 w4 B. v. A
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ g0 O1 ~" e4 D1 r

  788. # A5 K% {- L( @4 r8 _- E
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  C* U+ V1 I2 p% n
  790.                 unlink(".\\DownLoad\\checkversion.txt");1 F$ L1 d" K  y2 R
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    6 `2 C" v) s+ H0 u# P
  792.                 {3 C# g' z6 @5 o( i
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    $ Y4 ^; u0 Y0 q, i7 i5 P! P5 D
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    - {" V3 b! `5 s
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");6 R' W8 u: b" D/ P3 J1 t" }& f! M$ c
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      D' d/ ]) N1 T' K- I/ b
  797. 3 W9 ]: n/ ?0 p; c1 b2 v/ W$ c
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # |. X4 y# }) Y3 _6 B
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % @: t3 q- J: ^7 t7 x) z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");9 E% ]1 o! _$ Y) X1 d
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 R. \" ~) U+ B0 }7 u: w
  802.                 }
    0 F) W, ]3 c4 g6 U6 u" Y
  803.                 dwStartUpSteps=5;
    ! s% \% N6 [8 H. j) `! v
  804.               }% K  E" |+ d. [! n, k
  805.             }
    0 u& s1 e, T' ~* K- z
  806.             else  s# \# P4 l- g- q9 A& T8 \: `
  807.             {1 s# \' g9 S3 N+ _1 w
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ) \4 m: x- d" O- w- O6 U
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      b, b, s; d* t# j' m
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");7 p- R- Z5 ]6 D+ A% B# V
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 }2 V; Q7 y9 U) G

  812. * j$ @+ P3 e& G) L
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 D: X% v: D, R: A& A3 r, }
  814.               dwStartUpSteps=99;
    ) Z- c/ O8 \9 f* C
  815.               bFinishUpdated=TRUE;
    7 B# C' z) O, V8 f/ q9 o
  816.               bCanUpdate=TRUE;; d2 Q: \; c. d9 M0 y
  817.             }7 D% B' G1 ?( G5 Q2 [; Z
  818.           }4 w( @8 I( v" q# t& [
  819.           else2 E. J7 {) o# Y; \! q& W
  820.           {
    0 ?9 j, m+ P4 B# v
  821.             if(!Dn.Connected())2 k1 r, a: J5 e0 y5 R- w3 b
  822.             {9 O! H' U1 D/ Z" v
  823.               bFirstUpdate=TRUE;0 W) v; h# t1 l
  824.               dwTotalFiles=1;# M5 A  w4 t! O& [
  825.               dwDownLoaded=0;
    8 o" ?5 R9 b5 j+ j8 ^1 M
  826.               bSilentStep=FALSE;& ^" n' {4 @; V& M* b' u4 ~
  827.               bCompressed=TRUE;
    5 D' r/ B/ a! D, U  w. p
  828.               strExtLocal=".\\DownLoad\";( A$ t% A# e) z3 G1 P, g0 y
  829.               strFullName="update.txt";
    % O; g- g; @9 U* P; s! N1 |
  830.               dwProgramState=AP_CONNECT;1 u" B8 c) a. p) B- V& Y5 I' Y
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 N: t  @( C2 M' ]
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " V9 V5 x  B" T; n: s" K
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");0 _6 D5 H/ C6 z/ C! n) V' V1 `; d
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) M4 J, Z$ s: K; u
  835.               unlink(".\\DownLoad\\checkversion.txt");$ n3 K' y  h: y4 X9 \
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- ?' z/ _! g! v6 x0 r
  837.               {
    / x! U. U1 Y3 ]5 c% d# }
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");1 h5 ?0 I) n+ p& G2 `2 T
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    6 z5 n2 ?- B+ s
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    & J1 p' Q$ B" Z, z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( e+ m8 z2 W2 w! H/ g
  842.                
    ) O5 I. x! q2 x. H/ g+ b
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # m# f0 b. k- F5 Q( u; Q$ q( L0 ^0 u/ b
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 X  C4 Q- I3 c  B+ S7 K% {
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");; h  H* L$ r/ Q% ]
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 h& I7 Y: O. O! z7 B
  847.               }
    ' u2 A  o  g9 y' Y3 H
  848.               dwStartUpSteps=5;
    9 B( K  ?0 W: d
  849.             }
    " k) Q2 h: q6 K7 @
  850.           }
    - s7 j1 ]3 W; C; G3 w& c4 L
  851.         }
    " {9 }  r4 F. R
  852.         else# ~8 r1 U4 E1 i; Y+ m
  853.         {: u& H3 {; }+ n6 B/ S+ W4 Z
  854.           dwStartUpSteps=3;
    / f1 V1 V# u/ T0 ^/ o
  855.         }. o+ P  E3 J& b( c" m: ^
  856.       }
    7 r9 p9 a; i' D2 Q* ^# n, ?
  857.       break;
    ; x2 i* f7 w( U8 }! T# n  G# `
  858.     case 5:
    2 C# M, R5 T7 ]* E9 u5 w7 H
  859.       {8 _4 _2 N: d% M9 c7 R, C8 V) ^
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    . _# k4 s3 L6 `4 ^) F
  861.         {
    0 @4 Q( G# F6 X: ~$ ^. n$ k' C# J# y
  862.           int opt_overwrite=1;
    2 h% s! o) o  L5 [8 B' ?
  863.           int opt_do_extract_withoutpath=0;* W9 w2 q- `$ i8 Z/ @' x3 q/ {
  864.           unzFile uf=NULL;: F0 P1 a  D* k/ N# f

  865. 3 |$ C# w  z( {) k% t7 C
  866.           uf=unzOpen("Wsa.zip");; b4 P) \4 Y6 x9 X, l' v' O8 |
  867.           if(uf)8 P- X: I6 ?- }4 y2 K: z! d  g2 Q
  868.           {
    / R  e0 z& H; t2 k  g3 u7 g& v
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 b  K5 D. Q/ J- u! `! ]& D
  870.             unzClose(uf);& F( s* P& O5 K1 l+ w8 v- h, e
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");7 ]) U6 ]2 u7 U$ H4 s
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");$ x/ e7 i. V# ~' B
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");: v3 ]4 q+ W# g6 z/ f
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + t+ }9 d8 B9 |. U
  875.           }9 F* ^" g8 M) b, u1 W: @, B
  876.           DeleteFile("Wsa.zip" );- B  D% W5 ^  [" ~6 h+ Y9 R
  877.         }* W4 P, j+ U5 ]5 l9 X0 @! ?) O! K

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

3 t7 b% z  y. D' E4 L
9 a) Z  P6 r# {1 x

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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