CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
$ x+ h% e$ A! h
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ' x- S/ c: o7 E5 g% o* R
  2. //
    5 z$ a9 v0 }& d( K* W5 O4 R# l& ?
  3. 1 ^6 Q8 h; U3 \& o
  4. #include "stdafx.h"
    ( J( e2 N8 E' W

  5. : t7 u* f. R) k' @3 F2 ]; r. ?
  6. //#define UNICODE
    4 y) ]& @, n& V, M/ ^
  7. //#include <gdiplus.h>
    ; [3 N4 l- w6 L: l* ?# N7 A$ a
  8. //using namespace Gdiplus;( M; O7 i( _- Z& P
  9. 8 G8 A$ e+ K+ G
  10. #include "RevApp.h"
    : {6 X, J) j+ ~9 Z5 L
  11. #include "RevAppDlg.h"# w8 A9 Q0 Y; w6 Z1 Z
  12. 2 D: L% X& y* W9 o- l
  13. #pragma warning(disable:4786)" g' h6 e/ }, p1 ~6 p
  14. #include <map>, N$ \+ p6 Q! h! B- g+ A
  15. #include <list>
    3 M7 R* C* M' {  M
  16. #include <direct.h>2 a9 @3 H$ ~. `9 R" Z1 `. F4 v
  17. 0 J9 J+ ]2 n( M: Q* \2 _# G+ q
  18. #ifdef _DEBUG
    ( ?& E& a, d+ ]7 V
  19. #define new DEBUG_NEW
    ' p8 P6 V0 _/ _) A6 `( Q" m
  20. #undef THIS_FILE. J# ?. o  X" ^& o% R  l6 l
  21. static char THIS_FILE[] = __FILE__;) Y- j  \$ a, C2 C7 r+ K- ~  O
  22. #endif
    6 C) J) W' x' g& D* Y% R! z( ~
  23. #include "SkinResDef.h"
    9 _* I- I* [9 B& k' v+ I( j- |0 b2 _
  24. #include "ChangeBG.h"
    & M' i- z, Q$ H6 {$ ~# C
  25. #include "AFXINET.H"
    1 }) B/ W1 M. J7 v  [

  26. 1 j8 |# z3 Y& f5 z. s/ U( Z/ ~
  27. #define TRADITIONAL_CHINESE 0
    2 A0 S. P, ]6 i% \
  28. #define SIMPLIFY_CHINESE 1
    7 n5 Y. i' L! w
  29. #define ENGLISH 2
    1 O- X7 [, e/ E& \4 B( J& R1 r
  30. int m_iLanguage = ENGLISH;
      {& q* y$ c# E, n
  31. /////////////////////////////////////////////////////////////////////////////8 L. F# E" U+ D/ M0 Z
  32. // CRevAppApp
    1 A2 L6 o$ e4 l7 b  d' l- F

  33. 0 B. d4 Z# ^& w: j3 j
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    . c/ |5 I3 K& `; y& M
  35.         //{{AFX_MSG_MAP(CRevAppApp)2 M4 ]! V0 n; Z' E
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    / x4 x$ {- y  |: W  E0 l2 W
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!: b* \$ k$ |+ ?
  38.         //}}AFX_MSG
    & {" W3 C( n! M3 F. ~
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)# h: E$ a: u- p/ {' b
  40. END_MESSAGE_MAP()
      d  C$ O% f- C( V2 A0 x' N9 \

  41. 8 J1 L# I) i4 G) a
  42. /////////////////////////////////////////////////////////////////////////////
    7 k( Q! ~& V/ x  Y& ]2 F- Y
  43. // CRevAppApp construction
    . ?# [1 a" A  w. w. t7 k: s7 G
  44. / q9 D& L4 N9 H
  45. CRevAppApp::CRevAppApp()
    # ~5 |2 w4 e4 r  X6 O) {
  46. {
    : {% v0 o% q& z& w3 D1 X
  47.         // TODO: add construction code here,/ o* A6 p* S5 f( Z. |6 y6 T7 v
  48.         // Place all significant initialization in InitInstance
    ) y7 X/ V* C! }- C- v; H$ V
  49.   bDisplayIsBig5=FALSE;
    $ y4 Y5 [3 T1 p8 W
  50.   bRestartUpdater=FALSE;$ g. H7 ^) |9 ^- k
  51.   bFinishUpdated=FALSE;
    , F. |7 B9 M& m0 ^7 o; t0 K  [
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    % \" r( x' s# `" S5 w2 {" f
  53.   InitChangeDataBig52GBKS();
    $ }0 E* r; w6 }: Q/ U) r' Q+ N
  54.   InitChangeDataGBKS2Big5();9 f! m1 C/ T: O% W
  55.         //* m1 P  P% M: w- U2 \
  56.         bClickRunExe = FALSE;
    " ?" D+ v* Y4 r3 I
  57.         //" O$ ~4 v7 Q4 \1 i* l) k
  58. }
    1 |  F8 e0 H! m' Q0 Y' M' }% R4 G
  59. - o2 p  c* u0 x, _7 [" T- H
  60. CRevAppApp::~CRevAppApp()
    - _2 A' ^: v" V5 x6 U
  61. {4 }/ E+ N  H. \2 a& T- d
  62.         // TODO: add construction code here,
    / t, c: K* t  h
  63.         // Place all significant initialization in InitInstance
    0 Z& x5 k8 }# g$ R( ?3 q
  64.   EndChangeData();2 W! @" q* ~" I1 G; f+ n8 c
  65. }) N5 q9 U0 |2 B1 n

  66. - x0 L- t: }( n0 x
  67. /////////////////////////////////////////////////////////////////////////////
    + F$ y1 M9 _- p) H  R
  68. // The one and only CRevAppApp object
    0 ?9 D, L- `2 F( P# @9 d: {
  69. ; X6 l" W6 c0 X, v; K8 J0 m
  70. CRevAppApp theApp;4 ?) U) O* u! U- u, f- i
  71. 0 N2 U6 _& `5 G" z% y% {# L1 P0 p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)9 C1 I. A# M: W% b6 c
  73. {0 H9 z* T8 L0 i! r+ A/ z( }" L
  74.   int iEOF=0;  @5 C: \. r, W
  75.   char szTempName[MAX_PATH];
    1 c% ?! E. L1 [: Z3 g- N3 u
  76.   *szFileName=0;: ]4 X0 _- R/ J4 v: w7 `( S
  77.   iEOF=fscanf(fp,"%s",szTempName);; i6 W( t8 W/ \, {' H# @
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')  ~9 N7 T+ y8 d, b8 z  y! ?* c9 b
  79.   {  H3 p, u' b: _2 o/ W
  80.     strcpy(szFileName,&szTempName[1]);/ p& L; `' X+ \# [
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)' f. Y. a8 y0 }, i& G( `5 A, m
  82.     {
    " M/ j& z; E  }
  83.       iEOF=fscanf(fp,"%s",szTempName);4 w1 f1 N/ I/ _/ ]5 w& i8 x
  84.       strcat(szFileName," ");
    ; M/ J, M; Q" R- r5 i
  85.       strcat(szFileName,szTempName);( W# l& Z7 P- f0 `& ^, D
  86.     }
    # k  o# j' k" I' i* }6 q
  87.     if(strlen(szFileName)>=1)
    0 e, L0 K( k7 ?6 s- K1 f) d# O
  88.     {
    2 m% }" t; |- r* u& G
  89.       szFileName[strlen(szFileName)-1]=0;
    ; L2 q! b4 Z+ g! K; d* O
  90.     }, ~3 U, G6 Y. d$ p2 ^
  91.   }. B! H/ j8 y1 t6 I+ g
  92.   return szFileName;+ [5 c3 P+ b' q
  93. }. ?) [9 ]% G" D1 a! n" N

  94. & [" p* j; }" }7 m0 h
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    , j3 W+ h0 b9 V1 Z% d8 I
  96. {  X& A1 l' B7 E% K% ~+ F! t9 h
  97.   FILE *fp;! l. x( m  }0 n# z6 R& l0 }
  98.   char *key=NULL;
    * a6 R! ^0 [1 I) L; u
  99.   char version[MAX_PATH];
    7 P% m" ~0 O; {6 q
  100.   LPUPDATEFILE file,olds;
    ; s1 _& @# Z" Z( L- |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / k' d0 g8 }& f/ G& M

  102. ) U* C& w7 \' w  D5 a3 D
  103.   UpdateList.clear();5 ?# B! ?  y9 D7 A+ ?: M- l! a
  104.   UpdateFile.clear();& Q8 E; i0 ?3 @8 W# t& w- u. F" o
  105.   if(GetFileAttributes(filename)==-1) return false;
    % y- G' W- O" C. h! A7 V
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( _! `3 _( {+ @0 c, e
  107.   fscanf(fp,"%s",version);
    " h4 i% ~4 N  y2 {" _
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 q4 G! C# `. O. K) F9 {
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ( i' |" k1 }3 i
  110.   {
    % d2 R. L, L3 h$ ~# ~
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, a* X( g$ e5 W4 h  s+ w
  112.     fscanf(fp,"%s",file->path);( [$ C9 u) ?) t. e
  113.     ReadFileNames(fp,file->file);% {6 b+ d* G) O8 O
  114.     strcpy(file->full,".");
      v' l+ w+ Q9 \- t+ T. D* x
  115.     strcat(file->full,file->path);, G; I  t5 c$ @' }! P2 H
  116.     strcat(file->full,file->file);
    3 L( [& q; I0 `; N. {
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())2 x3 N  f8 h& R& \1 D- z* b" w
  118.     {/ |- ?, [) T. R' U* }/ K, c4 H
  119.       file->vers=(float)atof(version);& O" r4 n$ O. r  o# ~$ `' U& {# ]
  120.       UpdateList.push_back(file->full);3 i+ `% D2 m! V* X3 q/ L
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    # T5 o3 L: @+ X: k0 Q
  122.     }
    5 w" p3 J) m# a# v6 [, K& \
  123.     else4 [. d  I  y" i1 T$ j
  124.     {
    $ e' W7 `+ b& L1 d
  125.       olds=(*p).second;4 B: Z4 C& K- i' B
  126.       if(olds->vers<(float)atof(version)), h$ [" P8 Q& [% \& S/ k* V
  127.       {( I" T$ u6 R& G, g. U  _
  128.         olds->vers=(float)atof(version);
    # J* B+ O/ T  L; C0 ]
  129.       }- ?, o) V+ X& C: }$ f/ V
  130.       free(file);
    6 U, P* o2 g1 X
  131.     }
    , O7 f5 o: D$ u. k* r+ j
  132.   }& I* P  D$ h. O8 j
  133.   fclose(fp);
    8 u7 }' \9 e; s* t5 O0 N. u
  134.   return true;8 K( R& i$ L/ z' s  `+ g( y
  135. }
    - X2 N6 u5 Z- V2 @6 u. q4 W

  136. , ]1 d" T) W3 d$ h8 t0 V0 }
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)2 [. p" ^9 r& m2 L8 v* n1 w
  138. {
    6 [; F" y- h0 X$ x8 Z' Z
  139.   TCHAR  szFull[MAX_PATH];
    & a5 [, n' d/ m7 s4 f
  140.   TCHAR *token,*inter;
    7 g( D3 G- {/ F  u1 a/ V% s5 r
  141.   *szPath=0;
    : x7 c9 e1 B5 b3 v
  142.   strcpy(szFull,szFullPath);
    ) ?  h. H; s4 i/ b2 r
  143.   token=strtok(szFull,"\\/");
    : z; \1 v5 m* a0 I- ~
  144.   inter=token;
    : f# P7 r$ \' g+ I2 v9 }1 R. V
  145.   while(token=strtok(NULL,"\\/"))
    2 T1 z$ ?* `7 y6 t- u3 k: a) m4 o8 E
  146.   {$ `" v3 j# S/ I5 \  X
  147.     strcat(szPath,inter);8 r% W' H; B! G7 H) G8 H" ]9 M8 i
  148.     strcat(szPath,"\");
    # x- U4 d9 u7 r
  149.     inter=token;
    5 X% ]: B- }) @! N8 s. t( U
  150.   }
    $ s5 a/ r4 W9 F( M! r: ^
  151.   return strlen(szPath);" W# I' S+ ~3 c, {4 Y0 s
  152. }# Z' T' J% x/ i
  153.   T" W5 T5 }" W- w
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); W8 w6 X& R" T! L9 s- u! a8 s
  155. {
    # D9 O! a) m) w8 @5 j' f
  156.   DWORD attrib=GetFileAttributes(Target);2 V# j8 M; c) e( T# r
  157.   if(attrib!=-1)
    - t- e4 a) n# f* R
  158.   {4 P$ o, x. j0 y* H8 ?) M
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
      w* p! p* r" S6 C2 K+ P$ ~/ W, B5 W1 K
  160.     {
    ! ]7 n1 @$ Y' @! H
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
      I* b3 x: V: ~9 Z) m! H( i/ }( ?; @
  162.       SetFileAttributes(Target,attrib);+ X0 x7 x! A+ O7 i5 D& L8 h; X
  163.     }6 {0 t- @3 A/ E( R
  164.   }6 @5 O" J& d, U1 m
  165.   CopyFile(Source,Target,Erase);6 C3 }- a4 T# J4 D% v& ~% Y% p
  166. }! B7 H3 t" C5 @, `& `' @: _# X
  167. % h) ~% S7 z3 k1 m. W/ w
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)3 ^0 U3 m3 F0 m: g: q
  169. {" r: {6 M2 m2 X% O& V2 H/ o! E
  170.      FILE *fp;
    / H+ `: o' P  ~  f. `3 T9 r. F" l
  171.      char  szBuffer[8192];! z4 H( ?6 g9 c3 K! n  q
  172.   va_list  argptr;
    . n! m8 L' F/ f( g, T
  173. 8 W! P) P9 k$ |5 R5 r
  174.         va_start(argptr,message);
    1 q* y! G1 S3 ]6 q* i5 \
  175.         vsprintf(szBuffer,message,argptr);" x; B3 V2 @$ p1 K- D4 ]3 `
  176.         va_end(argptr);5 L% d6 @) g2 _; @+ b0 f% j5 M
  177.   fp=fopen(FileName,"a");  |: u! I, L; G- u4 W* r
  178.   if(fp)
    8 a4 o0 y. j% g, q2 z
  179.   {% W- U2 k! \& s6 b. W1 d
  180.     fprintf(fp,szBuffer);
    ( e( k) H2 ]1 t; ^! X
  181.     fclose(fp);  Y; ^: o9 E4 Q- f
  182.           _flushall();
    ( s  u- z6 z, q2 a" p
  183.   }; ^# v, N" t; W* M) u  {1 {: M. b
  184. }
    * l; ^+ _/ Q. ?
  185. 7 f5 t  J" p# a) ~" M/ M3 z; u
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    0 V# I- K7 d4 v% p
  187. {
    1 i- m3 P# o+ A7 |! v7 J
  188.      FILE *fp;
    7 A- ]- {6 Y: n! h. M& A& h! d" U* x
  189.     DWORD  attrib;& u% o, B0 g. }3 U7 D  r  k7 C9 J
  190.   attrib=GetFileAttributes(FileName);
    : o$ b4 H, |$ F9 u, `. Y! C. a
  191.   if(attrib!=-1)
    ( Q! N8 Q; a$ Z2 I4 {4 M- R/ t
  192.   {, C! x; |- f3 ~5 I8 N$ W
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    + n& `( z/ I9 I% u! |
  194.     if(!SetFileAttributes(FileName,attrib))
    0 F: M" P4 t9 D+ ^/ A& H& Z! k7 a
  195.     {9 u4 Y8 ?/ [+ `3 b- P$ D/ N, [
  196.       return FALSE;( c$ S6 R% k1 R6 P4 V9 J) x) ?
  197.     }
    6 r1 _8 {. E. M, ]
  198.   }2 J* N$ S/ _$ W8 o$ m
  199.   fp=fopen(FileName,"wb");! Y- s) N( ~( T! Q$ y0 I5 N& |
  200.   if(fp), f% x- E- c2 Z* C& _7 T3 n4 B6 q
  201.   {. I# J1 ?- r; p' w6 ^7 \
  202.     fclose(fp);
    & Y  F2 O( o- {2 V
  203.   }$ A* p7 I9 Z% _! w
  204.   return TRUE;( u( I1 C5 ^% y- T
  205. }
    $ d- i5 q  h; a

  206. - P, P# q3 p% i" v1 b
  207. BOOL CRevAppApp::UpdateLocalVersion(void)+ U6 U1 L. w: Y2 m& `3 k1 q" a
  208. {! m- I9 J4 Q) w7 C. [" g( c
  209.   char filename[MAX_PATH];
    : C) w* a  t9 B* I3 K
  210.   LPUPDATEFILE file,olds;
    & h! c  K3 a; ?
  211.   std::map<int,CString>::iterator i;
    6 j6 j( p4 {8 E2 I/ {0 D3 w
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; B/ [2 D' M# E# F, I
  213.   std::list<CString>::iterator l;/ c. f, R+ |' Q3 A

  214. & ~7 d. `5 Y( s
  215.   if(bFirstUpdate)4 i) D$ E2 L1 b5 a  m0 `
  216.   {3 W# Y3 J& [& ?2 ], D  v* T
  217.     dwCurrFile=0;
    0 L6 `! v+ P9 ]+ z8 o
  218.     bFirstUpdate=FALSE;" ], v9 k6 w: w% O% o
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / l+ i) S0 T9 o9 M2 ~# y5 M
  220.     {
    ; b' K5 ?* P- L- \
  221.       dwTotalFiles=UpdateLocal.size();3 `" t  o' b1 @) l6 I2 o
  222.       dwDownLoaded=0;; ~( t* N% J) X  x5 [* {9 V
  223.       bSilentStep=FALSE;' s# H$ c+ @: z
  224.       bCompressed=TRUE;
    0 i0 x* q, a$ f6 V* q8 |
  225.       strExtLocal.Empty();" c# n% M* V, S/ k
  226.       strFullName=(*i).second;
    + K3 x& i! d, _1 z2 B5 g/ Z
  227.       dwProgramState=AP_CONNECT;& C- Q3 U! D& |8 l7 ]
  228.       return TRUE;
    * }7 l- z' g0 w2 E/ n$ m% h
  229.     }
    1 O4 H+ B$ `: Q7 p+ i' [/ N; {
  230.   }
    : F% L% ]  ?- E  t  C" W; X* [
  231.   else if(bRestartUpdater==FALSE)6 o# |; q$ R& i: ?# w
  232.   {
    , S7 m: P+ m. e1 b, r* g, B
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ' ^0 t/ |+ E% F& |5 U' }
  234.     {
    3 U$ n( o) n! S
  235.       file=(*p).second;, M* k" S: b6 i( i
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    " q2 c+ l  W' {) q- a
  237.       {* C! D* b5 |/ G/ V6 X% P+ B& N
  238.         olds=(*p).second;
    : Z/ M, C0 c) }$ Q* _" o- _
  239.         olds->vers=file->vers;* t: m* f9 R" [1 C: D& q) i6 p. ]
  240.       }) j, T4 }% ]7 }: t( Z6 Q3 L0 s
  241.       else6 y# n, s0 _' l/ B$ B* m& ?
  242.       {
    + O/ A8 O0 b8 D" x/ ?+ D
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 r5 ]3 k, x- A: G. N
  244.         memcpy(olds,file,sizeof(UPDATEFILE));# o8 N/ j& K( G5 R, n
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 r/ E/ }5 l% p1 `# f6 i: R
  246.       }& @! p7 p( i0 @. C0 \
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- G' {0 H7 m- y0 _. }$ N7 R6 ~9 W
  248.       sprintf(filename,"(%s)",file->file);
    . e  `3 @+ [1 @3 D
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  f. ?5 M: X. Y0 I# C
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    2 M6 e( d( C6 [) c& @- q
  251.     }0 g. H8 H% i" A: ^( U
  252.     dwCurrFile++;0 p4 Y! E7 h, f
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* I. T6 q) x" J) f1 K+ _3 `7 L9 [  s
  254.     {2 F  x1 f' D% v# N" k  Y" X
  255.       bSilentStep=FALSE;+ o& ~% l8 n: s& z
  256.       bCompressed=TRUE;
    0 K: ]+ W, _+ w4 n7 N
  257.       strExtLocal.Empty();4 E! b* N  I7 I$ `1 ^) K+ L8 B) b
  258.       strFullName=(*i).second;0 a# R: o$ I4 ~: a7 r
  259.       dwProgramState=AP_CONNECT;
    - Z- H" w/ d4 l2 e5 U& s5 M
  260.       return TRUE;* {2 @3 p0 h6 f  P
  261.     }
    3 S: D! j3 J- c
  262.     if(!bRestartUpdater)9 W6 D) Z$ j/ |3 A0 W& h
  263.     {
    - d+ D6 }$ H4 B" `3 J5 I/ A# o
  264.       int iCurrSize,iFileSize;
    9 `& S3 o, X0 r
  265.       iCurrSize=0;# R# a- E2 G- b2 G
  266.       iFileSize=UpdateList2.size();
    ; N* X7 |# c" C
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");! ?" Z% \; a) j) G7 T6 M9 D
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    , D/ J% k$ X) \% }- O0 Y& o3 O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + W" I2 u0 j$ @% D) P' L) i
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 `- E2 K" \& u5 \; W  F% L
  271.       Fclearf(".\\update.dat");$ p' a$ H8 U0 N3 \
  272.       Fprintf(".\\update.dat","Bloodyf\n");& w+ v; Z1 V8 R( }. o, K! p
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 G) t( C9 u# t  _
  274.       {
    6 F* E% }) O, \  m( @7 D
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 \6 O) C6 y  V/ u. v, {% c
  276.         {
    , F3 f- r2 N& X
  277.           file=(*p).second;$ ~0 b) H+ K! L) E
  278.           sprintf(filename,"(%s)",file->file);
    # P5 @  W- c- n- }' y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 i# U. X0 R% F
  280.           iCurrSize++;) f3 S7 k( `3 W6 D/ l. Y' C; e* {
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));' r6 k& L* @- q& F+ D0 S, E
  282.         }, g* t3 F+ \3 v: l7 V' n
  283.       }  a; ?5 Z$ {7 {" w& c
  284.       unlink(".\\update.txt");9 N9 N: [! a6 c
  285.       unlink(".\\update.tmp");6 g6 F- @' a% {
  286.       Fclearf(".\\checkversion.dat");9 L- |" `. [" [! y, P% l
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 X# X+ _/ m& I6 Z- P& i* _
  288.       if(UpdateLocal.size())
    6 j8 U8 G1 [8 u: d
  289.       {8 [3 e  H  _. X; K3 H% Q& K* W
  290.         UpdateLocal.clear();
    & x( E) |- ^* E8 l
  291.       }
    $ P; T; z  N2 s1 G1 {, s0 M
  292.       if(UpdateFile3.size())  y9 b3 R7 y& X$ ^
  293.       {
    / S# t2 S: T# [% w; \/ _- {8 _0 [
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 U0 o: i) k, N  `
  295.         {4 q# m  B. q+ R# y4 C, j- C& G  ]
  296.           file=(*p).second;
    5 ]% u+ p2 _0 B6 u, c$ o
  297.           free(file);
    7 f* Z! n7 ^  R  W9 Y
  298.         }- l1 L& c! K$ i+ ?( y
  299.         UpdateFile3.clear();
    ( H( f: k$ `" G- ^
  300.         UpdateList3.clear();
    3 S2 K8 _. M9 a% z  g
  301.       }
    ( }7 ~' U0 z- z. O
  302.       if(UpdateFile2.size())
    : O6 z, \! {, v' e. T
  303.       {
    . R- q$ `7 t+ q/ j7 E  U
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    2 D1 [5 O5 m6 S1 c# U
  305.         {
    4 T: {) D- b- G( a8 A0 K0 V
  306.           file=(*p).second;
    , D& v% q3 d  R- J* w3 X
  307.           free(file);) n4 V' i  t+ I" b5 t
  308.         }) p0 _! {6 L/ N* ]
  309.         UpdateFile2.clear();  Y2 Q+ I2 Z7 s2 r
  310.         UpdateList2.clear();
      x# y' p6 q* ~, J% Y$ |8 B0 _
  311.       }
    : m, B- i* R: X
  312.       if(UpdateFile1.size())- Z1 H* }5 w& r0 ~
  313.       {8 e2 x2 i0 B; a# s- X8 [1 g- U
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 F/ r- F1 Z! w
  315.         {
    5 P6 `% ^/ G2 U
  316.           file=(*p).second;# |9 ?' \& A! b
  317.           free(file);) h8 V6 b. w# b& Y
  318.         }
    , @% Q9 p5 B! D  b2 E" v; _+ M+ m
  319.         UpdateFile1.clear();
    5 H# s8 Y" M  ]
  320.         UpdateList1.clear();+ C. O0 @3 d, i
  321.       }$ c- v; k5 F9 J. e- }. U+ U( e
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));: U! I/ e, y5 U. X  O3 T
  323.     }& T' `0 ~, C+ A/ U: R) `
  324.   }$ r' D/ \& _. o: K, s
  325.   return FALSE;
    6 \  o* m' ]* w3 }8 W
  326. }
    9 d1 d1 C0 @, c% u

  327. . u, y: n# s& b. b2 \7 h
  328. void CRevAppApp::ClearAll(void)
    % E& D; ^0 L# B- y& X$ {: L& u; j
  329. {
    & [$ e. f7 n0 g/ L3 \: F5 q
  330.   LPUPDATEFILE file;
    1 a" ]  D& f. Z9 e! M8 ?
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 M# y4 _& R. a3 j3 K. o6 F
  332. 7 z% m8 t) S2 ?* D) i. Y' q
  333.   if(UpdateLocal.size())
    ; H1 S% e$ d% }
  334.   {
    5 s, o3 c( m  ?5 ~8 _1 K
  335.     UpdateLocal.clear();: D% a/ h; Y3 L  g
  336.   }
    8 }9 b4 `. c$ R5 z" P
  337.   if(UpdateFile3.size())
    1 i: O( x$ A6 p8 A6 h- m
  338.   {
    ( T+ @8 Q' f- R7 L8 R% k0 w
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 f. M3 m9 b+ e" x- e
  340.     {
    2 A. f) y2 P7 _
  341.       file=(*p).second;' Z( l/ {7 n  b6 c1 ^
  342.       free(file);) l/ x  J. o; e- U" ]; C7 C
  343.     }
    9 B0 X6 w0 E+ Z  }. o
  344.     UpdateFile3.clear();, S. B; t$ M" u, j: u" d
  345.     UpdateList3.clear();
    : V/ g) ?3 M5 w0 }# v+ M5 n8 O
  346.   }. v* E  ^  Q. X. h5 Z) |0 O6 C
  347.   if(UpdateFile2.size())
    1 p5 E2 I% j3 x# x; v
  348.   {3 {5 y! [. a9 K) ]. L' C+ O& x
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% \4 B& U& w* F7 u4 {3 l, V# M9 u) e' o
  350.     {
    0 n  u: W, V7 n! Y" a8 l$ C
  351.       file=(*p).second;
    7 ?: B: s" \' d5 v" k
  352.       free(file);
    1 B5 }4 t4 ?4 T' s: R
  353.     }
    2 W, W, `( h7 [, @8 N' Q4 i' Q
  354.     UpdateFile2.clear();: D+ W5 f( \4 A3 V' i+ E0 C. l
  355.     UpdateList2.clear();
    , d5 `( V: W' _1 H
  356.   }
    / R5 F* S; ~5 `, x/ M% N) F1 `; J
  357.   if(UpdateFile1.size())
    1 L- R- n9 m+ G( I, f/ ^" ?
  358.   {5 d. o" o" Q3 a/ P8 C( a9 T% L
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . C' q' Q6 e$ C2 A1 |5 b) `
  360.     {  ^/ n- [3 ^( r7 P8 a$ z" l: Z6 Y
  361.       file=(*p).second;
    ! b- ]0 L# V7 b  f. O  K( E, K
  362.       free(file);9 ]/ X4 S9 V, P$ u; I" o. F
  363.     }
    6 Z: b) r9 ?4 G
  364.     UpdateFile1.clear();" o2 i. l7 |9 d1 ], F
  365.     UpdateList1.clear();2 v4 n4 Y, b2 b
  366.   }: w. _- l) S8 f
  367. }  
      I' c- C1 ], F
  368.   ! W( v( [6 W- Y% g  B- s
  369. BOOL CRevAppApp::CheckLocalVersion(void)( q- h6 C, T9 b8 w- a
  370. {
    0 o. k+ d* N9 s$ n
  371.   int c;4 l8 M- s6 h2 B/ O+ O  X
  372.   LPUPDATEFILE file1,file2;
    $ t- n4 n, q8 A
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    - S: ^  h$ l6 \) z
  374.   std::list<CString>::iterator l;
    , P$ P5 S7 _* g1 L$ y( u; d9 @

  375. # y) W4 y6 z5 Q. }
  376.   UpdateLocal.clear();
    5 a2 r! @# x) o; c7 w  d
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);6 T/ V6 f4 ^7 U& H3 W7 ^
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ( s4 G/ p1 }7 ?
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + n- M" D1 t6 |! e( K1 a0 {
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);/ x3 n+ e* `( `3 C
  381.   if(UpdateFile3.size())' a9 x3 l% p) y: B0 \
  382.   {' q+ d" w! j& x$ V  [
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)5 [3 Z4 i3 B5 J
  384.     {% l2 n8 P1 k5 m6 c" K% K" y5 J
  385.       file2=(LPUPDATEFILE)(*i).second;
    . J6 \9 \. O& b
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  _$ ?6 R  F. n8 d
  387.       {* Z) S- k) n- |
  388.         file1=(LPUPDATEFILE)(*p).second;
    9 D  V$ U6 F. j5 ?: o
  389.         file1->vers=file2->vers;
    . |& A5 q( `" h) ?; m9 Q6 l
  390.       }' [# ~/ M" a  s& @$ ]0 p: W
  391.       else5 W2 e! W9 b! L" C0 j
  392.       {% k. g$ F1 s  c+ `+ R
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * S" b8 q) ^, }, r) [8 l$ P) ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    & N# d3 N# Z' s8 P+ E0 T$ }
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));1 w3 W# k; B, U% ?
  396.       }5 e3 V$ `7 B9 V9 ?
  397.     }9 y3 X( i+ @5 L7 N3 R
  398.   }5 ~1 ~  k8 b' w, t! X) M3 i
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++), u! [9 q+ o( k9 W  W7 T$ O
  400.   {
    ; o$ ~0 V; C5 P$ i
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())8 V. q& D  J/ l1 e
  402.     {* g% ^# P/ q7 B* \
  403.       file2=(LPUPDATEFILE)(*i).second;" ?& V  y8 r) L& S% s) |
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ n, L  ?$ b3 s  l9 D
  405.       {( K" R. _' ]9 F, ~0 X4 a0 w
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; a; S- I2 t' ]
  407.         if(file1->vers!=file2->vers)
    7 z1 b: {. I8 c' `# G/ G
  408.         {
    9 d: K" S5 h" Q) X4 P4 h* }
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 s3 R/ N9 A" t3 z; b( X( P8 k" B
  410.           c++;0 E9 V, m8 v: V) O$ _
  411.         }
    9 C/ n1 v/ ?7 t+ Z! F
  412.       }- L/ ~: g) D+ K% G, Q% G
  413.       else
    8 U  ]; ]# k; ^3 X
  414.       {  c1 U, N- y9 u3 M$ Q$ p
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    , Q! x3 m  z* \
  416.         c++;. p7 b1 i2 c& r- J' e
  417.       }! q8 m. M7 o. h9 E
  418.     }% J9 ?: a* o5 `/ ^5 |) @3 M4 t/ V5 j, J
  419.   }
    + o6 R/ o7 G4 g, O6 ~
  420.   unlink(".\\DownLoad\\update.txt");2 l3 ^4 @, t4 s  k
  421.   if(UpdateLocal.size()) return TRUE;
    ' y! E/ i/ V  I+ j" A7 @. ^
  422.   else                   return FALSE;
    5 A$ `; j6 ~7 ]% |
  423. }, H( U" L9 s" h: F2 t7 p

  424. 2 c+ l( U- v" Q1 A6 K
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    2 o9 T9 M9 i+ h% [' B
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"& @3 z) J- L8 A4 b1 E
  427. 7 D) w. O) \: @0 A* H

  428. 2 y  H2 G( U8 a! l' c

  429. , O" {' ]4 V- z9 b0 b) |" E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    9 y- Z- K! m& E. ^
  431. {
    ' r4 D+ k) C% d" C3 k* v0 j9 O
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    : P# |2 p/ K8 j
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 {+ `6 s; s3 _2 o/ {
  434.   {% X9 B. @; z" j$ c- [/ n
  435.     char szLanguage[50];
    ' e& X- X$ S% s4 b$ _5 E
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ O* d  v. Z1 e9 A4 P4 E! s
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : h6 l  q8 c% I2 v
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" x$ y7 x) J# `) e% ?
  439.     else                                   m_iLanguage=ENGLISH;; G+ w6 Y2 V4 m- ?% c, G( y
  440.     char szRegister[100];" }: [; [+ Z* ]9 V& p& Y9 l' x) z4 x
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 P  l: n0 _+ b, {! Y1 x
  442.     strRegsName=szRegister;0 K1 Q% j8 l9 ^' n/ C
  443.     char szPatchURL[100];, N, w4 z6 H$ A$ n- |: V
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) B! X0 l: }1 F( r9 }6 U
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 g/ J, X; g& T
  446.   }3 g5 V9 Q1 R  p, r/ o
  447.   else
    % y2 m, p% }+ `" L, N
  448.   {9 r* I& F" C8 a+ i
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , O/ X/ z' h6 [1 b
  450.     strRegsName=DEFAULT_REG_URL;
    1 w6 e* T( c  R4 F1 d+ e6 W
  451.   }
    4 }/ I0 }  `: V0 ?/ X4 f, a$ I
  452.   if(GetFileAttributes("hosts.ini")!=-1)$ @, Y! H) S+ h* o! l' d: k
  453.   {/ ?$ u% Q9 j2 w3 W! n8 X! e
  454.     char szIP[50];- J, B# |6 k( ]
  455.     char szDIR[300];
    0 Q8 y) x# i! B% |
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))2 z; O5 `4 I/ e7 V: x7 Z) n! Z2 J
  457.     {  P6 ~3 Z9 D. F! Q- L8 [( _
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    7 A; Q8 Q4 x7 S5 m- O
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ) w4 f6 l( }( F* _. y2 O5 v3 z' F
  460.       strHostName=szIP;
    * E" Y5 I3 ~7 l' L+ [$ G8 P
  461.       strHostPath.Format("/%s",szDIR);/ e5 D* |! C3 s1 z! a3 K: M) g. X
  462.     }  \3 K% Q) |8 t' |. I2 u
  463.     else
    4 {* x4 v4 ~/ `' m& N% f' g
  464.     {0 f% @' K8 w+ R* ?
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)) T+ e+ s) e. G; L
  466.       {( V! t7 R1 h& w
  467.         char szLanguage[50];
    ) J; v5 u7 v) s$ i; x+ y; O3 F
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' Y$ w* L2 L9 q( a! ~
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 D( ^$ B' |# v$ ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 O0 u, p2 _/ ^' m) |6 L: y  ]
  471.         else                                   m_iLanguage=ENGLISH;
    4 A. T, G2 z3 U2 H
  472.         char szRegister[100];
    ( ?8 l6 ~/ @' W- g* J* x1 l
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      c+ V# p4 Q, g) I5 J1 g
  474.         strRegsName=szRegister;( ?% i# S) _, J+ o5 T: X+ u  E* W
  475.         char szPatchURL[100];
    ) a3 [0 U# b' t
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ p5 w. s: v% i
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! h0 U; |! q, j) X; ?1 `- G* l; _- I
  478.       }
    3 H: P1 [- N9 Z1 J' e3 w
  479.       else: t8 L  v+ J! X3 Z" |# C
  480.       {% A+ @1 K; Z# I. p/ T+ x- m
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& D2 M* Y3 n7 f7 g
  482.         strRegsName=DEFAULT_REG_URL;/ k2 v! n8 S5 a& W
  483.       }
    1 ^' U3 l/ L" a1 z5 E7 F
  484.     }3 g$ S& Y6 }  Q" ^
  485.   }( S/ S* b0 @/ \$ S
  486.   return true;/ ^2 m7 ~, C* W+ n) j9 u! A
  487. }
    - A7 d* R- i9 o8 ^) e
  488. ' j6 M) u+ w, I0 Z/ C
  489. #include ".\ZLib\unzip.h": m# M0 |( D, V' r6 d
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    / R7 O( L( u( S+ L8 L+ ]; {
  491. /////////////////////////////////////////////////////////////////////////////( X  I7 }8 y/ q7 b+ ~  V" W
  492. // CRevAppApp initialization& K0 l9 C6 R) O* K# s0 B+ S5 P

  493. . C0 B8 [7 g: U& Y. p& T8 {# x2 I6 K
  494. BOOL CRevAppApp::InitInstance(); P) i- X+ F9 R) ?1 F4 a& t9 s
  495. {& j1 t% B6 ~& k% R2 K. ?
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];7 _- q4 m' Q* @2 r' T' |2 @" R7 C
  497. 8 }% ^% A( u+ e5 ?" x6 P( S
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);) f- f$ B3 ^3 E' u' l! @. \
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    4 h' F; o7 S+ H0 N- A8 D" T% q
  500.   {* e9 `; X* P$ L8 P7 O! X
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");5 `, M* J% w. }0 T0 @
  502.     GetPathFromFullPath(szPathTarget,szPathSource);. K# z/ y; o$ h- }4 s
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))) p7 d3 @" g8 d% a- n
  504.     {6 \# K3 R% d0 i% G# L1 a) z6 Z$ F
  505.       strcpy(szPath,szPathTarget);6 R6 ]* m/ Q0 D5 z2 S! u
  506.       SetCurrentDirectory(szPath);
    8 X4 R6 A5 F6 D# ^/ k9 o8 I: I
  507.     }
    2 `% J. B% h: E
  508.   }$ ]" b$ I) @! v7 _5 P
  509. #ifdef _DEBUG% t/ r+ ~' h3 ~" `4 [+ @/ L
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 z1 g: C5 r% \7 |
  511. #else1 U4 H7 h* v# \( v' E) o
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 C. D8 f% d1 X7 W: Q
  513. #endif
    7 t7 v' M. V# X6 ~5 U! {' G5 U, j
  514.   {- |1 H2 H' X) z
  515.     char tempFileName[MAX_PATH];
    # r5 z! C$ Y+ d7 ?' @3 ]; B
  516.     strcpy(tempFileName,szPathSource);
    + z' u& J: P9 q
  517.     tempFileName[strlen(szPathSource)-12]=0;
    5 E. V! s& u1 m% ^
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    6 g0 G2 K$ s" A' w8 \+ I  f* I
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);, L: f/ X1 }, X, \
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);; W- S# g% o( r0 X
  521.     return TRUE;
    ! x& H6 D6 [2 ?. A& T
  522.   }
    + R+ L$ r2 _( D" q
  523.   // Nuke 0118: Delete run.exe% j( t' {0 u! C6 _2 x6 f7 P8 V) E9 K
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );! V9 ]; A1 K! g# z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");& C4 M& h# u; M, }( |0 u0 G1 ]3 x
  526.   if(!ReadCfgFile("Config.ini"))* `8 P4 ]# D- r1 ^' w% F$ H% l/ c
  527.   {
    7 d8 W  Z6 t/ K) l7 ]
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);) u: W9 B5 Y! U6 J4 k  B" e
  529.     return TRUE;
    ) }0 c5 A+ @$ P
  530.   }
    0 Y2 m0 v2 ?5 u/ s* H
  531.   HANDLE mutex;
    4 ]2 p: a, p4 J4 s
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 g* X, x8 E( E, U; d: M
  533.   {
    , ~* l$ z% D" {3 m3 F! Q0 |7 Y* T
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    * [( Y( `" n# B* m2 U8 c& i
  535.     {$ ~8 U1 Y6 |: ~3 v4 D; R1 g+ ?
  536.       CloseHandle(mutex);0 ~" A' O9 ?- ~: q7 x  P
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    & c, m4 U) a/ B; I2 f$ {
  538.       return TRUE;
    1 d6 ]: A& w! Y7 o. g, [
  539.     }
    ; C2 P$ K2 J5 ?! G5 s5 o
  540.   }  
    2 }; W) J: Y! g! a2 C. O/ s$ o
  541.   CloseHandle(mutex);' y0 K* h: N* ?# i% h- s; [" {

  542. 6 S/ P' L: u0 K( ?0 `9 F
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) u; T& _( j, c0 O1 K  h
  544. , j5 x1 h( C9 s& O1 Y
  545.         AfxEnableControlContainer();% C, q* r; c3 T0 O! W

  546. - v5 x) o. h. D' @7 a' H& y6 S6 k
  547.   bCanUpdate=FALSE;& c8 z8 C$ A  q: q. {! H
  548.   dwStartUpSteps=1;
    ' W0 y6 _6 E1 ^! v
  549.   dwProgramState=AP_NOTHING;
    + G0 J7 a3 G5 {% l/ p3 J) L
  550. ; ]. A1 v5 [- A) Z8 b% P
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ! d/ S7 h; u' M' B' G# H
  552. 6 t( A$ O2 Q6 D& a
  553.         // Standard initialization
    7 o$ S2 j+ i; U- B- ~3 }$ w7 U
  554.         // If you are not using these features and wish to reduce the size# G/ S% y0 O% s7 R+ \1 }# c
  555.         //  of your final executable, you should remove from the following
    5 |2 ?/ W. B1 K3 B$ t
  556.         //  the specific initialization routines you do not need.
    / H! v! M0 b% d+ ~$ y* V

  557. $ y# M& E& v4 R+ j; m9 U4 `, m
  558. #ifdef _AFXDLL. K0 y9 Y' [3 |
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL8 G- H# p2 C) K* w2 v
  560. #else
    1 _( m( k, M, U
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    0 q  Y) V- Q( s
  562. #endif! w% f8 ?7 C9 v8 r2 W, i( W
  563. 6 C2 V: `1 ]3 O! b4 _$ D3 U) W
  564.   dlg=new CRevAppDlg;
    % _2 h3 U+ L% T7 n" N
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , m; J  O; a. s( U, [+ ^
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    7 ]; f$ j* q0 i! ~1 ?0 a
  567.   m_pMainWnd=dlg;
    $ d# m6 _2 Z! l3 o, c9 a: t
  568. 7 Y0 j3 a* t: ~* F
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);( g0 P% u2 A2 I% d2 ?  D8 K- D! e5 @
  570. ) R9 d0 R  |3 c3 v% Y: J
  571. //  GdiplusStartupInput gdiplusStartupInput;2 @2 o: Y4 }! Q5 G# j$ Y8 U" Q
  572. //  ULONG_PTR gdiplusToken;
    * Q4 U2 ?' c7 ]1 I2 G# T3 b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ; X5 L  ?% ~  |+ K* ], G
  574. 4 S( F+ x7 W9 O& p+ K, R4 Z
  575. //        CRevAppDlg dlg;! J! w$ F! x4 L* O
  576. //        int nResponse = dlg.DoModal();3 W' K. u6 P" M5 l+ {5 T
  577. //        if (nResponse == IDOK)
    1 R8 U% `- [& e: u4 Y
  578. //        {5 Y9 E5 ~5 G0 |; Z# M
  579. //                // TODO: Place code here to handle when the dialog is
    . e# |6 f7 H% _/ N" B
  580. //                //  dismissed with OK1 G3 `: W. s1 Z
  581. //        }
    7 o; J6 g; G* B  R0 W- i
  582. //        else if (nResponse == IDCANCEL)3 D- w5 g+ O. Q/ k5 j6 p
  583. //        {! r" p, ]( ~6 J6 f
  584. //                // TODO: Place code here to handle when the dialog is
    + s( ?6 j  x0 {5 m
  585. //                //  dismissed with Cancel2 v+ T4 B; y, j# s- r% L) w% Y" d- ]
  586. //        }& V5 T8 D3 ~  _
  587. . K  G, z8 j# v
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . |! B* e" X& d1 _$ p7 ~9 K0 a
  589.         //  application, rather than start the application's message pump." ]# b2 M( H' ~0 R3 F! C# C
  590.         return TRUE;
    ! h6 W; G1 a6 z1 N5 J/ ^6 z7 R
  591. }. `. `# K) l! B$ d" R* t0 d; d

  592. 3 E8 n# U& e6 v
  593. char *CRevAppApp::strtok3(char *pSource,char *token), W5 d  i$ m; y3 P4 H! a. Z3 F& {
  594. {
    % a6 ^$ e* p# ^  d6 E3 M
  595.   int i;
    # E  n% |& \/ g+ ]$ `& K$ n
  596.   char *szRet;; s6 h9 S$ w1 b7 K

  597. 6 D6 v# c/ V7 _! |- y
  598.   if(pSource) { itoken=0; sztoken=pSource; }# b7 R7 I; C2 F( _8 |
  599.   if(sztoken)$ C" k# g  ^; q+ p8 U; p
  600.   {) o0 v% b& W* j- S
  601.     szRet=&sztoken[itoken];
      s5 z! i% e5 Q9 J* n0 R
  602.     while(sztoken[itoken])
    8 y/ y2 x2 c+ U0 e
  603.     {9 V+ Z" X$ C8 p/ O4 q3 ]
  604.       for(i=0;i<(int)strlen(token);i++)* r; L+ S" P2 `  N6 H2 S2 F
  605.       {
    ' S$ |: f. D! v% Z, [6 c
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])3 e$ V, t+ Q& B; H  ]  Z" X, p
  607.         {
    2 [/ {+ Z8 g) i  m9 s
  608.           sztoken[itoken++]=0;
    0 j) E5 t1 k  O; M+ i7 c
  609.           sztoken[itoken++]=0;! d7 h( R/ L5 @9 e) c  A
  610.           return szRet;- M( l9 b6 l3 N6 \7 l3 x0 M
  611.         }
    % |& o( y7 M) S1 Q2 e  {9 X
  612.       }5 F; S8 |+ j# h6 R9 q" D- k% C6 O/ h
  613.       itoken++;
    # C' s3 A6 P' `2 T
  614.     }$ V2 S/ ~5 O/ S% f' |0 }0 b+ ]! C/ w
  615.   }3 x, b" j& B, P9 X/ ^
  616.   return NULL;
    1 Z( _1 s! I+ `  V& M. M, M
  617. }
    4 G' @. G; n: j& m, B

  618. ' s2 V. j1 ]& x$ f
  619. void ProcessProc(long Total,long Current)" v. K; C+ Z' C4 W6 l* B& N
  620. {% f3 s. k9 G" @$ n/ N& ?
  621.         MSG msg;7 \2 R* q) R1 E5 z$ a; T4 O
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);: v! u# F* b3 S3 R( q! V. ?4 a
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    # g4 ^# s7 e! [* q' O4 L8 s
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    3 T+ |/ m3 X1 V+ E9 h" B
  625.         {
    / m: J9 @$ S/ P2 C7 g1 C
  626.                 if(!GetMessage(&msg,NULL,0,0))
    : }7 I2 U. `# ]0 Y
  627.                 {
    ! P: t3 d5 A. U7 K4 r$ a7 P
  628.                         return;4 v# }0 b6 ^2 ?. ~2 g, n- [5 u9 S
  629.                 }2 U, z8 T0 {% K) l  }3 o# I  y  J
  630.                 TranslateMessage(&msg);
    : ~" i' c* k* N: S& ?, ]9 y
  631.                 DispatchMessage(&msg);
    6 x! t  |6 |% V
  632.         }        / P6 D8 I# u' v7 B; Y- m
  633. }; \- P0 _# u! O) Z& U
  634. / F; Q, s, C  j9 n2 l# n
  635. BOOL bFirstChar=TRUE;
    / k5 D9 V9 `# c4 c% G0 {3 e: Q5 d& l

  636. 7 E0 H* C% Z. D& e, Z
  637. BOOL CRevAppApp::OnIdle(LONG lCount)" N1 Q6 m3 a0 z5 g
  638. {
    / |; \4 K! ~% H- r$ }+ \# q
  639.         // TODO: Add your specialized code here and/or call the base class( i: Q/ _% R7 Z2 P  G; Y/ H, F- }
  640.   switch(dwProgramState)
    9 L( D. M* R/ V3 ]. y3 W3 y+ I- M
  641.   {- C- S- @6 K. |% r. s
  642.   case AP_NOTHING:
    9 k# f0 ?( g9 T- O  g+ a
  643.     switch(dwStartUpSteps)3 {" k( S2 @9 J+ F& V. f- z
  644.     {
    - q7 M0 ^/ N! z
  645.     case 1:8 F3 h# o! j& S0 L9 l
  646.       {
    , U& q; c3 s9 w6 n" j% y
  647.         int i;# ?$ r8 p( N; w/ K# @
  648.         CDC *pCDC=dlg->GetDC();1 }3 O. M. |. _1 i, Z- Q# e! {# u
  649.         HDC hdcwnd=pCDC->m_hDC;  j, [( r0 A7 m# f6 |
  650. //        Graphics graphics(hdcwnd);& t  w1 @. _7 U' t  O) @/ o
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    , [9 J$ S# d, e
  652. //        INT iWidth=bitmap.GetWidth();
    0 w0 d& C: I& R, T6 D6 B, t1 ^
  653. //        INT iHeight=bitmap.GetHeight();3 c. [5 v3 w( a" Q- W
  654. //        Color color,colorTemp;# D3 m& O) d5 |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% u) _& H- u7 I* `" \0 ~, J# @
  656. //        {  ?& w! W3 g# x( W' e2 D) `' I9 N) p
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++). b7 `/ h- z: l
  658. //          {
    ; u. u" H; B. ~: C0 Y7 C+ U
  659. //            bitmap.GetPixel(iColumn,iRow,&color);8 u1 ?$ v3 z" q5 g+ j7 F& P; j
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 t! e5 X8 v4 _3 i7 t# v
  661. //              (BYTE)(255*iColumn/iWidth),4 W- s3 s! K5 _9 |$ Y) d& T
  662. //              color.GetRed(),
    ! r/ U! v: z. X6 |" f
  663. //              color.GetGreen(),6 V7 A  h  ~- \3 i1 c
  664. //              color.GetBlue()));0 @4 k9 _  J: K1 O+ k* Q4 D
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    : b) {8 Z0 i, \, r" |
  666. //          }
    5 a, V. S; D' m
  667. //        }" M- r. P' ^9 U1 k
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    & I* O7 u; B5 a5 ?
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! s' e5 N+ N& X
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    0 x6 r: U2 F/ W* K* u  A% U9 K. |
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' R& b8 n3 m; B5 g) X0 X$ p2 }9 y
  672.         for(i=0;i<240;i+=8)
    5 k3 a3 C! T' s* F4 {6 j
  673.         {6 _  z; _! @$ P- C  X: n0 x' F
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      O, h6 p' M+ a  ]
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      ?- H6 z# t% O5 w. w/ e$ S( A
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # d+ n  O( y# J
  677.           Sleep(33);
    $ }, X; F6 I* O! n* O
  678.         }" y1 ~& k; g( K3 h. ^# r1 S
  679.         Sleep(1000);
    ! @) f" ]; n: W/ Z7 B, h, @1 j1 r
  680.         for(i=240;i>0;i-=8)
    ! t, i. ]! \: [
  681.         {3 f, ?3 t' e" K# `
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: P& T5 |% f. k
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 y; H; V( d- y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- l7 ]+ }' u, [2 N9 [  R6 z
  685.           Sleep(33);2 ?6 v8 }% [( ?6 N
  686.         }) V. V5 D( l; `
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    5 g- O2 `* M2 L1 N
  688.         dlg->ReleaseDC(pCDC);# }3 E& k) ^( E6 {% C
  689.         DeleteDC(hdctar);
    " ^0 ~& ]& L0 T
  690.         DeleteDC(hdcsrc);
    $ D: j% G' y* g& p$ I+ f
  691.         DeleteDC(hdcorg);0 E0 `% ^0 h9 L  f. X
  692.       }6 p2 V, K& [9 S- z1 B- e
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    , L: \5 T- a' K' g
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 Z' Z. G( f+ h" s
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    0 Y0 k) T0 r1 d  @' l) R# Q1 r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' P2 L# H' w& l' @
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 }, C( w5 Y; W0 u3 t. o; P
  698.       if(!Dn.Connected()); q, R. N. n: l& L
  699.       {8 W& F' `8 z: n, A4 o5 y
  700.         dwTotalFiles=1;" \4 N& x" r8 D  T, ~
  701.         dwDownLoaded=0;1 B- Z3 Y1 n0 x) _% d
  702.         bSilentStep=TRUE;
    0 g, f" Z0 Z; `% H( v
  703.         bCompressed=FALSE;6 B% W! F: D/ L5 ]
  704.         strExtLocal.Empty();% K; T- K; t& `7 |6 B: o
  705.         strFullName="readme.txt";
    $ Z0 a4 P, _: w
  706.         dwProgramState=AP_CONNECT;
    9 E+ [7 U2 N$ x3 f" X3 x' r
  707.       }
    ) _6 @; U& B; e
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    7 n0 W! B: m3 D" ]
  709.       dwStartUpSteps=2;2 f' F; }0 G4 h! Q
  710.       break;9 k" g9 _3 ^4 j! P
  711.     case 2:
    6 o7 s8 O2 l; O- q' X" l8 ]+ X0 M2 ^
  712.       {
    5 P, H+ l2 F. V) J2 B$ X
  713.         int iEOF;6 c4 P4 k9 z# ^% i% q
  714.         FILE *fp;9 K: j0 D9 p, Z, `
  715.         char szString[512];
    - o. v# Y7 a, p' b
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    8 C+ U) X+ h0 n2 p) P
  717.         if(fp)
    - j0 X/ `" A- y7 |; e! z! P* l
  718.         {
    4 @0 s5 [* ?7 t- e  s4 G! w, a+ B
  719.           do
    # F0 B# S  X7 Z9 r! l
  720.           {% d- I+ I5 F1 l5 {3 B% B6 I! ?) S
  721.             iEOF=fscanf(fp,"%s",szString);& K% ^1 h/ M3 `- C; `/ @) a3 B
  722.             if(strlen(szString))
    6 N8 v; [% a- ]
  723.             {9 H7 f$ c! m; ~' p
  724.               if(bFirstChar)- l! m+ `# ?. V' g! e5 |
  725.               {
    4 Q- y$ r; t& M1 \7 _  W
  726.                 bFirstChar=FALSE;+ o- u1 N$ X" E; O# a( c5 t* O7 O8 w
  727.                 bConnectIsBig5=FALSE;
    + i# S+ B% ^2 p& T2 j% |+ `1 r; G; R
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    # C8 x3 t) f' n) h6 X1 U
  729.               }# X$ R: [2 e8 u/ k: k+ H& j2 r
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    7 p) z; A7 p0 X  t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));& d( _9 r2 Q* s; k* \
  732.               dlg->m_ListText.AddString(szString);
    6 h/ ]) x* L# r, a
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 ]4 G" w% E" r8 M9 n+ }9 R9 [) ]( n
  734.               *szString=0;% x, L$ J4 i, X6 c# ^; [$ t
  735.             }" |3 Z$ _% |  N' b
  736.           } while(iEOF!=EOF);8 ?$ K/ A1 _0 `8 d  C6 B
  737.           fclose(fp);
    : O; {  n; ~5 t* y
  738.           unlink(".\\DownLoad\\readme.txt");
    1 }3 x2 w9 h2 e: `2 Q  X
  739.           dwStartUpSteps=3;
    * {# K, G1 z& o5 }7 W+ [) C- W( d
  740.         }
    " B/ K8 I4 @/ u$ j' e/ @& D: x
  741.       }: O6 I$ c; a/ O
  742.       break;
    8 C7 A; C. M# y" F
  743.     case 3:* o. ~# x) W; g( J6 Y
  744.       if(!Dn.Connected())5 K' @2 u7 C; |7 Q& q" S% a1 z
  745.       {; l, t% ]( v4 N2 l* P
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);. K0 G' g8 J% _  Q9 B* E7 l/ `- _3 D" W
  747.         dwTotalFiles=1;
    & Z7 S$ a+ e/ b# H1 P
  748.         dwDownLoaded=0;
    : r* b5 ], [7 R# X) T. `3 |$ ~9 q
  749.         bSilentStep=TRUE;6 \8 m6 H5 [5 c; C" d' w- d& l
  750.         bCompressed=FALSE;
    6 i8 d' R8 A) z. O9 v5 n  T. D
  751.         strExtLocal.Empty();
    9 m8 G5 I! q- d+ J4 R$ p
  752.         strFullName="checkversion.txt";
    . E1 L$ f* Y# Q( a$ d. H
  753.         dwProgramState=AP_CONNECT;) v" ]/ A; z7 g7 {" V3 h8 ^1 ?
  754.       }
    2 u+ g4 ?) O7 M+ L! Q
  755.       dwStartUpSteps=4;
    5 y8 `$ u) ?, ?) L; [! \! X
  756.       break;
    , _0 \7 k/ S( d" C- a7 A0 r7 ]8 Y
  757.     case 4:
    $ H4 {: d  p, @1 h1 f) u
  758.       {. k, @6 x2 P0 R# s* O, l% Q
  759.         FILE *fp;
    / k* y. e3 |1 t/ K# k
  760.         char szString1[128];
    9 y& k$ ?# {+ h8 I- \. D
  761.         char szString2[128];# E# z8 S) e" S: @8 ?) a( ~
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    : k8 b. h5 h6 Z: T7 |( Y9 Y
  763.         if(fp)/ M2 G) ]- k  x" E3 u7 O' m
  764.         {& n5 R1 y: z* _0 o, z
  765.           fscanf(fp,"%s",szString1);: p2 H8 Z9 J- r9 w
  766.           fclose(fp);! A% O0 G5 a+ h1 G$ Q3 b8 O8 O8 @
  767.           fCheckVersion=atof(szString1);
    5 P5 c& ]$ s8 p  D
  768.           fp=fopen(".\\checkversion.dat","r");
    6 U6 K0 u3 k/ c  W5 f4 I, N
  769.           if(fp)+ m/ e( H' U4 |  u4 Z5 S
  770.           {
    # G6 O; u5 v2 ]1 @3 X
  771.             fscanf(fp,"%s",szString2);
    8 [+ l. w; H1 ?9 s# ?' z8 Y
  772.             fclose(fp);* O5 b4 L1 Y  x) j) B8 @
  773.             if(atof(szString1)!=atof(szString2))
    5 m' d7 o& k* n: F8 k) q
  774.             {
    - A& X4 Z% x1 x8 `- W
  775.               if(!Dn.Connected())) [1 W3 [3 C' `' s# x+ m
  776.               {3 {9 T6 s$ G5 L
  777.                 bFirstUpdate=TRUE;
    0 N# ?+ L0 @1 H. `2 b6 c$ J- O% t
  778.                 dwTotalFiles=1;
    ( `3 h' a8 T" J- P3 C
  779.                 dwDownLoaded=0;0 x6 x) K, ~4 ?+ d1 j0 Y
  780.                 bSilentStep=FALSE;! Y; \* s' V/ R
  781.                 bCompressed=TRUE;0 K4 k5 T. p* _. W1 v
  782.                 strExtLocal=".\\DownLoad\";
    6 [- g5 A0 T- P5 w8 V
  783.                 strFullName="update.txt";
    6 c. Y6 i4 ^0 M  S
  784.                 dwProgramState=AP_CONNECT;/ ]! k. S) |- H. _; P
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 F9 b  n$ N4 j
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: V* }: P% a" z9 W& I
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . K5 `* Z4 C- D+ Y. `( M; L
  788. " m% ]9 [  I9 M" G" s6 E
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- M) Q5 I% o- H3 i) q& |% N  z1 k& D
  790.                 unlink(".\\DownLoad\\checkversion.txt");' s3 g& U, l" S; f. q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)6 A/ X4 g+ J% p; n+ ^' l% W
  792.                 {. F# B8 p, @1 {3 y' T
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");% }6 E2 h' r, Q1 P. D9 l: I' \7 W
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");5 s& F' Q) H" f, v
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");* K+ j# W) |+ i& z5 j) G1 b
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % p2 M7 s  l- U8 r! U

  797. ; U. f7 B6 w, ]3 K" f5 F! Q2 ?
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / u, z9 V2 \. I1 E
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. H6 S' B$ O3 k
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");4 t; {3 T: f+ S8 |: t6 Y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : [$ ]* u4 E" }, c# d
  802.                 }3 a9 O3 \- M- }
  803.                 dwStartUpSteps=5;. I1 s8 u0 r+ ^$ v/ W
  804.               }, ?' C) l% @3 {( u: r6 U
  805.             }8 X- o- j% T7 L. H: J% ?
  806.             else- z. ^  e. v9 _1 f5 l/ Y
  807.             {
    6 n5 U, ^% t- ]8 Q4 k6 L% G
  808.               unlink(".\\DownLoad\\checkversion.txt");
    - I7 _# [2 [8 F" R$ B
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! u, `* L: e7 G2 G
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");) C1 f$ g6 x' p& c: A
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");% D5 `: n" a' N, C0 u# F

  812. 4 P9 d. M/ v" U2 S1 F! L
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 Z" L4 z# l: Y. V/ b* C4 [9 b
  814.               dwStartUpSteps=99;( T# l2 B2 H$ i) R: {# {9 i4 e
  815.               bFinishUpdated=TRUE;
    1 m+ k0 Y4 n1 q4 A' A
  816.               bCanUpdate=TRUE;" o: y1 E! m+ F7 R5 c
  817.             }( `" C; O$ J2 y8 E0 c- r
  818.           }
    / C' f- p+ ]1 y; x+ i! l
  819.           else5 r; ^7 \; k' R3 t% Z; n: i
  820.           {* Q  N9 e$ s( M3 R7 z3 S- _
  821.             if(!Dn.Connected())
    3 a; K  |2 L, I1 I
  822.             {
    # m1 L( J, Q" S  p. r5 s5 J' B% E6 r
  823.               bFirstUpdate=TRUE;7 \) U+ v" R7 f
  824.               dwTotalFiles=1;7 J* ?+ L$ ?% }
  825.               dwDownLoaded=0;
    1 }- a+ ^& ~% j) t' F* j
  826.               bSilentStep=FALSE;
    " B$ ^, Y5 ~5 @2 w+ |3 z, l
  827.               bCompressed=TRUE;. t2 M: R, h$ i/ J
  828.               strExtLocal=".\\DownLoad\";
    % I% o8 j2 U2 z- V' ?0 Q$ ^, i
  829.               strFullName="update.txt";0 m! l& X: F6 h6 m" |
  830.               dwProgramState=AP_CONNECT;
    6 R! T/ a9 q( f- K2 j4 p& G
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, D3 w* `& t. L* d, j
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 t2 E# q3 I" k" v4 r
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");* t( x4 j0 c0 ^$ S# H
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : j& W/ @8 h2 o6 @* i6 j
  835.               unlink(".\\DownLoad\\checkversion.txt");
    & j6 R  {! k" P$ u; b
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    " {$ ]2 ]: |; D
  837.               {. W# {; T$ {# G
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ( X( f" h) p( p  A* H
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    : J0 @6 ^/ G7 t  F* ?
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    , R- Z6 Q8 X& J# v7 {- V) n9 b
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* O. v9 {2 {( p- S3 c% ]( W
  842.                
    3 C2 \0 R% W$ R1 X/ ?9 M5 M
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' N, b2 c; K7 C' S1 ~9 ^
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ j. x3 I5 \5 h
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");( e) E. a" ]2 q4 L7 ~4 S" R9 V+ W
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # y! s# @/ I* {
  847.               }
    / E, P! G& e, n! ^, _( m; ~* b
  848.               dwStartUpSteps=5;! e: {, \3 d5 ~: P2 j3 D! J4 x
  849.             }
    % B9 Y/ k5 H5 Y+ I( c1 {# i
  850.           }2 ?* f" d: `' m: ~% R& F# \" ^
  851.         }% M+ L& c2 `( }: X5 M
  852.         else
    / _1 U' v1 M5 A4 ^' M- b
  853.         {7 ^% V4 Q5 w6 d. N
  854.           dwStartUpSteps=3;
    " V, v: @. |: U1 x) B
  855.         }
    # @4 g. L; L. X  P; q$ x
  856.       }
    # w9 u% q2 y6 ^& V, {1 m! _  P
  857.       break;" U" [2 n! D7 @' r
  858.     case 5:
    ( T. U! \3 O9 F2 C9 T3 ~2 \
  859.       {
    & o' X& z: G; d& i+ n% I
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)( N( {5 ]0 R4 B- J: b
  861.         {
    * g2 e! W. r% b+ ?: U; q! c% R3 A
  862.           int opt_overwrite=1;& F$ y+ D5 x1 I/ @- L- V
  863.           int opt_do_extract_withoutpath=0;
    " u, s2 W) D$ V7 E
  864.           unzFile uf=NULL;" V# S! ?( n4 }8 D  C% H! {9 r$ J

  865. $ b6 U, {$ b4 L, t
  866.           uf=unzOpen("Wsa.zip");& ?( O! t/ {& `# N2 [, b
  867.           if(uf)1 b* V* L# C% k5 P0 B
  868.           {
    : ?9 {5 d4 z  R! A8 b, K$ [! L
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);# I" L( n( ^  t
  870.             unzClose(uf);
    % J. [  n+ q* B- g
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* ]9 `9 G2 v* @! p4 m
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");  i* ]# R2 l( D4 r1 n' A1 u0 C
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    - J" x  S2 L3 s. a6 y$ Y. \& }- A
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 u  N$ ?: r) m+ x
  875.           }" A' v9 V+ Z; u" h) A" z! t
  876.           DeleteFile("Wsa.zip" );2 Z3 Z" c& X. a, ?- M1 Z  h
  877.         }6 F8 p5 q! o) V! T2 K1 ?

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

+ x1 F6 T+ P4 k2 x

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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