CSUpdate.exe源代码

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

) P( y7 n) n. W( H, N
  1. / RevApp.cpp : Defines the class behaviors for the application.
    : D* \& t! B: O/ C$ k
  2. //
    7 t8 f2 E- k8 E- A) o1 E* Z7 f
  3. + O, C, r. j& c2 ]3 v4 L. @! t
  4. #include "stdafx.h"  [& P) X% N! T* v" \
  5.   F/ ^! b3 k1 E$ f" h
  6. //#define UNICODE& X0 m2 K, k. l. a
  7. //#include <gdiplus.h>
    " f- T) e; A! Q& I
  8. //using namespace Gdiplus;
    & R* j+ ]/ r: R/ A

  9. ; ^2 i  o6 z, N0 G, z
  10. #include "RevApp.h"
    # V/ J# M0 M  G# j, c; \
  11. #include "RevAppDlg.h"
    + E, i* t3 |% J9 B% R% l
  12. ) y& e4 F6 N4 h; H6 R2 v8 V
  13. #pragma warning(disable:4786)- i" |, u) A3 \: `! M
  14. #include <map>9 p0 Z5 }! K. J4 u- K2 p4 s
  15. #include <list>
    : S7 P) W! E$ l
  16. #include <direct.h>
    ' V0 c( D0 x1 Y% C. I/ Y+ w

  17. " v2 S! w8 _' a- A
  18. #ifdef _DEBUG0 x" N3 ?; S3 {/ h) y
  19. #define new DEBUG_NEW
    & L- i0 U6 C- R, ?" Y3 D
  20. #undef THIS_FILE
    ' Z( y# j! W3 N5 S  x
  21. static char THIS_FILE[] = __FILE__;
    ; _& g6 ?# x2 E7 o7 j) ?8 t9 v
  22. #endif) J5 P9 C9 }6 \9 Q9 \9 I7 W* Y
  23. #include "SkinResDef.h"
    3 ?# W( V* n. W9 Q
  24. #include "ChangeBG.h"0 @8 i4 f2 D! ]  A
  25. #include "AFXINET.H"
    # @; ^* u. K/ o$ L

  26. . u) `4 ~9 t, B
  27. #define TRADITIONAL_CHINESE 05 T( a+ }3 {* r7 x
  28. #define SIMPLIFY_CHINESE 1' m# o: a7 V6 }8 V& [! V
  29. #define ENGLISH 2
    3 b) t4 X* K3 H, N% z2 b
  30. int m_iLanguage = ENGLISH;' d0 p. o9 P7 I9 S
  31. /////////////////////////////////////////////////////////////////////////////
    ) ^+ ^3 Y) q5 s- _- d
  32. // CRevAppApp* i& @% j0 W' e4 N. _2 c
  33. $ n, D/ ?7 g! c1 h9 W, z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 {6 ?  t1 U8 A" T* E) s0 {' P% a; \- z7 h
  35.         //{{AFX_MSG_MAP(CRevAppApp)" j3 g" z+ M( ?! P9 m
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.; X% l/ ?" Z6 Y" M) y
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!( N: b) I6 |* g' o
  38.         //}}AFX_MSG& M# W/ ?; ], p+ R% j9 o+ n0 Z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . v; w  |) O$ ~3 k* `
  40. END_MESSAGE_MAP()5 O) ~" q5 N. y/ u
  41. ) r$ h% E7 U( _
  42. /////////////////////////////////////////////////////////////////////////////
    " u/ d% ?0 W, N5 F2 e
  43. // CRevAppApp construction
    $ B, i; d3 {; Y* P, U% e/ n7 G
  44. " b8 `& [6 D4 b3 c
  45. CRevAppApp::CRevAppApp()
    - s! Q6 p; s  n" {
  46. {
    & v0 Z* n9 ~( Q9 X' j& D
  47.         // TODO: add construction code here,
    " r6 b. V- M  b4 p8 I
  48.         // Place all significant initialization in InitInstance! k+ ^. G( B' ~) T' t* I3 P5 v% S
  49.   bDisplayIsBig5=FALSE;
    ! A( ~! R: _: u, N
  50.   bRestartUpdater=FALSE;1 J& ^5 R# X- v; q! f% h' J6 C4 @
  51.   bFinishUpdated=FALSE;; r7 r# z  G. |: \
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;  ]) T1 w, N4 A/ F! x
  53.   InitChangeDataBig52GBKS();4 F6 Q8 G- j; A# ]
  54.   InitChangeDataGBKS2Big5();7 g" ^6 E, l9 z
  55.         //
    . s. I( H! w" b+ O" N
  56.         bClickRunExe = FALSE;  E0 u3 E: V! i" u8 z+ G' A; G
  57.         /// {5 N8 p  [% \
  58. }
    4 {! D( L2 g% ?* m: P! [9 A
  59. - r+ a& V* b0 z9 A
  60. CRevAppApp::~CRevAppApp()
    8 s1 ]3 Y7 |! i* m: {. _0 i" Q
  61. {
    7 `! t  d( u$ [% _. w
  62.         // TODO: add construction code here,7 N& f4 |$ W- `1 h6 s
  63.         // Place all significant initialization in InitInstance7 I1 L7 O; V/ ?- ]; F6 m
  64.   EndChangeData();
    8 v$ C  d9 Q  L8 C9 m+ x( o, d
  65. }
    8 I( X+ m! ?; t! v: _: A
  66. 1 d5 P4 G9 i' g6 L
  67. /////////////////////////////////////////////////////////////////////////////
    8 b! c2 v9 R1 c; P* P; _
  68. // The one and only CRevAppApp object
    ( V1 S  j. [$ E' a
  69. 6 w. s! A7 G% B; {3 ~# ~& H4 w; Q5 t
  70. CRevAppApp theApp;0 }! l& J  R  V. i& Q; h) l
  71. 2 x6 [$ M& }: u7 N6 s/ O& x
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName), ^. n& K1 N8 ^6 p" O9 E+ u: o
  73. {1 g" q' |9 T0 Q- W  `$ M3 D' H
  74.   int iEOF=0;; x, ~" U$ \6 u, ~; B" K
  75.   char szTempName[MAX_PATH];1 i2 I2 N! b: Y/ P
  76.   *szFileName=0;
    0 b, O& V* y& g; B) T& @$ k4 w# `
  77.   iEOF=fscanf(fp,"%s",szTempName);! }; Z% F* Y( e2 C  _
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('): {4 B0 L0 D3 U
  79.   {) C( \' e; V+ i1 U
  80.     strcpy(szFileName,&szTempName[1]);
    / e" d3 ~' I+ N) A) B
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)/ C; m, G5 O% ^
  82.     {
    5 v; |8 ^& Y# l- q
  83.       iEOF=fscanf(fp,"%s",szTempName);  w  L9 }! k7 O6 J. S- V2 D
  84.       strcat(szFileName," ");
    9 L5 t9 j7 Q& s! L" Z% [
  85.       strcat(szFileName,szTempName);$ x# }) _" v9 g7 X: t
  86.     }2 P" M/ S# Z" U! ?4 W. p* l( |
  87.     if(strlen(szFileName)>=1)' E9 Q3 z- D) y$ t' n
  88.     {9 |: B4 G* n3 x) L3 e8 M. D
  89.       szFileName[strlen(szFileName)-1]=0;: ?; U- S9 l: D, w; `1 W
  90.     }: P0 [* P* B( a1 G& h$ y" p0 \
  91.   }
    3 W1 h/ j' g2 o+ r
  92.   return szFileName;- c9 i' S2 E) I* e7 V
  93. }, }3 A9 K3 T# j/ D) P: H6 Z4 C

  94. + M) A) ^1 t. \5 k
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)% q' J0 @7 S7 y: N& z: D% i' D0 h9 E
  96. {
    - }) f, X/ K' w9 E0 A% Z. |
  97.   FILE *fp;+ I, H/ v% m8 m7 k2 B/ N7 f. c
  98.   char *key=NULL;
    ( c1 O' v+ G0 }0 k! o  c9 Z
  99.   char version[MAX_PATH];
    3 \/ Z; d2 k2 e* A* _
  100.   LPUPDATEFILE file,olds;- p; v; K0 s% |' Y8 h  R
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    * z2 c; c5 k4 ?9 y
  102. 7 `3 H' |) X3 m3 n+ z
  103.   UpdateList.clear();$ P# P0 Z9 y- p4 x+ J
  104.   UpdateFile.clear();4 B8 D" e2 {/ C$ C. y- D2 @: C
  105.   if(GetFileAttributes(filename)==-1) return false;  Q2 F" ^. Z! D7 d0 L, G2 q
  106.   if(!(fp=fopen(filename,"r"))) return false;( Y. A- Q* e3 e& @: c7 P
  107.   fscanf(fp,"%s",version);8 f+ v- q0 S. m' Y  L; y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    0 G& _6 S  k$ s: r- U! Z
  109.   while(fscanf(fp,"%s",version)!=EOF)! L0 \* R$ ~2 S" W& W: h
  110.   {
      L, @  w% y! H& a9 @! l
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 w2 t' i9 f, K3 A7 k
  112.     fscanf(fp,"%s",file->path);' A- H' T9 [8 y$ q, l, N
  113.     ReadFileNames(fp,file->file);
    # W# Z( B' V9 |  N* C: a
  114.     strcpy(file->full,".");
    4 O/ t! V4 q, q* O5 n, a( u
  115.     strcat(file->full,file->path);2 U! h+ {# f2 l7 t
  116.     strcat(file->full,file->file);
    0 d, l! X% M6 L8 n  r4 f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ) }, A' R% R6 ?5 M( k, ^4 f
  118.     {* ^, D& q5 }: X) h7 v. N, s
  119.       file->vers=(float)atof(version);
    + I4 @5 a4 s$ m0 K
  120.       UpdateList.push_back(file->full);; ]1 k4 w7 a. L' d5 z. G
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    . G( z2 `9 S6 p3 l: B& U
  122.     }. G" o, @6 {0 N- z4 V
  123.     else
    , [/ Z! j" k+ H
  124.     {5 U2 B- y0 z+ \% O. T
  125.       olds=(*p).second;
    1 y) L& {0 `* p& v( Z/ w
  126.       if(olds->vers<(float)atof(version))
    # M7 f) s3 H: |
  127.       {5 ~- Z" P  H% l1 E! R% I3 \- L. y
  128.         olds->vers=(float)atof(version);& ~0 ^: J. m- i5 e" ~/ U
  129.       }
    # T4 I4 G  ~7 K- Y5 j6 ?, _
  130.       free(file);( z; Z: @  D+ r# j  \& r& x
  131.     }0 o8 T% J' _- D/ g+ q/ L4 m1 ]% B
  132.   }
    6 Q  H4 Y5 k' g, V: A
  133.   fclose(fp);/ X# Y3 N2 J7 g3 r9 z6 f, T
  134.   return true;
    6 k) E1 x' X" I' K
  135. }
    . i8 V0 o4 l/ V8 R8 {( G0 O4 N+ o, `6 I1 X

  136. $ d* a" e8 ~6 m5 d3 K+ M, v. t
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath): m+ l4 p9 K9 ~( E+ s8 z
  138. {
    / E) T+ f% H( [# l9 c
  139.   TCHAR  szFull[MAX_PATH];& i' }, }5 O6 V9 Y' Q4 d
  140.   TCHAR *token,*inter;- z' t/ V" q/ D4 Q9 e& B
  141.   *szPath=0;1 x$ O; ?& z5 p) L3 D
  142.   strcpy(szFull,szFullPath);7 n* g( e4 \& x& u
  143.   token=strtok(szFull,"\\/");
    1 }. R) `+ ^: ?/ f5 W
  144.   inter=token;
    + B$ P: B$ }. s" D# y8 i
  145.   while(token=strtok(NULL,"\\/"))- {9 l( m; k$ t" |- r1 {
  146.   {6 g! k3 }: Y2 a0 s- o
  147.     strcat(szPath,inter);5 z4 F( S9 l8 o
  148.     strcat(szPath,"\");& J5 W/ e- V! P! T; ^( W* q5 l; P
  149.     inter=token;) K: q8 c$ k4 }, g6 w
  150.   }5 Q% F+ Z0 c8 }4 N: j& T% |
  151.   return strlen(szPath);
    - [. |2 Y0 c1 l5 @, q" I8 a
  152. }
    ' d& z1 x0 S5 Z* Q

  153. - W! c) X6 d" a7 P$ X, r
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    5 w: F: @' P( A: x
  155. {
    " Q  n. Z& r! ]* ]! U
  156.   DWORD attrib=GetFileAttributes(Target);
    + q' X, d9 Y* N$ Y# Z9 H% k! T
  157.   if(attrib!=-1)5 t( R+ r6 E. q6 J  [
  158.   {2 C2 D4 i. |' Q% r+ Z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))6 {: l& j8 p" V) f; R
  160.     {/ W* Z% p& l( W+ q
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);- s; E& U4 e+ j" ]: B5 y4 i3 }
  162.       SetFileAttributes(Target,attrib);/ m7 w2 f  g1 b* _7 |* B
  163.     }
    5 Q; y9 I& B$ ]! U0 H
  164.   }, y, G7 K' p( W$ e) @) s
  165.   CopyFile(Source,Target,Erase);
    5 y& f2 m* q0 Q
  166. }
    0 V) w1 P9 F9 h

  167.   }$ M3 n) m3 d( n9 p$ T4 T
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)' G) @6 s9 R1 m3 m
  169. {
    & z8 r7 ^/ P# v# f- s$ A3 c" T- F- A& A
  170.      FILE *fp;$ |, N# e5 q. b$ ?4 i+ g  I; d
  171.      char  szBuffer[8192];) m1 }) F; X4 r  S3 l/ R! s
  172.   va_list  argptr;
    3 O: R( E% j. \

  173. . y0 [0 ~% M; c3 {+ @4 I
  174.         va_start(argptr,message);
    " b' t% d: K0 _& c
  175.         vsprintf(szBuffer,message,argptr);' g% _" C3 N5 I$ W/ l' ^5 {
  176.         va_end(argptr);
    ; j- C" H' S" F) f0 C/ r
  177.   fp=fopen(FileName,"a");
    $ M  v! K4 y) e/ W6 u  V
  178.   if(fp)( g: B3 y, G6 X9 O, P+ X
  179.   {( r) s5 e% f$ }% y! `
  180.     fprintf(fp,szBuffer);
    3 z9 i! s2 S6 f: B  l, A
  181.     fclose(fp);
    ( N9 a$ e+ k9 \# u6 C6 X# H9 y
  182.           _flushall();# g) U# V% ?2 |5 U
  183.   }9 I% q, ?: T& R
  184. }
    $ \: V) d' w# d# d  B$ P
  185. ) F3 M" E6 o" v  J( n1 G! J
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    , L( z2 ~, b+ U3 v) B6 ^
  187. {2 D+ L: ~6 Z& t- L
  188.      FILE *fp;7 {/ g5 D; c+ \0 p& Q" v! u
  189.     DWORD  attrib;
    ; T# Z$ Z3 j  u5 ~( Q( _
  190.   attrib=GetFileAttributes(FileName);  Z& A* S" ]( g; i! v) Y3 {4 d
  191.   if(attrib!=-1)5 T- A0 U+ W3 V) g7 j1 V6 G& _
  192.   {! M6 L, Y5 [4 `$ Q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    + [6 f3 J" h2 s0 k0 }" G7 w- ~  b
  194.     if(!SetFileAttributes(FileName,attrib))% T4 d9 M  w: @4 E2 `/ j. `
  195.     {+ Y6 b: `* ^4 x5 V+ }% L
  196.       return FALSE;  C$ ?! a' A' q/ |
  197.     }5 q# T) T2 f, |! k% s0 `
  198.   }
    + H3 ]2 l7 q$ b% t( h* U
  199.   fp=fopen(FileName,"wb");
    ! N- n( L6 C; H# B  i- G
  200.   if(fp)7 Q' L6 U" o+ |$ T: [. f3 Y
  201.   {
    - _' u$ F) \9 C( w8 c& S! k6 \. K
  202.     fclose(fp);
    9 J" o6 x* J1 u+ N, F& _  P
  203.   }
    + z2 L- t' s0 v  u- M. C0 _
  204.   return TRUE;! M& Z7 y$ I; T/ \7 _: P* h# j
  205. }) E' P. \0 z1 \' ]- N0 T3 C
  206. 2 x/ m' o: n0 I* f6 Y
  207. BOOL CRevAppApp::UpdateLocalVersion(void), A# z9 C5 ^/ f7 n
  208. {) D% \/ D( G( f; G, y. }% f/ |& u( j
  209.   char filename[MAX_PATH];1 `1 k; A: N* Q1 N8 B& ~6 ^3 h* v0 d( o
  210.   LPUPDATEFILE file,olds;7 g% M- T* k  ~. \! b
  211.   std::map<int,CString>::iterator i;
    7 {8 s: P. R: u: ~1 L
  212.   std::map<CString,LPUPDATEFILE>::iterator p;. g# d2 L, ]3 _( [$ Q) T8 }4 j7 _
  213.   std::list<CString>::iterator l;1 F, o2 B9 ^: S: y, Z2 q
  214. * J, Q; ?0 @6 m" a5 o5 G  r
  215.   if(bFirstUpdate)+ m2 V' s. [# B- N
  216.   {
    , {. v7 c% y, t- S4 c. E
  217.     dwCurrFile=0;9 k4 F4 Q0 |( u4 x* \  v
  218.     bFirstUpdate=FALSE;5 G+ O- P% p3 ~: R' t/ b* Q4 n6 Z' H
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) N2 u/ C, F' {, k, R4 g
  220.     {
    ; H! i& X' G' R- f- H! }5 b( z  A
  221.       dwTotalFiles=UpdateLocal.size();$ D6 j" p% a2 Y$ _3 O( J8 L
  222.       dwDownLoaded=0;% ^4 \7 X! s8 \3 J
  223.       bSilentStep=FALSE;( d. Z- W6 z0 G, J' t! G
  224.       bCompressed=TRUE;
    ) h- \! F3 X2 K$ n+ }: _* f
  225.       strExtLocal.Empty();
    4 X1 Q5 |/ }' |# c* }2 d8 M
  226.       strFullName=(*i).second;! ?$ Q6 H' n2 \  l" X
  227.       dwProgramState=AP_CONNECT;
    ) V) _1 D+ t6 a2 `/ \4 `
  228.       return TRUE;
    4 L5 U4 v- f( }  u
  229.     }
    $ U) t/ ?5 S! B3 Q5 a. |% ^; ^; S( @
  230.   }% B9 \4 F! f6 w; l7 ]3 [
  231.   else if(bRestartUpdater==FALSE)  X) H/ L6 N" |# R' U0 J
  232.   {
    ) d7 j; Y3 x# J0 ^
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    4 Q0 F, D& O9 S5 F# l
  234.     {
    3 x1 |: B8 F7 E2 B2 q" q
  235.       file=(*p).second;$ p, c, J$ `* P& }0 C
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    6 U8 f7 y) Y) S9 u/ C& U' E  @
  237.       {
    # |% v1 n/ B5 q: N$ A' y$ W( q
  238.         olds=(*p).second;
    5 B/ j1 t6 a! E+ w
  239.         olds->vers=file->vers;
    8 |1 [2 X' B$ A( v- U
  240.       }
    : P" }4 b5 ^+ o2 m1 Y
  241.       else
    3 B$ c0 u' a) B! e/ b2 N4 e0 e
  242.       {
    . S" n0 m1 y7 h5 B- [* B( v0 p
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 E. m" ^* l4 E* U- q# k' O7 j$ g
  244.         memcpy(olds,file,sizeof(UPDATEFILE));9 R: c- z- }6 R& V: m4 D
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));: i# p, ?- ?) \1 G. G% c+ L
  246.       }  e" Q- U9 U7 f/ W. c
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    # Q$ t6 |* r1 R2 R$ r' _
  248.       sprintf(filename,"(%s)",file->file);
    9 q/ G1 a- L; i" e( P  ]
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 V6 H# w. g7 C* p0 y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    5 Z+ C* `8 ]1 o" \
  251.     }
    ' q' p+ @0 \' \6 m
  252.     dwCurrFile++;
    ) T4 e0 i8 _3 U7 N4 X' Z& W
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), u$ o9 h3 b' i# e3 q  _
  254.     {8 Y- I# p" L! ]4 d" _& E" D  o' }
  255.       bSilentStep=FALSE;: K0 L- q2 K( p7 c
  256.       bCompressed=TRUE;& Q2 }( f, p8 {& a
  257.       strExtLocal.Empty();
    / l4 F8 m0 R9 |% D8 K
  258.       strFullName=(*i).second;
    4 y3 ]3 ]* |! h4 u3 A" _' C5 f6 R# N, M
  259.       dwProgramState=AP_CONNECT;
    7 z8 {) d1 j/ F3 J2 b& E" s: b0 P
  260.       return TRUE;
    9 n* `& w; D& z$ P' {3 b  ^6 U- O
  261.     }
      I/ G6 A  W9 `0 z" O# U
  262.     if(!bRestartUpdater)* U' F' p* Y/ j6 M$ h
  263.     {
    2 ], F8 {$ N& S7 q  O  y7 _" A+ X
  264.       int iCurrSize,iFileSize;
    $ R# r7 \9 f9 A  w1 a4 T! n' K
  265.       iCurrSize=0;  c0 D9 z" |- V* t
  266.       iFileSize=UpdateList2.size();; p7 J# M  M4 i  O! c4 ^
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    7 _, C& ~* t7 |7 _1 H
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 l: @2 @  j' z' z- l2 p: X) g; a
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 z1 D. Z2 b. R* a4 e5 p1 B# m, I) }
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 K& Y' O/ Z  q5 M. ^2 a
  271.       Fclearf(".\\update.dat");$ x! C2 c( p" O4 n7 A9 _
  272.       Fprintf(".\\update.dat","Bloodyf\n");) O! y/ h. N# p' q$ g. Y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 i# z4 p/ |5 y7 m/ S
  274.       {  U+ l* o) I+ P, {& F4 A
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    1 I: P% Z; k- q6 a; O9 `% f
  276.         {
    : @; d( @) @8 _. y: Q
  277.           file=(*p).second;8 F  H6 q2 d) T
  278.           sprintf(filename,"(%s)",file->file);
    - r8 D4 Y3 o8 U! q. D' q: E* P
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. q8 m6 P! G4 Z3 @+ ?0 G
  280.           iCurrSize++;
    + G4 }# B& n  z" c$ Y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));2 o4 @" K: \. h. c' Y
  282.         }
    # J( h6 |' b9 R( n4 O  J
  283.       }
    6 |0 C7 }8 z; t5 O) B( n# t
  284.       unlink(".\\update.txt");; `0 ?) Q" b6 ~7 [
  285.       unlink(".\\update.tmp");9 j! H$ u" R- s; g# \$ F6 g
  286.       Fclearf(".\\checkversion.dat");) k+ D: R7 h% C7 Q, v% e* |
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ' o$ @, Z7 p8 O, n) V
  288.       if(UpdateLocal.size())
    + J9 _1 K' @! G1 F1 I
  289.       {
    4 d( x* y5 E' H/ {8 P
  290.         UpdateLocal.clear();
    * L. }6 A- E0 u  k
  291.       }
    6 _+ [- y; T+ f
  292.       if(UpdateFile3.size())
    5 K3 T4 k: n. x
  293.       {
    . M% w7 M# Q& A; S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , I3 r- n/ P& n/ d4 C* V8 r2 Y% n
  295.         {
    % X3 x# g! o" T8 B- p: _7 D
  296.           file=(*p).second;
    % C5 S& e" l9 ]" k% H: w! O
  297.           free(file);
    4 C9 V! e. q2 l+ \. s
  298.         }/ f+ Q* [% @& J( t, ?
  299.         UpdateFile3.clear();
    1 N- ^2 t0 I* i5 \
  300.         UpdateList3.clear();1 z+ d# E+ I# c' Y* b. Q" K& D
  301.       }# ~8 k/ `) M- V
  302.       if(UpdateFile2.size())' R# i  p4 G& z8 i) s
  303.       {
    6 Q' y2 ?7 ^' g& q
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 c% O- r" C: X9 V1 S
  305.         {
    ; N' L% O0 }# `' [
  306.           file=(*p).second;% M# F: e& z- R! D' _
  307.           free(file);
    ( Q& Y& k" f( R2 [& f- W. H1 g: D6 @
  308.         }! @0 C/ f# Q: c7 ^
  309.         UpdateFile2.clear();
    2 W, s3 ~" {& ^& V2 d3 k( ]% f
  310.         UpdateList2.clear();
    + `. N. T* a9 N! I8 ?9 Y5 G
  311.       }
    1 ?3 b4 U  s, m: ^
  312.       if(UpdateFile1.size())
    - R1 k7 `8 k4 }  ]0 w3 H
  313.       {
    & y) a+ t) C9 E$ \. B4 r  p2 y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : M3 M  @: v) L" W" d1 Z& F
  315.         {8 t# A. p9 P* q
  316.           file=(*p).second;( m9 w8 D+ d' @6 X: p! `
  317.           free(file);. Z, V& d# m1 G5 Y! V4 H( f
  318.         }  S. }# h" ]; _- m) z9 L+ W
  319.         UpdateFile1.clear();
    7 B* m, z" n. G9 T2 |# Y* h3 E
  320.         UpdateList1.clear();! z6 @. W6 W1 S" j# H5 ]
  321.       }& n- b; \: X( f9 F3 n9 p
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' e; R$ ^/ ^3 R3 ~9 z6 E
  323.     }
    ' e4 {# L9 a3 N& F
  324.   }
    # q1 @- R( V# n. l3 J
  325.   return FALSE;8 q6 U7 V" l' F/ e
  326. }
    1 Z8 ?6 y+ Q6 o3 v' T
  327. ; H; ~4 ?1 R. f' a
  328. void CRevAppApp::ClearAll(void)
    * n7 i; t. x) m6 z+ ^
  329. {- w$ {; |$ J7 G) K# D& E
  330.   LPUPDATEFILE file;+ `5 z4 [& z3 m! Z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    + e9 E$ f# B0 H: f' h' q4 c& M) [9 j, ]
  332. * N8 e3 C# F) R4 F# ^) G* n) H6 [
  333.   if(UpdateLocal.size())3 \2 H. B& \+ ?: T6 G
  334.   {
    7 o" N" M# G7 f6 I2 ~4 }9 E6 y
  335.     UpdateLocal.clear();5 o5 N' @; j! M# R+ K0 D
  336.   }0 {$ g1 |8 ]' h7 y% k
  337.   if(UpdateFile3.size())
    8 H2 T( N) x1 S& S5 ^$ {; @3 W( K3 `
  338.   {
    $ j6 p5 [) L9 h7 t4 i% t. S
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)2 y2 F5 l  w" j
  340.     {
    0 A' N8 [9 ~2 ?; v' n/ q- A
  341.       file=(*p).second;
    0 s/ n6 ?& Q1 E% h
  342.       free(file);
    / R+ d3 K" D2 s0 f0 f# f
  343.     }
    : F- Z) H4 t  {) n! _0 S! |+ u
  344.     UpdateFile3.clear();$ j8 j2 M9 Q6 X8 S7 K. Q, [
  345.     UpdateList3.clear();' t, _6 N/ A9 v0 f3 h- f" |
  346.   }' F) D! D1 M5 R; O8 B! R' O
  347.   if(UpdateFile2.size())0 o6 F( Z6 P/ z3 X/ C
  348.   {
    4 G& W, n1 Z5 u8 k$ B4 d+ B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) y; J# O( |. r0 i% i6 a% _! c2 l
  350.     {
      l- u+ \5 J7 t0 ^- R( Q
  351.       file=(*p).second;
    : w3 p; d! l" L! ~
  352.       free(file);
    + r9 |. @6 O4 q
  353.     }
    , s. a4 W% H! m: M( n
  354.     UpdateFile2.clear();3 v. l! [( H! h8 h
  355.     UpdateList2.clear();- ?8 z" M3 V' q! [. `0 e! v, m" E" r+ i
  356.   }
    ! a: O* A) K! x3 t2 Z3 Z, j& q
  357.   if(UpdateFile1.size())
    6 C; @  t4 }9 Z9 _( d! n4 [# O' n
  358.   {
    # B. Z6 {0 s& q0 s6 V" }2 _1 W: P
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) B  o, \) L0 a* H2 q* @( z
  360.     {
    ; O: I6 i, `; r4 k9 Q& q" g; Z
  361.       file=(*p).second;
    . b3 R2 R6 c8 Y" C: N1 w5 F
  362.       free(file);
    9 L& z! X" J& o4 W
  363.     }
    " Q8 V/ `1 I# v6 p% y
  364.     UpdateFile1.clear();
    ; J6 X# O% d' I1 r+ y; d% h
  365.     UpdateList1.clear();0 d  ~- F6 E( Z# V: E
  366.   }7 [9 M1 ~  V! ?
  367. }    _1 L) `0 c6 v! x6 m3 X
  368.   1 @( }' K3 \0 C' ]% ?9 w& z/ ]0 ?
  369. BOOL CRevAppApp::CheckLocalVersion(void)
      \& [) u8 h5 d% x; V" O* Q0 J
  370. {! Z' G0 M% x! }2 J. s  l1 y
  371.   int c;
    / l% l8 Y- L- V% w) y/ O
  372.   LPUPDATEFILE file1,file2;
    # k' m" d+ h3 v3 o: F
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ m  ]# B: [/ s' N* _9 @  Q9 E
  374.   std::list<CString>::iterator l;) h, H$ s& z, x7 M6 _- p0 g

  375. ; T7 t. M1 p/ `) d) Y3 ?. E
  376.   UpdateLocal.clear();( p( g+ G* l+ c% w* v+ A
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);8 F( x$ }7 `' X9 H5 l: A
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    1 z( F4 ]: D# l. z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    3 C0 M5 ^% o2 ?
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    $ Q. v7 Q: I5 S. ^6 e6 ~
  381.   if(UpdateFile3.size())
    / m9 S; v' q3 t# j# I- ?3 p
  382.   {$ l: U8 i; w7 K* u- S0 d
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 J" |5 `1 o" f$ }6 ]# p, ?# [
  384.     {, \! F6 v/ o% ]/ ~
  385.       file2=(LPUPDATEFILE)(*i).second;. q% a: L: o( |( ]* s+ s
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : D6 E2 V  r; T' [/ y- ~
  387.       {
    8 M3 e% Y3 f8 \* s( J
  388.         file1=(LPUPDATEFILE)(*p).second;
    . s( v2 J+ K! A% T, E3 N( [- |
  389.         file1->vers=file2->vers;
    1 y! I! h+ `" R) d' \: V
  390.       }; ?; R5 z( F. s2 K
  391.       else; F- B" S! a) {0 V. X( N
  392.       {
    - P; A3 c) p4 X
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      Y4 u4 s" v# W) d2 Y+ h
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));6 ]% y. R' e* R# ]7 p* W% e: y# \
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    " ^# N  ~* @* l! K
  396.       }0 m* g" z; M* r/ q, M
  397.     }! Z7 d7 G3 \; z1 D  x/ I2 |
  398.   }" d- D( X  i  Z3 a# W3 I- \* F. G
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++), V8 z- q. b3 L; X  `
  400.   {
    3 `- q1 e. ~# G
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' ~' I. g: ?9 m2 x; R" L
  402.     {6 ~" {' }" T7 H
  403.       file2=(LPUPDATEFILE)(*i).second;
    + t$ n3 ^" H8 B; P
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% O, f. A% O7 ?
  405.       {- S7 o: }  {7 \' M# T; [" Y
  406.         file1=(LPUPDATEFILE)(*p).second;
    , h7 J3 t* m& N2 f
  407.         if(file1->vers!=file2->vers)
    * P8 z. Z2 A7 C7 o
  408.         {
    4 z' n; c% A. P! D
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * T4 n7 z& A; b; h# Z8 ~
  410.           c++;# W. R9 B1 w, v0 N+ {" Y8 ]! `
  411.         }
    5 H. h: q2 l" D; o
  412.       }, T0 A7 D# p/ E0 T, {6 t/ K3 W; R. k: X
  413.       else) o1 b3 y- T3 E8 l  j- H( s
  414.       {
    0 Z0 |+ l- j7 [4 @' s
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* S' x3 Z! `" A; F- m- G
  416.         c++;1 I0 m$ s& U+ h2 [& a5 T* Y* _
  417.       }
    9 v. i$ _/ ]3 j4 Y: V
  418.     }# t) n6 E; P( c9 u
  419.   }
      q' A# }2 I0 E. w' ?' T1 e+ c
  420.   unlink(".\\DownLoad\\update.txt");- ?: ?: N( p, n) R+ J1 A7 h" q
  421.   if(UpdateLocal.size()) return TRUE;
    9 n: w' L) N0 a/ j
  422.   else                   return FALSE;# z6 F$ l7 F9 E+ R' T0 F6 ]: k
  423. }
    4 u( w2 X4 K4 v" E1 p2 G* C. z

  424. 9 R3 O4 Y6 k9 r& Z/ k' l
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"( w* C6 c* @% |* a) \9 P0 {
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - c, v! [4 X# S; R
  427. 2 |6 S# l* j  S( [  F7 l

  428. ' W$ n& }/ n+ D5 _

  429. % o( m% B& o/ @4 C, h. A3 x
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile). b! f. O* N$ e9 \+ f6 A% ]
  431. {
    $ c  M- I5 S; t8 z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;0 v- s. ^7 f9 z7 m5 Y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 O, ?: R, g2 E- q7 [1 y- l) [" a4 j
  434.   {
    7 k" {' u+ }1 f" w7 ~
  435.     char szLanguage[50];
    3 M1 K( N9 \2 Z! H7 j
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 S! a& D- V; q  i
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 h# Z$ |( s, e- ~
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 I5 @8 u) m' b6 S" Z
  439.     else                                   m_iLanguage=ENGLISH;
    ' w) e* L, u1 S% r9 M7 Q
  440.     char szRegister[100];, K! X' @5 K$ r! r: E
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 V) r- x* T/ U( `
  442.     strRegsName=szRegister;- p2 W; g* [: O5 Q
  443.     char szPatchURL[100];
      H  r, {0 O  Y" o: W3 Q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 y/ L; _6 p$ u. N
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. z, e4 Y$ \6 N& X9 B9 v3 @
  446.   }
    / O* Q, F7 Z. L- P6 [- e# p' E
  447.   else# u* K& w" a$ T! L5 Q8 |1 L% d% V: s
  448.   {
    7 F# L1 C8 g3 t4 C# C$ _5 W! N
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 C3 q2 G; G* Q6 B$ U" ]
  450.     strRegsName=DEFAULT_REG_URL;
    - w3 G% r- y3 O) X) |
  451.   }
    3 u0 P  U) c$ U4 [! t' s
  452.   if(GetFileAttributes("hosts.ini")!=-1)+ C& R) ~1 r6 ]/ X: L% [
  453.   {
    5 Q* y5 ^9 T$ o% d
  454.     char szIP[50];
    ' h/ K# u5 e% d# E
  455.     char szDIR[300];
    1 Q  g! ]9 v0 a7 U
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% T% D" Q- S1 p
  457.     {
    # G% n: i& k: _" Z2 l! z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");  O6 r- W# h: n% u# `0 u
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 P5 J2 D, u, S. {  ?5 l
  460.       strHostName=szIP;; w& ?+ \1 E- t/ k7 g
  461.       strHostPath.Format("/%s",szDIR);
    4 ^! H6 d+ f/ L/ n! I
  462.     }. n* o# r. L' h* w3 {
  463.     else& u2 K$ d3 m  c; H6 j/ U
  464.     {. `& x! m5 ~. N+ n8 z% K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 _+ @2 F9 n$ x7 t; U9 ?
  466.       {
    $ A6 A- W) N7 O$ M
  467.         char szLanguage[50];
    7 M7 X2 m$ `6 s9 \4 \2 e
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . q' N6 {8 s2 {  w& F) i+ s3 M& c
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' u  w+ w: D) P& Q/ A3 [, |9 J
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 w  ?* C& Y6 g! H) K/ P- i* S
  471.         else                                   m_iLanguage=ENGLISH;% {9 m3 B; H( }. N
  472.         char szRegister[100];& e( B) H9 o5 A2 I; J) e
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - N( s( T5 a3 O' N. w. ~
  474.         strRegsName=szRegister;
    1 m7 S* I7 k5 U& t1 o
  475.         char szPatchURL[100];
    1 n% S7 }  m# B' O8 L6 J4 A* ?- W
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; ]2 l& P& U$ Y: M, ?4 C$ P
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 D3 V" ~# G- c
  478.       }
    . a+ j- E; S) g. F" Q
  479.       else
    9 R# v9 x! ?7 ~+ s$ d! E
  480.       {% x$ F# e; c/ Q$ j- ^- a1 q
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 x3 s3 z6 H1 S# t! w
  482.         strRegsName=DEFAULT_REG_URL;$ X% H# @0 z& }! e
  483.       }
    1 A9 `1 |" d, v* W, c
  484.     }- C- U! D/ g7 m( F! y
  485.   }" C; A/ k3 W5 N( g! S+ f9 w
  486.   return true;; F" t3 ?& Q1 e8 C  f; s% m4 }1 R
  487. }
    . b" e0 O2 E- M  O) [. V7 o5 R
  488. 7 y6 y% K9 v# F( n1 \
  489. #include ".\ZLib\unzip.h"
    " m# i8 Y. p* B7 x8 a
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    & n( ^1 N& ]. Z1 `( J
  491. /////////////////////////////////////////////////////////////////////////////
    1 m" j( K7 u" }9 a4 {6 E$ s9 F
  492. // CRevAppApp initialization
    " ?, |. b( }( G) E4 O/ H% k

  493. 5 _3 v9 F/ I* r) N  }% _  R2 A; ^
  494. BOOL CRevAppApp::InitInstance()
    * V' ^. L! }  W' F' W' |
  495. {8 z2 f8 b! o& @" c
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];3 t2 B( p  A4 Z

  497. 2 ?& K0 f; y. _0 q: V- A
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);) G2 K: g3 n4 C2 m" p; i7 b- t
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    8 l3 q$ A* s0 j  B' a& h9 _7 g+ d
  500.   {
    4 E* J9 Z8 B) k! _6 `- s
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ; }" ?6 n( K+ m4 G5 Y% x
  502.     GetPathFromFullPath(szPathTarget,szPathSource);5 j4 y5 ]; `% f) D
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    / T* z7 U* n- G: E( }6 i
  504.     {
    5 W9 Y4 d4 A  @3 S" Y
  505.       strcpy(szPath,szPathTarget);
    : J  z+ W+ W5 o9 d5 V/ c5 _: u" K
  506.       SetCurrentDirectory(szPath);
    0 |" R' |5 l2 S6 u
  507.     }$ v: j' N; c" p8 N; j5 @
  508.   }
    6 V$ Z3 H5 N6 \* C/ K9 F2 p9 B5 ~
  509. #ifdef _DEBUG
    , Q' V0 _2 @. t( Z: R
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 i/ e& g+ M4 g
  511. #else
    - @3 X4 a5 C* T2 r$ f% c
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 G' \  `# \( N! G) f
  513. #endif- n3 @; p$ G* z3 _' Z
  514.   {7 x# b) F' |6 K) }: C! F, L0 Y( [+ i
  515.     char tempFileName[MAX_PATH];, Z* n8 _" F6 H4 ~" p
  516.     strcpy(tempFileName,szPathSource);% J: B! u3 n5 D' d
  517.     tempFileName[strlen(szPathSource)-12]=0;
    % Y& }( W9 H; i9 z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    2 o  G: Y4 M( K' f; X; l
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);) Z4 `( g" k( V3 ~" u1 Y+ n" P$ Z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);  N8 `% S0 b3 F  _+ t5 [6 T
  521.     return TRUE;
    7 J/ A2 I- X6 W8 B; l
  522.   }6 `6 g  J- E1 Y3 V
  523.   // Nuke 0118: Delete run.exe
    2 ^3 @9 V) J+ X8 R1 p
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    " m6 ]) C2 j. g3 d2 x! A6 H
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");1 c; }4 W: k% v3 d5 }6 q+ x, w; S
  526.   if(!ReadCfgFile("Config.ini"))% r" [4 |$ R$ B4 v# s: c
  527.   {# s, n6 S  y/ u; ]
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 R( i. [5 o0 ^6 r9 E2 [$ |3 J
  529.     return TRUE;
    ! r; ^6 x0 {* S
  530.   }
    , l$ b7 f: u' Q4 A
  531.   HANDLE mutex;: {( I" P% R" S' V9 t+ r
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
      a/ K* ~3 C$ A' C" P
  533.   {
    5 k5 h( Z& b2 i6 R' G. K, ]6 [
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)3 X% |& ?2 k5 ]- H3 @. L$ Z! i' R
  535.     {
    * n2 f' I3 R2 u4 [
  536.       CloseHandle(mutex);4 T0 \; J+ g7 t1 a9 i) [
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    $ u) B5 n  y) J( w
  538.       return TRUE;, S% k! J# ]5 T! v
  539.     }
      c% @6 [. l. I" s, l; n; w$ q
  540.   }  
    ' ?$ \$ J$ e$ c2 e! i' I8 v
  541.   CloseHandle(mutex);$ [& ~( r2 M7 f- R) G$ b

  542. ' _9 O" v0 Y) _2 p) y/ j: c
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; O: ~# G, V: m$ S, B, ?

  544. * n8 U! A- O; Y" b
  545.         AfxEnableControlContainer();
    4 @, S3 s2 \5 I8 `% f& a

  546. 2 f4 {7 D) e% Z/ ^7 E
  547.   bCanUpdate=FALSE;1 I6 q# v/ A- |( Y
  548.   dwStartUpSteps=1;  l! k" Q/ i) ~" c$ s
  549.   dwProgramState=AP_NOTHING;
    ' }+ O! F, ]% }" y
  550. 0 c8 }$ C1 \, X/ ?, S8 B& t- ]' o
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    : v* A# S8 v, ?- x

  552. . j7 e: Y6 c0 O" v. @, Q- r
  553.         // Standard initialization. g! k% q( n" }2 Z
  554.         // If you are not using these features and wish to reduce the size
    + s1 }/ C9 {$ h
  555.         //  of your final executable, you should remove from the following7 L$ |2 F4 j* D0 s# X  P
  556.         //  the specific initialization routines you do not need.
    & P3 C3 V. Q( d# U1 W  ^( F

  557. * f* S3 {9 \/ p+ h  Q$ g' p
  558. #ifdef _AFXDLL7 F) Q2 @$ X( e3 U3 ~6 @5 I' T2 t
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    0 u, @& @+ }6 y  t& h' x5 {
  560. #else5 V- e7 F9 p1 I7 y! F
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 K+ b4 D( X  I6 X& S6 E  |9 c' n
  562. #endif- ]3 Z! J  v9 s1 |6 S
  563. ) R& p' H8 \, R1 |6 _
  564.   dlg=new CRevAppDlg;) c8 `) K( M# s# @, t: W3 n/ |4 l
  565.   dlg->Create(IDD_REVAPP_DIALOG);) {0 C2 X- h- ^. p+ u4 e
  566.   dlg->ShowWindow(SW_SHOWNORMAL);$ |! O7 h- l# Q. v4 A- y% G! r* R
  567.   m_pMainWnd=dlg;
    " v* O/ g! k# N  ?  Y
  568. 7 s2 w3 w( B2 ]) p6 F/ ]) C5 [
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
      c! `! Z& n8 r: F
  570. ' ~2 Z4 O9 u. P7 `. u' @4 Z& Q" @
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ' Z3 f1 S  X) F  k" N
  572. //  ULONG_PTR gdiplusToken;0 B0 g9 h, l4 N: d+ ~  w
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    6 e4 p& ^. s! v9 p, H- b/ o

  574. 1 t( F8 L( x0 M# w: Y1 F* L
  575. //        CRevAppDlg dlg;. f6 K2 I0 z4 W; b  }: h; Q$ }" p$ J
  576. //        int nResponse = dlg.DoModal();# L- k; l* d7 C- f% t9 Y6 s
  577. //        if (nResponse == IDOK): @4 Y0 U0 J. T. Y2 g) P/ ?# |  T
  578. //        {
    0 r& _) x8 D, C" H
  579. //                // TODO: Place code here to handle when the dialog is/ I5 v$ S+ P0 W3 L5 K
  580. //                //  dismissed with OK/ S$ W% R* p, r8 j
  581. //        }
    / J$ B( C/ u: ^  [" [
  582. //        else if (nResponse == IDCANCEL)
    3 x! c2 a3 C. n) f: x9 u- U
  583. //        {
    ) q) y$ F: ~2 @% i1 q/ b+ }& ]
  584. //                // TODO: Place code here to handle when the dialog is* l" Q, i- t" z1 t
  585. //                //  dismissed with Cancel. ^6 }  x3 F7 T8 v8 b" W5 d
  586. //        }& P7 P( {; F3 }

  587. + o5 m. O8 j2 }- w. y. M
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    6 ]) V: Z. [+ N$ n; ^: t7 W1 E
  589.         //  application, rather than start the application's message pump.
    $ h* c7 O, J& \: O2 e
  590.         return TRUE;
    ! h% o8 @- S1 a  k, P4 o6 G: q
  591. }* C6 Z' e$ o' z7 J( z
  592. ! q) N" x% M. ?& |
  593. char *CRevAppApp::strtok3(char *pSource,char *token)) N  }  y* s' o* x
  594. {/ p( M1 f2 M% ]# D$ y
  595.   int i;) ~- t  g3 ]9 {+ n) V& T8 N5 e
  596.   char *szRet;
    : k* q7 |4 @" r

  597. ' ^% r! e* _8 y' D, j6 I
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    3 r1 p- P- i9 b1 u
  599.   if(sztoken)+ n5 B% s1 L: C. T) `% M" \; s( n
  600.   {. v. Q! j: R- _) h, `2 y# L# g% m6 q
  601.     szRet=&sztoken[itoken];
    5 B+ \, T8 S( j
  602.     while(sztoken[itoken])# G: _# w2 t# {% t0 T2 ~4 v- \
  603.     {
    7 z+ g' D6 Z+ v9 y
  604.       for(i=0;i<(int)strlen(token);i++)
    4 ~* ]% k6 M2 g. p
  605.       {
    ) |+ u: N; d, v. M% Y" ]3 A
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])2 W& O0 u+ I$ l* Z
  607.         {
    ; G4 k5 o  b# Y1 m
  608.           sztoken[itoken++]=0;% {4 ~% D' q1 m, d
  609.           sztoken[itoken++]=0;) T2 W% [# S1 |. b1 ~3 _; i$ ^
  610.           return szRet;/ i: E" P; g* [2 X2 K& f% S) |
  611.         }4 S5 v, C# z/ {+ p- l* {# r$ s8 L+ h
  612.       }
    % u* X# `$ J% _
  613.       itoken++;
    / ?0 x% [5 I5 P1 G2 u: x) N9 k/ \& t
  614.     }5 ~, l; m5 I4 [5 F9 V$ p. A0 G% Y
  615.   }
    # l0 A4 {7 \! w- i4 c' U  n
  616.   return NULL;
    $ W2 i; B& y  J2 D' L: B
  617. }9 D! p# O# q' O  b: o3 }& j

  618. ( a  O" @* Z9 E1 Z# ?
  619. void ProcessProc(long Total,long Current); j9 R9 v0 r( V9 \- V; U% p
  620. {
    2 J* M" H- W5 u& Z
  621.         MSG msg;
    - q" Q( v) ^5 |+ d0 p: @
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);( T# _7 w7 |1 Q# i  z2 W  h
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' e, ^5 |. O2 s4 E, V4 p$ l1 x
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + p* t( \' d) [5 U
  625.         {
    ( C( L6 p5 [6 Y5 ^9 ?. P
  626.                 if(!GetMessage(&msg,NULL,0,0))- @0 I+ U+ `* I) T2 e4 [1 d
  627.                 {
    ; d; B0 H: B. R/ V% Q. K
  628.                         return;& j  l: |' ]; M. H5 ?# S3 g! Y) @
  629.                 }' ~( M2 T2 H( e( C7 \8 i
  630.                 TranslateMessage(&msg);
    * `8 y' d, N% j, U* b5 S4 t* \
  631.                 DispatchMessage(&msg);" i# E( k; c( c: m) ~
  632.         }        / {1 G" i# K( d
  633. }7 \; C1 L* z) X1 A0 L6 S! U  l
  634. 5 l1 N5 H* {7 i" G  J: b1 s5 L! J
  635. BOOL bFirstChar=TRUE;7 \& k  G" K6 M: J2 y! x7 W
  636. 8 ^) [; Q8 Y8 c7 X
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
      E$ d& [/ S! t
  638. {; l$ S" [( E3 I  T: @$ c
  639.         // TODO: Add your specialized code here and/or call the base class
    $ F" b0 ~$ S) n6 i
  640.   switch(dwProgramState)
    8 N3 w( I  |' C4 o8 r; e
  641.   {+ a) {) y$ J$ Q9 ~: G1 t! Z
  642.   case AP_NOTHING:
    % ^, `3 @- u" n: n
  643.     switch(dwStartUpSteps)
    ; n5 l( H' k# z; O* @/ T: q4 Q
  644.     {; E/ Q5 ^/ D9 [3 X0 ~* D# j- G
  645.     case 1:
    6 N/ I# ~, L# Q7 N; r9 s0 f
  646.       {
    ; g! J. j% |3 N# v+ Y
  647.         int i;
    3 Y: @. P" Z% A/ }0 A1 G6 _; J! P
  648.         CDC *pCDC=dlg->GetDC();
    ( l, M3 M# l7 B) y) B
  649.         HDC hdcwnd=pCDC->m_hDC;- @3 I( @. f0 u+ B
  650. //        Graphics graphics(hdcwnd);
    4 O! W1 C$ u- e% n. F. C6 c  p' Q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");" c, I5 P: U( n4 x  ?
  652. //        INT iWidth=bitmap.GetWidth();
    ( ]) u6 O" P6 @/ [% g
  653. //        INT iHeight=bitmap.GetHeight();. C, \1 N2 z8 h" W' {! T
  654. //        Color color,colorTemp;4 H0 |  c5 @; m7 g) J" U6 N
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    * m- e' \: U2 u+ [9 _
  656. //        {
      M9 V: ]# @/ W7 }, L! W; p, B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++). s; A) R4 Y  w% c7 E
  658. //          {# C" x4 s0 x% d  l
  659. //            bitmap.GetPixel(iColumn,iRow,&color);# f, c9 ?) s& J
  660. //            colorTemp.SetValue(color.MakeARGB(; r: Z# S1 F+ r0 E! u# m
  661. //              (BYTE)(255*iColumn/iWidth),
    % a  z( k& m7 y; s- o, i5 Q# y: B
  662. //              color.GetRed(),
    : ~+ k' [2 `$ H2 M0 [( Q* N" D
  663. //              color.GetGreen(),
    9 ~* G& u9 S4 |; x
  664. //              color.GetBlue()));
    " W- T$ I+ T1 B5 V
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);% J5 P8 P4 a/ E# X3 n4 G
  666. //          }
    7 \0 C* B4 r) v0 ]% B3 Z
  667. //        }+ p* U: s- B2 u1 O$ b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);) p5 X$ B3 v. L
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& l8 u7 I+ Q2 S! s! w2 T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 N' D2 S. W4 C
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 R& f9 O5 g+ D  Q
  672.         for(i=0;i<240;i+=8)
    - p$ R; A$ j( m! k1 t
  673.         {
    ; H0 C/ r( L& \$ j# ?# }1 O
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 A6 [" [& @, A1 t) Z7 V5 y' g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 K! L- b8 u: L- o2 p- r
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 n9 }: N! L3 [% `# I, ^+ j) W3 \2 F7 t
  677.           Sleep(33);
    / }$ V* ~  ~: w( E, r+ f
  678.         }! i0 h* v/ a1 l* R1 {
  679.         Sleep(1000);' u: Y! _& T9 z4 v+ l
  680.         for(i=240;i>0;i-=8)5 n; R2 x( i7 p6 M: w. p
  681.         {
      D* C, L3 g, q$ N
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 G4 d0 {; M, j5 b
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: K* Z1 ?( B# |; ]
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);, v4 I$ }8 C& O( r" L/ Q; [( N; D
  685.           Sleep(33);( Y" u6 {. \: u$ Q
  686.         }: i7 ^. N/ ^9 e
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    & L0 i) a5 Q1 l" D
  688.         dlg->ReleaseDC(pCDC);
    7 |6 E4 K* g, e; j" w0 j( h
  689.         DeleteDC(hdctar);
    3 p$ _5 R6 {: c, g
  690.         DeleteDC(hdcsrc);3 C& L7 _0 p* r- p
  691.         DeleteDC(hdcorg);
    1 B" c8 E- Q/ k
  692.       }
    : f' h  E, q4 F9 Q: j
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    1 V* Y4 s- B' }. x+ A
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    - d) S2 V  S) x" {9 ~, C/ q7 F: `
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    / {7 n1 |/ D3 V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    2 f: l; }, ?& z, W8 {  Z% Y3 a: N  Q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 y" P4 `% Q+ }' e
  698.       if(!Dn.Connected())
    & m9 q) B4 x, F+ ]% H* R
  699.       {! B- T0 [$ C4 h$ w3 k
  700.         dwTotalFiles=1;
    9 Q$ F( X* k3 R' T$ \
  701.         dwDownLoaded=0;
    1 G* \7 N7 k& u
  702.         bSilentStep=TRUE;
    & O8 S: H3 f1 ?7 b5 D
  703.         bCompressed=FALSE;" z2 H4 O5 }8 k* I# Q
  704.         strExtLocal.Empty();
    7 J& h+ n' F" c
  705.         strFullName="readme.txt";
    * I" d$ [! L' w% P& k7 A
  706.         dwProgramState=AP_CONNECT;
    8 a( r8 o7 J( p7 a4 u# l; x+ h
  707.       }
    ! n6 ~9 P6 c( P! ~2 ^' [
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();' Q$ k2 `5 E; o) w
  709.       dwStartUpSteps=2;7 e" }9 ?2 u. Z$ g
  710.       break;
    - C3 B  u; }( b- B
  711.     case 2:0 H, ^7 }, v% D. z% |
  712.       {( }* d6 A4 P' Z! B+ l* }5 V
  713.         int iEOF;
    9 D6 J  j7 {* z8 ]4 d0 U/ \
  714.         FILE *fp;2 h4 [2 ?/ p* c; Y  A" b+ `
  715.         char szString[512];
    ) F# P3 `, Y9 F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");6 d" I- j* i" R7 M& `8 [
  717.         if(fp)
    $ _1 P2 |( Y$ Z, N$ Y
  718.         {, }' I' ?, U( h
  719.           do
    : D2 w1 x, }$ D: f8 V
  720.           {
    6 R3 ]3 M& j: M" `7 @
  721.             iEOF=fscanf(fp,"%s",szString);; w7 L2 k( e* R- N' T
  722.             if(strlen(szString))% j5 }0 D1 H& ~; i
  723.             {0 v1 q, R( l: f; H
  724.               if(bFirstChar)
    9 h7 y. @( @$ ]' _0 a8 M/ ?
  725.               {
    % J& q. i& {$ o
  726.                 bFirstChar=FALSE;
    9 m$ M1 D5 N  B: N3 d
  727.                 bConnectIsBig5=FALSE;; F% p$ a" X( x* s
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
      t- Y( E/ ]  `, ?8 B3 f; w
  729.               }% ]1 u1 @* s+ N/ i3 G9 I; L; Q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));. V5 v  ~( O& E, \# r3 ^
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));' A- F/ n  U4 y% G
  732.               dlg->m_ListText.AddString(szString);
    " F5 J+ j, ]- X, a( n- F
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " L( U5 P9 r% r" e( r
  734.               *szString=0;: F9 w# j- t4 V8 H+ x
  735.             }/ o0 H1 g0 e2 K$ ?8 {  J, Y
  736.           } while(iEOF!=EOF);  F' N: B8 O% b
  737.           fclose(fp);9 C/ [/ S! ^7 i# [$ u5 F5 g
  738.           unlink(".\\DownLoad\\readme.txt");8 F! k% D- L2 L. k# }7 p) ]
  739.           dwStartUpSteps=3;
    7 k; V: ]% f& ?6 Q+ t
  740.         }
    . r4 ~6 [; \9 U
  741.       }
    , J( i( h. T: Q
  742.       break;1 [- F6 p* a2 g* j$ c
  743.     case 3:: @2 K) H. X) ]$ l. X, j
  744.       if(!Dn.Connected())
    ; x, h9 q4 D0 L  `& U- @1 c
  745.       {
    1 ^( c8 M  F1 K1 ~6 q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    % H9 X4 T, p9 x! _% D
  747.         dwTotalFiles=1;8 k3 X  A9 N9 g  ~7 T9 M8 i
  748.         dwDownLoaded=0;
    , {  ~  v; W2 N1 x
  749.         bSilentStep=TRUE;& V1 A) g; p$ _5 m7 D6 p- D
  750.         bCompressed=FALSE;
    : M( N0 Y2 s; r& I5 e; `
  751.         strExtLocal.Empty();
    4 W3 x0 X) f4 B! m6 N
  752.         strFullName="checkversion.txt";) u. A. _! w8 G$ ?5 K6 _
  753.         dwProgramState=AP_CONNECT;* v: P$ s% _) M7 n( h$ f/ l; |' e
  754.       }
    + P- R) O8 S4 N; N
  755.       dwStartUpSteps=4;
    3 Z: h  u& |# B/ o$ Z3 K! E4 I9 Q
  756.       break;9 q' g. S* C% ~/ o7 T" e
  757.     case 4:
    8 O, k, y8 l7 T
  758.       {- B5 _" V! X$ t* z4 Z1 m- a
  759.         FILE *fp;& n2 |" p6 d$ x  {
  760.         char szString1[128];2 B! A# M1 E, k; M7 S7 \, l4 d
  761.         char szString2[128];4 F- D/ }) U. }& g- h: o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");8 K0 X! w! ~9 o6 n3 t1 C' y: o5 @
  763.         if(fp)7 P2 |# g% g; g& Q: q
  764.         {( J& s& O+ f. r. M/ W1 H2 n
  765.           fscanf(fp,"%s",szString1);
    ( Z) X9 t, q6 D' g4 L' q
  766.           fclose(fp);. v2 _) |1 E) t: o. j# {. k; X
  767.           fCheckVersion=atof(szString1);
    , X! B6 `6 p0 @* j& ?7 E8 E3 y5 j
  768.           fp=fopen(".\\checkversion.dat","r");
    ' l/ {+ `! e  p2 |% }; w
  769.           if(fp)/ Y8 l& Q) W, p
  770.           {
    0 z- s# L0 U% H
  771.             fscanf(fp,"%s",szString2);
    / w8 T/ b! T5 h* W
  772.             fclose(fp);: A5 {; n7 K1 g0 a
  773.             if(atof(szString1)!=atof(szString2))
    0 _7 C8 H+ w. B& K, V. t" F
  774.             {
    0 H' x3 F9 W2 G8 p  D$ _
  775.               if(!Dn.Connected())
    , k% \) f, C7 C  l
  776.               {, J+ Z0 N% J5 D% o/ w9 e! ?* _
  777.                 bFirstUpdate=TRUE;/ }( j3 p9 M! U; ?$ b
  778.                 dwTotalFiles=1;
    ! [" Q+ T1 W2 k" k. X
  779.                 dwDownLoaded=0;
    / I, u! v% r7 V( d
  780.                 bSilentStep=FALSE;
    " D& s" K* T6 V/ m6 J- F
  781.                 bCompressed=TRUE;
    2 }2 `8 C- F6 w1 B% V2 W/ A: ?
  782.                 strExtLocal=".\\DownLoad\";$ f1 J9 e% i$ M$ L5 H
  783.                 strFullName="update.txt";
    " c& \' F  L' Y  m# p
  784.                 dwProgramState=AP_CONNECT;4 |, K: V  {6 m/ P# N. A5 I
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & i' o2 A* z2 @. E( E9 r' j
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: S3 N% Z* c* n  l. q% C
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");! B) I* s" ?% I: y- b1 Q# r

  788. 7 o9 W5 [. I/ v5 A$ u( I) V% ]
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 B2 \" L. W/ `" E" T0 t
  790.                 unlink(".\\DownLoad\\checkversion.txt");0 f0 e9 Z. r; n0 Q" l' ?
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1); p& l6 r4 D# }+ m6 b
  792.                 {
    ) u/ Q7 t& e! b: w6 h& q1 W
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");; n, O' t7 b+ v  w) g# [
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % ^( n* ?6 k' _2 `' E$ ]3 X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 v& @1 Q% C; W: w! f3 r
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 U4 o* L7 x* f

  797. " p% ^( F2 t$ x: l+ c2 M
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) i* D4 b7 q& d1 L1 d
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");+ p8 q4 ~4 k2 A
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");1 o5 ^% z, y9 t: b1 i1 t9 q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 Z7 R6 [1 Z- r& s# \1 D  r# m; v
  802.                 }
    5 q  |  s& q" F2 z( j* s
  803.                 dwStartUpSteps=5;
      Z9 Q5 _% |: G* @0 H
  804.               }
    : Y2 P( y% h, y# B0 Y' g
  805.             }
    : S9 H$ Q7 n2 d1 N* `
  806.             else
    : g, S, `* E  {- O, j% s/ Q$ T
  807.             {
    3 ^' w' H; V" _7 }
  808.               unlink(".\\DownLoad\\checkversion.txt");/ V4 p% B4 u5 C5 o8 W2 j$ l
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 |" `6 u* I. i; t) E0 _, P& z( S, u
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");; a8 R7 T- }4 E& Z" \* @+ d
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    # O/ w6 ^: p6 F; z# S  m
  812. 5 ~& O- Y/ M2 B2 Y8 i5 t
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' U) T0 Z/ ~( K7 d% c% `
  814.               dwStartUpSteps=99;
    . }9 Z" b/ \. `
  815.               bFinishUpdated=TRUE;; i6 @; u! i0 G5 u* `) q: I
  816.               bCanUpdate=TRUE;9 n, R! b, l# @/ K' q
  817.             }
    : [; m: O* l8 b& E9 f* n0 b
  818.           }0 O  Y; j* f) g1 K3 u
  819.           else- o( S1 x. J3 h9 \1 s' a$ t$ ~
  820.           {# k6 c/ x, y7 `: e
  821.             if(!Dn.Connected())/ ~5 r6 o6 ^! F% l  ]
  822.             {! c8 ?7 @: j& y  ~& o4 f+ q: u( _
  823.               bFirstUpdate=TRUE;) F& w( f/ H8 b0 E. Y$ u9 i
  824.               dwTotalFiles=1;( O5 {2 [- [$ ^" }0 n1 N2 @
  825.               dwDownLoaded=0;7 `6 D) X  A4 ?; _
  826.               bSilentStep=FALSE;* `2 h; O( A2 `' O
  827.               bCompressed=TRUE;
    + n  W+ Z8 B4 {: i+ r
  828.               strExtLocal=".\\DownLoad\";
    ! K* A* `* h  x
  829.               strFullName="update.txt";
    + V$ z; u* G& C
  830.               dwProgramState=AP_CONNECT;
    8 \) D" q0 v& ?3 i" |
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / r! P3 j* T% s
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 ]4 |; W0 H$ [; c' {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");5 _; R* O% H0 q) r! R0 X0 v
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 o2 h9 j! A! D- G+ Q
  835.               unlink(".\\DownLoad\\checkversion.txt");* H7 {* j0 v! w: @4 P* p" v& A% L- S
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    , d1 _$ q% Q. d/ m; z4 z9 }
  837.               {
    ( ]0 P4 A. P' Q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    - ^4 i" i( h! x9 X$ u+ y/ \/ n
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    & \( [" ^- X4 w" X7 `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");+ I4 H7 L$ }" m! L# S3 X
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 g4 |0 I9 l! Z( X" E9 P) |
  842.                 ! b% A- P  a3 _, O5 H9 c) m' L; [  O
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: k# Q+ c6 ^) w
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % |! a( b: O) ?7 x, B/ ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");1 N2 p2 f6 P$ `) ?( ]7 i
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" r  s4 M, h/ f" h  X7 a2 w: ]& [
  847.               }* e* z" l' q5 X) i; C& s
  848.               dwStartUpSteps=5;) J5 {2 q0 T2 `2 _
  849.             }
    2 |5 ]+ P5 S9 X5 k
  850.           }7 n, T5 `. J5 \1 `8 B& H* e. `- Q
  851.         }
    - `7 e+ D* P; G2 t* [/ L4 w
  852.         else; ?: @1 F0 F, p  L# r( O+ F
  853.         {7 O5 A& q1 @, [0 Z' T
  854.           dwStartUpSteps=3;
    ) N  k6 s2 o$ l, B6 h
  855.         }$ J6 K6 d( N* f1 J, o' ^
  856.       }2 F8 x" C8 L% a) [
  857.       break;
    3 O6 h& M4 K8 G+ J: S3 ?
  858.     case 5:
    4 X% p( m" \) R. a$ Z. N, e" c' i
  859.       {( c/ t6 ]! c" i1 g+ \" L& T
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& ^' X% d( h7 J8 S9 S/ }
  861.         {
    2 ?! z* z6 \  a% [6 f! ]; c
  862.           int opt_overwrite=1;
    ! B" O7 e( a4 j
  863.           int opt_do_extract_withoutpath=0;/ W" _" h  v) m3 a: b" G1 z0 _
  864.           unzFile uf=NULL;
    3 D7 ^2 }5 D8 ]. g! L
  865. , S( |3 @: h7 H7 }- B6 L
  866.           uf=unzOpen("Wsa.zip");& N1 G6 x% j6 h
  867.           if(uf)- {* s5 O: U5 \; b; q* e1 v
  868.           {+ r& O% p# F* ~/ L# e8 G9 d0 L
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);: `3 q9 U- |, w1 `0 x; u
  870.             unzClose(uf);4 E9 s! n2 }$ L: Q
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    , Q# v1 w  G, P* [  c
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    % ]6 @9 t1 Z* L" i* @, w0 @& x3 T
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    0 M' y2 {& x& e7 B9 T
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - _# Z, ~7 i& P# T
  875.           }
    - X6 f8 F$ I# Z
  876.           DeleteFile("Wsa.zip" );
    7 K+ w4 o0 B5 v; P/ E1 w7 ~
  877.         }% w4 z' |! l# K- Q* C( C8 K* ^
  878. / J' O9 m9 k- a: n* S0 P. ?* Q
  879.         if(CheckLocalVersion())8 ~: ^) F' ^) e1 b0 [" M5 ]" ^& h/ }
  880.         {* E5 H8 R7 U, M# W! A
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");( d( p0 T, h! X; l  P! I
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    3 M/ W/ g* A! r* n
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");( ?4 f0 t: f: s1 a2 U9 P% `
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + o0 H" K% g) S
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    # r$ X! N$ M5 i! {& ]; J
  886.           dwStartUpSteps=99;
    9 H$ P9 w! e$ ^
  887.         }$ x2 A1 O* B7 o$ p9 y! v
  888.         else5 Y, w$ b+ g) O8 g
  889.         {  @& h4 J2 S. L+ ~& p9 k# r
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . B5 Q) Z: Y  g- U+ X! J
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! \3 _. k8 Y3 J/ F7 n; u5 O
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");& r& p: r  m9 o+ a

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

4 B$ v2 U. V$ t4 L) F/ ]

評分

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