CSUpdate.exe源代码

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

4 D/ _; d, \8 ~7 J; E9 q; [* y
  1. / RevApp.cpp : Defines the class behaviors for the application.
    9 p6 w% h. W, O- ]. {
  2. //! G8 A/ h" a6 X! Q8 [
  3. - \* {: q# ~0 d& [6 d% ~
  4. #include "stdafx.h"( ]- ~  R" {  V( i6 R
  5. + m/ ?6 ^4 H( P" E% C3 F. D) j
  6. //#define UNICODE( J. X+ ^4 `( {) J  A5 R; |) X
  7. //#include <gdiplus.h>
    - u6 Y# b* c7 c% q% g. T: `
  8. //using namespace Gdiplus;
    # R4 e2 J+ q7 z7 J

  9. 4 C1 b& ~: n5 ?; C, Y
  10. #include "RevApp.h") H4 s3 m7 R. L; r0 P) x
  11. #include "RevAppDlg.h"
    5 l& q# t* m/ N
  12. $ A' M) {8 V2 |2 a
  13. #pragma warning(disable:4786)1 l4 h% p$ y5 S) k0 S2 ~
  14. #include <map>
    . ?" F8 k; e/ S" M
  15. #include <list>6 c8 N+ L# s" u/ q; Q4 W
  16. #include <direct.h>9 W" m  h4 M7 T: _* w

  17. 0 t, \( c/ j) A# H* q' z8 q
  18. #ifdef _DEBUG
    # F2 W8 V) {) k3 R: z' H
  19. #define new DEBUG_NEW
    " U# U: u8 W2 R
  20. #undef THIS_FILE; ]7 ~& r2 m0 I: l* @3 k$ n
  21. static char THIS_FILE[] = __FILE__;
    8 j  }& r# M, q" C& ~) p; A" s2 r
  22. #endif1 [! \; r# Y+ c$ Z
  23. #include "SkinResDef.h"0 }8 y0 c' P& Z# e+ O* Q
  24. #include "ChangeBG.h"$ T* G" i  f, n. e0 ]
  25. #include "AFXINET.H"& X( l$ R6 s- b+ [; m

  26. & G  Y* O! A& {& ]  f3 y
  27. #define TRADITIONAL_CHINESE 0+ f- b8 R" l2 ^. `7 [, R" {
  28. #define SIMPLIFY_CHINESE 1
    ( V* R% a* X7 `# O6 c
  29. #define ENGLISH 2( e8 v. p  f9 J
  30. int m_iLanguage = ENGLISH;3 w9 w% r& D: D1 s0 n) X5 y! y
  31. /////////////////////////////////////////////////////////////////////////////
    , ^# n% z: {5 b/ V3 l
  32. // CRevAppApp* T4 E0 `7 e" k+ w) f
  33. % W1 W' e8 |, n/ H5 E2 z* \
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    % a1 J: \; W# f3 L1 ]  Z
  35.         //{{AFX_MSG_MAP(CRevAppApp)2 p0 y/ B2 M3 `: H% T. O+ G
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.( J  F# u/ v7 }* f
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    & `5 \1 g. J' g& Z8 u" D
  38.         //}}AFX_MSG
    2 S, C$ z" I" ]! h" t# I5 D
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    0 W8 @7 J5 B+ z, `* @/ r
  40. END_MESSAGE_MAP(). B. V) |5 J: z; K! @9 U
  41. 3 e/ h( i2 d0 J* u% I6 u
  42. /////////////////////////////////////////////////////////////////////////////" _6 h" X( S" h% A/ K* b
  43. // CRevAppApp construction
    4 g7 Y4 [: H9 r9 O1 O% j( }% L
  44. / l2 l+ p4 S) v( H
  45. CRevAppApp::CRevAppApp()7 L$ M( C9 @2 _
  46. {$ c( J1 c% V/ z$ H4 @+ x
  47.         // TODO: add construction code here,; E- n8 Z5 J8 ^+ Z! Z
  48.         // Place all significant initialization in InitInstance/ Y9 D9 ]- b: _; k, P
  49.   bDisplayIsBig5=FALSE;
    $ V' ^2 j. b! d; l7 W
  50.   bRestartUpdater=FALSE;3 F3 Q+ y* _  I; h( I' K
  51.   bFinishUpdated=FALSE;% B7 v8 b+ ~' r3 y" V4 X( G8 ?
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    9 y( S8 m& N( h; Q, B8 k; M" g( `
  53.   InitChangeDataBig52GBKS();. ^5 h2 a1 V$ g% e: z
  54.   InitChangeDataGBKS2Big5();
    $ a% f& V$ I- ^& o
  55.         //
    % r" M" l; D  v# ^: S. y; S- k! T! E
  56.         bClickRunExe = FALSE;
    , `- }: `9 V$ Z
  57.         //$ l$ Q- a: X; {5 k9 T
  58. }* j+ `3 J, D2 q  d! p6 `

  59. ' z$ F. O( w! F  U2 m0 \
  60. CRevAppApp::~CRevAppApp()
    - Z: P  S# x+ ^- c
  61. {# k. {4 R- Q  _( r9 w+ y( U+ Q, }: L
  62.         // TODO: add construction code here,% W& z/ s" h; s6 q: B" K
  63.         // Place all significant initialization in InitInstance0 h/ T( B  J: `0 M. e0 P
  64.   EndChangeData();0 I8 O) G. K9 G+ F! R
  65. }
    9 {& d8 d5 [, t- f$ `9 y9 v$ z. r
  66. 8 r) ~! n) j6 I1 H) @# b  `
  67. /////////////////////////////////////////////////////////////////////////////
    ' x& D+ t. C+ m9 ^
  68. // The one and only CRevAppApp object
    4 R/ r% s0 I+ y
  69. ' I, A/ W/ k; J* X
  70. CRevAppApp theApp;; \! P  t" c3 ~! [& u% o2 h: K

  71. 1 t' W' N( m9 ~! T! r9 ~% `& A
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)& S0 y5 P* t* [- y0 s. i
  73. {. Q$ [8 C' n; K
  74.   int iEOF=0;( _6 l' _# @9 B* M& t6 {' v6 q& s
  75.   char szTempName[MAX_PATH];
    ; l+ {3 e  e( j" I+ h3 F
  76.   *szFileName=0;
    5 A6 u: Q( T3 e$ d( R% w
  77.   iEOF=fscanf(fp,"%s",szTempName);) r% U  z; B. F6 b- Q+ L
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('). G  C9 J! j& P( n
  79.   {
    1 ~+ f0 K$ }$ c$ p
  80.     strcpy(szFileName,&szTempName[1]);
    & l& q2 o+ M: `/ I  i0 o  A3 F
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)+ D" m0 G0 G! F* p) `' o
  82.     {" b# L. B3 u+ O. X1 D
  83.       iEOF=fscanf(fp,"%s",szTempName);
    7 L5 h9 N1 a8 U) a) K! X
  84.       strcat(szFileName," ");0 B( S  c7 O* d/ }4 H3 _/ J- v
  85.       strcat(szFileName,szTempName);
    * d) \- l% O$ A
  86.     }9 D7 y) ^: q  X+ W  n. U  g8 O
  87.     if(strlen(szFileName)>=1)
    4 G* l4 l% y* {) R2 a4 t8 N7 F# r1 Y
  88.     {! Y: Y* _7 U& \+ l( i
  89.       szFileName[strlen(szFileName)-1]=0;% ~+ Y* ]' G; n. ^, K- V# R- b
  90.     }9 v# C$ O7 A- ?$ T9 G! ~
  91.   }
    % w3 }5 `5 \0 u' P" d
  92.   return szFileName;3 I& v) ]$ f7 j( C3 [
  93. }
    , m# l. v4 ^( z7 U8 A$ k5 p* y3 ]
  94. 2 K- {8 |. G: g" |
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    : o; s- A8 `& N* y( w4 Z
  96. {& L& k; U" X% b  C. k* R' [6 r
  97.   FILE *fp;8 J6 Z( H9 p, D2 t8 }+ F5 g
  98.   char *key=NULL;" Y2 t- `7 u1 U9 ~
  99.   char version[MAX_PATH];
    : D4 d' A5 L) [6 N0 d- s& X
  100.   LPUPDATEFILE file,olds;
    ; k2 y2 [/ ?- X0 B1 F- S2 y% T
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    " i( T: P! R' U4 _$ I3 C  Z; ?

  102. 2 U! J* E1 r, ^, ^8 y- L
  103.   UpdateList.clear();+ h* w6 D- i% m! ]: L
  104.   UpdateFile.clear();+ h5 G! ^7 J; D9 e# `
  105.   if(GetFileAttributes(filename)==-1) return false;
    & C8 O1 a7 c  w. T( J9 p! Y' ^
  106.   if(!(fp=fopen(filename,"r"))) return false;# j2 W2 P- t2 P- N1 c
  107.   fscanf(fp,"%s",version);/ f) b4 ~9 a- i' n
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }: g3 O3 G& j3 E0 e" y- x6 I* _" R
  109.   while(fscanf(fp,"%s",version)!=EOF)
    % D8 i2 ^8 N. G) {" Y  [% E
  110.   {9 n1 t  H- i9 Y- Y. C  s6 f
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & l$ s( w  f% }
  112.     fscanf(fp,"%s",file->path);
    ! Y; }$ L7 B/ o! v0 r
  113.     ReadFileNames(fp,file->file);; m: d/ l/ r! h# @
  114.     strcpy(file->full,".");
    8 k& P3 u& J  m% k4 r6 ?) t* s8 S
  115.     strcat(file->full,file->path);
    7 S. |- |0 z7 j, R5 j& X) J+ q$ W2 g
  116.     strcat(file->full,file->file);
    6 Z( @' m+ P; E6 Z9 O
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    # H: |0 u. i8 `9 x% s
  118.     {  C$ N9 Y4 S7 O
  119.       file->vers=(float)atof(version);
    + l+ y3 z, c9 M/ \, T" M
  120.       UpdateList.push_back(file->full);
    + C$ s0 I: u! y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 p( \, d1 |$ @3 u# h
  122.     }) [$ d: L7 m/ Y" b3 \2 T; D- \, L9 n
  123.     else
    9 q) _  Y0 g2 |) L2 @" W! Q! e
  124.     {0 b2 n! c+ R8 e2 w/ W0 g
  125.       olds=(*p).second;' x6 K4 \/ w* U4 u# P! f
  126.       if(olds->vers<(float)atof(version))
    . o% p7 g& T9 f! X( P. w
  127.       {
    * a+ G- \0 l7 |; j/ T8 L& u  f
  128.         olds->vers=(float)atof(version);
    & g& C" ~+ S6 s) U
  129.       }( a1 x/ {4 O/ w8 U; {+ o
  130.       free(file);7 ^. x' n+ t9 r" U
  131.     }. t. U7 \8 F- ^5 f
  132.   }: u! b! O, T+ M  w
  133.   fclose(fp);
    7 ]& J; `) p6 H0 g$ k6 E( W
  134.   return true;3 H6 L4 @+ D' m9 `' R: S
  135. }& r4 t% d" J8 S: t  Y
  136. ' O: @9 F+ m6 @2 m
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath), p! _) m3 t$ s6 E
  138. {
    : {; n2 u, W- J5 p
  139.   TCHAR  szFull[MAX_PATH];
    : V5 n: {& @# w( g5 I" j6 C
  140.   TCHAR *token,*inter;' C  Z* l# T  L: A
  141.   *szPath=0;
    # n- t" T, E% t2 D2 w9 o9 ?: A
  142.   strcpy(szFull,szFullPath);9 J' x) I: m5 [# Y: J
  143.   token=strtok(szFull,"\\/");5 L$ @+ u. y% w0 b9 g
  144.   inter=token;0 @" V" u+ f/ D3 @
  145.   while(token=strtok(NULL,"\\/"))
    5 Y  n8 E* z- |- o; j2 H5 \. B
  146.   {% m2 V/ K% P7 D5 N- c
  147.     strcat(szPath,inter);
    / L9 m. t6 A% w; @
  148.     strcat(szPath,"\");
    / y0 H% P! u0 v6 c5 V! U3 V
  149.     inter=token;9 d) H5 [+ C" _  x
  150.   }/ }) }) n/ W+ g# T
  151.   return strlen(szPath);
    0 \# a$ T9 j5 v) a- I* S/ w
  152. }
    ; j# l: D+ ?- ^2 R5 ]& T; U
  153. 9 u" [& P" b* }8 S: M! B
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)( I7 Q2 X: l% u+ z. ?
  155. {
    # ~3 `0 L& H, G# U8 Q2 T! J
  156.   DWORD attrib=GetFileAttributes(Target);
    * q+ k' a# W# h9 x
  157.   if(attrib!=-1)8 ]4 B! b0 t$ z9 [8 M* m6 V
  158.   {- I$ X& M1 {5 d; t) V; D) ^
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)), T- P2 F/ \: n* q, O: s, }% W+ ]
  160.     {
    . O5 x  n) V7 C2 ?
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ; e: ~2 A2 h# ^& W! s+ h2 T
  162.       SetFileAttributes(Target,attrib);
    8 w% b- l6 {# v( b" {0 i0 w
  163.     }7 F, O+ s, f* |- b. j( E7 Z
  164.   }
    5 s4 A0 b( W) X; L& k$ K- b8 X
  165.   CopyFile(Source,Target,Erase);2 }8 H: _' Z" k: d  x
  166. }1 K' L7 e# q5 U6 Y2 w% p: o0 u% d
  167. " }0 H& G" B7 K* O5 ]* R
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)6 ?1 n1 i) y- E: g, G/ r' R
  169. {# J+ w, J1 H; l
  170.      FILE *fp;4 g& ^  `* f4 t
  171.      char  szBuffer[8192];
    ' e* r: x3 P2 q2 R- I5 s
  172.   va_list  argptr;' S. `+ W" r0 s2 }/ u, z+ h

  173. ! Z6 w4 F' m3 h6 r- }- i
  174.         va_start(argptr,message);# I; m: o& ^( A3 k! i1 K) K
  175.         vsprintf(szBuffer,message,argptr);3 {3 k7 s8 W! i# K$ i
  176.         va_end(argptr);
    $ z! l7 F# c) ^5 a, F
  177.   fp=fopen(FileName,"a");
    9 R! r; I! B; c* w6 s. d& z6 Q
  178.   if(fp); Y" o8 {" J/ ?' E4 [2 v
  179.   {6 `  r% l) r; z' C
  180.     fprintf(fp,szBuffer);9 `' Q, |; ^  M" ~/ p& c6 q/ R, f
  181.     fclose(fp);
    # ], P  P9 b9 {$ A
  182.           _flushall();
    . C2 I5 X. b7 H# M
  183.   }
    9 `, j, R  W1 h! R. ?: n2 e
  184. }& i, N/ {5 |: ^4 Y' I# ?

  185. - ?( Y# \  U% q0 L3 l' b! Y0 f9 J
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 ~8 z$ `" K4 X+ p. V; ]$ T
  187. {. J& X$ D) n6 u$ ~, [3 n
  188.      FILE *fp;( L+ P$ E6 H' y1 d) G. V
  189.     DWORD  attrib;
    & U, ^4 n2 L" T; [/ c' L
  190.   attrib=GetFileAttributes(FileName);+ o) F6 z# y; |& ^
  191.   if(attrib!=-1)
    & [2 I# \* V8 ?2 ^$ r! n' t
  192.   {7 |9 m& p* S( t) J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: N/ K! K* D: U. r0 {. d
  194.     if(!SetFileAttributes(FileName,attrib))
    7 h+ M; F9 @: s; M9 c: F/ N. A
  195.     {' |( H  s* W1 c1 \% ~* y
  196.       return FALSE;% D4 \  i( m0 ?; t2 ~: L5 G
  197.     }% T# A  d0 t5 k) l! P& c9 l
  198.   }
    ) Y0 y, x  t! v; Z: h! u1 X, b
  199.   fp=fopen(FileName,"wb");0 {9 X; B) V: L3 v, Q
  200.   if(fp)
    ( H; `! `# h4 h! ?; F
  201.   {$ M/ f- Z( k" w5 e
  202.     fclose(fp);: W, r. ^1 ?, g
  203.   }
    & k# h- }9 r5 S
  204.   return TRUE;, }" j; `' ]) f4 C' c
  205. }
    $ S: P, H  z( i, ~
  206. 7 S  A* _' o! T
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    $ P. F( r* e+ H
  208. {
    * [8 B/ X* P" m1 l% @
  209.   char filename[MAX_PATH];  @) u' }" O# i4 _' U8 ], b
  210.   LPUPDATEFILE file,olds;
    9 S  _/ J- B: Z7 c# C( ]5 Z6 D
  211.   std::map<int,CString>::iterator i;) ]5 |" i! n8 i% F4 S; K
  212.   std::map<CString,LPUPDATEFILE>::iterator p;2 b3 Q4 {8 a& }  D3 _  g
  213.   std::list<CString>::iterator l;
    ' m5 o6 b. c1 ?4 l
  214. & ]! m/ f$ ~/ ~4 h) }; n5 p
  215.   if(bFirstUpdate)7 `! O( I4 P/ U( I) r! a
  216.   {5 A: X8 N+ H: @3 U
  217.     dwCurrFile=0;
    ; N6 V5 P! z/ t! E
  218.     bFirstUpdate=FALSE;
    * [0 F& W; }( c- e9 C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* T9 M8 j" v5 d; `' W* b
  220.     {
    9 ~" F  {: E+ K8 k9 q% u* Q8 M
  221.       dwTotalFiles=UpdateLocal.size();5 E  J1 R2 d2 e/ ^- g& q: U, x; D
  222.       dwDownLoaded=0;+ q0 q* O( y) F" c8 N
  223.       bSilentStep=FALSE;
    1 V' P1 I7 E7 Q+ x0 N- t0 f
  224.       bCompressed=TRUE;9 `* Z  n( G. g1 r
  225.       strExtLocal.Empty();
    * R- P; _3 ~5 b1 a% S" G+ l$ T
  226.       strFullName=(*i).second;" [' q6 Z  o9 \; }, {
  227.       dwProgramState=AP_CONNECT;
    ; f& L8 }4 ^9 X$ ~2 k  H
  228.       return TRUE;
    6 }3 C0 t5 j/ G* l+ |$ O
  229.     }* f) z% q! q( m/ U- ^
  230.   }
    ; R" V: a  [# e; b
  231.   else if(bRestartUpdater==FALSE)
    " i0 }! J7 {9 C% o
  232.   {
    6 Q- n& B6 N& }( x+ U
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())# \: r, J4 a( h3 U! D
  234.     {9 P* G0 |( {" ?' a6 l$ N
  235.       file=(*p).second;$ n1 a7 w/ V2 G: ^% R9 r0 q
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())8 t) d8 z7 O% M% e3 g
  237.       {
    1 P1 T- ^$ z' J: N/ ~# H
  238.         olds=(*p).second;' ~; R7 G" s! w+ @7 s; G
  239.         olds->vers=file->vers;
    4 x' ^4 L: \8 _, @! D; v7 S
  240.       }
    , O8 B9 Z, q3 d4 z7 Q. R" `1 W
  241.       else* \& G  t, d5 p+ z1 k# T
  242.       {& p; i0 j1 Z3 L1 W7 ~* Y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. g# x' f: E! m/ d) i* z: _# j, C
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ! L' V, d, x) l2 y* J* W/ J2 O
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 _9 N* j  ~9 d$ D* ^$ `  b
  246.       }
      N9 j1 z; r: H
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");4 v/ G" K4 s, T+ n( }
  248.       sprintf(filename,"(%s)",file->file);
    ; q( z! q. J* c5 }
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' ~( `' S+ j0 ?( I+ k
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    1 }  ^' t7 [2 B# F8 T
  251.     }9 y0 L. C3 R8 D
  252.     dwCurrFile++;
    . K5 O# z/ r: T  P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  ?$ u, C" _: C9 o1 B, O, P
  254.     {/ Y4 A+ O* F, }& P# o: k
  255.       bSilentStep=FALSE;+ _* ^( {& y0 o$ h
  256.       bCompressed=TRUE;
    ) A4 d4 _+ N  C
  257.       strExtLocal.Empty();! C5 G* n5 _" `# T& s4 a; \( D
  258.       strFullName=(*i).second;
    ) i0 C% M% Y3 l) h
  259.       dwProgramState=AP_CONNECT;+ ^& e* d0 N5 U) O
  260.       return TRUE;
    # @$ T# ?5 l# s
  261.     }
    1 k! z9 b; Z. e. K
  262.     if(!bRestartUpdater)$ w8 n* B8 M* D# W- j
  263.     {
    4 c4 t( f1 N6 W' R
  264.       int iCurrSize,iFileSize;0 t" b. W! C/ X, z7 {
  265.       iCurrSize=0;
    1 f. c) Y  N  r/ T0 u
  266.       iFileSize=UpdateList2.size();
    ' _4 B& S& b) E
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");6 s2 {1 _# L9 B7 R: ?
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");3 K2 J: h* @' d
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");6 E2 p' ]% X& Y# ~: T, ^# e
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 v2 X: \$ R+ D0 r
  271.       Fclearf(".\\update.dat");
    # e: i+ e; N4 l
  272.       Fprintf(".\\update.dat","Bloodyf\n");6 H$ h" z% L! _$ o& c+ W" {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 @9 \/ i0 U! p! v- U0 @
  274.       {4 F$ \: o2 f$ K( g0 i
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
      d* G; `# p" G0 R
  276.         {
    9 C! Z: t" S1 N3 J, T7 W# Y
  277.           file=(*p).second;
    ' A& K$ D( X" O# {/ N
  278.           sprintf(filename,"(%s)",file->file);
    ! _- L+ A, I4 D" n
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. J/ _, A3 C  D, @- i4 X& G3 G: f
  280.           iCurrSize++;; w1 C- r- X$ l! \. q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ' A4 e) H$ U( U6 p
  282.         }' y! a7 w1 Y: S$ V9 L
  283.       }
    ! h+ W/ P3 U3 [% m
  284.       unlink(".\\update.txt");
    - a4 j3 x8 k1 j* s' g
  285.       unlink(".\\update.tmp");
    ' J- L7 y; v# s  B5 q5 n
  286.       Fclearf(".\\checkversion.dat");
    1 C  o4 ]+ i: w
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);6 Y& s( m& A! P1 O# P
  288.       if(UpdateLocal.size())/ G& g& P4 M( w$ @3 {1 y, m
  289.       {* k8 [0 U+ Q0 A7 Q
  290.         UpdateLocal.clear();
    ) x# @& c3 M& I. q) E
  291.       }, |. c9 \( p" ^- i4 ]: R
  292.       if(UpdateFile3.size()): t* t- D! d, u/ i) o
  293.       {. u1 J/ r7 U( t4 B$ Z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 B8 z0 j1 S% e4 S; t3 ]1 [' W2 u! F
  295.         {
    , r8 S6 m" k  d1 v1 _
  296.           file=(*p).second;4 s8 k2 e5 J- B" N* O
  297.           free(file);
    , W6 `' P; Q9 \* Y1 F# [  ~+ }* Q
  298.         }
    8 f1 Y2 c* F* Q. d, v! T& g: M, S
  299.         UpdateFile3.clear();
    % i' b1 ?9 y) a
  300.         UpdateList3.clear();9 o: _0 U, }. E/ r' h8 h
  301.       }
    - V+ W4 G9 U5 t. q& D% G1 C) R
  302.       if(UpdateFile2.size())
    ! o) `( p7 r3 m" |6 r; z
  303.       {
    7 F2 d4 m- p% `& Y+ W, t8 Y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      j9 N3 x: h! Z- l7 P! w# h, M
  305.         {1 q; R  E1 x$ @+ E; y
  306.           file=(*p).second;
    7 o  o" q* G$ M: }6 C7 T5 [
  307.           free(file);$ t( J, O0 ^: S( o: ^' ~2 f
  308.         }" d8 i2 `$ }; J  i: X, w
  309.         UpdateFile2.clear();
    + W1 ]4 V% o/ q% K4 j4 h
  310.         UpdateList2.clear();4 |7 \/ G6 g) o8 t( b
  311.       }, s5 }$ R. T! H8 l
  312.       if(UpdateFile1.size())
    6 H# ]5 M2 a9 g: p/ u" a" r
  313.       {
    # `- D% L: h% E* V. p# N" Q3 A
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      C' {/ ~0 x, s! v+ O# N
  315.         {
    : h2 n1 T: t0 Z% V! V
  316.           file=(*p).second;
      c& ?# B% h5 C1 m
  317.           free(file);0 F4 t& o! ~. I1 A3 x
  318.         }. b1 ~/ Z3 n- m9 J3 I
  319.         UpdateFile1.clear();$ |9 u4 j0 q0 k' A
  320.         UpdateList1.clear();6 Y- [" s' ]/ L
  321.       }
    0 ^0 v& ~/ X" {# Y  M) D
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));; S* g0 u2 s# U/ u/ {: c
  323.     }
    * i2 U: k1 |4 B* M* g( s
  324.   }
    * q; v! Q3 H' ?' M# t! |6 x/ r$ h
  325.   return FALSE;4 Y  u9 y3 X; ]5 E
  326. }
    % k1 F$ }* F1 I! f& F
  327. 2 M" h2 L( W, D
  328. void CRevAppApp::ClearAll(void): F7 }" ~* \0 A1 t
  329. {
    7 u* H/ \  V6 `% T$ q7 \: }
  330.   LPUPDATEFILE file;) Y0 J2 S7 B7 |/ x4 t" l" z- a
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    # P, F. _" t( D& r( z) g+ G3 D; L  t

  332. ; d. G) `8 Y2 n- C
  333.   if(UpdateLocal.size())
    8 L  h: Z3 @% H. y; R) W, O) C
  334.   {
    / B1 V4 V0 ^3 T
  335.     UpdateLocal.clear();
    ; E2 Z& A) o$ n) B# H
  336.   }. t6 l9 b5 g/ p5 b
  337.   if(UpdateFile3.size())3 M. D1 j6 e; m, V" Q2 n
  338.   {7 q  \7 _9 `# y/ f5 I% x3 K" k
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 L6 K' r, S5 O- e3 l
  340.     {
    1 j  [3 k( S1 r% ]
  341.       file=(*p).second;
    4 A7 v1 j1 A' x$ _$ t0 |
  342.       free(file);- l* V" I0 ?4 R2 L
  343.     }& k( m+ e3 ~: n2 N4 A" f
  344.     UpdateFile3.clear();8 }% s" W3 u, C
  345.     UpdateList3.clear();
    ( M8 L! D9 _3 A5 w% o- |5 [& @
  346.   }
    - ^/ V9 o5 T* e6 b2 ~8 [9 P
  347.   if(UpdateFile2.size())
    ! _6 N& t/ G% h6 p( V$ B
  348.   {* {) z8 M4 {8 R# |% M( R0 u  {
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! m$ h6 }6 |6 c
  350.     {6 f$ X! s+ p2 b% e& w4 A# @
  351.       file=(*p).second;
    3 w: l  t) E3 R, v
  352.       free(file);
    / s% `0 J4 q7 u! |# P# B! F- x
  353.     }
    # ?, a1 H! D7 r& x
  354.     UpdateFile2.clear();- K) n7 R1 M* E+ v
  355.     UpdateList2.clear();
    ( U$ r, c8 H; ^; T
  356.   }2 K& \$ m0 [+ C" }7 i! d2 r- i
  357.   if(UpdateFile1.size())' H# \$ S1 z% O3 b1 E5 R0 ?
  358.   {0 s" `. \( ^8 }& N- L6 o! t2 y! a9 e
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 n; A( j' }* D
  360.     {& `) e. c% b4 K
  361.       file=(*p).second;% [; @4 v: ]( R; X$ C  f
  362.       free(file);
    / |3 N8 A% k# J0 H
  363.     }
    3 @/ |( z# ?3 P4 k+ d! B
  364.     UpdateFile1.clear();+ v4 M. i% m" \) F7 I0 Q
  365.     UpdateList1.clear();% S/ N$ O) T  |, L) A3 g
  366.   }$ J" C- w& Q% s. w; E; e6 U
  367. }  - m) p* Z0 i* i% d! }
  368.   
    ( W  G; k: H# G$ k3 X
  369. BOOL CRevAppApp::CheckLocalVersion(void)( J/ U6 G( E2 O0 n3 G' e
  370. {3 l- L- U2 c7 Y" n* v) n0 d
  371.   int c;* G' [4 ], J4 \/ x' g
  372.   LPUPDATEFILE file1,file2;
    - l- i/ ^4 ?  O+ d" U
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;/ n; u. O# p' [, ?: l7 B) M- G
  374.   std::list<CString>::iterator l;) ]7 q7 m& m$ |1 O  u

  375. # X$ o" s: R7 v' \( ^. z, W  i
  376.   UpdateLocal.clear();
    - v. K( Y# c9 C# ~6 D
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      o1 b3 ^. V( `6 P# t" y; A* A. K
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    - `$ M+ h, o, W- u: V
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);3 t: X. M4 c/ I3 t. V' c
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ( ^& T( f* v' h( X
  381.   if(UpdateFile3.size())( h6 f/ C5 m" g8 P
  382.   {
    * e$ y: u2 j( p' j! E
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    4 D& P  `/ B4 j# N6 v
  384.     {
    - f0 e. B- f) n
  385.       file2=(LPUPDATEFILE)(*i).second;# r3 m. M# {, i# L9 \- \' i
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  e) {2 A; v; R; H
  387.       {5 c4 }6 d! F, s9 ~% |& L
  388.         file1=(LPUPDATEFILE)(*p).second;
    8 z9 |6 ^) {1 l
  389.         file1->vers=file2->vers;
    1 B1 [0 `9 t: `, T
  390.       }
    3 u  i& r* m. B# m. C$ T: t3 `
  391.       else( L6 d% k# V! ^3 l
  392.       {
    ( G2 c4 `! V0 V4 {& |1 H3 _8 j
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  ?- N2 f8 p9 j! w
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ! ]3 G/ k& P- O/ Z6 q5 {
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));, i, I0 d  x2 t& ~$ O5 \6 Z$ E0 y
  396.       }
    / r% z4 ^. ?! g. ^- G
  397.     }' v" h( T1 P" N  k$ z5 [
  398.   }
      Y; L$ c, f: @: q5 M9 n# \' R4 V
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 R( a7 J, k4 u6 x3 E
  400.   {
    ' P/ G) }) l0 Y, L; D( x2 h. }
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()): e1 c! V2 d: |3 W+ }3 G/ T4 {! G+ d
  402.     {! Q1 a: u  ?3 p/ M9 N8 k
  403.       file2=(LPUPDATEFILE)(*i).second;& p+ K3 G3 y* s, ~
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - a$ y5 T# Z8 |, g9 L
  405.       {
    4 j7 |% X* V0 A' x/ [4 H0 M' ~9 B% @
  406.         file1=(LPUPDATEFILE)(*p).second;& D6 W. w% i% X- _. ]2 E3 {" c! b
  407.         if(file1->vers!=file2->vers)
    & s5 N% ^6 ]2 {/ g' h
  408.         {" a8 o' C1 F1 B. V& g& k8 Z
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - s: r# f5 J& K  Q0 H
  410.           c++;
    2 a4 _' g3 T( q' s7 s
  411.         }
    & d, |0 ?( J, g# d+ ]3 Y3 q* `; m
  412.       }
    ; n5 J' o0 x4 C0 t5 A% D
  413.       else
    0 B. I6 r  N9 W: L
  414.       {
    , C, e2 [* r2 ], X
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 W  z+ A: S1 O
  416.         c++;5 q2 I5 ~1 }$ Z4 {# z
  417.       }: E, V6 d! N: J8 o
  418.     }
    9 i2 y! z* h% w2 m
  419.   }% e! E: X$ s$ [. R- x  H
  420.   unlink(".\\DownLoad\\update.txt");
    2 U1 ~/ W6 {" W- a# I
  421.   if(UpdateLocal.size()) return TRUE;  z: v6 ~: @& g, w7 A4 n
  422.   else                   return FALSE;& n0 |  e& v( S9 u" p
  423. }. Y& I7 s# q( r3 o

  424. + @3 A* R. w( C/ f% V
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ! Q& z5 H$ I5 R3 n: B, W2 h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    # M' k  X2 s. ]! w2 ?! T

  427. . A" S; j8 B! D# [9 I  B

  428. 9 E( ?; P( [6 Q7 G9 r1 A; W' G* H

  429. . f5 u  w7 b& F- U
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)/ C% B# N# O  |( a
  431. {5 ^1 L; y' r; o( p2 b/ O
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;2 p* ^1 d  {; P* O) d7 }/ m, @/ V8 T
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : z/ U5 G. X$ Q# r
  434.   {
    7 I" n3 [$ `1 U1 B( ^! u# i
  435.     char szLanguage[50];4 `* J3 u0 E. D3 ^( W, a
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- n( e' ]) i8 ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 {: [4 Z% r( H& K7 C: r
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & t3 K8 Y( J4 {. X/ V4 u$ R) P$ d, l
  439.     else                                   m_iLanguage=ENGLISH;
    ; j4 c6 @1 S" i( G5 b$ \
  440.     char szRegister[100];: u2 N' \: P/ T
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ _8 e3 J3 Z) x  a
  442.     strRegsName=szRegister;! J+ O7 E) J; A
  443.     char szPatchURL[100];
    & w; `0 C# O  ?& }
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" m) g3 H7 k8 P  N8 f5 S
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 W2 F# d5 Q3 I( Q
  446.   }/ A1 q; a  {" D
  447.   else
    ; I+ ?& g0 v5 @# q+ _. r" {
  448.   {+ i6 Z6 Z! Z, _; y# F
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 T% q/ H" z( m) ^- d; G/ @& i
  450.     strRegsName=DEFAULT_REG_URL;
    & n$ G* e+ x9 q
  451.   }+ \5 X4 V2 j" P2 [+ h% @* h
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 \( M) P6 G9 ^4 Y$ P, u
  453.   {
    8 R6 ?3 J/ {. E2 b
  454.     char szIP[50];
    . X$ g! G" m  u9 [
  455.     char szDIR[300];: Z* n, ^& ], b& i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))+ m6 ~! {) {: x+ h3 i" Z
  457.     {
    5 K) d* C/ `" J# q% l9 r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");7 `5 V7 o; A( [& ~( e
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 m; x3 D2 U! {( M$ W9 ?
  460.       strHostName=szIP;* d, @- g! u+ h$ m% e2 Q1 `  `5 O
  461.       strHostPath.Format("/%s",szDIR);( Q/ o# R8 Z3 V% c
  462.     }
    0 A; |9 Y6 r# z0 B7 C! G7 y4 ^
  463.     else
    1 N2 d( [2 I& R  C% X& p1 L3 j3 }
  464.     {3 [) b) k! _- G: w. U% W
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); l; S, e# q- z3 m- u3 U0 V
  466.       {4 {: B& ^5 b) X  _+ Y; [: S/ C  u
  467.         char szLanguage[50];
    + i1 c; I8 x% w- m& k% d
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ) ^4 f/ G, o" z" U2 Y. |
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;( L- i$ M- f/ @0 b# ]- f
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; f* ~7 ~7 n) Q  w, V5 h8 G
  471.         else                                   m_iLanguage=ENGLISH;
    * J1 a6 _* k1 X& a
  472.         char szRegister[100];
    ) w3 t& Y9 e* M" d6 k" l1 H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: }' u& s! U, W0 S0 L" H* @
  474.         strRegsName=szRegister;
    0 e- E) \0 W8 ^
  475.         char szPatchURL[100];5 f' K6 A' Q$ }, Y2 O/ k2 K& s5 W0 F/ ^
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : r" o2 O4 m, m9 [0 X
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 A3 ]$ P. a% H% Q) J7 W; B3 e
  478.       }
      W; u" F+ y  |6 `: G0 P
  479.       else
    ! e' a4 S) J8 n9 A& J- V, |. Z
  480.       {
    9 R) k# ]- u9 ~4 y- N" `+ Q- f1 s  f
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ h7 B" E6 K9 s7 Y. ?
  482.         strRegsName=DEFAULT_REG_URL;
    0 _4 m# i$ g& o; l, ~, n3 x: ~: k
  483.       }
    : D! o0 u' V: E1 D8 S" k
  484.     }& W) w" q, A8 ^5 q/ V* e+ d
  485.   }
    ; H/ D( `$ [$ p4 I+ B& {/ k
  486.   return true;5 }2 s: @& y/ F) e0 M3 l/ D5 o4 `
  487. }4 l6 t1 p* j$ h3 N5 B0 f% E  d+ A% P1 z) K

  488. - v( t" X  }/ n
  489. #include ".\ZLib\unzip.h"9 R  B* E& N) k9 Y( k
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);/ O5 ~! v! ~0 c( ?5 o, |. c
  491. /////////////////////////////////////////////////////////////////////////////! r6 F* S3 P9 S5 q& j9 j  d9 F
  492. // CRevAppApp initialization
    3 C- o# O9 p6 ~  n  O/ n
  493. : u$ e9 k" |5 m: s
  494. BOOL CRevAppApp::InitInstance()2 y( p$ J( d; j7 F: u* q/ B
  495. {3 W4 z6 k+ |) t
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    # K, N$ T" x# k, Q
  497. ) W& |, L( m9 M1 q5 I
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    2 M& n! T, x" c- `
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))& n. U5 W- n6 {2 J2 Y
  500.   {
    ) J% H5 f; t( Z/ Q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");( `# k9 a- H* x; k# E
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    . t+ d' V) J4 k8 \4 ?
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    / k7 O+ m0 [9 u& q& V, ?) a
  504.     {
      j2 p3 f9 m3 l% s8 R- Y: d
  505.       strcpy(szPath,szPathTarget);
    2 W! `% ~, e' M4 V9 t5 U; u) a* n
  506.       SetCurrentDirectory(szPath);* q! V% r; x5 C$ p- s
  507.     }3 \( K- G4 B) @9 R2 r- s
  508.   }
    & T/ s& m( _8 d1 s; g, A& k! ~
  509. #ifdef _DEBUG% _, }' ~9 Z, O( t2 X
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      x+ q# T& d- J: z% }
  511. #else4 V, B+ _9 j; _( K- B
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' t" U( G8 ?  |" `9 \. }
  513. #endif5 E. y& {5 _, r# A$ q5 k
  514.   {
    : n9 s3 Y9 O1 o* q0 ?
  515.     char tempFileName[MAX_PATH];
    - B& H4 ^* V% ~+ Z, }. r" L+ C
  516.     strcpy(tempFileName,szPathSource);0 }% s& o' |( h( ^4 F
  517.     tempFileName[strlen(szPathSource)-12]=0;- m" e6 \+ K4 c7 i& ~
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ; F6 G3 O9 [6 Z& T5 }$ h
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);" E, [5 D. T- w* |, _) Q4 Q5 c
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + c. {6 s* z+ B) a% W
  521.     return TRUE;
    % q5 \) W) Z+ u& z; N* _5 X. H
  522.   }7 s) r$ Z! q6 z, S( e: [0 Z
  523.   // Nuke 0118: Delete run.exe/ J9 Z5 G8 K7 C, z' ^$ J
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    4 ~5 Q! T& j; D: h
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + Y! g5 m+ A# z. C- ^
  526.   if(!ReadCfgFile("Config.ini"))& j" M& b$ X& S' d* V% D
  527.   {
    0 P1 P& [2 }* Y8 [
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);+ l' {& o) {' ]! t5 c/ Y# j8 P$ o  b
  529.     return TRUE;
    " L3 \- ?6 c4 u
  530.   }) H) ?7 Q8 p- {' n! [. W& l  t
  531.   HANDLE mutex;
    & ~6 S$ b! ~' A9 B
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    % y! ]9 a3 _6 \7 K$ ?
  533.   {6 o" z! d8 J1 _! j7 d; n
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)& b( T* |# [$ u* p
  535.     {
    6 c1 l$ S1 z% h" \/ [! J0 y* A
  536.       CloseHandle(mutex);% }% Y1 F" @; p+ k
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    9 p( \$ n7 n  V+ ]' y
  538.       return TRUE;9 Y3 C9 [* c6 P3 y* _
  539.     }0 }$ d, K5 \! Z, n1 L
  540.   }  : }- t- b' `$ b
  541.   CloseHandle(mutex);3 m8 l1 g" r9 z1 [+ R4 ~) y

  542. ! `1 b$ ]# \; m* l$ q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);8 t+ e: M6 {1 h* z) C1 v9 V2 g

  544. , d: f$ `+ G$ o! y& A
  545.         AfxEnableControlContainer();
    $ I, K2 T5 ]  |* Q
  546. ; T& H7 Q' U. f% o/ x
  547.   bCanUpdate=FALSE;
    3 X& m1 D# P% N/ ?1 C
  548.   dwStartUpSteps=1;
    ( h9 J  C! \0 G) A/ ?
  549.   dwProgramState=AP_NOTHING;- b8 i0 R- Y7 h, n. ?
  550. " Q" \# a% b2 \7 a) R, L1 @
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);# T' T( H2 u5 z" x
  552.   M2 i' F$ t& Y8 {" x$ f* i4 `
  553.         // Standard initialization
    2 z9 m: J% S# H6 M
  554.         // If you are not using these features and wish to reduce the size* K) c4 j* h1 a; P* V, a
  555.         //  of your final executable, you should remove from the following" R% `' E8 `# V4 v
  556.         //  the specific initialization routines you do not need.
    6 C5 l, J: P$ _' x$ Q% _  @

  557. % j0 G# f, W4 {- I5 k
  558. #ifdef _AFXDLL) u  V$ ]: _; l% u4 e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL& }) b% p. ]: ]' s) p
  560. #else. Y+ A5 M7 h, t- l' h" f* a1 m3 T
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically. T' y" u$ f0 L" v
  562. #endif
    + L  _( m1 x$ U- c" B
  563. ) C  p- [/ ~! l$ R3 Y) ~" T# K
  564.   dlg=new CRevAppDlg;$ _" z' }3 z6 N- _& f( |# n) p
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , m! F& T9 z' p  q. A' y6 W: l; g
  566.   dlg->ShowWindow(SW_SHOWNORMAL);- X2 f  w) K9 }3 `
  567.   m_pMainWnd=dlg;
    5 M+ H7 g+ r4 V! [* r* ]

  568. 6 Y4 L$ Q. e8 A: }$ r6 B1 P7 x
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * J' D( n( Q2 y8 N- L: S! x* H. |
  570. ! A. Q+ K) r- r5 h
  571. //  GdiplusStartupInput gdiplusStartupInput;
    7 M$ c( k, J* p  s- M: ?" Q2 c5 @
  572. //  ULONG_PTR gdiplusToken;. }0 Y1 @* k: W
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! ~' {$ W* L, u+ \
  574. + }: ]6 b# @8 G2 a% K5 O
  575. //        CRevAppDlg dlg;
    1 _; k2 W' j9 ]& ^9 O( k3 Z
  576. //        int nResponse = dlg.DoModal();
    4 L* Z% i% {2 i5 h  f$ u  G
  577. //        if (nResponse == IDOK)
    8 o% f$ |3 N' w+ U+ b
  578. //        {
    , U7 X6 c0 i$ l
  579. //                // TODO: Place code here to handle when the dialog is3 ^5 E! y; e1 X
  580. //                //  dismissed with OK8 A$ r4 |2 R6 E; d$ D0 W: j' i
  581. //        }9 E& M: h% a' A) z; q) c
  582. //        else if (nResponse == IDCANCEL); u0 L% e; C# E7 X+ X+ G
  583. //        {6 v& t/ ~0 X/ v3 o) s( U1 b
  584. //                // TODO: Place code here to handle when the dialog is
    ! j$ b0 w5 L2 H+ |5 r  u
  585. //                //  dismissed with Cancel
    1 M' ]/ `0 S% J& e: O! t
  586. //        }0 h: S+ B. p2 Y2 D$ G$ W
  587. 3 C2 E0 H1 c/ a# J
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    0 |  X$ S* N& M( ]2 W% g
  589.         //  application, rather than start the application's message pump.
    : y" Z- D' @, V# h
  590.         return TRUE;
    3 F4 P  u, C+ t" ]3 Q; P8 y7 A
  591. }
    - }! v% S( @6 V0 m: ^8 X" A. |# R
  592. ' I' a$ f4 s' W" R6 T# V
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    - y+ L1 G; e/ v! `
  594. {/ h4 ]% f2 g5 E5 ~2 f1 Z: w
  595.   int i;
    4 z, W: P( Z: g/ s0 S
  596.   char *szRet;
      V" R( b- Y7 s3 Y4 g+ A1 q

  597. 7 C8 o6 r5 C0 I7 n0 L# S
  598.   if(pSource) { itoken=0; sztoken=pSource; }& u- s1 y: i- q: z) I0 X
  599.   if(sztoken)) p! U# |9 A5 y1 s  l/ t
  600.   {
    ' u  D7 v6 k6 V+ }6 q
  601.     szRet=&sztoken[itoken];
    ' Y3 N4 D5 m" U
  602.     while(sztoken[itoken])
    / E) U/ J" c# e& u* \5 N- ]
  603.     {
    . S- d2 B- H1 a. v/ X. `
  604.       for(i=0;i<(int)strlen(token);i++)
    , V' h0 T& D' Y! N# J
  605.       {+ L8 X  f, D3 R8 N/ o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]), ^$ `/ d  }0 s, W
  607.         {* A4 D" e# y  G  h* N4 M
  608.           sztoken[itoken++]=0;0 a) Q" s  h" e6 Y( n1 {. q% s" T
  609.           sztoken[itoken++]=0;& t, m! u2 V8 Z. W3 k" \
  610.           return szRet;
    3 _+ V" p( h0 @  G2 K2 |  Z% I) p# o
  611.         }4 y! o/ {* G2 u2 W  c' K* r6 X& o
  612.       }
    6 F* [$ K, s# J
  613.       itoken++;
    $ A# y# f* x/ c5 O4 o# S) ^- N
  614.     }
    ' b4 H6 \3 j! Y5 c% A
  615.   }
    # m! c1 Z& R1 ^) G+ x/ N% _
  616.   return NULL;! v6 [3 n$ e* ^+ H1 O% i
  617. }* J$ b' [4 _8 c0 w4 m3 g
  618. " y" l/ ^: G2 z7 m/ ]. J5 k: ~
  619. void ProcessProc(long Total,long Current)
    8 z% \; N# S1 M  C2 |
  620. {
    9 {3 _, D: F* b+ ~/ B# J$ A
  621.         MSG msg;
    $ X- D% |' G9 w
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);$ y$ G: |4 i' l1 ?  F/ A; v% f
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    9 m" y. y4 U2 T/ ?3 @) H4 T5 O0 d
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))+ _9 A* d2 b- F
  625.         {
    5 m& L% ~) @% R; k1 I" C
  626.                 if(!GetMessage(&msg,NULL,0,0))
    / t9 J! U4 }7 Z0 V- K; l0 _0 e
  627.                 {
    " j5 X6 _6 ~) y/ c
  628.                         return;
    : {. c+ k# Z! m; T( V
  629.                 }9 _* `% Q7 f+ T( O" x& T% K3 J
  630.                 TranslateMessage(&msg);0 U% n/ t% R' c. W
  631.                 DispatchMessage(&msg);
    . B5 Z4 s2 H7 \
  632.         }        & Y% c0 r& v6 k. Y8 k4 p
  633. }
    : n. Y/ \0 O* m) ?/ J+ X

  634. 6 N3 Q. N* [' C' ~3 k' ~
  635. BOOL bFirstChar=TRUE;' R& h6 P, i' V) s% h+ k
  636. ' Q1 d1 q6 H; z' r8 y$ s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)1 X1 B! r3 p2 K1 @6 w3 G9 m
  638. {
    + {) M: g$ X# Y, M9 ^* R
  639.         // TODO: Add your specialized code here and/or call the base class$ a5 l$ V1 Y6 R% t" h8 V4 G" u0 s) S
  640.   switch(dwProgramState)
    # q/ U: `0 C- g
  641.   {
    - ^9 ?" R& U# D( y0 [/ S& [* a8 T
  642.   case AP_NOTHING:% E- u5 W8 u$ {; ]0 T
  643.     switch(dwStartUpSteps)
    : m" j" J% `+ c5 r: I- ?
  644.     {$ P" c/ [0 L, Q3 P  T
  645.     case 1:1 V- _' ?7 Q5 N" R: @8 o8 p
  646.       {
      W/ p1 i- R+ r: v- U
  647.         int i;3 R' J3 X+ s" u2 D
  648.         CDC *pCDC=dlg->GetDC();5 z% ^9 m# m5 v2 N
  649.         HDC hdcwnd=pCDC->m_hDC;
    6 s- J) {( u* c( N: L
  650. //        Graphics graphics(hdcwnd);* E. ?( I& s  ~3 u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    , n7 T9 x: u+ \3 S- `
  652. //        INT iWidth=bitmap.GetWidth();0 {6 c6 l" \7 Y/ J1 `8 Q! j) q
  653. //        INT iHeight=bitmap.GetHeight();& R" [% C& m, `$ R6 S
  654. //        Color color,colorTemp;
    9 G" Q' y1 ~1 ^3 ]! y5 ^
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)6 t& s  `- |% s7 u
  656. //        {
    2 A. Y8 h- ?. w7 K8 y7 t
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)' s3 W, z7 }  B6 B; y
  658. //          {, G% k9 ]; ?. i4 i6 `
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    7 K. v& [1 z: \$ A7 P+ n
  660. //            colorTemp.SetValue(color.MakeARGB(
    4 N/ o7 v) O! N! d! I
  661. //              (BYTE)(255*iColumn/iWidth),/ f2 z; L" G4 K; w) M: v! }2 s
  662. //              color.GetRed(),2 y5 \5 b1 B5 {  a) k! x/ w. v
  663. //              color.GetGreen(),
    # s* ^' z* ?& M# D$ t
  664. //              color.GetBlue()));% s- t: H4 Q4 _) [; o
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    * g% C6 R: }6 g( ^
  666. //          }: g6 i; w0 @2 Y  e& C
  667. //        }' Q1 E; N9 l& K' |9 }
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # _  g: _5 m, m4 |/ ?* N
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + i1 C# B* q# T2 p0 ?1 k
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ) M# o! f4 O; w
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : v  m0 F$ \' c! W6 i# v9 [
  672.         for(i=0;i<240;i+=8)! }2 t" V; H/ g- v% B$ }
  673.         {
    3 q( x5 I- O$ A1 S
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& z( Z8 s2 i( s+ X  F3 R
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - X+ v8 p# i; X
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & b+ P5 Y4 @2 ^) m  }
  677.           Sleep(33);
    0 W4 w" r3 V( a! ]" B
  678.         }
    + K9 U% k8 l0 a, L- c5 h: r
  679.         Sleep(1000);
    ; a" S4 _$ r7 X) l) J
  680.         for(i=240;i>0;i-=8)' D6 M* L9 h, B7 m8 D' f( |
  681.         {/ u$ p" X5 {; Q1 A; A$ C
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / ?9 y) V9 c! |
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);$ l5 J% A# Y; v6 r
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! M0 \) A8 }3 X0 i8 W9 S5 L
  685.           Sleep(33);
    # t, C! m) @4 Z) {7 S
  686.         }2 }9 t! f- |4 r3 N2 ^
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
      n. t) g! u  h- u5 q4 K) J2 }/ j
  688.         dlg->ReleaseDC(pCDC);
    + ^% f+ K* W# v* ^- a
  689.         DeleteDC(hdctar);
    # g9 J! L& R5 C& W0 b
  690.         DeleteDC(hdcsrc);
    ; ~  _9 y9 j1 Z7 M3 n. v9 Q& L; N
  691.         DeleteDC(hdcorg);% `( m8 Y. p8 n  p/ W; x& H. r
  692.       }. |2 I7 ]3 d, y5 X8 N% \
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    0 E9 J  b5 M% \( p5 S5 M
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");& J2 n6 }: }% A" H( ]( V
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");* ?# k/ ^' r- k" Q) G4 u6 e
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");& u6 d- T7 x% O( r) g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 p' D7 ?# j/ C% ^9 b7 a
  698.       if(!Dn.Connected()); m1 P2 @; W" }5 p+ }
  699.       {
    7 ^6 L9 e$ E% J, a9 L- ^1 K: n7 J
  700.         dwTotalFiles=1;
    ) L) y/ ]+ I4 @; ~( {) g, c' P/ c
  701.         dwDownLoaded=0;8 N2 O5 R  \. ^. u7 x
  702.         bSilentStep=TRUE;
    . Y  p% s0 O& L" D, [0 }
  703.         bCompressed=FALSE;3 D. n/ k$ f+ j
  704.         strExtLocal.Empty();
    - }; h: f# D5 S" f7 ?. a2 T
  705.         strFullName="readme.txt";
    % }$ F3 ?8 ]0 `- F2 C0 W
  706.         dwProgramState=AP_CONNECT;
    ' m7 D/ U+ @4 Z; `6 K7 ^
  707.       }
      q& t6 O1 I# d7 A# q3 T# \
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();( O( {1 W/ ]5 \  \
  709.       dwStartUpSteps=2;
    ! e8 K! R& p/ q
  710.       break;3 _! N! s3 X. H  L! N; G- Q" {
  711.     case 2:9 w3 O& W7 b+ ^& G9 i  P  Z
  712.       {
    0 }: H. @" {* P4 v2 t0 ^; u: I
  713.         int iEOF;6 R, }2 r( _; A5 Q
  714.         FILE *fp;4 }9 ?9 B: b% G/ d+ Y! t
  715.         char szString[512];
    ' h+ O( P) X8 H  r# f! ^7 q& E! Y! V1 ~8 F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ( N  ]5 a, O" w& I8 L
  717.         if(fp)
    ! z2 L/ O" o- p7 J' L2 ^5 |
  718.         {3 ^) m) v, @# e8 N  p
  719.           do
    3 N3 K" ~" Y: b8 n/ P, N) E3 _
  720.           {
    . A- p. e, _' R
  721.             iEOF=fscanf(fp,"%s",szString);
    7 @$ u' o+ U3 A4 g( b- }  a  u' b: E
  722.             if(strlen(szString))
    0 B6 G: |" t) ~1 J# f
  723.             {
    7 g. H% Y9 I' w7 i% t" Y
  724.               if(bFirstChar)
    - L' c: ^6 e+ j, N2 a* b3 a
  725.               {
    / `5 m# F: h  R; G, \% O) N
  726.                 bFirstChar=FALSE;
    6 d) _" V' @( z3 m
  727.                 bConnectIsBig5=FALSE;) o( c4 G5 X3 D5 p6 W
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    8 t' y- j5 k, O! r; ]- I
  729.               }+ W& ?, g4 ^, o! d" ]5 _
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 Q+ m3 y! t5 q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - [2 i$ O, L$ ^( C
  732.               dlg->m_ListText.AddString(szString);4 ?2 S9 d8 t8 h; F
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * ]& Y# v/ O0 n
  734.               *szString=0;
    , p( K1 c! l/ W% P/ N* _
  735.             }$ i5 ?- O( t- ~% k6 T
  736.           } while(iEOF!=EOF);, }5 X% l9 R$ `
  737.           fclose(fp);, \. Z3 i8 h% Q) v/ A& I, i
  738.           unlink(".\\DownLoad\\readme.txt");! f( Y3 }5 G1 U3 U% [# y# k
  739.           dwStartUpSteps=3;
    ; M$ B5 `$ b7 k* _& U4 O
  740.         }2 i- a4 Y" ?9 H4 h0 m
  741.       }
    4 e9 P) }# M$ w" x7 u
  742.       break;' f$ f- h4 e2 r" j6 f( b9 p2 t: l: o3 D
  743.     case 3:& T" |4 n8 U  I' R6 U* T
  744.       if(!Dn.Connected())- l0 H+ y% n' I  ~
  745.       {
    ! A  ?& @5 [% ^( P4 r0 {
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);! h* r9 `1 i. p3 {0 W
  747.         dwTotalFiles=1;. Y5 R2 P. T$ W- R) C8 M
  748.         dwDownLoaded=0;& x1 u+ Y$ }4 R5 m) D: d
  749.         bSilentStep=TRUE;
    0 v1 h( e3 y! W
  750.         bCompressed=FALSE;, f) P+ ?+ ]4 o+ }) ^3 W4 |' Y! q7 o# z
  751.         strExtLocal.Empty();
    , F. H/ E' J: f  g/ W% _
  752.         strFullName="checkversion.txt";
    : ^0 R( [! h# h* @" X
  753.         dwProgramState=AP_CONNECT;
    5 O& v# Y# }- U9 q# E- O
  754.       }+ `) k, c; ]  B+ U+ L9 h
  755.       dwStartUpSteps=4;0 ?+ L( ], c9 o) u* s7 [+ w
  756.       break;( O# [7 v0 \$ d
  757.     case 4:; H9 u/ \* O; N. y  t9 @" ^
  758.       {; h  ]5 P/ Y+ w' ~1 v
  759.         FILE *fp;
    . c& ]- m1 n/ [1 z
  760.         char szString1[128];
    & J( Y' Z+ y0 D2 U6 Q  r! W1 y
  761.         char szString2[128];
    + T5 I5 F. y' p' E6 O
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");* X1 Z6 x- g7 @: P6 [$ b2 n
  763.         if(fp)$ s- K" D2 _3 `- P& ~/ L8 x' v
  764.         {) u. P/ Y# n  i
  765.           fscanf(fp,"%s",szString1);
    : y! R5 u( E1 |) n& r% _# H. D
  766.           fclose(fp);
    ! O; V* u0 i& G
  767.           fCheckVersion=atof(szString1);5 i5 `3 y( H+ Z/ Z9 }
  768.           fp=fopen(".\\checkversion.dat","r");4 ^& f4 a/ `; M/ w4 w& E" I* [
  769.           if(fp)
    $ v9 g" a( O: K0 X
  770.           {& K1 k: }+ x6 `; P
  771.             fscanf(fp,"%s",szString2);; {+ k$ I4 L$ k! \. i1 k! A9 f
  772.             fclose(fp);
    " l( [4 f( l$ T& B
  773.             if(atof(szString1)!=atof(szString2))1 w: c) }7 s8 @9 _: L
  774.             {- B( Q1 N0 W0 b- L$ a* p+ w
  775.               if(!Dn.Connected())6 C6 I! u; S2 l, n
  776.               {+ D2 g+ x" U, K& z
  777.                 bFirstUpdate=TRUE;. B# x8 z) a5 ^0 A5 {
  778.                 dwTotalFiles=1;
    8 \$ L' b. i8 D$ V% V
  779.                 dwDownLoaded=0;9 J% N& B' u% d* L
  780.                 bSilentStep=FALSE;
    9 k) P, i  o0 R, @$ }. B6 a; D/ Y, }8 X
  781.                 bCompressed=TRUE;
    * `, E% I* P6 J' s0 T  {& c  o
  782.                 strExtLocal=".\\DownLoad\";
    8 Q/ K8 j$ ]1 ~2 z) D2 A
  783.                 strFullName="update.txt";0 V, y$ O* m8 x3 a& T% r
  784.                 dwProgramState=AP_CONNECT;
    1 ^9 N0 b2 X, r0 P$ N$ w
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 B# F, P! W. V
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , ]8 G1 ?" `1 O. g2 w7 h  n
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");3 {, s' A1 b( s$ ^/ R

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

. I0 T2 p' s8 M6 O, F+ h7 P4 o% n; r+ @  L

評分

參與人數 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客服返回頂部