找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
- R5 u% g) D8 U" C, i) C. V: F% c
  1. / RevApp.cpp : Defines the class behaviors for the application.
    8 t* z" Y" P- v4 i% U5 a
  2. //4 Z6 }0 w9 n7 q% w

  3. ; x3 g2 @" y7 ]" c+ s8 Z$ F
  4. #include "stdafx.h"' m% b6 v7 e, U% p4 y( d( F! i
  5. : u" T' W3 |  s7 {4 Z5 L9 S
  6. //#define UNICODE
    0 }3 W) d8 F% [( H. _9 t8 d" W
  7. //#include <gdiplus.h>
    1 F, y$ z0 j$ S
  8. //using namespace Gdiplus;  M1 y$ U/ Z. Q; o8 s. r

  9. - ~* x; N8 Y5 Q8 ?
  10. #include "RevApp.h"* I+ Q, s  c0 f1 ^5 u- B! G
  11. #include "RevAppDlg.h"$ V* h/ l' O# v; t/ i4 {- _" A

  12. 8 C7 Y* }% e7 a- m
  13. #pragma warning(disable:4786)6 \- U9 o* y# p1 c
  14. #include <map>
    # C; P3 n4 u* I6 {) |
  15. #include <list>
    - y# P9 ]: L2 Q1 n% b
  16. #include <direct.h>5 z, j: ]/ C. @* j
  17. * E6 g7 G/ q: b( J
  18. #ifdef _DEBUG- ^, [1 R! I9 x+ Y8 L8 w
  19. #define new DEBUG_NEW! T: ~# j1 v& w. |
  20. #undef THIS_FILE3 U1 D, |# @5 g  W/ Q. w/ e; S
  21. static char THIS_FILE[] = __FILE__;- j! }, |: h! H+ Y" q9 G5 T$ ~5 T
  22. #endif( R2 @% {- c1 d% t$ v" y
  23. #include "SkinResDef.h"9 j" G0 f5 [7 h4 f& B
  24. #include "ChangeBG.h"
    ! n  l$ J  Y5 z7 S
  25. #include "AFXINET.H", Q8 y2 U8 k9 T* S2 j" l
  26. 0 b. q- ~5 r3 Z3 R: T$ j
  27. #define TRADITIONAL_CHINESE 0
    8 N0 b& J! [. D" q4 M, W& ^
  28. #define SIMPLIFY_CHINESE 1
    0 Q( i0 F- z2 B/ l
  29. #define ENGLISH 2
    6 V! ?1 W3 z' {0 M
  30. int m_iLanguage = ENGLISH;
    3 G* k6 S+ D# |- h! a" u
  31. /////////////////////////////////////////////////////////////////////////////! Z% C) t+ z7 X2 n/ d
  32. // CRevAppApp* c, `. z* l/ q  }' W) \2 ~. g

  33. 2 H! E" N( x1 E1 o  n' }
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)* l: H  K9 e1 t  a" K! E' G
  35.         //{{AFX_MSG_MAP(CRevAppApp)# M; R4 M/ _2 D& ]  C% v, U* ^) e1 V1 z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.7 F) p* k2 D0 I+ G& d) Y8 D- Z
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!* @) j1 ~, Z* R6 m3 R
  38.         //}}AFX_MSG
    1 t% [0 e7 b' z3 a# i1 O
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp). ^7 y% Z- x* G; N. N8 z) c
  40. END_MESSAGE_MAP()
    4 g" O9 i6 f5 ~5 q

  41. , B) F& `+ h/ B$ H, K) ]
  42. /////////////////////////////////////////////////////////////////////////////+ e: J, }% y. c  w$ k! I3 |
  43. // CRevAppApp construction
    7 m+ d0 L2 ?+ t; j3 l5 g' y

  44. 4 I  E+ R$ f+ a6 H
  45. CRevAppApp::CRevAppApp()
    4 [0 e. i; N9 }6 s& i
  46. {+ U! @2 `+ w9 P# t
  47.         // TODO: add construction code here,8 D  E0 e2 m4 c: b4 K& E. y+ U
  48.         // Place all significant initialization in InitInstance
    ' U% o* ]5 W. m; n. w- n; M0 b1 m
  49.   bDisplayIsBig5=FALSE;0 L, Y8 n/ B0 j+ B+ G
  50.   bRestartUpdater=FALSE;6 E% A' l- a* R8 S3 N  H7 C8 p
  51.   bFinishUpdated=FALSE;
    ( S$ |# A8 N9 c. _, V
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;( k! N6 `! g: x, t/ V) W) k
  53.   InitChangeDataBig52GBKS();/ s9 U. V! Y0 l+ l$ Q3 ~; u
  54.   InitChangeDataGBKS2Big5();
    4 t2 u$ G1 ~! o$ J. J
  55.         //
    * l7 F% l/ m! \- _6 h
  56.         bClickRunExe = FALSE;5 j6 D* Z8 W+ R# U$ I
  57.         //
      |4 a; S# o1 h+ O1 ^
  58. }
    * ^; E7 V5 l# n; A5 h2 y

  59. ; }# N; l, a, A, Z5 |% [0 A8 A
  60. CRevAppApp::~CRevAppApp()
    7 e9 z/ \5 I9 @  a
  61. {
    : K, R* B# _, T9 ~- j$ i6 z. u; }
  62.         // TODO: add construction code here,& V* ?+ U$ N3 S5 T: z
  63.         // Place all significant initialization in InitInstance& O: d' \$ ]9 D
  64.   EndChangeData();9 N) F6 O( J8 b' m
  65. }
    # ]- b' B, H9 ^: n+ ]: R
  66. $ B- g) r. s$ `  }4 s# N
  67. /////////////////////////////////////////////////////////////////////////////8 M/ W8 {% w# _/ v6 s2 l( j+ W
  68. // The one and only CRevAppApp object
    3 T# L+ R9 p: ^. T' i# `' w
  69. + d& P0 t8 B' V
  70. CRevAppApp theApp;
    - F# [  ]5 ?! F" |) X5 x" l( b3 M
  71. + J; _8 F4 V+ J1 |7 Q: {
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    * T! B2 j. g0 f8 c: N' d
  73. {
    " V$ K  }( d9 T
  74.   int iEOF=0;% `6 H' M9 T3 y/ }9 {$ A1 ]
  75.   char szTempName[MAX_PATH];$ U/ q: L/ e8 x2 _$ M' V/ o( A5 ^
  76.   *szFileName=0;2 y, C, }  A1 }: _. \( z# h; c7 N
  77.   iEOF=fscanf(fp,"%s",szTempName);' C$ k& Z4 {4 Q' r
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')7 N: L/ h- Z) r3 m; P" N
  79.   {
    ( B0 ~* N$ T1 ]
  80.     strcpy(szFileName,&szTempName[1]);
    6 ^3 F: H! h* E- `0 r& [9 r
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)7 b% C+ D! Y: X9 w( x  [% c
  82.     {' p, t" a8 z2 t: i* |0 e
  83.       iEOF=fscanf(fp,"%s",szTempName);
    . ~9 B1 ?1 S- f, b
  84.       strcat(szFileName," ");
    7 H0 K: l/ r$ z& r& r0 V
  85.       strcat(szFileName,szTempName);
    $ |* J: _$ \+ L9 l8 b
  86.     }* [! A: A3 W1 I5 ~5 h
  87.     if(strlen(szFileName)>=1)
    1 K4 u8 B% Q0 Q. Y  X$ ~/ w
  88.     {
    / E- I+ P% A' k. r+ k
  89.       szFileName[strlen(szFileName)-1]=0;3 u) P( }& V$ w& J) x) }: W4 {
  90.     }; n4 l' ~" J9 [5 n! U& |) o# z
  91.   }
    " q5 c- D7 q- z3 @
  92.   return szFileName;
    0 D' S# v. X; I
  93. }2 ^  w, w) ]$ l. T( k

  94. 3 P$ j. q/ f1 W% \( a& A4 k% P
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)6 {# I6 \6 P, z0 I
  96. {
    % [9 J2 s' h( S$ N6 U/ q: `
  97.   FILE *fp;
    * I" F* a! W+ r( A, O
  98.   char *key=NULL;7 i: C% M- N. U( K8 B! w
  99.   char version[MAX_PATH];1 W1 c2 M  h" a' \
  100.   LPUPDATEFILE file,olds;
    5 X; t2 l4 e. q
  101.   std::map<CString,LPUPDATEFILE>::iterator p;! R3 [" ^# }8 H- |

  102. : G2 o2 o' w) i, H$ w
  103.   UpdateList.clear();4 ~9 Q! d! j1 ~' p
  104.   UpdateFile.clear();
    0 u6 I( \( E% z8 Y
  105.   if(GetFileAttributes(filename)==-1) return false;
    , p7 T% d) [; U( \3 |
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ) e, F' Q# b- B8 [6 L2 s/ u
  107.   fscanf(fp,"%s",version);
    3 ~" a5 H, u' n" w+ E
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ' Q8 Q8 ^* D1 I, T( h
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ; q+ ]6 ~7 m2 v! X& X
  110.   {% X8 V4 h/ X; e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 W; W$ h8 A# O) i9 Z) o) _
  112.     fscanf(fp,"%s",file->path);
    5 e' m  H$ F# B5 y# V
  113.     ReadFileNames(fp,file->file);
    9 I' o$ i. {+ Z. V/ g5 M# F6 ~
  114.     strcpy(file->full,".");
    ) ^) ~9 X# W7 v: }. f
  115.     strcat(file->full,file->path);
    ! Q' x7 T9 f! m1 q0 O8 F- X
  116.     strcat(file->full,file->file);
    - O% w- x, O4 b3 G: _/ Q
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- i# e5 ~/ U1 r
  118.     {8 H9 S. A* t3 t7 K6 ?
  119.       file->vers=(float)atof(version);
    ! u$ ]2 u% ?1 Q! i; `, b, N
  120.       UpdateList.push_back(file->full);
    2 C( O2 b. N. p+ Z* |
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 ]6 d; z5 J8 e2 E2 @- `
  122.     }
      o$ b* u# v3 e* O
  123.     else
    & @+ B# `: g9 R& m* W* k
  124.     {
    * @& D9 @, p! ?+ \' ~
  125.       olds=(*p).second;6 |  G. Q4 T4 f, b+ ~, c
  126.       if(olds->vers<(float)atof(version))
    # ]5 A0 i8 a9 u0 ^
  127.       {
    0 p, z: A0 H, a) m
  128.         olds->vers=(float)atof(version);
    8 H9 ^: x% t: ]8 i( c( t5 d8 S+ F9 c
  129.       }' H; @$ y" {  i( K' \7 Z7 q7 K, D
  130.       free(file);% t. y" c) t+ M& j: G4 p
  131.     }5 u) Z4 c8 ^2 h5 M( s; R( T
  132.   }7 v" w  a+ F$ W1 R+ U
  133.   fclose(fp);
    % H, J3 e) a9 g/ i8 n1 k
  134.   return true;
    4 X! ^. H$ A# v0 V  q
  135. }, o* k% E* c4 ?9 \" N

  136. : R  G* B+ o) ~; o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)- p' J8 r3 [# L4 J4 g
  138. {4 A+ c$ z; L( x8 o/ K0 g5 }
  139.   TCHAR  szFull[MAX_PATH];5 w  B* r% o  x5 k+ [5 Z
  140.   TCHAR *token,*inter;
    0 R0 q% m$ a' v: I) {; t# d) O1 p5 g
  141.   *szPath=0;
    % c/ u  B4 b. X" g3 q
  142.   strcpy(szFull,szFullPath);$ b% I4 }6 K) c! k6 O
  143.   token=strtok(szFull,"\\/");
    3 C0 b: {; J, ]: C1 i( O4 U
  144.   inter=token;- T( _$ z0 _* {; s
  145.   while(token=strtok(NULL,"\\/"))2 F: G+ x2 P) r/ d
  146.   {
    4 p4 Z+ [& ]1 f! a
  147.     strcat(szPath,inter);
    5 B, ?* g# N; L8 W, H# \( A) N+ @
  148.     strcat(szPath,"\");
    ) E* F# L/ t. z7 Y4 r, P
  149.     inter=token;
    7 ^: Z+ l7 _) \. P/ X* M
  150.   }0 V# t4 g, N- S  v2 Q
  151.   return strlen(szPath);- L: u2 S: Y5 S% B
  152. }
    1 S5 z  n9 q% b% W

  153. 6 |" X, m. b9 V% c: {
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    + C  Y. }$ p) {) V) w8 `
  155. {2 u# X" u" s9 e2 W% Q5 U, M( \! H- o
  156.   DWORD attrib=GetFileAttributes(Target);3 E( C8 Z+ k% C4 c" Y: F! u$ L
  157.   if(attrib!=-1)
    ) f! O7 ~+ s% Q6 S4 I5 o
  158.   {( {% a4 E3 r! ^7 [+ e
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ) a- U) @6 s" X1 A% H2 Q; _# f
  160.     {% D" h' }* Y# [$ C: j4 H% I
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);& I' r. G! k& E; M
  162.       SetFileAttributes(Target,attrib);
    1 }3 L0 x! B% u$ O. }+ r" l
  163.     }+ l3 X# O- f6 e. {
  164.   }
    ) h+ S8 x0 H8 j9 d
  165.   CopyFile(Source,Target,Erase);* x$ n; W# ~. G
  166. }2 ~. ?0 c  t$ q% ^; K5 ~
  167. , c4 L& U  y: ?) M3 T3 I0 A
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ a0 d* G$ ?! T* @+ i4 ]! F; R( C
  169. {# J* U# e$ `( t+ U, a
  170.      FILE *fp;1 S: H# O3 V1 P. J0 I2 M# |( ]
  171.      char  szBuffer[8192];7 Q" a$ B: I3 ]8 _
  172.   va_list  argptr;; O- e# x$ T) c8 u) N4 k3 W" g

  173. 2 c7 F$ B& \& U* C, R
  174.         va_start(argptr,message);
    ( |# M1 P. Z0 t- \. S; w+ S: A
  175.         vsprintf(szBuffer,message,argptr);
    ' r# N6 }2 k+ y  P
  176.         va_end(argptr);' ^# [$ k: G/ ~" o* j7 ~
  177.   fp=fopen(FileName,"a");
    . f* Z2 V! z4 c. i4 B
  178.   if(fp)/ h5 F& U: P* N9 Q+ k
  179.   {
    ( c8 h- G% P) Z
  180.     fprintf(fp,szBuffer);8 t2 w7 B3 ~: d/ {7 A
  181.     fclose(fp);
    ! N2 ~5 k/ ~" H% b: |' w8 s+ j! E
  182.           _flushall();9 y) Z3 @# V' T0 l, z) a
  183.   }
    " Q: v8 e/ X; x* h
  184. }/ u' r% U# P! g/ _0 {& U3 Y
  185. - J9 F; X. o" b7 V
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    6 U1 t7 q8 Z/ H" l- f: ~
  187. {, W/ @8 x7 [. }0 s
  188.      FILE *fp;
    & I& G# e! p& D/ J% B: y
  189.     DWORD  attrib;
    9 P  @3 n) f4 N0 W/ r% B
  190.   attrib=GetFileAttributes(FileName);9 p' b$ n5 Z! h
  191.   if(attrib!=-1)
    9 U' `9 I4 K4 A& T& t0 x% z
  192.   {
    9 a: G% n" u1 M7 D; H! S
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);  T$ B7 F, @6 O. s  h" C6 a  H
  194.     if(!SetFileAttributes(FileName,attrib))
    / O0 O( d1 ?7 T/ N" o0 N
  195.     {3 X+ I* G( X" z: c& P2 J
  196.       return FALSE;
    , Y3 j3 R  T5 h. x' W" w, \
  197.     }
    0 L* p; c8 o. h
  198.   }6 ^6 b/ M0 n2 ]
  199.   fp=fopen(FileName,"wb");9 j8 c! `. b6 b, N0 E- d9 U0 p
  200.   if(fp)# U2 T! M: Q9 z7 t' [" G  D$ ^& @
  201.   {. O; L8 ]9 v& V" e7 X# c
  202.     fclose(fp);
    + R! E( g+ F- [) C( H
  203.   }
    7 a: X$ c- e5 K5 n" C9 H
  204.   return TRUE;
    7 A+ ^  \, Z0 J$ w; {3 R
  205. }9 ]' H* L% Y/ m( @  J

  206. % p# |/ F+ @) o- u, S5 T
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    / W$ b; m- e6 P# t; p
  208. {
    ' ~: ^  N$ Z4 I  L
  209.   char filename[MAX_PATH];9 N4 f: W4 ]2 i2 r0 B
  210.   LPUPDATEFILE file,olds;
      i( Z: |5 W  C) @
  211.   std::map<int,CString>::iterator i;& f2 p9 ^  A& t' r4 x8 J! l) K
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    / M# @, n3 n2 G5 C  ?( T% ^; L
  213.   std::list<CString>::iterator l;/ R' Y- q+ @! N& {/ h2 p) `

  214. + E7 T, w9 w7 }: r$ H& j: j% J
  215.   if(bFirstUpdate)
    , X8 q( o$ p6 V* @+ G* D9 A$ z) V
  216.   {' i3 l$ |9 `5 c: K) E( |; N) e
  217.     dwCurrFile=0;) z  C7 e& i" ?
  218.     bFirstUpdate=FALSE;
    , C! q9 g- W$ E/ L$ F4 J% \
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 m; h9 q1 W7 F: m3 ~& ~
  220.     {; e% [" X2 y! u! v
  221.       dwTotalFiles=UpdateLocal.size();. N0 g0 x& [* s
  222.       dwDownLoaded=0;7 T. [3 u# ~; h# ~/ b
  223.       bSilentStep=FALSE;# [1 |" E- O( G- e9 v0 H6 m! L
  224.       bCompressed=TRUE;! |' i, W; x3 s3 m
  225.       strExtLocal.Empty();
    9 v% h, P, u7 x) g8 `0 }, d, J
  226.       strFullName=(*i).second;
    ) r6 |9 s2 @+ j) G
  227.       dwProgramState=AP_CONNECT;
    $ {. t% q9 `) P% t
  228.       return TRUE;; n9 A# I/ s1 A
  229.     }" e3 h; p7 f- _5 V
  230.   }% J- }0 ~7 o6 |+ p
  231.   else if(bRestartUpdater==FALSE)6 |3 a+ z4 s4 S3 a! y
  232.   {
    $ x1 q% k* a0 I( I2 b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())2 U0 O+ [) s# c& x( B
  234.     {7 U* M4 c1 @( n, O
  235.       file=(*p).second;
    : L& l. I- R- F& ?! s; l5 V5 O
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())* O' O6 D  X# [5 m
  237.       {' i4 o; F; r  v1 ~: R
  238.         olds=(*p).second;
    ) r, u- W) F( |8 U% @- c1 i1 ?  @
  239.         olds->vers=file->vers;9 d( e6 T2 Y$ V' f5 }
  240.       }
    3 p; c+ a6 `0 o" j8 U
  241.       else& c- f: ]' Z8 O/ Y/ ?0 [
  242.       {
    # E/ x3 ~* @; {
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 _- }- c' h. n% t
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    4 x5 d1 {6 i4 x. @" P) [: E
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    + ~9 B! S9 k! }5 {5 @- m6 I
  246.       }
    ( q' P. c' V0 F1 W; c" c
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");$ J) s( g1 j2 y" G- B
  248.       sprintf(filename,"(%s)",file->file);% T4 T. h: D3 C8 G% `0 x( U5 a
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * R8 L) D. e: v
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    1 z2 g! N! k$ \: x' B# z
  251.     }
    & _$ ~, t6 D" q) L' w# ?2 V: m0 C
  252.     dwCurrFile++;3 Z7 ]8 S/ ^0 e
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 l! N- v6 s6 r/ @; ?1 F! l; Z
  254.     {6 h; K- b: G, t5 ^9 H4 t
  255.       bSilentStep=FALSE;
    5 ~$ Z- ]+ j, y' E
  256.       bCompressed=TRUE;! X8 F: p4 W# T$ `9 u9 i
  257.       strExtLocal.Empty();* I: T- }+ j* l, x
  258.       strFullName=(*i).second;
    9 z/ ^3 R' X4 f* n1 w  T! T# K6 Z/ {
  259.       dwProgramState=AP_CONNECT;0 _5 I6 q% Y/ O& d5 z4 N9 P" @( W
  260.       return TRUE;2 `8 V7 Y* C/ a% ?3 C
  261.     }
    ' }5 K; h. n' a- r4 j
  262.     if(!bRestartUpdater)
    0 \( w% Y5 ~0 T( k, T
  263.     {) Q' A; y! [" l. _+ s1 ~8 K
  264.       int iCurrSize,iFileSize;6 e+ x8 Q7 F* z, n) a, P
  265.       iCurrSize=0;
    $ t3 V4 P% w/ G8 r1 B" u
  266.       iFileSize=UpdateList2.size();
    ; d- R: {' T+ o) s8 C5 m
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");' [1 |7 c" h) f( m) W1 S: ?! `
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");+ v1 P' M! N. i2 f3 U9 k1 [
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + a- Q$ f, e3 i, O8 q8 X# n
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 X7 O) Q  j; h2 v
  271.       Fclearf(".\\update.dat");
    , @: x* @5 D6 C$ N5 E) i
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    & h, {2 P1 ?( y0 D7 K, L
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)& p% L0 Z& H6 h
  274.       {
    % ]" ~/ E7 w, [/ F$ e) L. e' C) u
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    9 M  D* ~( d" k
  276.         {
    + R+ S# d7 [9 N% Q! T/ g& j, G
  277.           file=(*p).second;
    * g) v7 |3 D& e9 N3 y- \/ j
  278.           sprintf(filename,"(%s)",file->file);0 ^- q3 I& |" H
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ e* R$ L2 r; Q7 b. P* w' r/ ?% z
  280.           iCurrSize++;/ x4 h: w4 I( a8 o+ d: u
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));2 R  O& p9 |. P2 C# x) d
  282.         }& w, @( C$ {; E, j
  283.       }, a) n8 f8 n" W2 p' ]
  284.       unlink(".\\update.txt");
    ( Z& e7 O  p& a/ u( l
  285.       unlink(".\\update.tmp");
    3 g! _- m# A0 O
  286.       Fclearf(".\\checkversion.dat");
    ( Q7 O8 K8 t( l3 I. ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    $ u- @, a' h6 h3 M% g' ?
  288.       if(UpdateLocal.size())
    . d+ r* w4 M) ~
  289.       {
    - W+ P8 e* }1 ?; [
  290.         UpdateLocal.clear();7 t7 s9 w: S/ u$ @
  291.       }) V: b0 m: n, S7 ?! X4 O
  292.       if(UpdateFile3.size())) h9 a/ B3 q$ A" e0 @
  293.       {
    7 G' d+ E" l9 e. ~8 J4 E; ~
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 p. e) \8 |( R
  295.         {& t/ H# I- E. G
  296.           file=(*p).second;# E- t+ o% z) G. _  E. i6 _* t9 U; c
  297.           free(file);
    2 F- ]7 D0 x9 Y3 L6 c3 G* s  W
  298.         }
    & z7 [% ^4 \1 k0 \, X  T
  299.         UpdateFile3.clear();( h8 i( ?. z. c( A9 K
  300.         UpdateList3.clear();5 Z( b; ~& Q9 ~' Z5 v
  301.       }
    7 t8 y3 @& N0 ~0 a4 a
  302.       if(UpdateFile2.size())
    ( K9 q  i& W, l, t7 b/ R
  303.       {' P/ a2 R3 L% X  Q6 u) L% O
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 J: g: V5 x8 _9 ]) ?8 q0 Y1 o5 D7 C
  305.         {; F/ {( [9 h! Z) u- Q
  306.           file=(*p).second;0 N  v1 y' a- Z/ L3 H
  307.           free(file);
    & V  ?, d* f# g9 f, [
  308.         }
    4 p! S  h7 Z( S& k
  309.         UpdateFile2.clear();- r2 v4 n4 y9 p+ Y( |2 ~& q
  310.         UpdateList2.clear();
    5 r' s' i/ I+ o: w0 H8 N
  311.       }0 l0 `7 h9 r, J) X. n( D8 X9 G1 |$ r
  312.       if(UpdateFile1.size())
    : E& [; P* l" P8 m4 i& V
  313.       {
      t3 n2 j" P* O7 g
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) G% i  o9 ]* d/ }" K" `- ~
  315.         {
    9 K# `* `8 H8 l! W' `
  316.           file=(*p).second;& }1 F1 Z# W) _
  317.           free(file);
    6 K% B; s; M  A- t
  318.         }- f( I8 q; n6 c+ C; M
  319.         UpdateFile1.clear();
    ' j% s- z4 d9 \4 K5 S/ p- h
  320.         UpdateList1.clear();; }* Z! d4 R4 F" G; O6 l2 X
  321.       }
    ; B) Z, H) g: n0 R  ?- j* |
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    9 v) J* {2 _9 \7 G1 ~" L
  323.     }
    " g9 z4 V! ~: d0 a6 c  b$ x
  324.   }
    8 X6 f  ?- _" n* Q# w) y
  325.   return FALSE;; j0 ~$ D+ J7 ?7 E9 A2 Q$ ~
  326. }
    8 [  |) r8 _2 i: _" B1 A

  327.   ~8 c2 E6 L) s7 Q; c0 U, j2 w1 w7 I
  328. void CRevAppApp::ClearAll(void)
    2 b4 A; C: \7 S, h( i3 W
  329. {  `  U- s! Z. F  W
  330.   LPUPDATEFILE file;
    2 u  _4 Z4 K! O! Q" x
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 u- ^+ f$ x7 a4 n
  332. : P0 m+ x" e! R# R: J, J
  333.   if(UpdateLocal.size())
    ; s; n) G5 a! o3 U
  334.   {$ c; q2 l( I( |  a2 v& a
  335.     UpdateLocal.clear();- U, e3 ?* ]: C. I( v5 S6 \' q
  336.   }
    # i9 _7 Y3 G) L0 O. a$ b
  337.   if(UpdateFile3.size())
    7 ^! L) f" m  w9 o, D, o7 R
  338.   {9 o+ j# k; ^& ^! X
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * C, ^, P& }0 t6 _0 p
  340.     {
    " H$ Z5 K" h7 W, c$ e  h/ @
  341.       file=(*p).second;
    5 ]5 B$ f) r- M' R2 I+ b
  342.       free(file);
    9 O7 C: p+ h8 z
  343.     }/ h8 ?1 q% ^6 X; a: h) @) K4 _
  344.     UpdateFile3.clear();% m0 r7 }, D- [
  345.     UpdateList3.clear();
    . o8 X& i' K3 N6 f( V1 V& f  U
  346.   }
    ( t; C- a$ r& B% g' {3 i$ h
  347.   if(UpdateFile2.size())
    ; T- J' C5 l4 G
  348.   {. u' H, r4 C+ {, {3 ~1 z* ~3 z$ M
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! x. ^5 ~: a9 [+ E0 ?
  350.     {, l0 P4 S4 R( S5 ?1 f7 P! U' k" @
  351.       file=(*p).second;
    9 @; _0 ^8 K# @3 y4 I$ b
  352.       free(file);! |! C% M* ?- U3 x* w* V7 W# X
  353.     }
    , n3 I) t9 \9 \# m; W
  354.     UpdateFile2.clear();
    1 n6 ?+ l: O7 c$ `, Q
  355.     UpdateList2.clear();
    8 H$ w. P% n; B+ J4 w1 O" }; P& e
  356.   }
    7 Y! D6 P3 ]1 g: @
  357.   if(UpdateFile1.size())
    ' u7 ?0 P7 A* C5 Q3 n8 U
  358.   {+ Q) e% Z- i7 h* b) a" P( u' ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # N2 p# M2 U7 x9 J# `
  360.     {+ |6 I9 T4 H( F
  361.       file=(*p).second;) G1 O$ z4 s# e9 |$ c9 |+ O5 r
  362.       free(file);
    - w. e$ j8 Z, ^4 A0 Y+ t
  363.     }7 c' N0 t6 Y% Y( B9 u* Z6 Q
  364.     UpdateFile1.clear();
    : L, X( T* g$ E* [8 i' Q
  365.     UpdateList1.clear();7 ^/ {* _6 W8 |
  366.   }: g: |& g6 [2 q' h% W! I: B
  367. }  , x4 @* X& {% m8 ~( ]7 X3 T
  368.   . R2 d. X. ]- i  N7 l' C( ~
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    * X" V3 b7 o1 H: t% d4 J% w
  370. {
    & ?5 B( i( |; q7 }
  371.   int c;
    0 C6 v: `+ v: v  c9 v
  372.   LPUPDATEFILE file1,file2;
      N" W$ q& ]! A5 H6 O- Y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    / a2 S& @! I4 k4 t
  374.   std::list<CString>::iterator l;: P; U  T8 B8 e7 G' ?5 B# X" h- k

  375. 1 t+ J4 Y7 W: u' z
  376.   UpdateLocal.clear();/ M2 R& e! `2 D
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    1 c' P9 b3 ~1 C
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ) t* N3 R1 y- R0 b3 d7 G
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ ~2 N! I& b$ |  n5 M$ o
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);9 y# B; y" S, ?# L! B$ Q; ?
  381.   if(UpdateFile3.size())
    , p7 g+ w1 U. L
  382.   {2 E9 W3 m1 @% w5 o8 p; {% ]: h% d$ b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    / _8 k' Z0 |' k5 v) ?+ u
  384.     {
    & k7 B1 r/ I5 e# j2 R7 m3 p2 Z4 s7 {
  385.       file2=(LPUPDATEFILE)(*i).second;/ `- B5 v* y: }  Q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) d, N  {9 R4 u; M
  387.       {0 K  P  L6 g- T
  388.         file1=(LPUPDATEFILE)(*p).second;: i7 w/ o4 K% Y+ q
  389.         file1->vers=file2->vers;* d) \9 i; D! [. S/ \* L1 h4 \3 w1 l
  390.       }5 g1 J+ E! ~$ e4 a. Z/ R$ S4 k2 K& |
  391.       else
    7 _* T) s0 v$ q' Q0 l8 T
  392.       {
    6 m+ ]6 d5 ?- M4 I; {
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      W; i4 e6 Z; S; `( r0 |; u
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    & _" Y! [8 c$ D$ e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ g' k, h4 N8 J' l0 q+ b1 q
  396.       }/ V6 N  ?! B5 Z7 ~
  397.     }
    ! A# d7 o( ]7 Z3 F6 Z
  398.   }; ~# [! P: k; m; Q1 |5 j
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ l6 g+ K6 y. n$ i
  400.   {0 J) t) X9 L* \5 V* d
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())1 R* \' I! |3 T& ?  t
  402.     {9 d  w9 r6 D- _: m# D' {
  403.       file2=(LPUPDATEFILE)(*i).second;( n. v: C. |3 M5 S
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 c4 H4 @; g( C! }
  405.       {
    + O& P* P" y, {- R6 d% c
  406.         file1=(LPUPDATEFILE)(*p).second;
    4 |9 s1 `/ i& T7 l5 C
  407.         if(file1->vers!=file2->vers)$ t& O+ q9 h: V- d
  408.         {6 J) l# B2 T; g1 O7 z' E
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / N9 R- {  Y5 o; z4 G) M
  410.           c++;
    + z$ P3 j% [+ N& P6 `
  411.         }( k2 b5 I# T6 [1 @
  412.       }2 A; S$ `2 m$ v# @6 t( H3 n) O
  413.       else
    # n; P/ S0 L! K9 q6 W
  414.       {4 S# D: ^  s* Z6 n2 ^
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 P" h; y( P! q: b
  416.         c++;
    4 T5 j, x. J* L2 i: F# |
  417.       }
    & P/ r* M5 u6 U% Z  ^! M
  418.     }7 \3 }( G+ t' U( h5 C
  419.   }: N* D, m6 I$ C6 S# s0 r
  420.   unlink(".\\DownLoad\\update.txt");
    $ l7 O1 }- r2 C, p
  421.   if(UpdateLocal.size()) return TRUE;
    & t/ k  G' E1 y6 y" D
  422.   else                   return FALSE;
    2 h8 ^- g- b$ U! W8 w& J+ ]+ i; b
  423. }0 ^3 N& s$ E: }& J  p+ n( @
  424. 3 S$ E/ M1 u; {3 M: l' ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"+ J& B, D/ w  q" o( X7 \) A6 W
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ! D5 m5 S- ~( P8 Z$ z  K' @3 R

  427. ' p) W% v# J8 J, m8 y* c
  428. 1 R  f. p9 C8 ~* w% X

  429. . A, c) j* L& {5 ~* `# ]  E! P. @
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    3 s2 o7 k$ b/ }
  431. {
    / w6 @% X. E9 V+ g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;, @, F2 a9 e: b* W2 n0 m
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , |3 x6 d0 t6 ]+ a8 I$ N
  434.   {
    8 ?) U3 i8 R8 K/ q) ]
  435.     char szLanguage[50];
    7 h! D2 \$ ?  E. q0 d! H
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" {" C5 `9 y1 K7 _0 q  ?% y/ P
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 f) ?9 Z: o+ E. d: A
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ q/ V/ N$ [* B& w+ U6 m/ @
  439.     else                                   m_iLanguage=ENGLISH;' ^0 }# Y; [% x) l7 R
  440.     char szRegister[100];! Z8 n: C* ]/ S7 n0 A
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! `/ \  z6 @$ C  W
  442.     strRegsName=szRegister;0 a3 o% _/ j% e+ s$ W
  443.     char szPatchURL[100];
      S5 Q' E/ G; i" [6 f9 V
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 |! O( ^" D! h% I* G1 a0 b: v
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 R" Q7 i$ n" V% t) y5 G6 c  _
  446.   }6 r3 T, o* [8 p' Z1 e
  447.   else
    8 ^$ L, V' M. f2 _
  448.   {
    6 b' s5 ?: H1 N; a) K0 S; W* e
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! f! l  ^& B1 y* i! s' V' O
  450.     strRegsName=DEFAULT_REG_URL;
    4 G' t3 C" A7 e, f" G7 V' G
  451.   }. `& s  A1 l7 N/ G7 v; D" E, r( i
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    9 f9 A/ \6 X+ Y
  453.   {* x, {3 J) L! C# U, m% s
  454.     char szIP[50];, P2 x" q. {4 k  a/ ^% a7 r% O
  455.     char szDIR[300];& J' K4 i$ A' Q, T) f: e
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ( `! x/ ^/ r/ t. m  x+ C
  457.     {
    7 _- m4 |5 Q# I& i- ^# R
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");8 v7 P* C# p) v
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");& m" ^& {$ Q. F4 ~3 p4 d# |
  460.       strHostName=szIP;
    0 K* L& `! H! ]% |  A% ?  Y2 T
  461.       strHostPath.Format("/%s",szDIR);
    6 }$ F" B5 c; H
  462.     }( d8 H" \  L4 F! Z; E. x2 J% F
  463.     else) V( [! L# s  w- }
  464.     {
    4 s7 u! M; Q: ]
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 P) p6 X: k: g7 X2 U
  466.       {5 U2 [. _) q9 s7 ^; o, |& b
  467.         char szLanguage[50];+ |& p- M- D$ H! m9 q# `! y2 q% ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 }& Y& W0 O6 ^' @' Q$ h
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & e( X2 Y* ~7 `6 @
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 k3 _1 I( J; f& D# ~
  471.         else                                   m_iLanguage=ENGLISH;- f1 F& p( l+ y0 j  ?0 M
  472.         char szRegister[100];2 c; }3 g: U' k! t( w# H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ q0 a& I9 H  N' g
  474.         strRegsName=szRegister;
    - J9 q/ @# a5 M! ?* s# w
  475.         char szPatchURL[100];% c, j6 P2 D( R5 N7 s3 o- I4 I
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ Z8 S4 e4 s1 n
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( [2 A* [1 y7 Z8 v$ k( b8 }+ |
  478.       }/ @  s  s* [7 o& l. h& S! l) z
  479.       else
    9 q$ o7 n" B: u  K- e8 Q4 v
  480.       {
    7 ~; ^. _/ {/ {' r& z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 k" J/ o, r, R0 p4 D' ]
  482.         strRegsName=DEFAULT_REG_URL;- c4 Z' {% `3 k) V! O/ [3 n
  483.       }
    ) i7 w5 R3 [! n% I  C1 ^
  484.     }  D- o7 p  ^- T2 P: ^, N
  485.   }
    % h0 B) f8 Y1 z; O8 c9 I; `3 d
  486.   return true;
    $ l6 D4 t$ K' a! C0 r5 U! h
  487. }
    0 I3 ^& \. Z4 g; k" a  H

  488. ! h2 n# [/ O" v
  489. #include ".\ZLib\unzip.h"
    ) j7 b; f3 c: Z- s6 ~6 @
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    , L6 S, c6 m: u0 i
  491. /////////////////////////////////////////////////////////////////////////////
    * n6 G" w4 A, `6 f; e2 i  P, n
  492. // CRevAppApp initialization
    / Y  F& y1 k5 B& Q( @& v! V
  493. 0 E# G7 Y0 n1 q# e9 O9 R% h+ `
  494. BOOL CRevAppApp::InitInstance()
    # B  j& G% K: L* M
  495. {
    * B0 _, [* `- f6 E
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];; ]# S9 ?7 @. a; y& E5 @6 o5 t

  497. % m& K1 H1 M0 Z: @
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    7 B8 O1 g: ?2 K! b0 A$ {
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)); ]7 X- u1 N" _% p- d+ c
  500.   {
    # y$ {) L9 c- f0 |* V
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    / b" k" J/ t9 o) g! l  c
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    9 a: d7 b# E1 S$ h
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    : a4 _8 N( Z8 ]6 p  d' u3 Q, S
  504.     {3 `( b3 P# l! c2 r1 @) ?/ [
  505.       strcpy(szPath,szPathTarget);
    8 X/ f1 I+ T8 Z) X! \& v
  506.       SetCurrentDirectory(szPath);
    6 m( b$ m! K0 o4 \  ^- f
  507.     }
    / |' x+ F+ k+ C- X  S' r
  508.   }
    $ q8 f9 `" @  r7 K8 u& E
  509. #ifdef _DEBUG1 ?/ K  z. c& k# S
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  r1 ~8 p3 ]4 c2 W# N' D
  511. #else
    & W9 v" H9 U9 E2 V
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' N  [( ^$ g7 E& x: ^6 D. j1 P
  513. #endif
    - i/ C! P! ~5 B) R
  514.   {: h  k1 s% W5 T$ x
  515.     char tempFileName[MAX_PATH];
    0 R2 ~- w  s9 M! c" g. a
  516.     strcpy(tempFileName,szPathSource);
    - O& k/ ?% e1 h/ O( u
  517.     tempFileName[strlen(szPathSource)-12]=0;
    $ G( Z2 ^' ^  l
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    + A! u6 B- F+ D8 ?
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    - [" Z) ^+ {8 x1 x/ L  ?2 N
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);& R* c9 R+ ]6 @' J
  521.     return TRUE;
    ' X! x* G( c6 r3 C4 ?4 Q7 [
  522.   }. S: R: N% w: S" h
  523.   // Nuke 0118: Delete run.exe5 Q* o4 S. X. F9 X
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    6 V7 W* C9 x  t8 N( X/ G- l- q  U  ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) S1 u4 p. E) e9 N9 Z
  526.   if(!ReadCfgFile("Config.ini"))6 a3 t. Y9 G9 L( q3 T
  527.   {7 V1 a& o# V4 k
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    1 e& j, f0 E8 T' w$ b  |
  529.     return TRUE;& g6 Q" _+ [* @: j6 q
  530.   }
    ( d, ?. E+ j  {+ U. d1 z
  531.   HANDLE mutex;; Q4 i+ I8 r  S$ s) [# _! ~; ]
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    $ U6 u# P' e9 M! f% Z
  533.   {
    ) _. p" n+ }) l8 D+ [7 m0 @
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    9 G' }5 x1 ?# K; g
  535.     {
    6 o7 b' p' I& _$ C0 _& n( e
  536.       CloseHandle(mutex);6 x- n1 P3 Q  p) [" z9 Z8 b
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    , X7 `; ~+ a% {! M0 q3 Z, a
  538.       return TRUE;) t7 d  v& A3 g- W1 n: P( h& i
  539.     }
    & L* f1 q' g. A" n& p' s
  540.   }  - g8 l" L- O: P
  541.   CloseHandle(mutex);
    + u! @$ n  l. V  M+ T  v

  542. 2 s; N/ x. |& A3 Z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; ]4 K7 k& m" v5 c7 z. f

  544. % p1 k+ r3 S: E8 E
  545.         AfxEnableControlContainer();; k/ R  v+ X$ E
  546. 7 B. w5 |! P) @" F3 Q2 [& {
  547.   bCanUpdate=FALSE;
    ) u# i7 Y6 T2 C1 B2 w  ]
  548.   dwStartUpSteps=1;% i6 M; Z% H4 w' S: s7 f
  549.   dwProgramState=AP_NOTHING;/ F* \# I3 @4 |
  550. $ |* d- h2 v0 w& r2 U" t& z) ^
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    " l) w, T9 \) A8 [# i% @* U, V" F& B' a
  552. : {  B! l& y7 ^% t2 f
  553.         // Standard initialization# }0 W: R3 t  k  V; R) P
  554.         // If you are not using these features and wish to reduce the size- U7 b: a( p$ H- Y
  555.         //  of your final executable, you should remove from the following
    0 g0 P% |) ~* C1 @8 }& _) x' o, d
  556.         //  the specific initialization routines you do not need.0 f) B% y9 k2 |5 _& U/ q7 }+ d# A
  557. ( p8 A% |" ?2 r, p2 P
  558. #ifdef _AFXDLL
    1 |& @- c$ D' B
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " J% m, {7 }9 s, H) @; F
  560. #else
    . z. E) q& f0 B, e- y% _" h
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    - B" j. w  S& L% Y; U
  562. #endif
    ) Z1 V  q. s& Z
  563. % _( I& I7 v* t2 A" k; ^
  564.   dlg=new CRevAppDlg;
    4 |" [  h  M0 s2 O  o$ p! r
  565.   dlg->Create(IDD_REVAPP_DIALOG);
      c* ~1 ], p5 t9 b) E( L& F
  566.   dlg->ShowWindow(SW_SHOWNORMAL);7 y) F' w0 |3 m& O0 k
  567.   m_pMainWnd=dlg;8 Q' N4 G/ Y( K; I# q5 J
  568. 6 i5 f1 f* s, [, }1 n1 f
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);) R0 {( F: t" m- Z5 P0 N- ~
  570. & r( {# L: k2 U2 u0 V1 S
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ) X" p& ^8 l5 \6 q
  572. //  ULONG_PTR gdiplusToken;
    6 |3 o' A) d+ w2 Y  k
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);$ W! {6 c" K! R/ K# S  U

  574. & G; ?5 b( _: ^
  575. //        CRevAppDlg dlg;
    ( X; N; A4 X6 H6 K3 ]6 z+ P
  576. //        int nResponse = dlg.DoModal();1 E; n& ^  r- E  r5 V) ~* U' M
  577. //        if (nResponse == IDOK)
    1 i9 |0 z$ n; V& ~; ?% A
  578. //        {' d& y  y- {+ t" g  j
  579. //                // TODO: Place code here to handle when the dialog is4 b% M7 |5 k+ d6 H
  580. //                //  dismissed with OK
    * |$ U+ ?/ V( m/ o
  581. //        }/ g1 F  U" F: M$ [6 {" x" R% H6 @
  582. //        else if (nResponse == IDCANCEL)
    # Q0 r$ I/ D  H4 y
  583. //        {" D" Z+ Z% N+ e6 I! A& |7 e1 o+ N5 M! I
  584. //                // TODO: Place code here to handle when the dialog is2 u, J9 B: ~1 Q7 V
  585. //                //  dismissed with Cancel# N2 F' f6 c6 O& y
  586. //        }
    ( P, |6 o5 R3 z" Y: Y: ~

  587. - F9 q+ ?/ H8 }$ m+ {* |+ l# u  S
  588.         // Since the dialog has been closed, return FALSE so that we exit the0 A% M# J" X) C# k
  589.         //  application, rather than start the application's message pump.0 z0 z$ x3 }, ?8 P7 j
  590.         return TRUE;/ ]/ p* U, b  H0 d
  591. }
    ) L& i& m& x& z4 g

  592. $ w# y$ I2 ^5 U! [! T- R) e
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
      k) o2 E2 K1 t0 x; }( j
  594. {
    5 o9 b/ S& i) T# w2 }( J
  595.   int i;
    * _( D7 e- W% N4 H0 P$ q* }0 J
  596.   char *szRet;: H7 G, U* l! u& k

  597. , p; x" y( q( x6 h
  598.   if(pSource) { itoken=0; sztoken=pSource; }% l% C8 |4 }1 n) p! g' Z
  599.   if(sztoken)7 u3 ~- O: `- q
  600.   {" }' E! i* d6 E7 j+ ^" n" {+ l
  601.     szRet=&sztoken[itoken];! U) C" j  M% L, s7 ^
  602.     while(sztoken[itoken])8 V9 r4 E! S; j; k) a1 h5 _" B
  603.     {0 D4 e9 P+ d1 `" R" S3 {# c
  604.       for(i=0;i<(int)strlen(token);i++)
    " n2 [* |% R* b7 d
  605.       {
    % B/ B" }: f3 a" w
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    1 H$ {  ]& z: `* Y  D+ X9 \" r
  607.         {
    6 `/ N! Q1 Q9 x+ Y! e: N) A5 S) S
  608.           sztoken[itoken++]=0;
    " F7 U/ [( x2 s' ?8 [! U. U
  609.           sztoken[itoken++]=0;
    9 _* N) F# x3 F$ E3 Q2 p
  610.           return szRet;
    * k# [' t* g4 v% \- `4 k
  611.         }1 x3 w! v* r! g5 t7 R8 Y
  612.       }6 j# _' F* q/ B' d* s' }
  613.       itoken++;6 K. f6 x/ N7 t" s7 P! k
  614.     }- s9 ]8 Q9 ?4 [( S0 o* q! A
  615.   }- B, i2 k9 P& E# |2 ^5 e5 l
  616.   return NULL;
      L5 f0 g# q( ^3 g) Y
  617. }& S  t. t, [; h
  618. - a9 i! {7 r& |# Q4 G& m0 }$ o
  619. void ProcessProc(long Total,long Current)
    : d+ Y( y; r2 [' t: c
  620. {
    " ?9 ~( B" l, g. D7 n
  621.         MSG msg;, x. @# x6 l; G9 b5 }
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    % i/ x! |# a2 l: V+ n& _+ a
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' W) a2 H; E- v) G8 R* l0 g* _
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    8 M; x% g! m  x, i7 S" D! b+ @' ~
  625.         {3 P! D, a; u' S  _! T3 `6 z6 ~* Q: V8 S
  626.                 if(!GetMessage(&msg,NULL,0,0))  \, K- X6 r  H/ `+ K& G! j; j/ |
  627.                 {
    $ N) s2 ^7 [$ C( A
  628.                         return;  B% a- l, d- j' G
  629.                 }8 C  t" p8 u+ U9 p  E
  630.                 TranslateMessage(&msg);
    # J1 [# J; q; x7 z3 r6 ]! q
  631.                 DispatchMessage(&msg);3 W# E& f* ^9 F* R+ I; z, s
  632.         }       
    ; Z6 H, d/ f3 P% s) G4 w  |( }: g
  633. }
    2 f- r* e4 q' a$ K" R
  634. 1 T1 |4 l$ r' O  i" d! ]
  635. BOOL bFirstChar=TRUE;0 h: D3 @$ D$ A
  636. ) h* [  h3 _# v) l3 @. A. e( ~
  637. BOOL CRevAppApp::OnIdle(LONG lCount)' Q5 q5 C2 x  T
  638. {
    , c; Q' e1 [1 O7 W- Q- K* s% [
  639.         // TODO: Add your specialized code here and/or call the base class) M& Z2 y# p5 S8 q3 C6 |
  640.   switch(dwProgramState)
    & }1 _& |6 H$ }- f$ A
  641.   {8 |- a7 }# ]4 W, B7 g
  642.   case AP_NOTHING:
    2 g9 A3 I6 J+ R7 y4 S6 ?2 t, J5 I
  643.     switch(dwStartUpSteps)* W! X$ {/ W$ g! k" T0 T4 {
  644.     {  _8 y& e/ c  d0 {$ @5 c( m
  645.     case 1:0 v2 U( i& Y* a+ o' s- V) k
  646.       {& ?4 R: S" [" k$ E
  647.         int i;( F6 H( H  q& T. Q2 v$ w
  648.         CDC *pCDC=dlg->GetDC();& I/ b# o8 X: H! o( b$ N5 R
  649.         HDC hdcwnd=pCDC->m_hDC;
    0 s% h9 i! Q. X$ o9 L
  650. //        Graphics graphics(hdcwnd);' I/ _1 D; _2 K1 u; W
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 Q8 f$ R1 I* q. l7 V
  652. //        INT iWidth=bitmap.GetWidth();" d2 ?. f7 W9 n. K/ z5 g: ?
  653. //        INT iHeight=bitmap.GetHeight();
    * C8 |' e9 F- ], ~4 r: s- X
  654. //        Color color,colorTemp;$ ]) S: P# Z  e9 U
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& F# u$ W1 C2 S, j
  656. //        {
      B8 a5 n7 n5 b/ \3 `
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)7 t/ m, c3 M1 s  n' e
  658. //          {9 D+ H9 F8 L/ m0 |$ _
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      r  c) {1 S" `$ O- J3 J+ {
  660. //            colorTemp.SetValue(color.MakeARGB(
    " B! m. w+ w2 c9 S2 D
  661. //              (BYTE)(255*iColumn/iWidth),. r! `+ Z/ T# a, j- h4 ?, ~6 |
  662. //              color.GetRed(),+ T+ U6 e% R, S  K3 p1 `. m5 x) A: @7 ]
  663. //              color.GetGreen(),  f/ o4 |6 I  Z% G( x
  664. //              color.GetBlue()));
    6 E  p( ~6 z, J6 d
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);. p8 m& i9 _2 i! r! @; P
  666. //          }
    " u  _; h1 E! k; }; r0 ?  g
  667. //        }
    6 c7 H, k  z3 [; z/ n7 J7 n
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);5 `7 [' ~7 v9 R6 S
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% `8 r- |5 }+ {' N
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 m2 S) x% a& k0 l! a+ f
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / a8 `( g, {- _' L1 t: [: W0 h
  672.         for(i=0;i<240;i+=8)2 I) e$ l5 J0 B5 K4 A
  673.         {
    & `, Y( @+ J+ J; u/ }0 }. V2 G
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);3 _1 s, u0 |) Y2 S
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . \( `  `5 U: F4 b* v
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 _0 W- w$ l. a7 b3 H& O# f
  677.           Sleep(33);
    ( ^! ~' W' S2 _" ?" q8 n* @& l
  678.         }
    ; u4 s. F/ n4 a& ~5 ?3 H
  679.         Sleep(1000);
    ; {/ V% P2 Q5 a
  680.         for(i=240;i>0;i-=8)8 F, Y7 v. {# _! Q
  681.         {6 w, f) p' O9 i7 B6 I0 ~: ~
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / b% J2 u5 G' w' Y% v0 `$ T0 t7 h
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);1 ~# y! j+ W- R0 \  r
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( U# u: V: j8 j! o
  685.           Sleep(33);
    . P% P+ S" P2 I- J& ?: f: Z4 b
  686.         }
    " p) ~6 S  z  t1 O& y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ) B# V0 x  b/ ?% y1 J
  688.         dlg->ReleaseDC(pCDC);, ]# k+ P  b5 D' z4 R; A
  689.         DeleteDC(hdctar);
    , W+ \; z) ?7 n! |; _
  690.         DeleteDC(hdcsrc);
    . A0 Y2 y/ d1 X. `
  691.         DeleteDC(hdcorg);7 _# N& r# V; ~0 Z# e" [
  692.       }1 t+ _3 M: c, |. h- @' c
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; E) ?9 S1 k) {; @, w
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");1 t; f- `) F% z$ R5 R
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    6 U* k6 v- U( t7 A. u5 E  r9 |: t. P
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");/ I7 ]) P5 Z3 ]3 v" @
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . n4 s, G/ [8 Z
  698.       if(!Dn.Connected())8 b/ r3 w$ h* m/ K
  699.       {1 e/ o, U2 u6 F* `; s6 t
  700.         dwTotalFiles=1;+ Z) W, s3 R  U  P6 ?: I, w
  701.         dwDownLoaded=0;7 y1 F/ X: J7 e# T) [
  702.         bSilentStep=TRUE;
    1 n" [. f! X; [, @- z% T* J0 M$ W# v
  703.         bCompressed=FALSE;
    : Y* I/ S+ ?8 I. G/ i
  704.         strExtLocal.Empty();
    6 {2 F* @) b" f9 B. G8 G8 B
  705.         strFullName="readme.txt";
    - n* W5 I% u0 r
  706.         dwProgramState=AP_CONNECT;
    $ _& @( f* C! G
  707.       }
    % T* M2 I, D2 W8 O/ K
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();% f  N2 @& R1 j5 u
  709.       dwStartUpSteps=2;$ d3 d! d1 K1 d1 w$ T
  710.       break;
    * p! \1 q& \4 q! E" \2 [2 ~5 ]4 x. }
  711.     case 2:
    # \3 N0 S/ _1 V1 m4 H+ a% L" E6 E
  712.       {
    0 f& k5 [' f* G1 [4 y* o' i
  713.         int iEOF;
    0 c2 V. R7 o7 S# U+ Y6 q3 f
  714.         FILE *fp;
    3 [5 Z7 y) o- s$ p# f7 c9 @
  715.         char szString[512];
    6 [% c0 K, L: i6 l. K6 z. O" z
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");5 P! P8 [# ]3 C' ~
  717.         if(fp)
    / I# S- u" Z7 b2 Q% A7 _
  718.         {0 I6 }" a9 B- N2 r( w
  719.           do( ~. P& b; f2 s; u0 ?5 m
  720.           {" I4 |  r4 {: b1 I3 }
  721.             iEOF=fscanf(fp,"%s",szString);
    " |8 j6 T- C3 [% Z  v
  722.             if(strlen(szString))
    3 Z' H" W" ~2 K  ]6 E
  723.             {5 K& z  G3 T: O1 W9 x
  724.               if(bFirstChar)( d- D+ N  V3 I5 n2 G# _) B0 p+ P
  725.               {  r! w4 `% z7 J; Q' {! A
  726.                 bFirstChar=FALSE;* U  @* n8 Y- b' d+ E2 Q
  727.                 bConnectIsBig5=FALSE;
    7 k7 C1 \# W3 Y2 c( Z! E
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;" H" V! N" y; X2 |& |/ M
  729.               }
    & R5 R9 A$ u: F, {8 a2 q! v' b- d
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));  `. a" c4 O2 p) D# X4 h, H( l
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));' h0 N# ^5 C! E" @) S5 e
  732.               dlg->m_ListText.AddString(szString);  U6 ~4 U, y  x& A+ [
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ B+ ?% k! j+ a0 H4 p) Z
  734.               *szString=0;
    $ T; J. a9 @; n0 D5 @
  735.             }
    * m! x( X% J2 K1 `" {# i
  736.           } while(iEOF!=EOF);3 ]$ Z* U7 \" G9 A
  737.           fclose(fp);
    ( V% u3 Z) Q2 n
  738.           unlink(".\\DownLoad\\readme.txt");4 H9 o2 D2 S. f
  739.           dwStartUpSteps=3;
    3 O3 n8 W1 v; Z7 {8 o  r: G
  740.         }
    . p. Y) v8 O* y" \+ l+ }4 ?" y
  741.       }
    $ I. a- m4 j8 a9 L, T. E  _9 u0 _
  742.       break;# Q" p. h" _$ W7 u, z! l9 {7 Z
  743.     case 3:
    / I6 N, k% P* C8 E8 c& m% M# d* R
  744.       if(!Dn.Connected())$ g5 g( q! V2 ?7 W1 m0 ?5 t0 P. m% G
  745.       {  I& i$ c; d+ ?/ x$ b& P
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    * t# }+ a$ f5 B) W$ B9 N3 l: o
  747.         dwTotalFiles=1;, C- T& _% N2 t7 l) a) c+ c9 k
  748.         dwDownLoaded=0;
    & u4 ~. P) L9 P2 e! u- N- G1 l. C
  749.         bSilentStep=TRUE;
    ; e1 y  f9 N# g5 @. Q
  750.         bCompressed=FALSE;
    * d" n! f. z7 G  i7 \5 u. `
  751.         strExtLocal.Empty();; C- J8 `0 m/ }
  752.         strFullName="checkversion.txt";
    ' b7 I* w+ k2 Q& e8 C: x
  753.         dwProgramState=AP_CONNECT;, z( F: B9 S" ~8 z3 ~: H* Y( u
  754.       }
    8 K( ~% M4 X0 O( o) \
  755.       dwStartUpSteps=4;
    $ r" ~7 t0 r3 p9 U0 S0 U
  756.       break;+ n( Z  z& p0 ]$ j; d
  757.     case 4:
    2 A7 G* K5 ?9 r0 E
  758.       {
    1 G9 g9 u0 K( n
  759.         FILE *fp;) V; J  k; u$ |
  760.         char szString1[128];
    5 j% G1 E( u8 S$ N: L: V
  761.         char szString2[128];. {( G" e2 n+ j: X1 t4 Y% ~
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ) G) e# i; `$ v% l- Q
  763.         if(fp)
    7 F# \" y6 \6 o+ [8 i
  764.         {
    2 L7 D; c% a. L5 v
  765.           fscanf(fp,"%s",szString1);
    1 S3 p) n0 q3 ^7 Q8 V9 J
  766.           fclose(fp);
    # x# y' d7 v! U; B) F5 b0 o# m$ |$ ]
  767.           fCheckVersion=atof(szString1);
    . B# q1 d$ }' g" r! Y
  768.           fp=fopen(".\\checkversion.dat","r");. z: b; h: {0 ^2 ^3 J! n
  769.           if(fp)- p7 Q7 ]6 b: u/ M4 o6 Z% l
  770.           {4 @; n5 C; E1 C: s; [
  771.             fscanf(fp,"%s",szString2);6 b+ z5 C* Y* W6 H  B
  772.             fclose(fp);8 \* ^1 g1 [; v  t8 j1 Z. W* f+ e
  773.             if(atof(szString1)!=atof(szString2))
    7 V- a( ?0 [, i: F- `5 y0 k5 P
  774.             {
    . S7 I: b! `" }) A6 E4 Y# t
  775.               if(!Dn.Connected())
    4 b8 H# H2 _1 o* n* ?$ {' E# _
  776.               {
    % d$ q* }9 Y# g" b
  777.                 bFirstUpdate=TRUE;
    ! D. X8 n$ [! z
  778.                 dwTotalFiles=1;
    ( v4 u* t; V. ?0 ~
  779.                 dwDownLoaded=0;
    : P( g+ t3 h0 Y0 K, G4 V& c  z6 [' R
  780.                 bSilentStep=FALSE;0 C6 F1 t  A: R1 h3 n
  781.                 bCompressed=TRUE;
    4 ]! l: q& v; u* [3 t$ g# _. {
  782.                 strExtLocal=".\\DownLoad\";
    ( {: Y, V6 B5 t7 R3 R7 c5 H
  783.                 strFullName="update.txt";
    ( q6 H- _5 E$ d2 I% W) \  u
  784.                 dwProgramState=AP_CONNECT;* T5 O4 _. g" p
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & T) W: ^/ g0 o7 h5 \- n
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! M$ y; X0 a- ]/ Q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");; r! P2 Q$ n1 G/ s5 ~1 _0 m' S
  788. & x! Q$ p+ \' U6 W$ i( Y' `" ^
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( h1 ?- L3 o8 K7 ~3 @/ L* g5 W
  790.                 unlink(".\\DownLoad\\checkversion.txt");+ T: i) I; e/ ]3 C1 j/ n/ d
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 U; J* x0 X. H% h
  792.                 {
    / C! R2 T6 f6 B: a9 n4 l6 h
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    # _* n: `8 Z9 q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");& a6 S* I) {% |( ]. \0 ~
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 q2 G. D0 c9 m, M/ q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 \( L6 b9 M6 X. T& D$ p% j
  797. ' D5 j# b  s% C/ w: S: J4 U. C
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / E# P# P, G" _/ i9 k
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 e& C* b+ F, h3 F) e) T, I% x% q
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");; W% H3 E- `; `
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: [6 V7 z' K: `" C5 S
  802.                 }
    8 \# O& S) f8 y% G) `" i% }# @# U
  803.                 dwStartUpSteps=5;% `. G) D  W8 f7 b* w  \7 l1 }3 B6 R
  804.               }9 Y5 k2 t  E: N- L$ ?* Z& g5 A9 \* r1 j
  805.             }5 r, y) }# ], f% b
  806.             else
    - O; V& A6 w+ X4 t' d( f7 I) E" C
  807.             {/ A  X* p' a6 N- v# d3 G
  808.               unlink(".\\DownLoad\\checkversion.txt");+ n9 c% U9 m) T. f- J
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");( c! k8 S6 ]; L2 ~- R; a
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / l, P  r7 q. `- ?- z# n( I5 G6 m
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");4 l) T, J" \. T# c8 a9 M2 E" b  m

  812. / S$ V5 D. b5 T: `9 D
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / i$ H$ t- {/ Y- o& g# @/ e
  814.               dwStartUpSteps=99;
    ! K( N/ e" @; c; h9 S9 u
  815.               bFinishUpdated=TRUE;
    " _( ^8 d5 m- f! F* G
  816.               bCanUpdate=TRUE;
    $ j7 R3 h4 K" T
  817.             }
    ! E# Z  ~: h: Y6 W1 U
  818.           }
    , Z% y. J' c  {: T8 a# F5 A0 i
  819.           else
    : F3 }* C2 G3 ~
  820.           {( d5 Z/ m9 n5 t# @, |
  821.             if(!Dn.Connected())
    . L, l- S: G1 T+ \3 l5 R( {! W
  822.             {
    * `% N$ p' ~1 ~# `  K8 `/ H- H
  823.               bFirstUpdate=TRUE;
    % E4 b! a& n/ j' K" y9 S0 c
  824.               dwTotalFiles=1;0 p" ?! R. w1 g
  825.               dwDownLoaded=0;
    # I! G! E; |  m, i8 B. @0 w
  826.               bSilentStep=FALSE;
    % F4 R- i5 o" a& t
  827.               bCompressed=TRUE;( G0 c& Y4 X; d/ w
  828.               strExtLocal=".\\DownLoad\";4 V7 h  c, }8 M" Q* F
  829.               strFullName="update.txt";1 i# R3 |* L4 c2 K7 o
  830.               dwProgramState=AP_CONNECT;! X# x& n# O  I6 \
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + e$ r0 ?) [3 F$ \" y# B
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' q+ S& a& [5 J4 H% V7 H8 y1 {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % E+ w5 l3 P/ I" Q# |, ?9 s: W
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 H) o$ B1 D; L9 z+ u0 y9 a
  835.               unlink(".\\DownLoad\\checkversion.txt");* a" H3 B# P% J0 b; N+ w
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    : h) s& s/ g0 \. ?" K/ _
  837.               {; \: N, r, n* _0 g9 g8 r! p
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");: }2 s( j9 h) `4 M4 a& |
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    3 a% |/ ?" _0 }. ^
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");$ f# B0 A: V9 h, \
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + \% ~" w% V. l$ j. m6 C
  842.                
    + S0 ?6 T0 H  x5 Z! [6 }0 q6 U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: i; y2 b6 }& A4 E: T0 q# A
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- z- e8 R) g: g. h! }
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) S2 |' t- s/ w; Y5 B
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 C9 j1 u& L9 `' D9 L
  847.               }: I: d1 B9 Z$ k: ?
  848.               dwStartUpSteps=5;; R1 K# G9 h' Z( _2 C( [
  849.             }
    . ]3 q* f- c% \4 b$ ]
  850.           }3 F& m9 [. \. {5 u
  851.         }  i6 K+ |2 |$ E1 O
  852.         else
    0 U3 D) X4 w2 w: U5 e
  853.         {( k4 g7 p! e: L) V
  854.           dwStartUpSteps=3;: n0 M' p0 X7 E& x
  855.         }
    / o% R9 o& p; d$ m. h
  856.       }
    4 ^# j4 m1 u, k$ a+ o7 q& T' ^6 W; m
  857.       break;
    5 M2 _( p, s# E0 z, D
  858.     case 5:
    . l. \( `5 b& w0 h" V3 d
  859.       {
    " |% A1 n4 K& [. S- y$ C) p6 j( g
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    + _- z/ U% N' l- O( @/ F; S$ w6 B* K
  861.         {
    0 g: V* @+ L) ]! h" w& V+ p
  862.           int opt_overwrite=1;$ D( V8 ?! A) _$ m$ g
  863.           int opt_do_extract_withoutpath=0;
    , Z" H' ]7 t8 o: t8 T; I
  864.           unzFile uf=NULL;* t  g% ?8 I4 g

  865. $ s; o+ g3 w- C  T, O
  866.           uf=unzOpen("Wsa.zip");& d6 o# @# z; |! ?- Y
  867.           if(uf)8 v  y4 W$ ~) [# ~
  868.           {6 h: \2 r0 C8 L) x8 f" O
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ! A! q0 I, ]) l2 i+ y
  870.             unzClose(uf);( R. T% Y5 t' T4 Z
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    3 }5 `4 o$ b- u" W$ T( N
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");- k0 X& [- U6 ~# j4 \/ d: E
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");+ }4 G1 M* w- ?+ i# C$ b3 {, z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " ^& N2 c4 X+ s  U
  875.           }
    $ O, M3 N/ j2 K' ~8 P
  876.           DeleteFile("Wsa.zip" );
    & d# h" b9 j: @! d
  877.         }+ E! `5 ?& W0 k6 S5 v, p5 G9 \1 l4 D( b

  878. + o! r! L6 J+ n* r/ d& e
  879.         if(CheckLocalVersion())! ]5 T& R- s! c1 E+ a  z+ `  q4 T
  880.         {, i. u2 A: ]  B
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");6 X; D1 Z6 O8 j! J8 }
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ) ^0 b% P4 _  w. m9 |1 j
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ! _& D) n2 V! v% x/ U
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ Z1 v( S  Y& v* }1 s
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    1 U6 Y- ]$ p4 X0 H0 l
  886.           dwStartUpSteps=99;
    0 O8 Y3 \9 y3 s. h
  887.         }5 P9 b5 r' C, p% C" y- V8 {7 M7 G
  888.         else* W1 O) W3 e4 S* O8 g8 i/ d
  889.         {5 v8 a/ i) ?" f9 [) z# j' K
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' D  i4 S  X) K2 ?' ^' m
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# F5 k7 M9 b0 W6 ^4 k' h" T! f
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");1 A8 B5 L8 R1 i) A  J! j0 f" {

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

) v8 X. W2 W) ^

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-9-18 20:26

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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