CSUpdate.exe源代码

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

, q$ N0 ]% O0 I  |8 W; R9 M
  1. / RevApp.cpp : Defines the class behaviors for the application.' _7 A; i) R8 v  X
  2. //
    5 l+ T2 x' b. ~$ S$ I

  3. 7 D  I' e1 R( X% k9 u) }! M
  4. #include "stdafx.h") F5 B, {( M8 c3 c9 U

  5. 3 g1 e) P& H7 m8 ?
  6. //#define UNICODE$ |$ S% K( ?/ q- k
  7. //#include <gdiplus.h>
    4 a7 C. Z& n. u) [/ t, e. q
  8. //using namespace Gdiplus;
    * D5 Y+ I( Y0 M$ f6 |% O" {; T! z
  9. ! L8 k2 C1 a! }1 ?, l' H, [8 T6 b- B
  10. #include "RevApp.h"
    ) M& B5 U* d3 l$ T2 J* s4 E
  11. #include "RevAppDlg.h"1 s/ ?% W# \$ ]. `$ R
  12. 9 u& o; |) C' Y" ]
  13. #pragma warning(disable:4786)! H5 c/ Y; P: y5 {, M
  14. #include <map>- l4 C  u; V/ i! z% H
  15. #include <list>( I1 P8 C1 N& w3 _1 \
  16. #include <direct.h>
    $ l% }* V7 u9 u7 V8 w$ f. l
  17. " P& O( B  ~. D8 A/ M
  18. #ifdef _DEBUG5 ~& Q7 B/ z" t2 j4 y! }0 G
  19. #define new DEBUG_NEW
    ( E2 k* Y- @* C# Y# b/ X
  20. #undef THIS_FILE
    " W( q$ ~1 i' _( _% ^; Z" e
  21. static char THIS_FILE[] = __FILE__;
    7 y% F+ {. x$ E, w6 ?
  22. #endif/ |1 [' @+ f. h$ z# z# u
  23. #include "SkinResDef.h"
      S: z4 y! ?& v& F1 u& V
  24. #include "ChangeBG.h"! F4 G) |. ^) d* v- v4 ^
  25. #include "AFXINET.H"
    - t! J& O. f4 r) b$ ]) e9 |
  26. 1 W8 k8 n* B5 e0 o( R5 [/ k
  27. #define TRADITIONAL_CHINESE 0
    - L- K* t( e' @: [! _
  28. #define SIMPLIFY_CHINESE 13 H; F6 ~4 |( ]" g* X4 e9 V+ R. I
  29. #define ENGLISH 2  Y3 k. b3 k9 o! D+ m) N
  30. int m_iLanguage = ENGLISH;9 x& X% C: B) w( T, N4 y7 w
  31. /////////////////////////////////////////////////////////////////////////////
    6 w/ W' z5 _9 L  j
  32. // CRevAppApp
    ; O1 ^' F; g! S  y, H5 J7 j: l" ~" Z# |* v
  33. ' E: H  `" L- x% w$ [8 @4 c# X
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ' N+ b* u0 C2 t: Z+ x
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    - {& r" ]" U5 ~/ x
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.7 i9 w" b  V2 K+ r% A# r( s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    7 v4 \$ C- x0 F8 L5 L) C5 X$ U( r
  38.         //}}AFX_MSG% ^" o4 }, u+ v& Q1 v0 s' H- J
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)7 t* ]' b  U* k  v# L% I3 I# U6 K
  40. END_MESSAGE_MAP()! ?( X6 \! [3 _& g
  41. : Y/ N# F. {  V- n5 u
  42. /////////////////////////////////////////////////////////////////////////////
    7 f) I1 G. p9 b: b# ]
  43. // CRevAppApp construction3 o. c% L* S( R) a0 |
  44. " k7 o1 u) u* y* o  |3 u
  45. CRevAppApp::CRevAppApp()
    % I# c& V% S! J% {0 r
  46. {, q3 K1 r( d- c1 j/ p4 X
  47.         // TODO: add construction code here,
    ( i( q* k% W- J  j
  48.         // Place all significant initialization in InitInstance0 f% p1 H$ i! J1 K5 e& n! m4 _
  49.   bDisplayIsBig5=FALSE;
    ! L0 T* v# \  K* I7 v8 l% `0 s/ y3 X2 ?
  50.   bRestartUpdater=FALSE;
    - J( ^: M5 y6 i; h; z# |9 W3 }% V
  51.   bFinishUpdated=FALSE;
    + H. b$ h. a* F$ h; Y
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    : q1 X6 \: w# ^; N) e
  53.   InitChangeDataBig52GBKS();$ w- |/ m  a3 Y5 Z* }4 [
  54.   InitChangeDataGBKS2Big5();
    6 n8 h3 h! T" v# i
  55.         //
    $ M' U6 }9 a: H+ g
  56.         bClickRunExe = FALSE;
    0 p3 t% E/ w/ R
  57.         //
    ) u- E; V$ R  x: X. s2 |
  58. }
    7 r: \! ?5 ~3 h/ I

  59. ) Y2 v( c. I8 e
  60. CRevAppApp::~CRevAppApp()1 f4 u" N9 W" o" H7 L
  61. {
    8 }5 q! G6 y& F* m' s! M
  62.         // TODO: add construction code here,9 T" i6 s- z) j" N- f
  63.         // Place all significant initialization in InitInstance0 |& {$ D( G' {. i. o0 x
  64.   EndChangeData();: B& k! B; a& J+ ?0 \8 t0 Y8 Z6 T
  65. }
    / R3 J. H  M* ?' G* V! l

  66. 1 Q: ~# O$ K$ v1 V' a0 t
  67. /////////////////////////////////////////////////////////////////////////////1 e& K+ v. R, E
  68. // The one and only CRevAppApp object3 i/ e6 G# c: y/ t

  69. " A( D" Y" o* s7 ]4 v* @
  70. CRevAppApp theApp;
    ; @$ O4 ?1 G0 G2 }  ]) P

  71. ; f) I& R9 `0 L* F% h$ ]4 ~0 k
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)3 C# k7 T1 m9 \0 W6 k
  73. {/ M' K$ Z& u' b" \
  74.   int iEOF=0;4 {1 Z# p6 ]; |; H" j
  75.   char szTempName[MAX_PATH];
    , W4 r( l5 |( Z
  76.   *szFileName=0;" x5 R9 t) ^; n  K* W
  77.   iEOF=fscanf(fp,"%s",szTempName);: {2 N* a7 T! S9 k
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ( e# W4 C6 l2 E8 }/ V2 H
  79.   {
    $ l7 t/ E9 ~# M: |6 s4 y
  80.     strcpy(szFileName,&szTempName[1]);' L4 m1 }2 j* b" k; ~7 t9 i6 d4 O
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)- c2 K+ B( K6 H
  82.     {# e! v5 r' _  A$ F% j
  83.       iEOF=fscanf(fp,"%s",szTempName);, a+ W; j' U+ r! V
  84.       strcat(szFileName," ");
    6 e4 z! ?) N, ~+ I
  85.       strcat(szFileName,szTempName);2 W$ _  D3 g, H8 j; A: A
  86.     }
    & g- ?2 A: b1 k
  87.     if(strlen(szFileName)>=1); O& @& S2 k9 w
  88.     {
      d. B4 S$ k; {5 [3 d. q0 \7 L
  89.       szFileName[strlen(szFileName)-1]=0;
    ) A4 v  ~! z% q& l  i/ @
  90.     }
    3 ]; P5 o+ B/ p" Q6 J) Y
  91.   }
    & P2 N6 F, P& F# E
  92.   return szFileName;$ X" S) P( {9 ]  D$ X6 c
  93. }: C1 l1 o: ?3 w2 Z6 p
  94. 0 d# l3 {3 b$ t  E3 ~9 m  T
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)8 g, ?) V5 {, c9 M1 r
  96. {4 r  w" P2 u% _/ {( x/ F
  97.   FILE *fp;
    ; e8 g$ V5 l- y/ I& ]
  98.   char *key=NULL;* T& {* n* M1 a
  99.   char version[MAX_PATH];" d4 t1 |9 s( t3 [9 `( M  m2 ^
  100.   LPUPDATEFILE file,olds;. C6 d  a8 i1 b0 m
  101.   std::map<CString,LPUPDATEFILE>::iterator p;. ^, C) F& b7 g& A, O
  102. " r; k: Y' B! `4 L
  103.   UpdateList.clear();
    8 Q, s- [9 h- Q, N7 \, f# F/ r
  104.   UpdateFile.clear();" K' v+ l- z( o# \: c* \4 k
  105.   if(GetFileAttributes(filename)==-1) return false;
    2 I. m% a1 o. H
  106.   if(!(fp=fopen(filename,"r"))) return false;
    5 F* C* x' n+ {: R( ~
  107.   fscanf(fp,"%s",version);5 v! z/ [. i1 Y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    + L& C, g; b  P+ ]2 u8 t
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ) r9 V/ _" n! w2 r& i5 l$ o
  110.   {+ k1 ~3 F- ?: _( X
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) ^& `9 Y; \2 U$ g
  112.     fscanf(fp,"%s",file->path);
    - `, n* d- M2 F3 B6 U4 L% c
  113.     ReadFileNames(fp,file->file);
    ' z8 |/ G( ]5 ]6 c
  114.     strcpy(file->full,".");8 S$ D2 H: a" I5 N
  115.     strcat(file->full,file->path);# O: u! q% w2 x- [. Z* L7 s% d
  116.     strcat(file->full,file->file);1 n/ A' P$ K8 A
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& N5 ^9 C% R9 m! U8 }
  118.     {. c+ ]3 o6 D' P5 b. U$ y* A
  119.       file->vers=(float)atof(version);
    " j( |% r$ ~! Y% H
  120.       UpdateList.push_back(file->full);; j6 N  R. {  x. w6 Q1 J* V
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    * i3 l, V( S, o" x* K+ f
  122.     }/ U, }( i$ p3 w, f
  123.     else
    $ S# H! V# N( G
  124.     {: S5 o3 i+ t1 y7 Z  ?5 b' t* T
  125.       olds=(*p).second;
    ( o& q* w: K  \; U# c3 }
  126.       if(olds->vers<(float)atof(version))
    4 _% I! d! w5 I
  127.       {$ S+ {4 Q. J, y- g
  128.         olds->vers=(float)atof(version);
    6 t# N* n' ?3 c: c  D; x" M
  129.       }) u( ~0 {1 c3 L
  130.       free(file);) B& r* i& v# D; Y- P  K0 u% l
  131.     }8 d' F4 d  t5 q3 T
  132.   }) }% [& J, ?7 u' j
  133.   fclose(fp);
    , Z4 G* z# X* P
  134.   return true;& n0 w) l5 K- l) q, [9 f0 A
  135. }
    8 b( g, w& H5 a  i
  136. ; H8 M$ O- \5 L2 g- `2 {% D' R
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! r7 y7 I$ P+ k- m; ?  y( s
  138. {
    6 r: ]3 t4 {% ^5 ^8 H% |* a+ O
  139.   TCHAR  szFull[MAX_PATH];
    4 f  Y$ B4 z: B) R) \* k% P
  140.   TCHAR *token,*inter;3 \/ @5 J0 @: }
  141.   *szPath=0;1 e- k2 H& C* r% @
  142.   strcpy(szFull,szFullPath);
    9 _; ^2 o+ t3 \4 o, [5 g) P% f
  143.   token=strtok(szFull,"\\/");
    . `+ `& c. [: o& ?
  144.   inter=token;
    ' X7 `8 K: r' B5 \2 m
  145.   while(token=strtok(NULL,"\\/"))8 `* Q8 a& B2 e  v% ~. m, D) X* M
  146.   {
    0 D) E8 U2 Q! A
  147.     strcat(szPath,inter);2 E4 @" ~3 _/ D
  148.     strcat(szPath,"\");
    4 `0 L3 J# d" ^  @- [9 H5 g
  149.     inter=token;
    % ^4 m/ t1 m" T7 E: T6 N
  150.   }& i' }2 G! K( q/ |+ Z* W; C
  151.   return strlen(szPath);2 c& z7 o, \4 w5 [* ~3 n$ m
  152. }
    ! i. A) ~3 _) q4 a4 q5 S6 Q, Y3 ~
  153. - e. r$ ]" g" F3 v( K1 x* B
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    * p- _$ j" f7 C. g( q4 |
  155. {$ B. n, H5 ^; L
  156.   DWORD attrib=GetFileAttributes(Target);
    " U2 B- h8 n# @* u6 [2 F
  157.   if(attrib!=-1)
    % V: ^1 Q1 h. }: S2 K8 F1 y
  158.   {
    * @7 P8 j- V( H6 m( p
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))' e4 P6 }, D- x4 s1 \0 Z' \' r, u
  160.     {
    7 N+ g. N8 Y" |% R& {) ?- S
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ! W* p% ^9 S: ~4 T1 {: q
  162.       SetFileAttributes(Target,attrib);" s/ x( P2 j0 X8 j8 j: b2 T+ U
  163.     }0 @, H, K. t5 g( e, ^9 \" u, l
  164.   }
    7 A! f- z% K( @+ h1 T
  165.   CopyFile(Source,Target,Erase);1 E; @0 T% A1 p6 v; K% z6 M! W/ ^
  166. }4 Z0 n) x5 S7 D8 Q7 j; i' q
  167. - R' \$ _/ J) O
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    6 k2 u4 `. ^% s5 u
  169. {. X' Y3 }% F, Z4 L" G8 m
  170.      FILE *fp;
    ; w6 j: H7 p& q3 p# `
  171.      char  szBuffer[8192];  E9 _  j/ ]0 t
  172.   va_list  argptr;
    $ y: d# ?: l+ S  q9 Z

  173. 2 [5 [- C1 h! E8 z* ]1 z  u! B
  174.         va_start(argptr,message);
    $ T( _$ J- ~0 Z
  175.         vsprintf(szBuffer,message,argptr);
    ) }+ Z# d. b( s0 v: ~- j! D! N" E( @
  176.         va_end(argptr);
    9 T. Q$ B3 v) x; l- Y. |% R/ |
  177.   fp=fopen(FileName,"a");! ?) i6 \. L5 ^# }9 J9 U, N# G5 p* x9 V
  178.   if(fp)
    2 i: ?# i1 a6 Y3 `' y: i$ q; ?
  179.   {
    * ]$ U4 v0 X4 h5 Z: h  ?/ E$ F
  180.     fprintf(fp,szBuffer);
    ! P) w4 i# Z9 k# j" [
  181.     fclose(fp);
    " v6 f! O0 c+ C" \9 U
  182.           _flushall();
    0 Z7 z' _/ T' {# x
  183.   }. W) ]& P0 m$ M. g7 Y3 _  b
  184. }
    9 W9 R, Q% P: N. E

  185. ) }6 {: H( d1 _9 p2 ]
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    * d3 l2 R4 k2 A( v3 a
  187. {) m. y- j5 W' _- g7 ~0 E
  188.      FILE *fp;3 Y4 j: {, q" x5 U
  189.     DWORD  attrib;9 i& i. i; u1 p$ W3 b; i
  190.   attrib=GetFileAttributes(FileName);! {; m9 a  S  v2 e# h5 n
  191.   if(attrib!=-1)  X* [) m7 |1 K; ^
  192.   {
    % ~' {7 T5 j; `/ u6 H
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);/ p( M) D( ]; @$ u
  194.     if(!SetFileAttributes(FileName,attrib))
    0 C' N5 _+ G2 K4 B
  195.     {
    # F  Z& y0 D; j+ {) m9 n) y+ ]
  196.       return FALSE;% ?, }0 p. I' Q* \# @4 A
  197.     }! q/ e( h- A/ m+ p  z& z
  198.   }- |) p& b; L5 M# P9 F9 A2 f. e/ ]5 v
  199.   fp=fopen(FileName,"wb");
    % E3 y" i& Y. _7 Z- Q( e6 W
  200.   if(fp)
    4 ^/ d/ I* l/ N$ E) E+ }
  201.   {
    : Q: f2 b0 A3 ]  l) z8 j3 P7 J% G
  202.     fclose(fp);5 Q/ R1 Y3 E: b2 y) a- b* S
  203.   }
    4 `9 R3 J6 b7 q4 Y, F
  204.   return TRUE;
    & A; s- t9 q$ d6 _* `% o
  205. }
    0 H, ?! K( N8 m; z3 Y

  206. ) x  U( b8 [  H
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    8 x9 e% Z1 o0 L
  208. {
    9 N# T0 ?- V6 \$ T! K/ k- O* p
  209.   char filename[MAX_PATH];* w/ j1 q% d- h( }
  210.   LPUPDATEFILE file,olds;
    ; ^3 ^; _. L! o0 _
  211.   std::map<int,CString>::iterator i;
    ) y- l. i; C4 g& m6 `) Z- e; t3 j) i
  212.   std::map<CString,LPUPDATEFILE>::iterator p;: O9 y/ p, f1 `2 W/ {; [0 x
  213.   std::list<CString>::iterator l;9 t. ]& w: k* B3 K

  214. * Q" M3 h' i& d( R( r
  215.   if(bFirstUpdate)
    % y4 w& P: O0 S: ?6 |% t6 y
  216.   {
    $ u) m9 l6 U: g
  217.     dwCurrFile=0;
    - f; f' y* T4 q' l
  218.     bFirstUpdate=FALSE;  ]; i$ k4 f) w: x' i
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 d7 J( T0 F. S# V8 @
  220.     {
    3 J( X1 D: `; k* U% i) R
  221.       dwTotalFiles=UpdateLocal.size();% f5 H9 `8 f9 v3 V) o* l" T6 q
  222.       dwDownLoaded=0;
    , L* l+ w, M, H% J. N- s
  223.       bSilentStep=FALSE;
    ( W" Z; V; M' k2 p# q4 ]
  224.       bCompressed=TRUE;2 H5 O3 \5 n5 a
  225.       strExtLocal.Empty();& [, e2 V2 Z0 c. [# v
  226.       strFullName=(*i).second;# }0 h  g8 `+ T3 g' P
  227.       dwProgramState=AP_CONNECT;
    / H. U. R9 i( u) P
  228.       return TRUE;! [( P& q; y0 x5 l- |( ]; {- r
  229.     }
    & d6 [( z; M1 e& C$ I
  230.   }; e) D/ ?+ ~' l: K; `8 }: ?9 S
  231.   else if(bRestartUpdater==FALSE)
    - O2 z; s' Q# p. m( e2 W1 r
  232.   {
    - A6 |2 S# V* l# q: l# p1 k& L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    . r) `% I: g4 A  s$ ?! T4 D0 ^# G
  234.     {' `8 N- [% y: i/ a
  235.       file=(*p).second;, \8 h% T) A0 \7 [% R7 x) M
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    5 b% R) g3 ^: T
  237.       {
    1 W- s8 d$ ^, o7 V! W# Q4 m
  238.         olds=(*p).second;% Z4 O  g3 k* _4 b! G  u- ]
  239.         olds->vers=file->vers;9 W) U. q  H* M; S, i
  240.       }
    6 }7 O3 f/ m2 F. w! n: n
  241.       else
    / y; U: x7 ]# L/ A1 @
  242.       {: Z9 w. r5 L; X# d3 [& k
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 @2 p' a8 k+ J7 x' R' n* ^) q% A
  244.         memcpy(olds,file,sizeof(UPDATEFILE));3 L+ x2 U; I/ A/ @5 J
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    6 r; n  t5 C1 m( |
  246.       }% H" a  v0 o  X: l/ _8 v4 m) P
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");% F2 h8 o! |2 X' D! x+ p& n
  248.       sprintf(filename,"(%s)",file->file);
    , Y( ?4 `/ U5 B
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # |" N$ G7 C7 M9 K4 D
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }7 u' h  i1 C* Q: K2 \& D7 j3 S
  251.     }1 e9 a+ y- Z! ]
  252.     dwCurrFile++;) L) `) ]7 T, d$ ^
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ! i# R1 P! O' L8 r1 s& Q
  254.     {+ }; |% W7 M, O: H8 Q) y
  255.       bSilentStep=FALSE;
    ' }5 Y0 s- |: y1 R
  256.       bCompressed=TRUE;
    7 {: a  d! f% [7 }
  257.       strExtLocal.Empty();! }+ b- e9 y; F2 X# G; }' k
  258.       strFullName=(*i).second;
    - M4 l3 O/ u0 E
  259.       dwProgramState=AP_CONNECT;) q" T. w" _1 a$ I' ^) I
  260.       return TRUE;
    % N( M  \( i( Z
  261.     }
    1 y/ s3 R1 r  O, H5 B) U5 j
  262.     if(!bRestartUpdater)
    - g/ c# n* n  X: d% L" J
  263.     {9 k, P$ a0 U! R8 c' u  {7 e
  264.       int iCurrSize,iFileSize;
    ( O7 L4 Z7 E+ e4 L0 T
  265.       iCurrSize=0;  I) t( f* T- ]0 l& R. t
  266.       iFileSize=UpdateList2.size();# J$ I8 ]7 v9 A3 a
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    1 V0 u9 q6 H$ e/ k& v
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");8 q6 t8 K, Z$ w8 D+ U5 j
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");4 p; U1 U7 a- b2 W" i$ h
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 l- D* _# \* D7 F
  271.       Fclearf(".\\update.dat");
    ) I# g$ c' ?5 e" D) F6 N
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    2 W( D8 B" J4 D
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + R9 k3 g. x7 c6 ?( D# [" |
  274.       {
    / l: \( h* K  K" i
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())1 t! T3 z2 F& O0 ?" N
  276.         {
    " t. [; B; X$ @% E3 N% N
  277.           file=(*p).second;" x6 T" u+ s/ Q& j* T
  278.           sprintf(filename,"(%s)",file->file);
    4 |+ v# f+ P0 x; D& A3 o, T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - a8 l- x' Y  ^
  280.           iCurrSize++;
    + \4 ]4 A8 s+ c3 t( b6 u
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));9 C) c2 n$ h, M% F8 R$ J
  282.         }! `; d5 |/ s7 h5 [1 D. U
  283.       }
    " S8 ?8 v* e! Q9 a$ g
  284.       unlink(".\\update.txt");
    $ `1 q" S: {  S6 W: z  X9 Y' Y
  285.       unlink(".\\update.tmp");
    ; ?3 p2 E+ I. n# \6 t$ ^. i
  286.       Fclearf(".\\checkversion.dat");4 u4 f5 u7 k/ _- Q. a
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);+ y4 s! h! m, {
  288.       if(UpdateLocal.size())* Z7 b$ Z3 k0 v, r7 U( c) f/ k
  289.       {
    2 c) T1 Q2 v, g+ f: G
  290.         UpdateLocal.clear();: N' }: n0 X* h9 E& A7 K9 s9 N! j
  291.       }9 w3 y( {8 W: C+ h, y! u" O6 i
  292.       if(UpdateFile3.size())
    : a8 ?. Y4 @! x8 l: k2 B: d- I
  293.       {1 b, z9 f. L! d0 q+ D7 X0 [) h6 i
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) l6 H! w8 c1 b8 ^3 M! q3 D% |# d
  295.         {
    " S& n/ M8 y5 ^4 }( W, j
  296.           file=(*p).second;
    7 A4 b! F; S1 T% ^
  297.           free(file);# O- e, h5 H* U! K: c( m+ T: i
  298.         }
    $ G8 i. {& C  S; J
  299.         UpdateFile3.clear();: \$ V1 W0 ~" O& j# G7 G" g' a6 s
  300.         UpdateList3.clear();
    8 O& d0 k7 F# U- b% t8 e+ _
  301.       }1 o# c% f: w* E) @
  302.       if(UpdateFile2.size())
    ) J  p' i/ W1 ]
  303.       {
    ! S2 e  z+ K3 w$ d# q: z/ @
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 X6 m3 \# r$ Q( X
  305.         {
      s5 y# t" K1 U; Q1 U4 x
  306.           file=(*p).second;, D& }2 w/ Q$ m$ x  r
  307.           free(file);, _8 ?/ Y% J' V9 H( e
  308.         }
    ; L( I3 Q/ M( w
  309.         UpdateFile2.clear();
    + B' [, m( c5 X- r! }, Y
  310.         UpdateList2.clear();
    + D3 g) s: q1 {+ E% o3 I
  311.       }8 D5 s. z. ?- F  u! W! J8 }
  312.       if(UpdateFile1.size())
    9 ?: ?# R/ V6 q* h# }
  313.       {' F5 N: L; w6 }8 Z. P3 O  U
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( x: |& j" O$ r
  315.         {! |, y6 o* c# q' }: e
  316.           file=(*p).second;
    & d5 n$ W+ N9 O# [, E7 u: \
  317.           free(file);
    4 f9 o; k& D) p0 Z: u
  318.         }
    8 T9 f2 s/ H6 Z1 h
  319.         UpdateFile1.clear();, g7 Y: U; s$ D8 b
  320.         UpdateList1.clear();0 `. J& N6 C$ P+ I2 _2 w/ v6 m
  321.       }; @( R4 a$ [% @$ W
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' L3 W) h% |3 P5 C. p/ \3 B0 s+ ^
  323.     }
    & x7 l8 I1 w' t3 k/ O4 _" L
  324.   }- B/ T) P  K, V6 V
  325.   return FALSE;# w7 w. v) m' G. ]% l/ L
  326. }
    ' P' [- J/ M  G6 @1 G! g+ s3 n
  327. ) ]) M5 E4 H% K, \( F0 G
  328. void CRevAppApp::ClearAll(void)* i# U6 K& X6 [, H2 e
  329. {
    2 T' W. V. Q; U. o% w0 T
  330.   LPUPDATEFILE file;
    " j7 w8 f# g; I2 j
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) w. Y+ B# |  Q' T+ a1 F
  332. . C! T+ f) S0 `8 o  @8 W
  333.   if(UpdateLocal.size())
    " u; X1 A; t+ w! s8 S
  334.   {( l' I  i" L# L
  335.     UpdateLocal.clear();
    ' \7 J# w+ Z; b/ J+ q
  336.   }
    4 g2 I2 l. Y$ I$ t7 a" r
  337.   if(UpdateFile3.size()): w  i5 t4 F8 Y4 `1 K& n
  338.   {' D1 p. l2 @% p5 W* `$ y) e
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 j9 R, i0 H* S, X
  340.     {
    + ?/ z1 {9 x- ]2 k9 {. y' Y
  341.       file=(*p).second;
    $ D6 x" _% j3 O$ l% D0 {2 |9 N
  342.       free(file);
    , Z% t2 a! d' W! m$ [, M/ L
  343.     }3 O* P: \8 N- p8 q9 Y- I7 A' C+ y
  344.     UpdateFile3.clear();
    * J9 A  j8 o- s& A( U+ l
  345.     UpdateList3.clear();
    & `4 C$ _: \/ I$ L3 F
  346.   }+ y2 W2 ]9 a. m+ K! }5 i3 A3 V* ~- s
  347.   if(UpdateFile2.size())2 w3 D+ N; S2 D
  348.   {
    . T( \5 i- ?7 G7 p4 N
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" ]2 z* Z/ ~: L
  350.     {4 ?' k$ O* Y  E; k  J  S1 w
  351.       file=(*p).second;
    2 A2 t+ b& `2 i
  352.       free(file);- F8 F; F* |# ?! j. I$ w
  353.     }
    . d2 N$ v( j- r7 R. l9 }4 U* X" [
  354.     UpdateFile2.clear();
    4 K4 ]- @2 b8 W6 x+ Y1 C  n
  355.     UpdateList2.clear();
    / I$ E1 e+ g/ A2 W$ K' w4 a  M
  356.   }' j) X) D; ^, W8 I
  357.   if(UpdateFile1.size())
    % ~3 ?6 y  ~7 U( T  S% y
  358.   {
    / c2 J- B0 I, t8 `1 |- n% f5 ]: ~
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ e, R: S& G9 N3 B( f
  360.     {8 i( W% f1 Q# o$ x
  361.       file=(*p).second;. N+ T6 G1 V1 C; Y6 U
  362.       free(file);* }7 K5 m0 \2 B/ q
  363.     }. P0 n7 M, r& ?/ A1 [0 B/ A# J' v
  364.     UpdateFile1.clear();
    6 j4 o6 v' J  s
  365.     UpdateList1.clear();! ]# A7 R/ G: I
  366.   }
    : n; Y1 i0 Y2 G$ f
  367. }  8 \$ j5 J2 Z" {8 x3 W/ w4 U& d2 }
  368.   7 C4 ^( Y- i4 P; R2 i1 T
  369. BOOL CRevAppApp::CheckLocalVersion(void)! ~0 s$ K' }0 _! a. J: P; q
  370. {! [' b9 Q2 ]6 l; W- h5 c7 m- n
  371.   int c;9 ?$ c; e1 `( K, S- D$ G
  372.   LPUPDATEFILE file1,file2;
    ( v  }3 J6 S! j. a+ N
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;1 Y# X) e# I9 e' Y, z9 C
  374.   std::list<CString>::iterator l;
    . Z( c' O+ ]  M1 K' _

  375. , J+ N. w: ~( k6 o' Z! K5 N8 r" C
  376.   UpdateLocal.clear();
    4 F5 _/ a" l2 w  ^
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);! O* x+ Z3 l% B
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);) N, Q* X5 ~% U4 U
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    / z' R5 C& @5 _6 O1 D
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    . u) r1 k$ Z  [. s$ z. F
  381.   if(UpdateFile3.size())2 y2 z% G$ `$ {. V8 R! o( H
  382.   {
    " N; S$ G' I- C' Y; ^
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)3 v: Q5 C, B* q. c
  384.     {, G. {# ]: [  X, E$ Y9 B2 _: H, G
  385.       file2=(LPUPDATEFILE)(*i).second;
    2 L% B7 ]( ]0 I' C' ]: s
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 s6 C: k9 s7 S: e$ S
  387.       {
    / }2 E" b# G, B: \7 P) x$ ]
  388.         file1=(LPUPDATEFILE)(*p).second;
    3 |9 d) X0 H1 ?, ^( `
  389.         file1->vers=file2->vers;. ~, C; e& e; N
  390.       }
    # J. f0 T; [+ |8 `2 W7 u
  391.       else
    / S9 u) i) |& E
  392.       {
    , A, R) Y6 ^8 Q3 I: S0 O' Q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 D: B' }) u7 B5 [% ]' H
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));- t; \) d6 z+ ~- P+ w
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));- |% Y, [+ X3 v, f
  396.       }
    3 C! E5 t! v) h5 ?" |: t
  397.     }
    7 N% n+ _. u; a7 L* k
  398.   }! {# a# p+ a1 h% Q" [
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " b2 V/ w: K$ r! n9 |/ [6 Q& [
  400.   {* M$ r1 o5 a7 i$ N# m. F0 {3 \
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( z: R4 P$ K1 W, S* [+ C+ R# q
  402.     {: J5 M0 r$ Q. ]  K
  403.       file2=(LPUPDATEFILE)(*i).second;
    * b1 D1 @8 z0 \9 ], a
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())2 D/ k$ W$ M/ B7 m
  405.       {
    * p8 D3 O8 r6 p4 H/ Y1 C' Y/ G3 ]
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 d+ b6 z/ b/ d4 q
  407.         if(file1->vers!=file2->vers)
    9 S& R8 b2 o8 u- [& h+ k1 l
  408.         {/ ]7 Z* N9 H1 R8 ]  I  z* y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 T; S- F1 a. `# d& r& V& `0 j& m
  410.           c++;
    - S. g0 b& x3 `
  411.         }
    ; d, Z" M$ C! [4 Q; @
  412.       }
    & O2 k0 P7 I4 t& ]+ M0 t  D
  413.       else
    1 @4 F% O. Z5 z  o. {& z1 n5 X
  414.       {
    ! e4 o! L9 q  T# C9 e
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# b. u* E& l+ H4 w" B. r7 i
  416.         c++;5 d/ y9 u$ `3 q. N
  417.       }" k2 u, q& u( W  H- l9 ]: i* {
  418.     }7 f: k; u7 I8 l
  419.   }
    ( O7 H. @$ |, B/ F4 }
  420.   unlink(".\\DownLoad\\update.txt");, _2 L9 a  A3 e0 g0 R7 W" F8 u
  421.   if(UpdateLocal.size()) return TRUE;: l  @+ M& S: \8 u  e
  422.   else                   return FALSE;
    - M- p2 R& X$ f# c  a3 E1 y, [$ v) r
  423. }
    1 E# _6 j, _0 t) K- S2 W3 `. e0 z
  424. % W. S' P1 T9 b: s9 \
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"" }4 h" O  M& M, N/ b+ I: G, h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    9 T. [7 f* o) M' \' w6 s& e( |
  427. * w+ I0 g" I/ |1 `# ]

  428. - U, a# o, U% }! @& `9 @$ v+ x: ~
  429. $ \* A2 E3 `% Y* |
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ) r& f, L0 G6 Z, K, B1 V
  431. {
    7 |! _! p* K8 B9 C' k
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;$ a; N5 s7 Y  V0 v; v
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 @/ {( v; Q+ J" _# t9 R1 X2 c9 V
  434.   {
      r- @7 i  ^" M; B/ s# |
  435.     char szLanguage[50];
    3 w( p8 ^! p* J: e
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ) H* ?8 ^" E6 y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; k5 r$ {' g  I2 v: I
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;7 o8 S, E6 r% N
  439.     else                                   m_iLanguage=ENGLISH;" F' g& E# V8 D
  440.     char szRegister[100];
    8 f% H6 |( `* y7 G' ~8 ?; R
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 |. A3 v' n4 X
  442.     strRegsName=szRegister;3 f2 q( {9 }0 t+ A! ~" {) e
  443.     char szPatchURL[100];0 v( h  I9 P' Z. V, y' Y! O
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % D( h2 F1 T6 n
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 W( F9 V" U& F9 u( R! D
  446.   }
    3 O% d( q' _2 L6 {% r
  447.   else
    * w% c& C7 `3 c) j
  448.   {
    2 q4 m$ j& A" s+ ?$ a/ U0 Y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 Z: n9 x3 Y1 t* D& `
  450.     strRegsName=DEFAULT_REG_URL;
    ( Q1 Z9 h; |5 C- J& X
  451.   }4 s* f7 N. R# Y& g! T+ H; v* w
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 j; W. ]4 @" F4 s- ]
  453.   {
    4 |% L, ~9 u, r+ i2 x! V$ H
  454.     char szIP[50];
    ( t6 M, n4 A8 x: K# H
  455.     char szDIR[300];
    5 }5 c( F0 R' z" Q$ |3 \; C+ Y
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    * Q: e5 M. e! v# U# O2 j& h
  457.     {
    7 d4 {- M% F7 g* h0 y) A
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ) W. R6 i. [+ k
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    1 k/ O' q- u& D( R  \3 _& O, Y
  460.       strHostName=szIP;5 I4 @) m6 M9 O1 ~4 f6 t9 {
  461.       strHostPath.Format("/%s",szDIR);* q8 j2 d3 D" [; |
  462.     }; ^& \2 H3 X; V, J. k
  463.     else9 Q8 g) v1 C/ o9 n
  464.     {
    ' C$ u6 v2 R0 k: f& D$ ^5 P. ~
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' h% A( A$ l0 V  e* ?7 s; E
  466.       {
    0 Q6 p3 C& r  g( k3 O' ~" k
  467.         char szLanguage[50];
    ' p) n8 Q; ?, E% G9 l
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 F5 t8 [% q/ g. y! e# i# P3 [
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    / O) v' |3 _$ h0 Y# }
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- _/ A5 ]0 L5 l! i, r
  471.         else                                   m_iLanguage=ENGLISH;
    : K4 u0 t7 z7 b2 t& d2 t
  472.         char szRegister[100];
    ! f6 e3 A, c& _" N* Z7 z, X
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. `/ t+ }0 {1 \$ E. {" Q
  474.         strRegsName=szRegister;; S, Y) `! a# E2 H  Y1 d! Y+ `
  475.         char szPatchURL[100];) `& h3 ?& b4 s' Q  @
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 j% W/ m. g$ ^; d4 |4 ]; X' I
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( D5 q5 I7 C* K7 X
  478.       }
    , ?3 c: p( k6 G# D+ g# z' B
  479.       else. g  p4 Z( h3 f& j. e% ]. ?
  480.       {8 Z7 o1 J: q) l) }$ R- L
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 R/ v* r. b) ?! }
  482.         strRegsName=DEFAULT_REG_URL;
    & Z. C+ l2 ~. h6 O  h
  483.       }; E( K4 \4 ?. \3 u- E
  484.     }. M' V7 {5 \$ i
  485.   }" X6 P; Z/ q& Y" N4 ]( ?9 S
  486.   return true;
    ! ~0 g! H" Y) z  t5 q2 r2 J
  487. }
    3 E6 X9 G* T! b1 }5 R

  488. / Z+ y4 s+ l0 Q
  489. #include ".\ZLib\unzip.h"
    ' \! n) |  B5 M; x& y+ l6 c9 a: I2 ?
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);$ q2 H3 q; w* r" e. A0 d2 p  [
  491. /////////////////////////////////////////////////////////////////////////////8 {. l0 H& v. w. ]* b
  492. // CRevAppApp initialization) c) C0 E3 y7 i* a- `3 W

  493. 5 E$ W& l) Y; j9 U. X( g$ R
  494. BOOL CRevAppApp::InitInstance()
    ' q% B* M( a$ t$ l  x
  495. {5 s& R' d( ~+ m8 G0 K& x
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];* l5 e. L0 |$ C, j" @) K2 x
  497. " V$ T, e9 r& Z2 h- ?0 A
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);5 z2 ^% Q$ y1 [2 |
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))7 M" p, v" j5 |% u1 n8 h$ Y- ^" T: W
  500.   {
    " Q+ J' @# r8 d. r$ E; v3 ]
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ( ]" T, ~, g, k, V9 i: `9 m
  502.     GetPathFromFullPath(szPathTarget,szPathSource);9 I( X3 @+ ~1 K7 M' z0 D6 G4 q( K/ F
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    3 h2 n, j* G/ {& l7 J4 Q9 c2 R
  504.     {4 v" q& t) {; j7 `* Q
  505.       strcpy(szPath,szPathTarget);
    & U) f( |. G8 _/ Y8 j# q( v2 V
  506.       SetCurrentDirectory(szPath);
    4 V. K& ~2 P; z" ~
  507.     }6 Q& W3 _& i; j4 y/ A, j0 _5 f
  508.   }9 }8 c. v, t4 x( u4 {8 E5 G- Q; f
  509. #ifdef _DEBUG4 |; I/ D& x( M
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , a% x' i1 Z3 w* `6 f
  511. #else4 X$ Z' H9 Q1 |( L, Y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( p5 e" y* z0 j5 H! T
  513. #endif
    : H8 h: p/ n- F3 ^0 v8 z, z; d4 y
  514.   {. q* ?" o& v% m9 {1 o3 ^: N4 u
  515.     char tempFileName[MAX_PATH];
    , k' z5 r6 n& A+ P6 N. ?
  516.     strcpy(tempFileName,szPathSource);
    4 U' u8 Z0 j+ M# M' p
  517.     tempFileName[strlen(szPathSource)-12]=0;7 B/ e7 G' A7 ~( N0 Q& p
  518.     strcat(tempFileName,"\\$CSUpdate.exe");' ?/ I1 N3 Q% E5 X1 w2 y2 Z# u
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);5 M# P. T$ P, c
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);- H9 T& K6 D9 {( O' \
  521.     return TRUE;- L. a) [, ^$ Q
  522.   }
    7 J' N7 F  T0 {/ b
  523.   // Nuke 0118: Delete run.exe
    . f  C, W/ g4 @; M
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );, M) l2 Q# j1 f3 N2 a) o
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");6 g( s6 Z  r0 @+ _  H
  526.   if(!ReadCfgFile("Config.ini")). S" V2 ~% E9 N/ ?1 [' [
  527.   {5 N! F( g7 V; V- U' Q! j
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);  o7 w* t& n$ r, A3 Z+ S7 W
  529.     return TRUE;) h# q) u' C$ z  X
  530.   }; z0 R8 g& b8 N! A
  531.   HANDLE mutex;7 k; @9 L2 h, R5 H& h0 T* O5 X
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 _! @, B0 u0 f7 C9 Z# ]
  533.   {
    : _- E: ^) m4 F. W  [/ k
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    6 n7 u7 }, k2 t4 v1 P9 F
  535.     {
    6 v2 s6 J0 _! a, C, ]* M; h
  536.       CloseHandle(mutex);
    8 u0 S1 \/ _* E- M( l
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);3 |8 C3 J1 P5 G' B6 E
  538.       return TRUE;2 \% \4 `4 f7 Y+ T2 B" r1 {
  539.     }
    / k) p1 Z! E! u' l$ b* U) e
  540.   }  " A5 Y$ u, z- H* D  \
  541.   CloseHandle(mutex);
    . i9 |; U0 v0 T9 V
  542. 8 l% a% b' I0 h! i% {
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    3 a# T1 `) |7 d0 X+ U  S
  544. . E( p' b; X  W% I4 G
  545.         AfxEnableControlContainer();5 V0 k& V, ]6 H4 F, [" Q7 [

  546.   @7 {! A0 r3 R8 ~. C) w9 Q# r
  547.   bCanUpdate=FALSE;
    " h6 \5 y& ^1 U3 b
  548.   dwStartUpSteps=1;4 m& s5 X3 O& M6 s( X' N$ y
  549.   dwProgramState=AP_NOTHING;/ J1 B7 y' a+ q! c8 I; I

  550. 2 l7 Y! d" R+ E% k8 C
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);0 v' c2 p* O& n

  552. $ D) B! r* B# L9 D7 p) U
  553.         // Standard initialization" e% C  _1 n/ H1 _# h! [
  554.         // If you are not using these features and wish to reduce the size
    3 ~7 E! r( B0 v4 C
  555.         //  of your final executable, you should remove from the following
    / p+ g9 R; c9 c0 R
  556.         //  the specific initialization routines you do not need.
    + Y2 l; D) z# P& ^0 V3 K2 Q' y
  557. 0 m/ e1 o. d  z8 @+ p8 k- d
  558. #ifdef _AFXDLL. K4 F& {4 o6 K, D5 @8 z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + B$ S( {6 t* @
  560. #else4 ^" F3 ?2 J4 Q& R
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ; ?5 H' n+ f( h3 V# \6 {6 U$ m
  562. #endif" C$ v7 V* M+ {4 r
  563. # e7 p1 g: _5 U3 U8 P0 ?' x. ]: M4 j
  564.   dlg=new CRevAppDlg;
    ; Z: M5 V6 Q/ M
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    0 z; j3 u) m& d0 ~9 w" o
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    " s2 R3 L. R8 X- z: \& l
  567.   m_pMainWnd=dlg;: N$ w6 S$ _" t$ Y: M# q& B+ R; ?- C
  568. % x' W1 m, {! b  E
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    & T* {. P" x0 ]0 E; _8 R: e& l

  570. . w3 V2 ]3 ^9 j+ B$ b: m' V
  571. //  GdiplusStartupInput gdiplusStartupInput;/ f# a1 y0 l& K! a9 O0 G
  572. //  ULONG_PTR gdiplusToken;! z1 i4 \4 V2 K- G  @; P- a# w
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);$ d' C8 s; n3 u/ K8 J

  574. 0 w2 ~$ j+ ~4 C9 B, k' p) H2 h
  575. //        CRevAppDlg dlg;
    1 q6 I4 r& H3 _. d! A  j% K" b8 G5 }
  576. //        int nResponse = dlg.DoModal();7 T1 ~% H- b0 l1 n4 F
  577. //        if (nResponse == IDOK)
    9 e1 D/ M, e$ x8 \1 _
  578. //        {
    1 P0 b, l5 v* u4 t5 |
  579. //                // TODO: Place code here to handle when the dialog is
    ( S. h) R, D& B3 S2 N! u
  580. //                //  dismissed with OK
    9 D' o! b  U! E7 R2 ^5 K$ E
  581. //        }
    ! j% K# r4 \5 B. X2 l
  582. //        else if (nResponse == IDCANCEL)
    6 I, P' }' u5 O) D
  583. //        {1 z1 r/ o' \9 `0 o1 N
  584. //                // TODO: Place code here to handle when the dialog is
    & k, }" A- t, K  _6 }0 Y0 B
  585. //                //  dismissed with Cancel
    / C7 g3 Y# T6 ~" u
  586. //        }5 t, A! R) q0 o2 D2 p( }

  587. 8 ~/ h) B7 b" k" _
  588.         // Since the dialog has been closed, return FALSE so that we exit the5 T3 O3 `  x/ C/ S3 }8 Q, l3 N
  589.         //  application, rather than start the application's message pump." ?  R' M" x7 R+ f+ G' t+ ^
  590.         return TRUE;
    1 J9 E: k; m4 V
  591. }6 S; y2 |2 g' ^" ~) i0 c

  592.   K0 _+ T6 M( t3 K6 t
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ( @3 J3 v: K1 I3 [; @2 I8 J
  594. {
    ; R: B% P2 V. j, t% F
  595.   int i;
    ) @! A/ R# x; g) H
  596.   char *szRet;
    ! X7 |) C+ u0 U* B: ^4 t
  597. . L9 F$ N" f( \( e, l" D( a
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    2 I0 i; U  ^0 ^$ b0 L
  599.   if(sztoken). u5 ^9 L/ c7 s2 @4 O
  600.   {5 _4 E4 }4 N" v- k
  601.     szRet=&sztoken[itoken];
    % e8 K8 {$ @4 D5 q* Z$ D
  602.     while(sztoken[itoken]); a8 G+ {- x# `
  603.     {1 p- y% g# W; ^9 w/ `) h( [
  604.       for(i=0;i<(int)strlen(token);i++)
    0 a5 G. Q5 ~- y& }: |: d
  605.       {3 w  V1 i% V- d. y3 x8 p
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])* F1 v' y  y% k
  607.         {
    & f3 R3 U/ W# |9 x( u
  608.           sztoken[itoken++]=0;
    7 b, ?6 ^! M* \. R( F. `
  609.           sztoken[itoken++]=0;9 f8 H/ q* Z1 x2 k$ b
  610.           return szRet;+ v) Z; j# d/ W% a8 g; g/ `4 Z
  611.         }, t& r5 t2 [9 b/ I- ^3 u. g$ y
  612.       }
    . B( I3 C: R: r! d
  613.       itoken++;- l* K+ u  y- B7 n- l
  614.     }
    : M2 H& u; Q. E, Y( e' o
  615.   }
    8 d. O  z! `$ G! C" T  N
  616.   return NULL;
    ) a( Z. i6 U3 q! z- N. i! Z$ Q
  617. }2 A9 C" U/ v: y6 }$ [) i0 h

  618. & g( `3 V" I  |1 b
  619. void ProcessProc(long Total,long Current)* f; L3 O3 q, p9 y" U. c- |2 e
  620. {
    3 I( }. p, U. x/ m# ~
  621.         MSG msg;
    + B4 I  ^! I2 w0 m
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);0 e9 {3 i! Q2 M
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    % i$ M1 _1 X' m* I6 `0 b
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    % ?4 C8 j3 ^: T) ?7 b) b% M4 W/ B
  625.         {
    # [1 C; w% _: B" I5 o' T; R
  626.                 if(!GetMessage(&msg,NULL,0,0))
    : s7 U5 ?' K* P
  627.                 {
    + W% V0 [. U" Y0 y( @
  628.                         return;
    % o6 d) U# D- L7 m' g
  629.                 }
    6 N% O! X+ R( C* k, o" H0 C" ^
  630.                 TranslateMessage(&msg);
    ; W, X% h6 s6 P
  631.                 DispatchMessage(&msg);
    / C2 T- z4 r3 Y4 j
  632.         }          k+ u0 y. A; {  p
  633. }9 ^4 [4 ~* q% A  N8 _

  634. 9 N9 K/ d/ g6 y1 `  x
  635. BOOL bFirstChar=TRUE;
    ' p, k4 A! p( g$ `, X1 ^" R, B
  636. / R2 r% X5 F: y3 D  Q8 V; e
  637. BOOL CRevAppApp::OnIdle(LONG lCount)' A9 b$ Z1 N, l& a& G- Y
  638. {) I9 Z; j9 M9 @6 d- `
  639.         // TODO: Add your specialized code here and/or call the base class9 j+ F! c, |) l" k" Z0 q0 k" I1 U( O+ P3 k% P
  640.   switch(dwProgramState). c$ w) \/ p9 K' n# T$ l9 N9 H
  641.   {
    + H/ K* |# J2 ]# d) }- v- [' y
  642.   case AP_NOTHING:6 k/ a! z& @' e( y% y3 l, |& T
  643.     switch(dwStartUpSteps)4 v& ]$ |& Y3 z, l2 X
  644.     {
      ~) x" X1 z8 C# R! o3 R5 t
  645.     case 1:
    4 h: n# n2 Q% |2 X  v  K
  646.       {2 V# ]' P& Q7 Y( I
  647.         int i;& G6 X2 _* S8 a4 G: y
  648.         CDC *pCDC=dlg->GetDC();
    1 |; ^! J5 k9 j% S. J
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; b' f3 }7 c7 N3 B
  650. //        Graphics graphics(hdcwnd);
    1 ^; x* y% ^8 @+ ]' ^: K5 s" ?0 Y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    6 n/ C" c+ r; i; J, }, b  c  p7 T
  652. //        INT iWidth=bitmap.GetWidth();
    ) X9 E" H4 H8 y2 X5 Q7 |
  653. //        INT iHeight=bitmap.GetHeight();! I5 U5 {; l/ d  Y0 n2 I3 r
  654. //        Color color,colorTemp;+ d. z, i, d# h! D
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% B. X, a9 T2 {
  656. //        {1 y# v7 v7 z$ [( D3 s2 ~% t( b. @
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( n- R, Y* p9 l' T1 L+ Y
  658. //          {
    5 O1 @7 u/ i2 n1 I$ z; u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    $ {7 J  n- j# q- R" z
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 s7 f0 S. w- q) h$ q
  661. //              (BYTE)(255*iColumn/iWidth),
    . S# }0 g- f5 @2 D. P8 \+ g
  662. //              color.GetRed(),
    - @/ y; s1 R# I* k7 n% c2 ^
  663. //              color.GetGreen(),' q/ n& L" e; A. ?6 D9 r
  664. //              color.GetBlue()));
    # }4 P4 W& d; t
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);: E$ t) ?: ~# m/ Z& L( ~4 @
  666. //          }" e: C# T" c; O$ \/ @
  667. //        }
    . A8 o6 N/ z+ N& U! p# P; u) ]* ]
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    9 h6 e3 `/ x8 g8 P3 ]
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! @) i; l+ a- E/ V# p
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    6 x# ~" e" ~# M6 t4 w8 k: Y  D$ h
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ p& ~* W( _2 G& }$ R1 n( z9 w
  672.         for(i=0;i<240;i+=8)
    5 }$ d7 [* J, [; |1 O# _
  673.         {1 l$ O$ l4 z( P  Z, s
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' u  F) l2 l% a
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : i" G) j9 r& `& D& r, h4 h
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  V, w7 F7 [1 k8 A
  677.           Sleep(33);
      G! ~2 W7 v; }% E! _' p" c, u
  678.         }
    6 J" b: H! v  T3 J
  679.         Sleep(1000);, K, s& Z4 m, t
  680.         for(i=240;i>0;i-=8)
    ) Q1 ?$ Z: ~: J8 v# Y6 ?" Y; _
  681.         {; b1 ^* ?9 V( S6 [6 G+ M0 Y% d
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 A5 c  f9 O9 `# b# A9 g% r! g/ V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, o3 o" X9 G' u9 U4 X* q; O" J
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! s. R/ F5 d2 I
  685.           Sleep(33);8 B0 Y1 O  e8 y' j% k1 ^% K' A
  686.         }/ \: e# K. r8 a% u& {
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    & f$ B7 v- L$ {3 O" B8 f+ T, n2 s8 [
  688.         dlg->ReleaseDC(pCDC);* T; ?" Q  i6 e' P) r! u, s* h9 f
  689.         DeleteDC(hdctar);
    " G' v* @( ?  s' R9 C
  690.         DeleteDC(hdcsrc);( l& O$ e. H8 k; f% `& `
  691.         DeleteDC(hdcorg);
    $ ^3 H2 M) ~- P. G0 |0 f
  692.       }
    " |2 T  y: T0 q- t, T5 V% p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);( @, I; i# {+ J& y( m! ~8 [# i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    - X8 M0 e% I9 d) r/ f8 J# r
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");( U" M( M$ _) k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");1 c, r! P$ e, i" e% Q9 g0 v
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % }8 E7 j+ x( E7 u# `
  698.       if(!Dn.Connected())
    0 |9 `* T9 N8 s" n- V
  699.       {
    5 e4 G7 S9 ]6 I" V2 z7 O
  700.         dwTotalFiles=1;
    ; w: P4 F' x* p( F$ \. k# Z
  701.         dwDownLoaded=0;1 P! X. E3 G7 Q( b; v- H
  702.         bSilentStep=TRUE;
    ' S. c+ J. p! x, Z
  703.         bCompressed=FALSE;9 D7 {1 Q, b2 j* I
  704.         strExtLocal.Empty();
    ) P! b; r  h( I, F; `6 l4 ]; \' F
  705.         strFullName="readme.txt";
    ( t) s, x; a- }7 ?
  706.         dwProgramState=AP_CONNECT;  H' Z4 p3 Q; m6 n
  707.       }
    ; S' k2 S5 t4 `
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();8 r1 T% j; A; _( g
  709.       dwStartUpSteps=2;/ S! B( I  W! p2 [; b% I! z( d
  710.       break;( p( r' a( \* v( v; W* F7 Q
  711.     case 2:+ G" X6 u+ N+ K8 i
  712.       {# L" g& N; y' f& c
  713.         int iEOF;8 ^) q' l' W) Y* Z  s! `
  714.         FILE *fp;
    $ p, ?8 c( g4 o
  715.         char szString[512];
    4 U! _: H) y1 p5 U( |
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    3 S) k" c8 @3 |/ p# h9 e
  717.         if(fp)
    2 a  s3 R& m/ o0 l2 G* n0 n
  718.         {' g* m( g$ w' ~7 V; m6 ?- w
  719.           do
    3 b) G" B; M$ l$ W2 c
  720.           {, s" z- n' }( s" W3 O7 k
  721.             iEOF=fscanf(fp,"%s",szString);3 x& Z' _& Z" D6 O# ]3 Y
  722.             if(strlen(szString))$ u, \5 W. u/ ], [* m% M
  723.             {4 {$ b5 D5 w4 }. I9 T/ J
  724.               if(bFirstChar)' s% _* r1 x4 [( b
  725.               {; ?& V5 R) V* O  M, `
  726.                 bFirstChar=FALSE;7 X0 _2 X, R+ J8 f0 _
  727.                 bConnectIsBig5=FALSE;
      F7 C. }- m' L" \) a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    - t, s$ K3 `2 i: l9 j
  729.               }
      S# |  y3 O: G9 u( \
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));6 c) A" m; ]. s3 [5 t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    6 f7 \7 d, V. D, G5 M- h% K  N
  732.               dlg->m_ListText.AddString(szString);+ x+ E3 f$ N3 j4 V  B
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 Z. ?6 X% n. O% C8 J# d6 R& j9 \
  734.               *szString=0;
    2 _4 e, K# L) D: M: A6 Q
  735.             }+ E4 {/ D( g& X+ q$ |* X) e: x7 @
  736.           } while(iEOF!=EOF);* ^9 V4 C+ V$ x, |
  737.           fclose(fp);
    3 Q, b6 E2 U2 b  z$ t( v3 g
  738.           unlink(".\\DownLoad\\readme.txt");
    , i0 A" h, L; \* G/ e" O
  739.           dwStartUpSteps=3;3 Y& k5 S; F  p
  740.         }
    0 `3 {5 D2 O* d% d7 b) F5 H+ J( ^
  741.       }9 S! _8 T! i6 a8 E
  742.       break;( {/ R- c& R6 J. `, m. W4 O
  743.     case 3:
    # F- U9 P, G& z7 c* x- }
  744.       if(!Dn.Connected())
    ( S, O) @7 ^$ T; [# k- B
  745.       {
      v4 F& ?5 r2 d1 v' l! [7 ^& W! ^2 d
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    - ^$ l3 m9 O! N2 F  N
  747.         dwTotalFiles=1;
    ; ]: R% z( Q+ L4 x1 P
  748.         dwDownLoaded=0;
    4 S, ?/ ?3 G: S( g
  749.         bSilentStep=TRUE;
    9 L3 `) n, ?7 R7 N) J
  750.         bCompressed=FALSE;7 l! Y7 R: c; O2 i4 f& H0 a9 G
  751.         strExtLocal.Empty();; y" |% H) ?* c
  752.         strFullName="checkversion.txt";
    1 H+ M+ t6 |. C  {3 c' R
  753.         dwProgramState=AP_CONNECT;% ?. L- O! ^0 a2 v* t
  754.       }
    . e" S& E9 ^, U6 H5 l! V
  755.       dwStartUpSteps=4;" s. i: Z: s1 a4 D( @
  756.       break;
    . d8 X9 k! g/ k! I" l) Y! \& l; D( V
  757.     case 4:
    # i+ D2 e( J7 G. B, b  x8 v* e
  758.       {2 d) y2 s/ I8 \; }1 Z
  759.         FILE *fp;* s) X& o7 z( v5 l/ I
  760.         char szString1[128];
    8 p, E; k, l% W% Y
  761.         char szString2[128];0 c& u. W3 i) m
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");/ y8 g# u$ Z' G0 q, t
  763.         if(fp)1 j3 j/ A+ n$ N; O' t- c" u8 n
  764.         {5 [; B7 B- E& }. l) @
  765.           fscanf(fp,"%s",szString1);' p4 D. t: X1 w8 X' t
  766.           fclose(fp);
    4 b$ h. T3 D6 j& {. K9 A
  767.           fCheckVersion=atof(szString1);
    6 D" X% \4 y/ Y4 i8 a3 x
  768.           fp=fopen(".\\checkversion.dat","r");
    ' [$ _3 o$ C( U4 t/ B* K
  769.           if(fp)
    + v8 i  a& R. E
  770.           {
    3 b# h0 I2 A' c6 S3 P4 G6 J& ^  W
  771.             fscanf(fp,"%s",szString2);
    ( z- Q6 i6 F" \  r
  772.             fclose(fp);" n2 y& v: o, d# k5 F& K/ e
  773.             if(atof(szString1)!=atof(szString2))
    - I; t3 q4 H4 b! q- H5 l
  774.             {$ L' Y: z  b( ?+ s, E8 w( B3 K2 ?
  775.               if(!Dn.Connected())
    6 h5 ~' X5 F! x7 s+ m
  776.               {" b& T! ]+ h# `& c, V
  777.                 bFirstUpdate=TRUE;
    8 A) ]1 Z" ?4 \' J! G! g9 q
  778.                 dwTotalFiles=1;
    & z8 y6 j& ^3 E, Q. f! F
  779.                 dwDownLoaded=0;
    1 M' u7 V! a4 r+ }  q$ p
  780.                 bSilentStep=FALSE;9 F$ y1 G0 x( H2 ?2 d) m, B
  781.                 bCompressed=TRUE;( o- ~; F$ b3 I& o$ {: L* q
  782.                 strExtLocal=".\\DownLoad\";
    3 W* t/ O) D- W, d0 N6 I' E# G
  783.                 strFullName="update.txt";; M. b% w# c: j. ]" V
  784.                 dwProgramState=AP_CONNECT;
    . L9 L" Z7 a, x  f* k' K. P
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");# a* U! X( r/ W, A! X" s
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 [- i5 ]6 c9 y9 _% ?8 B/ U& G
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");" u4 N4 ]7 L5 W( z, L6 J& T1 h5 G

  788. 6 P/ q: i/ P; {* E+ x) I
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . m. w4 \3 p% X- G: A3 e
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    . g' F7 c  m+ q* `- c
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    , q4 T! a! K5 ?
  792.                 {
    / g. [: p- _& w3 R( s
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");1 H$ ]. h. c. w  v7 B5 C: [
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");- o8 ]& ?& {- |7 T9 T6 M& C
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");% o( H; `! U% J% f3 c4 w! f
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # f6 K% I1 o& ]/ j9 F
  797. 4 E* j! v+ s+ f* n, w
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & E$ {9 N2 ]0 ^: I5 ^
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 N7 O9 n# ?' [/ C* @
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");0 D# K( R2 Y! a; n
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 O+ n9 m, k( c; l$ c8 D* o. d
  802.                 }
    0 C6 L- y. w9 e0 l6 L! c7 |
  803.                 dwStartUpSteps=5;6 T* T+ M7 B: G+ n+ _
  804.               }
    8 f8 N3 J% `( l; P5 t( ]
  805.             }* u6 A+ J9 V5 Z9 ^! d% I
  806.             else
    4 {+ |/ k4 }" K" F9 A8 g
  807.             {7 i, H# v6 c3 q+ D3 u
  808.               unlink(".\\DownLoad\\checkversion.txt");
    $ L+ n1 M$ Q7 b
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ N$ C) Z% m' f/ f6 j; B  u" d
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    * j' A( C6 R% z+ Z  ~5 d
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");2 ^/ j( q- ]2 R) t9 B) J6 a$ x
  812. , I$ C0 b% p$ b1 b
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; ^; z3 f; R4 j7 z; _& y
  814.               dwStartUpSteps=99;, u/ i. n/ E" A4 M4 }0 @
  815.               bFinishUpdated=TRUE;
    % J6 H$ f. E3 G5 J/ u
  816.               bCanUpdate=TRUE;3 a" t1 H# K* P0 W
  817.             }
    . P6 u" l9 t) N1 ]( {1 Q
  818.           }1 E) I: b# \; c( I. W
  819.           else" D9 K" n+ a! G) F+ }9 P, u
  820.           {. r% c1 w9 _, i8 d+ w; ^
  821.             if(!Dn.Connected())
    3 h$ \% `0 ?3 |  c* m) o
  822.             {1 ]% X. z* M1 a( U8 _' N- G
  823.               bFirstUpdate=TRUE;6 y0 c  c# P. X$ M! o+ X1 B, m. ?; e
  824.               dwTotalFiles=1;6 Z: {; }1 \7 p/ L0 r0 J. X
  825.               dwDownLoaded=0;
    / S9 P8 H/ x% [0 R/ R
  826.               bSilentStep=FALSE;
    ( D/ H0 v' v) T, s) Y
  827.               bCompressed=TRUE;4 T3 C" G2 C9 P5 Y) q
  828.               strExtLocal=".\\DownLoad\";
    ) p( A9 M) v+ k( p7 }
  829.               strFullName="update.txt";
    ! V/ M$ y' h, I* ^( x9 P
  830.               dwProgramState=AP_CONNECT;
    * m- v  D4 h& R
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) o+ n! r  Z6 w+ D& a" o5 i
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 D# P: x- R* \% p$ x8 i; Q
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 u5 P4 g6 r0 V8 ^3 q0 }' m
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . x* x" Q! H) y" v' r
  835.               unlink(".\\DownLoad\\checkversion.txt");' \  D! A) j+ T% i
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    5 i; z% i" c/ D0 T! D$ F
  837.               {/ f. D+ r" i. H% e6 ~+ Y5 B; u
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");- E/ i! o. @, l6 X0 @. y
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");( a9 [. V/ x' ^6 i, A7 h
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    8 N. l; i  p& @% Q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 y% ]! v3 U: R* C
  842.                 4 ]. J* r% m& Q+ u0 r: R/ _( r
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 q, F% f% ~# o  A9 V6 ~( b2 B
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # K5 V! Z( `, K% |
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");1 U7 M5 y/ O7 n3 z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ ?) L" G$ T! D2 R4 X
  847.               }
    1 W: G+ @( d4 w/ i; v
  848.               dwStartUpSteps=5;
    # L( o) |( p( p. a+ K# X
  849.             }
    / F* a! }' w$ X2 \9 g0 R
  850.           }
    " p3 `- k$ H# m$ I
  851.         }
    : p: e" B, d( H0 q4 H2 C1 u: `2 \8 O' u
  852.         else* \: w) R3 _; ?7 F; b- N: A6 _$ v
  853.         {4 J) p& x3 G* s, E. P: P' z
  854.           dwStartUpSteps=3;
    ) p5 h1 Z8 H6 ^3 J. p! I
  855.         }- P& x# u" e- f' J3 U
  856.       }. F3 C' }* l8 X
  857.       break;
    0 ]! ~. D* f: B' w! L
  858.     case 5:4 P1 j1 k9 Q2 K9 z, P; [( d4 q
  859.       {! h3 _% r! f  W' j/ ]
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ' [. a! W8 Q6 O, `+ O( C& h
  861.         {
    4 [& J" O; Z! z8 I
  862.           int opt_overwrite=1;
    , B! @& o7 ]" Q( D
  863.           int opt_do_extract_withoutpath=0;
    / ?+ b2 S$ R% F' C( p
  864.           unzFile uf=NULL;6 x* K6 n  b; Y8 E

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

0 {6 p' }! G2 g) _

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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