找回密碼
 立即注册

CSUpdate.exe源代码

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

5 {7 f1 W$ o9 Q" z- x& G8 u
  1. / RevApp.cpp : Defines the class behaviors for the application.
    8 v4 Y5 T* K3 {
  2. //
    ; K, j- j& u: K8 Z; x

  3. ; G! Q: H+ R4 @9 O, ]/ P- f
  4. #include "stdafx.h"
    4 Q& h3 S/ a3 d8 ~8 Y9 H% G

  5. / _" c; I3 i$ C/ u' J
  6. //#define UNICODE
    5 f" @+ W% t4 s% i
  7. //#include <gdiplus.h>
    ( y6 g( U, a# w- C% R" N
  8. //using namespace Gdiplus;1 w% Y/ r5 a3 j# x
  9. / U( k6 E0 t4 E
  10. #include "RevApp.h"2 M7 j4 l# B' g4 c4 q
  11. #include "RevAppDlg.h"7 e' _( v7 D* g. J8 f! V; g; O

  12. 4 Y  A, E" Z1 g- Q5 T
  13. #pragma warning(disable:4786)
    ; j* z7 s0 Z% h! i" X6 w, ^; r4 t0 b
  14. #include <map>% f1 ]# U, J- \) U2 u
  15. #include <list>5 o* j) [: W4 \# E) P
  16. #include <direct.h>1 ]9 }2 U6 J) F

  17.   b6 y9 {" S7 o
  18. #ifdef _DEBUG
    ( |2 [  @5 _$ H$ A0 t
  19. #define new DEBUG_NEW5 o$ G3 M) k  I
  20. #undef THIS_FILE
    4 |; q' {' |- E% n5 v* z" w: ~6 \+ Z, s( L; j
  21. static char THIS_FILE[] = __FILE__;5 u) u7 q' N7 L2 R
  22. #endif
    : ]5 D- Z; _- t7 L  k6 q9 l
  23. #include "SkinResDef.h"8 [" n" i5 ^6 ?- u
  24. #include "ChangeBG.h"" v, U1 U" P$ O3 x" e  A' r- s
  25. #include "AFXINET.H"
    ! p$ \- @  v- ^$ u

  26. $ i" P. v6 J, s; h
  27. #define TRADITIONAL_CHINESE 0
    ' B7 t/ }" z6 b1 c% q' V
  28. #define SIMPLIFY_CHINESE 1& K- }5 U- ^; P2 Y
  29. #define ENGLISH 2
    + A! H( n; E6 Q% a8 u4 @4 h
  30. int m_iLanguage = ENGLISH;
    0 C) L4 Y# m9 \2 Z% N9 q( ^
  31. /////////////////////////////////////////////////////////////////////////////5 N+ p% F5 y; W# j
  32. // CRevAppApp
    " D. p( X# `+ e1 @) d

  33. 3 U" P& T0 b) ~
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    + g1 [) {+ y9 f2 V" P5 I
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    % Q5 C& d0 J- i' E) K: Z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.6 i" u/ u. m2 F( X
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!2 g2 n2 Y) @5 Q( H5 l$ g
  38.         //}}AFX_MSG
    8 U6 l; ~; ?) Q. u1 \
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    % s7 h7 P1 x, E  A
  40. END_MESSAGE_MAP()
    6 I$ ^1 J1 n6 p7 M( b0 Y. }
  41. * N/ {/ U" f# p% x9 ^! v  r7 X
  42. /////////////////////////////////////////////////////////////////////////////
      ], ^. P% T- C# e$ F# h2 j0 q
  43. // CRevAppApp construction4 l; b! {& o7 R8 U+ d

  44. : o' _8 s( u: R+ F7 i7 Q
  45. CRevAppApp::CRevAppApp()' c5 B$ G  w  g6 L
  46. {. F( e2 V1 f' V0 ~4 j
  47.         // TODO: add construction code here,# }! A6 h' B( Z( `( R
  48.         // Place all significant initialization in InitInstance
      C9 H( n! q$ p" D# }, @
  49.   bDisplayIsBig5=FALSE;6 q6 F7 R  S; i/ o$ Z& W
  50.   bRestartUpdater=FALSE;
    2 K& h# N+ u' R, Y2 v/ T" d! V) C
  51.   bFinishUpdated=FALSE;
    2 V" V! o2 F3 }! C
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    * E: H: r) D' G+ `; ~
  53.   InitChangeDataBig52GBKS();
    . B8 z! y2 T9 X5 D+ W5 d7 }
  54.   InitChangeDataGBKS2Big5();% {3 y) ?/ [3 Y0 a+ n- o1 f1 b0 D
  55.         //
    7 w1 V; _2 T1 t! F4 C. z# B
  56.         bClickRunExe = FALSE;
    3 T9 N) u4 O, z' V- R; k1 `
  57.         //
    * @3 W8 \; M$ _% K& v1 h. K
  58. }% w: x6 h, v/ R! h1 [6 y
  59. 9 a  v, P) S. @
  60. CRevAppApp::~CRevAppApp()
    7 j1 G  k; r9 c
  61. {3 e* Z* i& J1 Z+ X8 J, t# \# a
  62.         // TODO: add construction code here,
    & R9 u$ P- q1 t2 a  ^% @# s1 n
  63.         // Place all significant initialization in InitInstance5 d$ R" D' }" m8 o) x
  64.   EndChangeData();9 K9 [2 w7 \/ K; v, F' @
  65. }
    6 I9 C8 I; Q9 m5 K8 P9 Z1 m

  66. 4 ^8 F& v: W6 I  J$ g. i6 P
  67. /////////////////////////////////////////////////////////////////////////////* L1 j" H4 N/ I' x8 z
  68. // The one and only CRevAppApp object
    $ v4 [5 I! A2 t, C4 r
  69. , p- a4 G: G. f( @- _9 z9 ]; ~
  70. CRevAppApp theApp;
    & g& U/ b. b) u9 i, l# o9 q2 d
  71. ; q3 B4 F7 }( x4 m
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName), U4 I. x2 g9 m; i: q
  73. {
    / D0 g1 w- ?- n2 H0 J7 o# {
  74.   int iEOF=0;% H3 k6 `; T: F8 k
  75.   char szTempName[MAX_PATH];5 t$ O! {9 n1 Y  R) X
  76.   *szFileName=0;
    ) K1 X$ ]) H8 {1 c- [* \
  77.   iEOF=fscanf(fp,"%s",szTempName);; g. C0 e0 R, s
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')! H# M, Z4 k) Y2 Y
  79.   {
    & v0 v9 M2 J; m7 _( t6 [8 B& Z
  80.     strcpy(szFileName,&szTempName[1]);3 }# r* g1 F# x) V3 E& n
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    * Q8 X& s/ d) V1 q2 ~
  82.     {& Q9 M9 D6 E% f
  83.       iEOF=fscanf(fp,"%s",szTempName);8 y% d5 G- x. h1 e' @+ i
  84.       strcat(szFileName," ");
    : v# g0 p, ~3 I. u" I. e: P
  85.       strcat(szFileName,szTempName);
    3 C+ I5 J0 T& r( m; z. _2 u
  86.     }% V6 i" \, `6 E- [8 w4 k: W/ p
  87.     if(strlen(szFileName)>=1), G/ N" _# U9 E- N! P& s
  88.     {
    ( k$ V6 h+ X7 I2 X
  89.       szFileName[strlen(szFileName)-1]=0;" {* K8 h3 T  A
  90.     }. C+ v9 n' E5 C+ W+ }
  91.   }2 Q1 p, g8 u+ [& n; }0 x; g: _
  92.   return szFileName;
    2 E0 R! ~7 x( S$ B7 O( l' }" N
  93. }
    + d* H8 R% j) v& ]1 t! s

  94. : q+ b! N& D' \
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    $ T, f+ V0 ~# W" f) N& q
  96. {; L- L( a! j/ }( V
  97.   FILE *fp;8 w; o% O. R5 X. {
  98.   char *key=NULL;1 K' ]$ c* J* ]2 t) k! N
  99.   char version[MAX_PATH];9 ]0 }1 w/ }) Q: [- I: n
  100.   LPUPDATEFILE file,olds;
    2 M) k4 o- A+ s5 r
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 u6 B% H$ \: ^6 a% D8 w: c/ z. F
  102. * k( h0 o2 @) n6 p; G& |
  103.   UpdateList.clear();
    : S  V2 f: j$ P
  104.   UpdateFile.clear();. c9 }+ n5 F6 i0 F  }
  105.   if(GetFileAttributes(filename)==-1) return false;6 e5 ?2 ~& J0 i9 |+ _
  106.   if(!(fp=fopen(filename,"r"))) return false;& j! Y- S& G' [
  107.   fscanf(fp,"%s",version);8 u3 ^$ F& l  }
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    , r8 T8 |" {, X: J" H0 `1 ^0 k# a$ ?2 F
  109.   while(fscanf(fp,"%s",version)!=EOF)3 p# k; g( z( g. b' U
  110.   {
    % G# E+ N" J" F: F0 w
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ {' e4 W' Y# Y4 ]9 ^
  112.     fscanf(fp,"%s",file->path);# V2 T. R2 ?/ R. \0 e  J- N
  113.     ReadFileNames(fp,file->file);# C( H  D8 |- n/ N, V- R
  114.     strcpy(file->full,".");- ]7 @' {' P' d% o* I5 @
  115.     strcat(file->full,file->path);1 m' B7 T1 l- U, d; Q+ E
  116.     strcat(file->full,file->file);) m8 [3 B+ Y5 L5 Y3 }
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    % p' [- d- U9 ~# r" Y4 J
  118.     {+ s* [2 o# w" B0 h: T
  119.       file->vers=(float)atof(version);
    0 b- i! ^' b. D  |  y
  120.       UpdateList.push_back(file->full);
    . S& F9 X8 S2 [8 e/ ~4 g/ x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    3 @2 d( n' u7 A( b- m
  122.     }
    % g( Y, ]  l6 ^) R: ?- k
  123.     else& T! v2 G9 t& z
  124.     {
    ' u" O- W; y1 M  F6 ~+ x
  125.       olds=(*p).second;' v. Z) ?1 l! I' ]
  126.       if(olds->vers<(float)atof(version))
    2 E" R  q% C& a5 d
  127.       {
    # d& N' N& d9 A: \) w2 M8 }, G- [
  128.         olds->vers=(float)atof(version);
    1 n2 s9 x& u5 }9 j# I
  129.       }
    4 z- g+ S' e5 ?
  130.       free(file);
    ) j5 B" _2 B; m' b, O0 y5 p
  131.     }( _7 |8 B, y4 ^
  132.   }0 }# o  h3 ~5 C8 S* @$ |4 W/ t
  133.   fclose(fp);3 v" p; y! q# o4 K
  134.   return true;
    3 k$ a' J7 K2 m0 e! l' k. t  R
  135. }
    1 l2 m+ e0 B# t# q$ O3 f

  136. ! S& f5 b) B2 F! @* x& M; c# e% O( \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ) j/ P% S) W6 H# Z& J3 ^9 }
  138. {- E8 ?$ X# I$ ?9 s$ K
  139.   TCHAR  szFull[MAX_PATH];: N! p. a8 v' h; ?
  140.   TCHAR *token,*inter;
    2 F& d- X' E8 [5 n/ m* o
  141.   *szPath=0;0 N# ~" L* v: E0 Z; y' u  o6 f
  142.   strcpy(szFull,szFullPath);" R. j4 j0 b& i
  143.   token=strtok(szFull,"\\/");. D' v% {8 g/ G. ]/ t
  144.   inter=token;% C" X$ R/ X. x1 s% y+ M4 E
  145.   while(token=strtok(NULL,"\\/"))
    9 m7 Q+ r4 X; h9 E7 V% i
  146.   {
    $ i( p/ g6 [7 w5 f' G' c
  147.     strcat(szPath,inter);
    . J6 A' M9 J4 F
  148.     strcat(szPath,"\");, a9 v5 _" B  G! m5 K
  149.     inter=token;
    , l# L! G$ p1 n% R+ O
  150.   }
    9 L, \- ^* H8 W1 `
  151.   return strlen(szPath);) Y3 H$ G7 R( B5 ]  u  A. A% A
  152. }
    4 h( K: n8 k7 F6 F8 p$ k

  153. , B* H8 }- ]$ c& K( B* O* O) P
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    / X$ P2 J; ?3 _$ I+ M
  155. {& i( b9 J1 d2 C; U% D* |$ n+ ~% N
  156.   DWORD attrib=GetFileAttributes(Target);
    7 B- v7 t9 P$ _! K3 n( Z" N9 g; F
  157.   if(attrib!=-1)
    / K( c4 O3 ^' j4 g+ g" B
  158.   {
    " [: N% J! ]  A0 H/ }5 [, T
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)). H, i# k) H, U
  160.     {- ]9 R* V4 h. ]( b+ y) {( N
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);2 q! B/ Y2 n" v
  162.       SetFileAttributes(Target,attrib);
    6 a  a7 x- i8 {( t( a& J7 x
  163.     }
    4 S/ @( k- O+ R* d6 w% k1 B
  164.   }
    - B5 t" e+ F( |0 I
  165.   CopyFile(Source,Target,Erase);* t5 f+ @4 t2 W' U& ?% ]2 y
  166. }
    - a9 e, I3 q+ _9 M: n5 s
  167. 2 w+ X8 e9 C1 _. p6 n. h, b
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)/ G$ G' j# u- b) U9 G
  169. {4 J1 ~' j1 H" }* D. w9 ]
  170.      FILE *fp;4 V9 p% m) x9 R, f3 h
  171.      char  szBuffer[8192];
    ) U6 K/ w  F+ A; G0 F/ i
  172.   va_list  argptr;
    8 t, d$ e% ^% _
  173. - N, ], q2 P3 x1 X
  174.         va_start(argptr,message);0 v# \5 i  \3 M; [3 Y
  175.         vsprintf(szBuffer,message,argptr);5 u( d& Y2 p9 [# v2 z* b2 s5 ?: w1 u
  176.         va_end(argptr);( ^) o- S3 r  R+ f
  177.   fp=fopen(FileName,"a");. Y$ s8 n% J- f. T3 R, x' F
  178.   if(fp)
    , {: k9 ^( {* `+ K# d/ a
  179.   {* r7 e- x, `+ C1 W
  180.     fprintf(fp,szBuffer);6 p. r& f. ]6 I; }2 {
  181.     fclose(fp);
    / c! C$ u4 z2 }) o- w% N3 K
  182.           _flushall();
    3 a7 X7 [/ ~+ b5 W8 c0 o
  183.   }
      y6 _. b# w0 J- J
  184. }9 b4 r2 p% H0 W3 n% ?4 _+ F3 M0 ~

  185. ) A2 q8 r( V" {. b; ]
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    4 i7 D9 Q, J0 {) }4 J% P: c
  187. {7 p1 z, w# {# e" U2 O% r7 q' X7 C
  188.      FILE *fp;
    ( g: w. i* S( X# v7 I
  189.     DWORD  attrib;
    ) }9 L7 ^6 {4 l. |( V& S+ M
  190.   attrib=GetFileAttributes(FileName);
    % a1 O4 R% L. Z: k$ T
  191.   if(attrib!=-1)
    1 u9 p- n: s4 ~4 [; @. p( @4 i; \4 z
  192.   {
    ' H6 x. d/ r$ a$ G, ^% V, {$ w
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);' {; t7 t% e) k6 g$ t2 w
  194.     if(!SetFileAttributes(FileName,attrib)). H9 J" }7 K7 o! e3 ~4 Z
  195.     {' p" a) l$ k/ q
  196.       return FALSE;2 |3 O6 b) t+ i1 K# t
  197.     }3 [! @9 N7 W4 s5 m5 X& F/ _% X4 e6 _
  198.   }+ X3 {2 O6 G' @1 t. ^- j" v
  199.   fp=fopen(FileName,"wb");  t6 d$ l5 V1 U% C& z! E: j
  200.   if(fp)" t% T5 N- k( }
  201.   {. @6 U. H+ r' M# v
  202.     fclose(fp);
    , [4 e8 R8 Y3 o9 U! _
  203.   }
    9 \9 W+ i/ s$ M) g  o
  204.   return TRUE;# X4 `. M4 B% n' K6 ^0 w0 R
  205. }8 B7 O# _. z! @: W- }: b
  206. 1 ^' H7 W0 V0 E
  207. BOOL CRevAppApp::UpdateLocalVersion(void)- n8 Y. N; {2 j
  208. {
    $ e% G$ M9 |; i7 Q2 Y
  209.   char filename[MAX_PATH];( K+ ?% |( m9 ?2 |) n
  210.   LPUPDATEFILE file,olds;. J1 I; j6 r: O# V- }. i% p' D' \
  211.   std::map<int,CString>::iterator i;
    " V" m7 j( q4 h: `) C& Z  y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;9 ?% o6 S* N6 F
  213.   std::list<CString>::iterator l;
    4 l' ^- V6 U& A, x# f: y: p: {5 t

  214. 6 C. O( k5 J1 l6 v2 l
  215.   if(bFirstUpdate)
    ) p& L5 l' U) Y, x7 c8 J
  216.   {
    6 D1 S! Y# I# T" [( l1 i9 O2 [
  217.     dwCurrFile=0;
    $ w5 O. \: j- x, ?, q. S  T$ Q
  218.     bFirstUpdate=FALSE;$ }% o/ ]$ W* z' a
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 M  V/ r. O7 Q5 F9 E- `
  220.     {
    ' t& l- S  ?$ {: Y  m. O
  221.       dwTotalFiles=UpdateLocal.size();  y8 P- m# B1 y' v2 i0 O" Y- n
  222.       dwDownLoaded=0;1 f1 M5 ]. G( F) d, g4 W
  223.       bSilentStep=FALSE;
      B3 ^/ H1 ^$ Z
  224.       bCompressed=TRUE;; J' ]6 V, d8 ?" n+ v  y5 Y3 I7 G
  225.       strExtLocal.Empty();8 d: X% O$ N3 @. d9 t0 [1 N
  226.       strFullName=(*i).second;
    " O1 a" ]" B) p4 V
  227.       dwProgramState=AP_CONNECT;
    $ j1 b( e6 |! v: }) A$ ?* s
  228.       return TRUE;
      F9 o  @" N! M
  229.     }' c' c5 A# A6 y/ M& J2 Z7 @5 v
  230.   }
    3 J" D4 C4 b( X) V
  231.   else if(bRestartUpdater==FALSE)
    $ M, N' H9 Y' z/ G% G/ W; \
  232.   {
    7 W, T3 F) o3 e+ n- d9 D( {" w) v
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())/ Y  Y8 u+ F, t/ p8 I7 E
  234.     {' y3 {4 Z* k4 |, H! x& \
  235.       file=(*p).second;, K3 N3 ^9 g; n* j: ^
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    4 g6 q/ c" X3 A  q
  237.       {0 X9 `0 f7 O+ e% w* a' S9 m. V
  238.         olds=(*p).second;2 N$ d' }( H3 N' g. a5 A0 h$ u
  239.         olds->vers=file->vers;
    % g# v4 I4 z9 r. L. r0 n
  240.       }  b5 D! i, y+ i8 S
  241.       else
    ( z1 L: z6 c: Q- T% I3 w& i
  242.       {
    5 A* @+ P; I% e8 C* a: L
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # M' X2 R3 K$ `  U
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    " I+ ^) M! S# o3 Q1 f
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    2 I7 N' N% {) K! r' t3 H8 A
  246.       }& l) l/ Z1 m# O0 n9 o
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ) O+ p4 K; B% x7 M1 V
  248.       sprintf(filename,"(%s)",file->file);1 t  S) l( Q" Z3 `% W
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    . v. P: _0 z! c) A7 z/ R! _: e
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    # C+ i) X3 w: X/ T' L8 u4 H1 k4 ~
  251.     }; @& l2 `+ k" S9 m
  252.     dwCurrFile++;  X! }3 x. r1 T  ?  V
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . R2 _8 r) E) e1 u' c
  254.     {
    - f; D! x( ^) y5 |" M
  255.       bSilentStep=FALSE;9 G6 [! L3 s/ r" X2 \8 u: w
  256.       bCompressed=TRUE;
    # L6 O* b. S$ g" i0 v* j
  257.       strExtLocal.Empty();
    * Q! T$ y# x8 f# P( t
  258.       strFullName=(*i).second;
    % D! O3 d, _( s
  259.       dwProgramState=AP_CONNECT;
    8 ^! ?8 g& B5 }
  260.       return TRUE;
    * x8 \- U- d- n) Z
  261.     }. Z, y! T& [2 P) n3 h( L! a
  262.     if(!bRestartUpdater)( O2 }( U, n0 F! ]/ V4 c7 j% b
  263.     {
    ) H5 C$ }9 R" H( K
  264.       int iCurrSize,iFileSize;1 _8 Y8 t3 A: e; H; r4 u! k5 ~
  265.       iCurrSize=0;
      l" m* v6 V( P$ y; M
  266.       iFileSize=UpdateList2.size();
    $ X+ C( k  ^9 v+ }; i
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");) q# a9 P/ O' r
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    * [+ n% b7 @) {. P
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    0 [  m4 A* R8 y+ Q- m# E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 d  ]) S2 @4 e' }
  271.       Fclearf(".\\update.dat");
    7 \$ g+ b1 M5 ~: P
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ! G8 f$ o# N2 Y9 i" Z9 d3 i, u
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & m1 S9 ?2 E2 v2 \. n( i! T; S
  274.       {
    ' j% [( F! H& m+ @8 o8 @
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    4 h/ D. L6 s: n4 L" k: \8 X; a3 o
  276.         {& i# L0 Z$ o3 L* V1 G. ~$ x
  277.           file=(*p).second;
    ) C$ j. D/ P, F6 r# ]% N+ p
  278.           sprintf(filename,"(%s)",file->file);& y2 e7 U2 }: q! V) G5 J
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , k/ H+ _4 N$ F! @' I4 b, u
  280.           iCurrSize++;
    ' R3 U* C5 f! @+ |# q# k5 K
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));* \) s( |6 U9 M  v2 H
  282.         }
    / q8 Y& |* I+ a. S3 @
  283.       }2 e; D/ y* U& `1 ^( t; O
  284.       unlink(".\\update.txt");
    2 d0 }+ W  Z; b+ T
  285.       unlink(".\\update.tmp");' w$ m" Q; R/ V5 w; G. ^
  286.       Fclearf(".\\checkversion.dat");! }  x1 d0 z4 |, ]
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);) `; f! w$ R: T9 h" L. T
  288.       if(UpdateLocal.size())
    ' x; Q6 w4 _2 q  y/ q
  289.       {0 l* F! h$ t& g# p$ x* c
  290.         UpdateLocal.clear();
    + N; w3 u6 _+ d' ^/ m/ X
  291.       }$ K  g. J9 K$ G& d# b
  292.       if(UpdateFile3.size())" X( o  L2 ^- O2 g4 @0 z: Y
  293.       {# u% c  e( E) T* Y6 X7 V
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ u; A& e# i! W8 y2 e; f
  295.         {4 c6 l4 N3 f  k( y& c+ R
  296.           file=(*p).second;
    : a) R  C% v9 K! B2 F: x8 D
  297.           free(file);
    + Y9 }) }  F0 @; a* @' y
  298.         }
    + ^; ], E, {: T/ D- C. P, d$ W+ M, v# p
  299.         UpdateFile3.clear();  D2 X) `0 ^6 x7 [
  300.         UpdateList3.clear();, }; u# V3 ?1 Z
  301.       }
    " \1 p" z$ q7 J$ Y& B3 e5 D
  302.       if(UpdateFile2.size())0 H0 v" C4 |# U
  303.       {
    - p+ b0 r( j9 L' {" ^
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - s3 Z2 f, }4 |( b8 k$ o& [
  305.         {2 I% {( `% L+ u3 G, X3 v' I1 _) n$ O
  306.           file=(*p).second;
    ; G; S# R! O- M9 z
  307.           free(file);
    & |1 D4 ~* ]5 f6 E/ S3 b- W3 ?
  308.         }7 ?2 x  Y/ p0 k$ u
  309.         UpdateFile2.clear();
    7 A3 E$ e, u  |5 [- W4 N$ x6 j
  310.         UpdateList2.clear();
    % z- T1 p0 H6 X  W+ |
  311.       }
    2 d& P! x( s2 y$ {4 m3 T
  312.       if(UpdateFile1.size())6 e8 T9 _, u; b+ W* e
  313.       {
    2 d0 q0 h7 l+ {: a+ N3 Y1 j8 @, R3 k
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ K5 j/ M! v( J" v4 M: u
  315.         {
    ! I' }7 D4 e4 x4 i" m
  316.           file=(*p).second;
    ( A# @; Q% q! M6 Z
  317.           free(file);
    " R8 [8 `; `/ \, x4 r* D+ K
  318.         }# A9 b/ O- ^9 ^8 U5 R0 C
  319.         UpdateFile1.clear();
    ; B  Q: O) h  F. |
  320.         UpdateList1.clear();! o7 @5 V- A" q' s5 K
  321.       }
    , q* j/ Z* P' g% R2 }* a% i
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));4 a/ _* b* a! |* N
  323.     }/ U  |; U& U0 j
  324.   }9 f/ ~6 D1 i+ S( n$ d+ T+ w. I
  325.   return FALSE;( ~5 S* ^, O9 T. j5 p
  326. }' U3 j: G' G5 Z# z

  327. ' I7 H- y0 X+ R* H. o0 G) V
  328. void CRevAppApp::ClearAll(void)/ ?6 I! {" S% R. q2 J
  329. {
    5 _0 }( E5 J* p' _. `0 Y
  330.   LPUPDATEFILE file;+ Y9 a. `8 n! R( p1 V
  331.   std::map<CString,LPUPDATEFILE>::iterator p;' X7 @9 V% T! i& Y6 Z/ [) g7 S

  332. ' b2 y2 |; p+ a7 Y3 }* h; A
  333.   if(UpdateLocal.size())' N+ [+ X* e1 V4 A. J
  334.   {
    . G) q) _- i; p9 I; [0 Y
  335.     UpdateLocal.clear();  [  ?1 _1 u. i9 r6 D  k
  336.   }' r$ g: ~* H6 n9 O7 J2 Z9 H
  337.   if(UpdateFile3.size())! \, U3 j1 ]; d9 x& s. V! U9 L6 d8 V
  338.   {
    5 p1 T$ J( m+ b) j8 }8 \
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      e1 E; D2 O1 G3 ?  ]$ L, p+ O
  340.     {' g! K8 V3 `% D! v
  341.       file=(*p).second;/ E! D" X% i; \# W. q$ u3 f# H7 X
  342.       free(file);6 y6 b2 ~8 b! m6 w4 ^
  343.     }
    : T" U+ F* U' J7 z7 ?2 `
  344.     UpdateFile3.clear();
    % h' C8 k' Z0 }  I
  345.     UpdateList3.clear();
    9 e! H8 v$ t# `& J9 T" k) j
  346.   }) D' m/ ~+ n+ p5 C  v3 o; c, h% J, X
  347.   if(UpdateFile2.size()): k$ ^3 D7 F0 s# U& L( _* i' ]2 j) l' q
  348.   {* v$ t# A( ^! C/ C, l1 x
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% \- }" V5 o; K5 R% u; `% P
  350.     {! O2 a$ D- j4 R
  351.       file=(*p).second;
    1 Q9 H) T& i0 _
  352.       free(file);( {0 s6 h  Z/ r  J* K
  353.     }
    - @% S  t* v0 j
  354.     UpdateFile2.clear();
      a0 U: S6 B. t0 I9 W" G
  355.     UpdateList2.clear();
    * f- L* t4 p; D! n7 j; W# ?8 U
  356.   }* \$ u5 e/ y# H
  357.   if(UpdateFile1.size())
    $ ]+ f0 f# l6 O& b: ?$ s4 k
  358.   {( s7 o! x$ v8 k- T5 ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 a% z% o; s8 P( @. y) ~
  360.     {
    + @4 V0 F) {2 t0 d
  361.       file=(*p).second;( r" ?+ H) u& l9 C
  362.       free(file);8 A4 |  N; b' S" G; x: i  e5 b
  363.     }* y& c1 V' x2 e5 H$ k: h
  364.     UpdateFile1.clear();* q' ?- Z+ ?" W8 f
  365.     UpdateList1.clear();
    ' n. O; L. u' r& `" c
  366.   }( f( e' r, f' e: n9 M( i5 n
  367. }  
    . j4 H9 v4 W9 ]
  368.   1 i" j# x3 G" I
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ; O1 o; X" f4 f6 z7 y5 Q
  370. {
    ! H8 Q  k! P" D. N* v" s
  371.   int c;
    3 `+ k7 }5 N' P
  372.   LPUPDATEFILE file1,file2;
    . h" S1 J1 g+ |
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    : y% J" I' b3 u; K$ @* X/ q7 T& \, E( S8 Y
  374.   std::list<CString>::iterator l;
    # e" K" |8 c8 L2 ?4 @+ A; p. n
  375. # g1 X2 J& D& `7 b
  376.   UpdateLocal.clear();
    , m* o- y1 |* v4 ]' h2 T3 t
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    * l/ w) m% ~8 D- a0 S4 `* V7 d
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);$ L4 I. V3 y1 Q4 R( C) I7 F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : l9 e& \% J5 M# j5 o" T$ e. I2 ~
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);, e) [, {1 I# N) C' Q) g5 t
  381.   if(UpdateFile3.size())
    , Z2 E) u& Y% \/ n/ V; F
  382.   {
    9 x/ v+ ^8 Z" u4 h, [; o! |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)9 I5 K$ ]7 D, ^" X0 t4 y" J
  384.     {  A1 B( n0 v/ w3 [2 r$ E" U
  385.       file2=(LPUPDATEFILE)(*i).second;
    3 Y9 G; K% J, V( {: @  W& t
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) O: z! u  c! Z! _5 ~" m; M  m
  387.       {; w( {) b6 h) N: E1 E+ u
  388.         file1=(LPUPDATEFILE)(*p).second;
    1 p6 R* d+ l* z2 P+ k
  389.         file1->vers=file2->vers;
    9 `" }, g$ `. C( D& b0 B( N4 j7 D
  390.       }" X! Y; T+ h) l8 H$ o" ~! d- V. E. G
  391.       else" g4 X: G9 f6 N% S
  392.       {1 t; |: D# y( n
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 t0 z! k$ s2 \4 `/ w
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 j5 R0 e, |1 e2 u5 w8 \+ w7 i8 ^5 l
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    9 \0 y" b7 s7 [( k6 J' @; S
  396.       }* k4 u+ d  [+ {/ a* W, i8 i  C
  397.     }
    ( w. J, g7 q. P' b
  398.   }: \4 k; I& \, b$ s: ?  h
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++); I( g7 a: X& T# C
  400.   {- L) o0 t* j( k% G$ {  N
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ' i: f$ o  J, s) K$ u
  402.     {3 s! H' e: n% O1 n/ Q; s: S
  403.       file2=(LPUPDATEFILE)(*i).second;
    1 A" H1 H# i3 K% X
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ N9 b, N# V3 Z& _
  405.       {
    ) [: L/ ^  w' k( K" E
  406.         file1=(LPUPDATEFILE)(*p).second;+ i: J! {) g* a; p- N2 }
  407.         if(file1->vers!=file2->vers)
    ; X9 K$ I6 v5 V! S4 Y6 Y) X7 [
  408.         {5 l3 U$ D, i# C0 W, x
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 H( ~  T5 j% q5 F* Y
  410.           c++;
    , F; z7 U; Y, \% l
  411.         }
    3 h; J6 G2 Y% `0 N
  412.       }
    1 U; j# J. P- M* A+ }) s
  413.       else
    1 h& ?" v' P" O  f) E6 O
  414.       {
    ' n& g; z+ e6 L* N0 B6 }
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 T/ E- O+ |3 G1 V4 F
  416.         c++;" l  s$ s. o: }+ J
  417.       }
    # A; R# a7 ~: V2 L: u, D/ S. K
  418.     }- k6 w' w5 ?' u% N* n0 ?' Z
  419.   }6 h$ X7 r) W( E* R
  420.   unlink(".\\DownLoad\\update.txt");" l7 s# l# O# y" z
  421.   if(UpdateLocal.size()) return TRUE;
    4 F6 X) q( F. W* L5 R! Z
  422.   else                   return FALSE;( F( J& w+ U  v
  423. }1 }- Y1 G2 o" F# m# R  @* U$ U
  424. 3 L3 _/ W- b0 Q& a% Z  k
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    3 n. x# O/ _; [" O0 ?
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' x1 M7 k# `) I/ H; l; x

  427. & g: ]) v" @- \! n& U
  428. & @: H! ]! L/ n/ l$ m
  429. $ `3 p6 g4 d1 J) k" O7 @1 t
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)$ C* C- e# Q5 M! ^
  431. {
    0 o7 U! s, c0 a2 w9 V5 |$ M) k
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;0 y$ b5 s9 o; Z- A$ A3 l( u# t* k" D0 w
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" Q. T4 X- a/ A/ j: w8 c7 t% o4 ]* E
  434.   {
    " @8 Z1 p& Z* O. N1 D; T) x
  435.     char szLanguage[50];' y: J7 B9 C5 O0 O- z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - l/ `2 k9 W1 Y- o
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 e1 s% Z$ l. j
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ( }. ~4 ~  H. o4 ~  i' n2 _
  439.     else                                   m_iLanguage=ENGLISH;5 I7 O9 B& A' h2 A! Y4 x  s
  440.     char szRegister[100];  Q7 _" Z( P. Y0 {( P: T: N
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. v0 d3 F# L5 H' m" [+ G3 u
  442.     strRegsName=szRegister;4 _1 s5 o& |3 I3 ?# i, ^3 \7 T
  443.     char szPatchURL[100];: A1 u4 r+ g! S$ I2 `3 x
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 Z6 N8 K5 `7 s
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, u$ G8 L4 Y2 |& }, C" {
  446.   }( ?4 _8 r6 H$ [3 y, i$ p6 ]1 o6 n
  447.   else) p% u- z  A+ {1 V/ V7 p  }
  448.   {0 _6 P( t8 \# r, f" j' v; K4 O
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 \2 W7 C3 p% v1 N) I% A
  450.     strRegsName=DEFAULT_REG_URL;
    : a; `/ G2 B8 Z6 e. E3 p1 M
  451.   }- L) T6 Q9 S/ g" j8 z5 ]
  452.   if(GetFileAttributes("hosts.ini")!=-1)5 Y3 v; k9 q( h/ a' V
  453.   {  e" H2 @! e. N3 S: a6 {
  454.     char szIP[50];' Z  q; B3 i8 q
  455.     char szDIR[300];
    7 R4 H3 E% v. j6 {3 d: O& N
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    " w# Z: P4 c% |
  457.     {5 V4 A. B6 o- k9 b: y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    " C! Y0 Q4 X) c8 E
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");. z4 R, e( {; J0 b1 t+ k% a3 i
  460.       strHostName=szIP;( k7 |- ?# l' {0 I; Y: S" W
  461.       strHostPath.Format("/%s",szDIR);! `# I" \. j8 t5 S
  462.     }6 b  _9 V8 Z- [" \2 p
  463.     else
      s( G6 Y* @, }- d; z) ]
  464.     {8 W0 P. s, t; r; W% C
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 f: m7 K% V. ^& I6 n
  466.       {  [: {: W# C& c3 O! L
  467.         char szLanguage[50];4 p7 J, a! n1 P3 J9 B
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 y( V' I& {0 b. w* x' y+ [4 n
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! _* q0 ?. h) w
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' y* `/ v7 ]# F) Q! s+ F; L9 k
  471.         else                                   m_iLanguage=ENGLISH;
    9 q5 n6 }# o, M
  472.         char szRegister[100];8 O/ \7 Z+ a1 T+ d0 a
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) g# b/ Q& B, R
  474.         strRegsName=szRegister;$ f, H2 ]$ s( j8 P& Y
  475.         char szPatchURL[100];
    7 E# {9 \! F% J: L& `7 p4 x
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( W+ K* l9 g5 }4 g# Z# |6 q: s, N6 |
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 A5 ~! [. u' V) X! u
  478.       }* Y1 D- r% \4 C
  479.       else2 u3 n7 c7 g* Q; i
  480.       {
    . X+ s( }' E" p5 C, v% w( O
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 \; {8 \2 }2 L; W
  482.         strRegsName=DEFAULT_REG_URL;4 }. ^' q4 H: c- e* |9 J
  483.       }/ I7 `/ `$ k! u$ e% _
  484.     }6 Z9 u$ c3 E0 e, h
  485.   }
    / a4 _5 ^5 _1 R% c
  486.   return true;
    2 l1 V; K/ @$ l
  487. }% X' D- w3 ]; F% c) C
  488. 3 ^7 `# {- j( v8 Q: [
  489. #include ".\ZLib\unzip.h": G9 g- z1 o5 P  [
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ F% u2 K  B' f; |6 e2 q5 l
  491. /////////////////////////////////////////////////////////////////////////////
    & U; `, b" q0 K& r1 ?% \
  492. // CRevAppApp initialization
      u! Y  Q9 q& E) h" H

  493. % g+ r8 G6 u1 F  o
  494. BOOL CRevAppApp::InitInstance(): `# ~8 S( f( T& [# ?/ s, x- r
  495. {
    1 Z% E! ^0 G) e0 S3 a" e. c( B
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    % k5 m( Z) d7 l- d1 O* u0 }" o* G# X
  497. 1 e; D# V. C# q6 t" c
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  \7 l) e# E4 n2 U* c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    * Q8 `# s/ }  n' Q7 a
  500.   {! S$ A' D1 I; h
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");# _, A5 i7 m4 z# l/ J% N8 }
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    4 F( D8 K# U* g  b  T) V9 B8 D" h
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))). @% V, x" _3 X( n# h4 m, q
  504.     {
    # a& J0 ]' M' t
  505.       strcpy(szPath,szPathTarget);
    : s" }# t6 H- n, y) Y
  506.       SetCurrentDirectory(szPath);3 Q% a& g* {- z
  507.     }
    ; C2 j5 k5 C# ]: V( N5 `; W
  508.   }
    2 e, \" q% h# r# h& c7 R. T
  509. #ifdef _DEBUG
    1 H: r2 h; x3 c& `, H
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 T- T$ x# b3 c  [0 }7 |
  511. #else" B5 R* y0 R+ F: a, h& }
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& S+ |3 _  |+ l3 ?' \' s" d
  513. #endif
    ; e! q5 D4 J# P! w' P9 ~
  514.   {, C9 L; q. q+ c
  515.     char tempFileName[MAX_PATH];& G2 x6 H0 J  g! q5 i% N
  516.     strcpy(tempFileName,szPathSource);% B" r  c" f& b
  517.     tempFileName[strlen(szPathSource)-12]=0;
    8 x# r  N% _) E: Y6 ]/ M" I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");8 d8 Q% X+ T4 Z9 B1 G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    1 N1 r% }! W3 F# V3 ]4 s- o/ |1 @
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ' C. ^( s# i* J) Y' r2 _
  521.     return TRUE;& B8 z0 _) v  D+ a* ^: Z: b+ v8 P
  522.   }' W" j" ~1 e: q! `, |
  523.   // Nuke 0118: Delete run.exe! ]  o- m7 A; C+ v- s
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    / Y; E7 h; X6 v7 u& o2 R: B0 M: z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");4 z6 r4 _& b2 W# Q  F
  526.   if(!ReadCfgFile("Config.ini"))% {1 e+ `7 B2 x6 N- M/ u' E) c
  527.   {
    & x" C: l1 L" U0 @3 G! e( S
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: p) N( s3 v; C& N, {7 C( O7 ^( I
  529.     return TRUE;6 K! V4 w+ Y7 S% \
  530.   }
    " m$ d1 |7 G0 V0 q* t; m
  531.   HANDLE mutex;* z/ o/ ~/ l$ z8 d: ?6 J4 w# l$ _& {
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ! W6 S0 @  p4 v2 O
  533.   {
    6 V5 {$ \1 A3 B
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ( [$ [5 C1 T) y! z9 o7 f
  535.     {
    6 H2 A: {4 V1 m  A+ n* M9 g( @+ n
  536.       CloseHandle(mutex);
    & p. h9 i0 M4 Y0 [' W
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);3 f, c- o4 r$ H- Q! Z
  538.       return TRUE;' n, ?- @- G3 m, j
  539.     }; Q, ^, ^" J" v3 d6 X3 X
  540.   }  
    , i) L. g/ K' g% F# E) H: |
  541.   CloseHandle(mutex);
    : o# U& u$ L$ X6 M. [7 M
  542. 4 {6 v0 ?6 D. a2 j& x! b
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    & D; f8 e& X3 \. q: Q9 m7 Z
  544. 0 C$ ]; @! L9 ~, b! a5 }  h8 q
  545.         AfxEnableControlContainer();' p6 P3 N! k  b
  546. $ r# }% g0 q0 `* `% b
  547.   bCanUpdate=FALSE;
    : {- l* D. a7 w7 q; S5 A: r4 b
  548.   dwStartUpSteps=1;
    " |# W8 D& v" H, o/ J$ v4 u
  549.   dwProgramState=AP_NOTHING;) [- Z5 g# R" }: a$ Y

  550. * [7 `  ?, O9 ^, y2 F
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) X" p( c. i( ?2 \2 c

  552. 2 w- b; p4 Y. l9 r7 D2 A
  553.         // Standard initialization  p! C; s0 X; h# i2 F& g* r4 ~
  554.         // If you are not using these features and wish to reduce the size
    8 W7 ~1 q2 d7 N1 I) _  k- q
  555.         //  of your final executable, you should remove from the following
    3 T9 `3 @8 y5 y
  556.         //  the specific initialization routines you do not need.* i- L% f% N8 Y' c

  557. " j. b! W# Q1 X3 o
  558. #ifdef _AFXDLL
    ! y( [) l4 J; ^8 v
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL6 }3 Q/ `, S; O9 g) a
  560. #else
    & p' G" D* w4 R
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically6 Y9 N5 X1 f- q
  562. #endif* m5 o( n, E! D6 B* p8 e
  563. ( l% O2 y" F/ c, Y# K& U
  564.   dlg=new CRevAppDlg;3 o, R6 o9 n* n& A: S# z% A9 P
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 {$ U! e6 S) N% z7 A1 b  }6 Y
  566.   dlg->ShowWindow(SW_SHOWNORMAL);& @3 @. G9 Z8 A' H- C; Q& e
  567.   m_pMainWnd=dlg;
      B1 v5 y9 q# q0 H  D) ?
  568. 5 l& \& g. @5 j9 C4 ?! b
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    / o- `2 W  A( u/ w) \8 E6 ?) ?5 |
  570. ! ^3 j* x  ]5 d+ m
  571. //  GdiplusStartupInput gdiplusStartupInput;
    / ~  t, u* c, Q; D
  572. //  ULONG_PTR gdiplusToken;
    ! b: u$ f; B1 R  R6 D
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);2 d& c" P. n5 q  B. ~

  574. 9 a6 u' {- Q" q0 c. k
  575. //        CRevAppDlg dlg;
    ) C4 [% g- [: R/ J3 w* Q6 E
  576. //        int nResponse = dlg.DoModal();9 T) k3 }7 \/ D" k% I/ X5 E' u
  577. //        if (nResponse == IDOK)
    + Y. }3 M, \+ E3 p8 I: e& d
  578. //        {# s* [& c* e4 m' V( D# y0 K
  579. //                // TODO: Place code here to handle when the dialog is" w/ a  w7 g( s2 z
  580. //                //  dismissed with OK
    # o4 u9 H' b, Z0 e0 n3 J
  581. //        }
    4 |4 u' N  {4 U) u
  582. //        else if (nResponse == IDCANCEL)' L* p% b4 t: @0 L$ a2 h0 L. ^+ A
  583. //        {
    ; i/ Y! }2 v3 b1 u
  584. //                // TODO: Place code here to handle when the dialog is. a$ @0 Y, L  A! |
  585. //                //  dismissed with Cancel
    1 j/ S1 X) q6 J8 C7 s) V
  586. //        }3 |% f, T" J+ {8 p/ `

  587. 2 I9 L5 ~% J& p% z
  588.         // Since the dialog has been closed, return FALSE so that we exit the, Y8 |/ @0 u+ \8 S/ P2 \5 w
  589.         //  application, rather than start the application's message pump.; d$ a, U+ `# D3 w# [) I. y
  590.         return TRUE;( r! y* X- v9 S. ]3 V& f3 G6 G% [
  591. }# X# _5 W0 q! \* V

  592. + f' F3 n% T  m. R
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 q% a3 t3 Q4 ^5 l" C; o6 b
  594. {
    $ H+ X, J: w* z8 a
  595.   int i;+ q5 [. {; B9 `. `3 F
  596.   char *szRet;
    ) F: p, n1 t4 _% F) J

  597. $ @9 @& _  E" c& G) f4 x4 J6 x' Q
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    % t2 C- [& m+ @  R
  599.   if(sztoken)
    * i6 @4 B0 ^7 X
  600.   {
    . Y! f' _" p; d: e
  601.     szRet=&sztoken[itoken];( V+ m2 _( t8 ~' D# `% E
  602.     while(sztoken[itoken])8 o" ~- i4 @: n: d& V- I* O
  603.     {1 p6 |1 b+ ^7 m; s% K8 A" s6 y
  604.       for(i=0;i<(int)strlen(token);i++)
    * T! r" a; Q( }; c& A+ y( Q
  605.       {
    9 c% c! p; E9 V7 _2 {9 k
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])8 F( F" s( M  @: l
  607.         {( j3 {3 a4 ]1 l5 V( e/ x9 F' `
  608.           sztoken[itoken++]=0;) T, ^- I" P3 H/ n. U
  609.           sztoken[itoken++]=0;5 R) \% e5 l* V
  610.           return szRet;5 q% z8 \- {, x+ v! z# S
  611.         }) y3 D# K8 s" R1 S; o( }
  612.       }2 h; ~7 P( j) d
  613.       itoken++;
    3 {! M. N5 p3 g- N0 Y
  614.     }$ `& r% Q; y. @9 }$ ]( h/ g
  615.   }) M4 |" K3 F* F1 I0 b+ T: B
  616.   return NULL;
    4 D, @' l, D) }- p# ?4 s: s
  617. }
    " I& C( u6 n/ f8 {1 \) B7 {
  618. 1 Q8 l! B9 [6 O9 v$ R
  619. void ProcessProc(long Total,long Current)5 G: ^3 |8 p7 y8 o
  620. {
    * M4 }8 T; Q. }5 X4 R+ `1 Y$ ~
  621.         MSG msg;
    2 G0 a7 t$ c( C* e: _/ K
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);) i& I% L+ T5 ~
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    2 N( {; C( C9 G$ r$ Z
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ C# E5 ?" D6 B& K8 R1 ~& S
  625.         {2 s; N* E' Y( l7 N1 m3 N1 G
  626.                 if(!GetMessage(&msg,NULL,0,0))/ N  ?, x+ G8 E- J" E
  627.                 {* V# I  [) @' f& p* O
  628.                         return;5 ^2 |2 _$ v5 R5 c# [; O* c* p
  629.                 }
    4 g$ s% P& c3 P& a" s0 S' |
  630.                 TranslateMessage(&msg);
    0 Q+ ^2 q& R  J# B6 m) u
  631.                 DispatchMessage(&msg);
      B0 G: A5 d! `, d9 ~
  632.         }        ' V; E9 b5 C9 I9 ?' I( a
  633. }
    & i2 B# Y2 @0 ]1 o- j
  634. $ X& {- W% K/ A% R
  635. BOOL bFirstChar=TRUE;
    # u! Q  Q0 K/ |7 F
  636. $ x/ A& q. w/ @8 h
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 I+ n! v- r# W/ L- f9 _/ D2 K  p
  638. {* P4 g4 Y. @9 o6 X9 G# [
  639.         // TODO: Add your specialized code here and/or call the base class
    % K6 d9 \0 c$ G/ e9 I
  640.   switch(dwProgramState)
    : x+ e7 @; Q* U( y! j1 u* f
  641.   {1 i5 h* W$ G9 ?" B# x$ g6 U$ A
  642.   case AP_NOTHING:
    - X* s' g/ k3 m! M* }
  643.     switch(dwStartUpSteps)* G; {$ i+ i  i3 U% l! g. K  Y8 |
  644.     {! j7 o- E6 s* C& r4 C
  645.     case 1:- b/ H7 s. @! `! l/ N( y- N6 J: O  ]1 Q
  646.       {
    7 N( `- B1 f3 J0 F  b) N) D
  647.         int i;& W- u6 n4 I$ a1 N
  648.         CDC *pCDC=dlg->GetDC();
    * H9 s  d. c3 I) L" ?9 S/ ^- Q
  649.         HDC hdcwnd=pCDC->m_hDC;
    1 h* E! g0 P+ ^2 f: I! H; ~$ r( C
  650. //        Graphics graphics(hdcwnd);
    / a! j/ `7 D' A) S
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    2 B  A& M4 k% x
  652. //        INT iWidth=bitmap.GetWidth();
    8 L: M7 K1 C( P5 |# U( m- G' Q
  653. //        INT iHeight=bitmap.GetHeight();3 O. B/ s6 y1 P/ N$ `/ `
  654. //        Color color,colorTemp;
    . v  f, i5 |5 u: C% C! O& E) B
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)3 G; u0 b, W- [/ V9 K
  656. //        {
    3 b4 A# P" y- m2 Z% l
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    . A; e/ H+ F3 u0 K5 p+ L7 _7 Z; `8 V0 m
  658. //          {
    - F# k- {2 B. r& X
  659. //            bitmap.GetPixel(iColumn,iRow,&color);, m- I6 O0 y- H, c
  660. //            colorTemp.SetValue(color.MakeARGB(
    ) k1 I6 O$ N+ j3 P/ w
  661. //              (BYTE)(255*iColumn/iWidth),! }/ Q. R+ C+ [4 z) x
  662. //              color.GetRed(),; z4 \5 |( Z9 f7 k7 g4 I0 T
  663. //              color.GetGreen(),
    & _7 W$ N5 w- H# U* q& O8 ]2 H
  664. //              color.GetBlue()));  K# h) g6 ]) [
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);# Z0 g8 y5 B3 Z! e, |& m
  666. //          }* q5 ]9 ?$ W/ K
  667. //        }9 V$ i& b7 N6 _" g! A6 u& }/ K5 y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    : ?- I8 y# g) f+ c8 P- C& f1 R
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    * w- I+ z/ h- H6 V" s
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");0 K0 K! P8 x/ n
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. D, Q! D. v2 o
  672.         for(i=0;i<240;i+=8). `7 B3 X7 \3 e1 U( ?- c& V. ^
  673.         {
      T  g& L3 r- j: s& d  T$ A+ ]
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; p# m. K/ p+ V0 u5 g. W4 H
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) e! V; c1 ^# Z8 A, }
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- F7 d1 z8 G: I
  677.           Sleep(33);
    ! P5 d6 p4 f  Y) e* }
  678.         }$ ^- x$ p- p, |
  679.         Sleep(1000);  b$ U* X, \/ M" ]5 [
  680.         for(i=240;i>0;i-=8)6 m6 y# U5 E& p/ ~5 T- J5 x! a
  681.         {
      c3 r6 Y. k' e- ~! z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! v' x& d) Y% e: A" l: z) A
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * e. d% a$ |) X" E
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / o: M0 `6 t4 @8 @! L! O- U
  685.           Sleep(33);! x* T8 V! x! P+ F
  686.         }
    - B3 o; D* c( O8 ]/ Z6 G+ o7 q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    / M* a/ r) g5 B8 k5 W3 z7 i
  688.         dlg->ReleaseDC(pCDC);
    1 i3 p! H8 j  X' O1 G8 T7 u
  689.         DeleteDC(hdctar);
    $ G" n; ?# V. t
  690.         DeleteDC(hdcsrc);5 _! q. o9 G& G+ [+ b
  691.         DeleteDC(hdcorg);1 N+ x  y1 V0 M0 r9 _: v/ Z
  692.       }
    7 d' Y+ a" r1 |1 r# y1 A
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    - Q, h( U2 C* ~4 a  F
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");4 X$ l: f- e8 o  g
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    5 G4 _, W. x1 R. |# h. h
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");% r/ ^' C5 F1 N5 q# m
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 Y. t9 x. U3 u) l( }
  698.       if(!Dn.Connected())
    7 Q: W( `- Z" z# l/ ~
  699.       {% O! O+ ~2 X1 Y1 a' ]- J( ]
  700.         dwTotalFiles=1;
    7 G( o. i6 u# _* L) N1 L9 m# E
  701.         dwDownLoaded=0;
    * q% w* D3 F: m; D
  702.         bSilentStep=TRUE;
    # r% w+ r% x( Q8 D6 h% p& Y3 g
  703.         bCompressed=FALSE;
    ) L' d/ H" J  \7 i
  704.         strExtLocal.Empty();5 i" ?5 j6 b# o9 [" N
  705.         strFullName="readme.txt";# U" w! X& \2 G1 ~, t9 k) Z
  706.         dwProgramState=AP_CONNECT;
    : ?7 R& P/ Z+ n) `* w0 N$ [
  707.       }. t6 l& j2 d, H0 L& d6 u% d) c1 Q+ s. Z4 u
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    / n3 e' t- t% f
  709.       dwStartUpSteps=2;
    ; r+ U( Y$ a/ _  z0 z- k( z
  710.       break;$ j- p* u! f% l4 V
  711.     case 2:
    & m' c( i' j& u, y+ B+ [# I
  712.       {5 K: r: }( o, K% w: I
  713.         int iEOF;& {+ V9 b/ t' y" M. M+ Y) I! ^
  714.         FILE *fp;: _5 `' ]3 c- s+ a; G
  715.         char szString[512];; C  n3 x  {( }
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    & m$ i5 P1 w. U. u
  717.         if(fp)' ^8 O6 f7 Z6 b% y9 q
  718.         {5 h' `/ _3 w1 ^5 M! i
  719.           do" O& H3 ^( [8 a1 i' n" V8 b- ^
  720.           {
    ! z; t$ S3 A9 u- w4 e7 k' N
  721.             iEOF=fscanf(fp,"%s",szString);
    7 i- {. L7 U$ u  K0 M+ `
  722.             if(strlen(szString))6 k# M% W! j% s8 C
  723.             {
      b) _+ z  i8 t
  724.               if(bFirstChar)
    * }$ {* [' ]2 ?
  725.               {
    ( a# ?/ E+ Z2 y- h0 Z4 q' q
  726.                 bFirstChar=FALSE;0 o3 o" U- P- P* q/ f" }
  727.                 bConnectIsBig5=FALSE;% {* F) y) K6 I4 `
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    . ^& d2 {3 O/ W4 r& e" i0 L
  729.               }
    9 z+ M' l0 z2 n& k
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));) F& ~. A. A2 ]1 n" l8 G" ~: t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 ?' P4 Z* v' }/ v" Q
  732.               dlg->m_ListText.AddString(szString);+ X# r8 O& e' H$ Q6 s
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ J; t. M( n; ^0 [' H8 h
  734.               *szString=0;
    ) q, }1 S" b* Q+ j; i
  735.             }1 L- K3 f' h. Y: X- d/ R& }
  736.           } while(iEOF!=EOF);7 m% n9 U- O0 ?" u# e' @8 F
  737.           fclose(fp);
    , j1 b* }" ]9 f
  738.           unlink(".\\DownLoad\\readme.txt");
    # L8 T+ W2 y2 X( ]/ K9 }
  739.           dwStartUpSteps=3;
    ( X4 }9 `) e- k/ G' v; ^
  740.         }6 c; s; K* q7 p* D. y3 w# G6 W2 v
  741.       }% Z  {4 |/ Q/ \
  742.       break;
    / O- g& a& ^& |8 R8 g# @2 |
  743.     case 3:* j8 D' M5 n" r' w/ t% r2 i
  744.       if(!Dn.Connected())* v! f! L' w- W2 m
  745.       {) o( B0 Y  c! H7 Y! m! s
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ! |  U* K  F9 {# p1 E$ E" q1 s
  747.         dwTotalFiles=1;; k9 W  u& i3 \7 W5 E
  748.         dwDownLoaded=0;8 ^# Y  k; B$ \# U  H* g8 m( \
  749.         bSilentStep=TRUE;
    ) O: Q2 p4 z" P% X, u
  750.         bCompressed=FALSE;
    - j6 ?8 ~1 ]3 v7 T
  751.         strExtLocal.Empty();( C0 c, S) k$ S4 R9 Z) z
  752.         strFullName="checkversion.txt";, e) m. _7 I, g  }1 D  r1 g2 X
  753.         dwProgramState=AP_CONNECT;
    ( E8 v5 }- P& }7 \$ D8 h8 O) a3 y! [
  754.       }1 V3 a! @) S( D# _9 H2 J
  755.       dwStartUpSteps=4;1 R' s' C/ h. x. D
  756.       break;
    7 e# A) c5 y" h/ _. `7 \. }
  757.     case 4:
    1 ~6 z. Y5 X% ^, O1 r) L. F9 D
  758.       {
    " l4 Q( Y, E  x, c/ h
  759.         FILE *fp;) X+ q* {' l* \5 `6 x
  760.         char szString1[128];) w5 W" D/ _7 L/ ^% K
  761.         char szString2[128];
    + v! ?8 h7 |6 c& |, D8 y
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 j/ E* x4 I/ z. X; \+ q* s
  763.         if(fp). K- C1 _( p" y6 U
  764.         {
    8 S: M  ^4 S5 v. t4 d2 X. w
  765.           fscanf(fp,"%s",szString1);
    . [5 C7 m! A; g7 a! g5 {
  766.           fclose(fp);
    , w7 @) L# P' G( O5 ^
  767.           fCheckVersion=atof(szString1);6 I# d! k" V0 |8 [& \
  768.           fp=fopen(".\\checkversion.dat","r");
    6 e9 |' K+ l2 W9 N) O3 w, K- \) T! V
  769.           if(fp)
    " b$ }2 I3 s+ g, P' k9 V- H
  770.           {% `4 K" a" w- [* u2 r
  771.             fscanf(fp,"%s",szString2);
    1 }2 N0 T( j4 E/ O3 h  t* ]6 @
  772.             fclose(fp);
    9 p! U2 G$ X1 n1 ]+ r
  773.             if(atof(szString1)!=atof(szString2))  t2 Z% \/ u% F8 b
  774.             {  x) I8 ~1 |5 W
  775.               if(!Dn.Connected())6 v2 g# B. }$ `. _
  776.               {
    6 U: R8 ^  k8 n) X+ M- E. T$ B7 w
  777.                 bFirstUpdate=TRUE;+ n2 z8 }( A; R( ^9 b; m. _: N
  778.                 dwTotalFiles=1;
    8 t2 K) x  d8 T8 ~8 L  U0 z
  779.                 dwDownLoaded=0;
    # H) p- v$ V" ]: ]7 |) }6 x% E" u
  780.                 bSilentStep=FALSE;1 g! N/ \1 i6 D% p
  781.                 bCompressed=TRUE;* {4 R2 d  V$ H" \8 O7 L
  782.                 strExtLocal=".\\DownLoad\";
    * a$ t3 d2 }7 w. T. d; {% g  @
  783.                 strFullName="update.txt";" N! [2 ~2 A% O$ v2 L
  784.                 dwProgramState=AP_CONNECT;4 y2 v% L, D8 r7 V2 I: G8 N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - p- o- _; `" Y1 n' u
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 |6 @8 T- Y+ N: k% W( p+ S* `
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : \- |4 {2 h+ ^0 t

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

( j5 \# \$ C: J0 j( C
* N+ T: p5 r- ~* ~% A: m: Z

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-18 08:20

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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