CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
& y/ y  q' v2 g( \
  1. / RevApp.cpp : Defines the class behaviors for the application.
    3 u6 m" t& M# l/ ]* A5 Z4 e" l
  2. //
    6 |. I: o6 y5 x) R1 d) Y" o
  3. 6 q. H& t! l0 O3 B2 j- A3 X
  4. #include "stdafx.h"
    + X3 ]0 R7 }+ {; `

  5. . G% K& S8 P' X. s
  6. //#define UNICODE
      n1 h0 N$ c2 C# e2 [$ W
  7. //#include <gdiplus.h>
    ( m( d0 f& N2 g! b) j+ S. m
  8. //using namespace Gdiplus;" h$ `/ B  }! d3 d. s; y+ [. ?

  9. . p3 B% H3 x2 u" I1 m% \
  10. #include "RevApp.h"
    % }7 ~9 B  v5 C' ~
  11. #include "RevAppDlg.h"/ m, e( k3 Q: ~! M
  12. 3 P/ ]" L% c- {0 e
  13. #pragma warning(disable:4786)
    " Z$ J( ]+ ~: ~
  14. #include <map>
    ! {7 t" i+ q' u6 q
  15. #include <list>( M/ P! D. \! w& n/ ?: m
  16. #include <direct.h>; P  x- ?7 Z. t5 x
  17. & `2 w( U, S% \( N$ D4 o9 U
  18. #ifdef _DEBUG$ z$ f7 X% t- w, c( T; o
  19. #define new DEBUG_NEW
    5 o) |. S# `4 W: l% t
  20. #undef THIS_FILE: a  G& S' C' o* M
  21. static char THIS_FILE[] = __FILE__;
    9 U7 ]! b8 l# i. j
  22. #endif* T# I2 m+ {  D- Z
  23. #include "SkinResDef.h"
    ! {2 s; u* ~# [( k& ^
  24. #include "ChangeBG.h"
    $ C' V- u* n6 e6 `7 u3 l- E6 f" n. ~5 V+ }
  25. #include "AFXINET.H"( k+ S. @" B) I5 K
  26. 3 A- X& Z2 n$ o! {' v
  27. #define TRADITIONAL_CHINESE 0
    9 u% a. M# D2 e5 P' [/ n
  28. #define SIMPLIFY_CHINESE 1
    " j* f) z% d+ J9 C& h& s7 R+ }
  29. #define ENGLISH 26 l8 I  P3 n6 S" [0 \) _0 v
  30. int m_iLanguage = ENGLISH;
    # q& D' f7 c9 m* u
  31. /////////////////////////////////////////////////////////////////////////////
    4 H. O! V) T9 ^7 \  `4 D* \
  32. // CRevAppApp
    * O5 C- c) N  e/ O
  33. : N; J/ }4 ]- ~; p
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& R/ r: B, t& ?2 F! G; @
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) O* ?8 a9 t. e# a; l. o3 ]
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    8 D4 H+ M( n' u, x2 L
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!7 X/ _0 W: T# ^$ g1 s
  38.         //}}AFX_MSG* O% D4 C, L& U0 H# o
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    0 Y7 k7 o! _9 H- p$ R7 q* Q6 v
  40. END_MESSAGE_MAP()2 x: E/ {1 M' s- {* ~9 z# S; \

  41. + K; B2 |5 P9 V  i
  42. /////////////////////////////////////////////////////////////////////////////
    1 h, j$ J2 h0 T( m- U
  43. // CRevAppApp construction, q7 r8 g! b, w7 I4 Y
  44. % H; K' P/ G, U5 c
  45. CRevAppApp::CRevAppApp()
    ; j) j6 W5 Y2 o3 ^# M/ J4 T/ m
  46. {9 |2 B4 n- ?" n
  47.         // TODO: add construction code here,
    . F6 G. R1 F8 `
  48.         // Place all significant initialization in InitInstance; V  f0 R1 Y6 H5 F+ w6 K5 K
  49.   bDisplayIsBig5=FALSE;/ q3 c% K+ ?" l( |
  50.   bRestartUpdater=FALSE;
    ; w) f2 `% w5 [: h0 c+ n
  51.   bFinishUpdated=FALSE;- c  w; j8 d3 J# \
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;& @4 r9 j- ~: K5 i- Q1 }1 m4 N6 s8 o
  53.   InitChangeDataBig52GBKS();. F  c' E  z7 Q  h. Q. \! v% n
  54.   InitChangeDataGBKS2Big5();' ~5 K, \# I  R& y
  55.         //
    8 c+ |" {* X/ b) y% j: a# |3 ?1 Z- M
  56.         bClickRunExe = FALSE;' g% J& r2 p  |& u
  57.         /// d  Z. q  }3 ~/ j- e  H4 D9 |
  58. }
    / y8 p9 j* q& H. V0 f; A
  59. ! L$ S! W8 E- K( \) G5 `
  60. CRevAppApp::~CRevAppApp()
    ( ?. x: ?& \! f" h7 @9 }# q* v5 r
  61. {
    . b' |) |( Z+ c) C
  62.         // TODO: add construction code here,
    . G1 ^2 G5 c5 c* j( `  k& ~7 K
  63.         // Place all significant initialization in InitInstance6 K7 t  n) R$ n5 H
  64.   EndChangeData();2 O" r" O8 B) M0 \5 E6 l1 Q
  65. }- g/ |6 h) X4 g
  66. 4 ]5 a) [: |; S  }1 p3 x
  67. /////////////////////////////////////////////////////////////////////////////
    ! _. _1 _8 |, q4 R& P" r
  68. // The one and only CRevAppApp object, ^7 n$ y# |$ F/ |: t. M
  69. 8 R) H% K0 a1 D% n
  70. CRevAppApp theApp;1 m  `- X. t5 E3 o3 c( g) n

  71. 6 S3 d% [2 T* \: D: o
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName): q3 q& }  r9 w- V; b0 W
  73. {
    & X5 E" G& o; W3 [' @
  74.   int iEOF=0;
    . u, Z6 W* ]! _: P
  75.   char szTempName[MAX_PATH];
    ! _, W( Q7 x4 w8 Y0 z" z
  76.   *szFileName=0;* h3 B9 y9 z: G
  77.   iEOF=fscanf(fp,"%s",szTempName);5 R) L& x/ z& {! _5 r5 X$ t
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')( f# l4 `; e0 }% ]
  79.   {
    ' D+ b" R4 Q. T4 U( j
  80.     strcpy(szFileName,&szTempName[1]);
    6 W! Q0 s" c. F6 j* P6 e' V  k4 h
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ) V0 r- o/ J0 Y, [8 m* H- `
  82.     {
    + b6 |/ K1 c, f/ ?: p
  83.       iEOF=fscanf(fp,"%s",szTempName);+ ]' P$ ?/ G' @
  84.       strcat(szFileName," ");7 J3 f/ m( Y- G1 |
  85.       strcat(szFileName,szTempName);$ P0 @& Y' A9 D3 l: G
  86.     }
    % {  s8 r& X  n
  87.     if(strlen(szFileName)>=1)
    % y- B+ S/ y, e0 Z
  88.     {- ]# q  }7 z# G1 [7 _2 I' k
  89.       szFileName[strlen(szFileName)-1]=0;
    ' _+ D4 S  I7 Q2 u$ L' p5 i
  90.     }
    & l& N6 P& i* ^, p  B+ _
  91.   }2 J& Z2 p6 V5 z+ D; O
  92.   return szFileName;
    8 S3 O! A5 ]& f. |
  93. }4 O8 w8 N2 c' Q, n. D- P" L' n
  94. ; B: U% N, V; O1 M: N, x0 l
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)) L) X+ m+ l* x
  96. {
    0 A2 V! U7 y, t2 r7 W
  97.   FILE *fp;
    ! v# i$ S1 T3 E
  98.   char *key=NULL;
    8 T; M0 b: Y- S1 Z+ M; c
  99.   char version[MAX_PATH];) n0 k. v$ t9 n4 D4 R. K
  100.   LPUPDATEFILE file,olds;# y7 B% C2 o" m: w
  101.   std::map<CString,LPUPDATEFILE>::iterator p;4 L6 _! b$ K: n% L* s
  102. 6 \" p- X5 d3 z! H8 I% i% X
  103.   UpdateList.clear();" t* I/ f7 W; \
  104.   UpdateFile.clear();
    ( d' P% N' V4 ~9 Z/ n3 R
  105.   if(GetFileAttributes(filename)==-1) return false;
    0 m) U- t2 `4 z$ t1 p( R
  106.   if(!(fp=fopen(filename,"r"))) return false;0 N, H; ]& k. u7 K6 h* F
  107.   fscanf(fp,"%s",version);. ]$ M' }" P- T" q0 m9 u6 s
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    0 f* [* a& D( _& l: N% N
  109.   while(fscanf(fp,"%s",version)!=EOF)
    / \9 z% }9 l7 {
  110.   {7 F5 D( ~# Q) p: _, m( |& E/ s) P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 b. s" M9 x! S9 ~* f
  112.     fscanf(fp,"%s",file->path);
    6 a% _# |) b  w& y2 J7 V, O
  113.     ReadFileNames(fp,file->file);- C0 ~5 ]: @$ O3 |
  114.     strcpy(file->full,".");
    6 k( ?0 _4 q& q9 f
  115.     strcat(file->full,file->path);/ [* h: j% L9 N
  116.     strcat(file->full,file->file);$ J4 W' T- J  F  o! P
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    9 k# _" ~- O' n: F- r
  118.     {
    / [  x  P/ W" i% t0 b3 v1 @7 G
  119.       file->vers=(float)atof(version);
    # @! }  X; O% }5 H
  120.       UpdateList.push_back(file->full);$ d4 |3 m! X' M. ^( B6 t: |
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; V- X: w: b! _: ^
  122.     }, x+ H- Y% q. m& t
  123.     else
    6 Y, x! A5 }+ u" C
  124.     {
    / U+ m4 X% G6 i6 f0 O# A. C
  125.       olds=(*p).second;
    " k. W0 ?/ ]& R( P" p# h5 T& l
  126.       if(olds->vers<(float)atof(version))
    5 r9 _5 p5 R+ @# p2 Q& o% j$ [
  127.       {
    8 }. P+ ?7 h4 I: b6 T* j6 h; \
  128.         olds->vers=(float)atof(version);
    + a! w/ P. ~2 w7 z
  129.       }  t7 A1 e  U3 D' |/ x  B, U
  130.       free(file);7 H' i2 d. h+ _2 c1 Y- K7 Y8 T
  131.     }
    2 ~; |- ?6 K7 q6 e
  132.   }
    ' e# H5 ?1 ^- B$ R) ?; [
  133.   fclose(fp);
    * \0 I: J8 _1 S6 S+ L
  134.   return true;  ^2 I* c! L0 t) C
  135. }
    . ^: I1 S8 r# F- O3 ?& }7 t
  136. 9 h5 Y, G: g! x8 `0 ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ; Z7 o/ V$ m2 C
  138. {( K3 ~, M! e0 T0 Q+ Y/ Z7 J7 `
  139.   TCHAR  szFull[MAX_PATH];
    0 p6 J7 x9 J9 A
  140.   TCHAR *token,*inter;# t9 V* C1 \1 Z+ Z
  141.   *szPath=0;9 ^5 R8 K" k% m5 w8 s
  142.   strcpy(szFull,szFullPath);8 B. F1 v/ H, V& \% R1 X& B! ^
  143.   token=strtok(szFull,"\\/");: o' J- m& `# M4 V4 G
  144.   inter=token;
    ) t" c2 e) J; r. w1 i
  145.   while(token=strtok(NULL,"\\/"))
    7 j) c" D  O9 I% W7 o6 s) z5 S! @
  146.   {) V; t$ k' B7 P( f7 F" ]
  147.     strcat(szPath,inter);
    2 p  k5 O3 w. B, x# E) {7 c
  148.     strcat(szPath,"\");) |7 Y( P( {& }, [# {
  149.     inter=token;
    2 l* U9 K, I" W2 w* @) ?! \1 P
  150.   }" Z; @& |; ~# J- N
  151.   return strlen(szPath);
    , b0 L! }1 d# p0 S( x# d0 |' S
  152. }2 b5 F6 R( e/ e: _+ h7 e/ c$ e) I
  153. + n6 o+ Q! ^# [: w3 J0 `. _3 h/ v$ q  z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)0 t6 M& i- s8 Z' }; ?
  155. {
    # U$ Z& ~, V, G7 [3 n: B! }. B
  156.   DWORD attrib=GetFileAttributes(Target);
    $ Y. g, X) m# k/ U- w2 f
  157.   if(attrib!=-1)7 P* Z/ d; ~1 l6 ?. {
  158.   {6 ~0 X( I1 L; i
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  I, j. [5 x8 P- F' K0 E2 P3 f
  160.     {( t8 s' n8 U, w! c7 q9 @$ o) i
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
      I. d2 \& K- o9 |  b
  162.       SetFileAttributes(Target,attrib);9 d4 ]/ Y+ `, x$ w  M$ f) }
  163.     }
    , c* H) _9 Y7 _# p4 g9 K$ N
  164.   }, v& K+ C  t5 a3 T
  165.   CopyFile(Source,Target,Erase);
    9 A: z7 N- o  o0 j) A$ i6 i
  166. }
    ; g, t) z# M5 b/ g0 t8 j
  167. $ ^' u" F+ X  N, d  Y1 {
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    $ F( @( c3 j0 L* b
  169. {- e$ }0 H5 D1 s
  170.      FILE *fp;; l5 t0 ^6 ^0 Q
  171.      char  szBuffer[8192];
    4 ^; o* v3 y! ]5 N! [8 k
  172.   va_list  argptr;
    & C6 |2 ~  r+ x. }
  173. * V. @3 _" [3 Z5 b; E
  174.         va_start(argptr,message);. L' A; V. ^1 e4 R2 K5 \1 U
  175.         vsprintf(szBuffer,message,argptr);
    8 U3 N% U! M' J
  176.         va_end(argptr);
    * K: d+ \9 ?1 R6 E. W+ |4 v) u
  177.   fp=fopen(FileName,"a");4 n' Z- u) y/ B& w4 T. |
  178.   if(fp)  H0 F& w7 l- @
  179.   {/ ~  i; n% G- ^+ N+ N8 ^3 P
  180.     fprintf(fp,szBuffer);$ w" @/ I" ]1 U
  181.     fclose(fp);5 Z2 L( b" F; f1 s/ x
  182.           _flushall();
    5 ~6 p3 g/ b1 D
  183.   }  z, i6 o" ~, I/ @; t1 X1 W; P, J
  184. }
    9 w% p) w& R0 f! P$ K3 I

  185. 6 n- h5 z  @! T$ {& ~
  186. BOOL CRevAppApp::Fclearf(char *FileName)+ p7 H6 z1 \: `5 _# O2 a
  187. {) @( n0 M- I6 v* H9 N# m% s
  188.      FILE *fp;
    4 `* [; ]1 J$ J7 j9 o) x% Z
  189.     DWORD  attrib;0 i) H- R- I8 I$ a8 N
  190.   attrib=GetFileAttributes(FileName);
    & ~! @; i+ b; S; m4 S, Q2 \
  191.   if(attrib!=-1)
    * A3 o0 b) G: M, h* n  \$ D
  192.   {
    2 K5 `; q- W! H) C
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 d6 j# M/ O; R( d& A5 ~3 k8 U. e
  194.     if(!SetFileAttributes(FileName,attrib)); ?) b4 u% D/ f) i) i# N0 c$ U' m
  195.     {
    9 T7 M7 M0 p# J8 n) P; c
  196.       return FALSE;
    2 k' f( w9 A; m, J
  197.     }
    # ]1 f% _$ N8 ~/ r: ]8 X
  198.   }
    * b0 a. Q' m- S( D" m
  199.   fp=fopen(FileName,"wb");
    9 n; p% ?( P  k( `" |8 K) P
  200.   if(fp)7 C* `& m7 d. d: i
  201.   {) J0 S$ }; H* N% R: `5 E5 b
  202.     fclose(fp);8 m, \. B0 V0 D
  203.   }2 t9 K; X% d1 H- x
  204.   return TRUE;9 k8 d) M, T& Q& Z# f% @( e
  205. }
    8 ~  ]- x8 U7 f" ?

  206. 3 [3 B- _) w' [# G5 }$ H. _
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      s. ~" A* Z& Z4 n6 G) _
  208. {/ Y9 d0 ?9 s2 N; b$ E
  209.   char filename[MAX_PATH];. M* b, p% i1 F$ i
  210.   LPUPDATEFILE file,olds;
    ! P: n7 D' v6 p# R7 W
  211.   std::map<int,CString>::iterator i;8 ]9 Q, [+ r; ~" J6 I/ l9 ^% X$ j; a
  212.   std::map<CString,LPUPDATEFILE>::iterator p;, E1 }) X# W; g- [0 ~
  213.   std::list<CString>::iterator l;
    . I$ Y5 D# `, Z5 i+ q! \

  214. % Z1 d& I/ D0 ^& p9 i3 ]
  215.   if(bFirstUpdate)+ H# f4 H% E, [# l5 W
  216.   {
    ) Y5 b9 d& l- f6 H$ o/ q
  217.     dwCurrFile=0;
    & P6 T9 Q6 Z" `  z: P3 I: F
  218.     bFirstUpdate=FALSE;, |2 t2 \  r) r& c# D: H
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + \2 E6 {. ?+ Y6 E7 C) M
  220.     {0 x7 w0 F$ H% C0 @/ x- I
  221.       dwTotalFiles=UpdateLocal.size();
    ( o+ D# X- x0 W! {: d/ n
  222.       dwDownLoaded=0;5 Z9 q2 @" C  [( j, P4 M- G! [# `
  223.       bSilentStep=FALSE;$ @5 m" l4 ]! d  Y9 W. G& q
  224.       bCompressed=TRUE;& H( V, [6 L: s0 c6 t) E* f( M+ ~
  225.       strExtLocal.Empty();
    & n2 V0 e8 J0 g- R6 ?0 k7 h2 ~
  226.       strFullName=(*i).second;
    . }, K) V8 J" i8 y3 d0 E
  227.       dwProgramState=AP_CONNECT;
    ! l7 u1 E/ ~+ S
  228.       return TRUE;
    ) ?$ K; t6 C* e5 z$ _3 |
  229.     }: r0 p2 e& v$ G
  230.   }
    8 c+ C5 Y" @6 t) \. f, @9 H5 F* z
  231.   else if(bRestartUpdater==FALSE)* p" {/ g$ X1 w. ^
  232.   {
    ( G- A$ D! {' W
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    % S5 C) a( Z& [
  234.     {
    - e' Z7 H2 `' s  ]' e4 l- F1 @
  235.       file=(*p).second;
      M: N% F. I8 h$ @
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    0 E4 A* [4 D# Q$ D  a7 j
  237.       {
    3 R' D3 d5 l! n3 _/ ^" r5 D- C
  238.         olds=(*p).second;
    & ?# ]$ h9 c# V  \
  239.         olds->vers=file->vers;0 ^+ p7 q! [% v* O" j
  240.       }
    0 Q2 w# V) I# g4 A
  241.       else
    ! h9 `( X3 }6 R* u7 ~+ K
  242.       {" }; F7 y2 c4 F# g
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! ]+ b: e6 g+ C7 m% u
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    3 ]  b+ F2 G+ k, N+ A
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));$ V2 o2 o; C/ ?& i( M  m3 l' a
  246.       }
    " X. u5 t4 D$ V3 {, ?! J
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    # b5 u/ r1 e4 v3 [4 y
  248.       sprintf(filename,"(%s)",file->file);' ^( |4 M  l1 T% ~6 i
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + t+ L/ O2 R' v
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }0 ]: Q* {9 z* j8 F8 @  Y5 O
  251.     }
    1 e$ A3 B3 a5 o8 I* {- T
  252.     dwCurrFile++;
    ( J+ `, I( x4 _% H0 ?
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' g4 |. o2 @; ^) Y
  254.     {
    * \  J+ ^0 S* D5 e7 S# J
  255.       bSilentStep=FALSE;: ^% n1 a* _( M$ O
  256.       bCompressed=TRUE;
    9 D! ^% z$ V; R6 D  w8 q( v
  257.       strExtLocal.Empty();
    ; L6 \; I- p; I& \0 ?% t4 ^0 B+ h! w
  258.       strFullName=(*i).second;1 \  ~  @% `$ x: Z1 t- ?7 I  O
  259.       dwProgramState=AP_CONNECT;4 z% g7 A, n; q
  260.       return TRUE;! k& X3 f7 |* G4 r2 `1 S
  261.     }
    ; }: W! l6 `/ s  t8 o, Y8 \- n# n
  262.     if(!bRestartUpdater)+ k  p4 @  g2 b( |
  263.     {8 U- r/ W6 c: O- }: k0 Q
  264.       int iCurrSize,iFileSize;
    * s+ Z) ?. i! @% Y/ K
  265.       iCurrSize=0;2 F% P$ m" s. X# A' H8 Y9 R( [7 V7 i2 o
  266.       iFileSize=UpdateList2.size();
      C8 R0 m* ^& d  ?
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    , \/ T$ j5 z: H& A
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ( `9 g( C$ @$ ^4 W- f3 N
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' H5 Z2 x& p$ g3 @7 U( F" ^9 S5 r
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! j: ^5 _" ]' N3 S0 ^
  271.       Fclearf(".\\update.dat");
    2 e+ N0 R: K4 N: `  k
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    + B6 N4 P' s+ h$ U1 @7 l
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) a( Z& F6 @9 i6 m8 e$ _. f
  274.       {, \, ^/ X1 x% W/ b$ j
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ( A8 a( P: k$ d: {+ q) a
  276.         {( c( g/ m/ e( y: P7 F
  277.           file=(*p).second;
    8 n; K) i, L# d9 X+ A
  278.           sprintf(filename,"(%s)",file->file);0 a! m! @2 L5 B0 N8 D# K
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 s. A! ~+ y9 P, h6 ]& D
  280.           iCurrSize++;
    ! H+ \7 j6 L. u
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    " m- S1 O+ b# J1 @3 E9 ?) b
  282.         }
    . k0 }/ I8 O  a# m0 ^  c
  283.       }
    , Z, _+ _" K9 \8 P, `# K
  284.       unlink(".\\update.txt");! N8 H& m* b$ d1 W% D8 q6 J! w2 f
  285.       unlink(".\\update.tmp");
    + W  n% o8 L; w/ b  M
  286.       Fclearf(".\\checkversion.dat");
    " u3 `) G& T5 j5 y' b
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( ?9 W6 e3 Z3 h; \, n' K9 `8 V
  288.       if(UpdateLocal.size())1 m1 k0 P0 o, e1 \
  289.       {# W2 o9 D# E6 b' f& x2 [( Y& X
  290.         UpdateLocal.clear();: A+ S) C& U2 z3 I0 z9 ~
  291.       }
    0 Y. s7 i& O- T/ ], t
  292.       if(UpdateFile3.size())6 ?# g* M9 e# E, F5 i5 g0 u
  293.       {
    5 T, T5 v) q+ j" T# O  ~
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' i  e4 D- B% b3 e! r" M
  295.         {
    8 `  K, N3 ?  s; ^" j# h
  296.           file=(*p).second;) w, l2 Q. E( a" v; Y
  297.           free(file);: V7 K5 N# B& A$ `7 u
  298.         }7 w" C4 Y1 M/ q8 F" D+ _( ]
  299.         UpdateFile3.clear();7 t1 Y% c1 \3 D7 K8 P
  300.         UpdateList3.clear();
    ) g8 q/ G9 S+ }  Z- Q
  301.       }6 o7 x" m1 l; A( S! H: s
  302.       if(UpdateFile2.size())8 ?) d, `* G/ P$ S% w! g/ N- q
  303.       {* n0 k, O% c, Q- W$ x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + Q- |8 V7 N& m3 H1 _, O/ G3 T
  305.         {0 I9 Z8 p: w' k( L
  306.           file=(*p).second;
    , s4 N+ {% G1 r0 q
  307.           free(file);
    9 Q3 c) @! B+ I# C( j
  308.         }! Q& x7 M( R& U* c$ w
  309.         UpdateFile2.clear();7 ~) {. e+ I- r
  310.         UpdateList2.clear();: {  {6 b0 j1 B; T
  311.       }7 v  \7 L% r5 E& ~
  312.       if(UpdateFile1.size())  R1 s# r; J% E
  313.       {
    # v& C: u5 Q8 w, @! X' \0 x
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' ~5 R* l0 `$ {+ D
  315.         {, C: @: |# Y; E: L# W' N2 U0 Q& i/ n/ ]
  316.           file=(*p).second;- b. |/ {; I: x
  317.           free(file);0 s$ v2 x7 b7 b  ]8 ?" V' `
  318.         }% B, X2 R/ V5 T0 @
  319.         UpdateFile1.clear();
    ( k+ h# x* q3 }5 |7 S( e
  320.         UpdateList1.clear();
    : N2 P* g9 r% x4 ~$ P# s
  321.       }
    8 q% r0 d! @* l! [2 S" Q4 z
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    : Y2 }6 A( K% u9 t6 z
  323.     }
    8 a8 y- ]$ a* T7 z3 Z3 O! S  T# W6 O
  324.   }- h: i4 Q. T$ \5 T
  325.   return FALSE;
    8 z: Q" ]+ x! |6 Q# Q* Z8 m' a
  326. }. J7 W$ C2 r# ]# x1 _$ Z

  327. 1 @( A3 o& L2 r: v
  328. void CRevAppApp::ClearAll(void)
    9 I# V# Y1 Q" d0 L! ^
  329. {
    6 X  f- z4 o2 r5 z" V; {1 {' s' j/ R
  330.   LPUPDATEFILE file;; i2 E( Z4 e# W
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' z: h% r& o( `" X1 S# j7 L

  332. & L3 H1 c1 j: q1 P5 Z+ s  H0 L/ C
  333.   if(UpdateLocal.size())0 k( d' F" Z) j# l
  334.   {
    8 U* E! v' L3 }
  335.     UpdateLocal.clear();
    2 {6 \* p& o8 K6 g! H. `
  336.   }
    ! o% E! {9 S) g$ T: E( [
  337.   if(UpdateFile3.size())0 K9 [- _9 S+ U# [2 I$ G, P- ]# n
  338.   {
    " N/ |6 z+ i* I3 m' P0 a
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 B- h; h0 }% i" n1 S
  340.     {' L" v/ V8 f" R- P, O$ `. K
  341.       file=(*p).second;# E! w5 u9 V+ j% Q& z; d
  342.       free(file);3 t) a+ Y9 C" _; k
  343.     }  U( k" X( m2 J7 P8 q
  344.     UpdateFile3.clear();
    0 N" @6 a: k: ]' q; w! ^+ d
  345.     UpdateList3.clear();2 q) G0 t% S/ A0 E' [
  346.   }8 W, W! e7 L; v* x/ c
  347.   if(UpdateFile2.size())
    - g0 r# a9 x/ v- O
  348.   {
    " H- n7 P- X6 A+ L* u
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 e' p: W  D: ^
  350.     {$ h; s8 S+ _% t3 B
  351.       file=(*p).second;2 l+ K. O$ k! [+ |. B8 i
  352.       free(file);
    - r" A: M9 k) p! B0 f1 `0 ]5 |& G& J
  353.     }8 x. W2 o" ]. t: L
  354.     UpdateFile2.clear();7 Y) N% O- A1 _+ Y% Q9 v
  355.     UpdateList2.clear();( R" @% T' x: V
  356.   }
    2 Z& y3 b- P  v
  357.   if(UpdateFile1.size()): g! s) I5 g. \- a
  358.   {
    5 }/ c2 ?" E! r6 I
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* M% i& r6 }% U5 g2 B) o
  360.     {0 R8 C7 F4 I0 d! W6 q* |
  361.       file=(*p).second;7 R- w: p, [8 s2 f
  362.       free(file);
    ! }3 G- J2 z& }( ?" j3 H' U
  363.     }3 {; ~, Z6 G! Q/ `$ Q
  364.     UpdateFile1.clear();0 s+ C! g' N. w9 q9 a; g' L
  365.     UpdateList1.clear();
    0 x/ v  P6 w- k. s# S, W% t
  366.   }
    4 E4 U& a2 H( r- o' E' X: p
  367. }    C5 v! _1 B+ {4 p+ J/ W$ X% Z0 ~9 N
  368.   ; L; j' e7 R( @5 W) I  V- X
  369. BOOL CRevAppApp::CheckLocalVersion(void)+ k# h0 M$ P7 X. e. a2 ^$ I. T
  370. {
    ! w- Q; e" \7 g) n# l
  371.   int c;
    5 S# v: n* ^# }# z$ O- G9 \
  372.   LPUPDATEFILE file1,file2;6 o# R" t* B( Z
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;) @, ?- U% Z$ d1 j3 |) o
  374.   std::list<CString>::iterator l;
    8 O' m! @: B/ o& \

  375. # T# r7 a" F6 G
  376.   UpdateLocal.clear();2 o: S3 C& y( v+ o# X1 t# c* o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);0 d& c, i$ K: b. z. B/ V
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    1 Z- j3 {& A- O
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);! r7 c3 X0 d: v3 G% n
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);! G; w; i7 E2 J* O6 D
  381.   if(UpdateFile3.size())  _2 j; q$ F! w% ]5 P: I% E6 j
  382.   {4 J6 i* c; Y: b6 [) G: {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ) w# z" z# S8 `1 n+ C
  384.     {
    2 K) u' @+ Q+ F( b, `; v  L; K0 C
  385.       file2=(LPUPDATEFILE)(*i).second;/ U% Z, M7 ^9 U( K! l# a, n
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" u+ R$ x) }2 v* b
  387.       {$ ~: l# a9 k6 w3 B$ Y" i
  388.         file1=(LPUPDATEFILE)(*p).second;
    3 T4 P9 X" ^3 T$ `, M
  389.         file1->vers=file2->vers;
    9 `( R  h! P% h. x( ?6 Y
  390.       }! h, U- A+ J& M- M
  391.       else2 U6 p& \8 [$ v0 ?6 u$ F! p% f
  392.       {
    8 V9 B  N$ r0 ~! ~
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 O) B( t" z3 U, B6 l
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));% C, y5 s4 S" J. \. m, K
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));2 r/ U/ ^7 _" v6 S  S! A
  396.       }
    9 K1 m. e9 z- b2 o& C( o6 Y
  397.     }% ^* `+ d, ]. W# Z. e: h
  398.   }! H8 Y# f% j5 D3 x3 S
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)5 L$ Y6 r2 E4 w; v8 T' Q
  400.   {
    ( q& {" R4 {2 e; v! R
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ) b! r" |2 w: n: n) ?
  402.     {: r/ x/ {+ L% t- P- y& K8 P. w
  403.       file2=(LPUPDATEFILE)(*i).second;
    $ v% a- [7 I5 G1 S8 |1 z
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 W- m3 `$ `& Z/ u/ }: A6 z+ |  C+ x9 x
  405.       {
    # D1 z- J) u* x4 l. R9 y* Y0 w' x
  406.         file1=(LPUPDATEFILE)(*p).second;) E' o7 r1 @. F. P. u, [
  407.         if(file1->vers!=file2->vers)
    ) n/ V3 b6 u5 F  Z- M- W
  408.         {/ b# }* }9 ]2 ^( N
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 X# f( j+ h2 n6 p, G* ]! l: s
  410.           c++;
    * Y) I% V5 Y/ ~0 z' c4 N
  411.         }
    - `9 p  X1 z3 u( b0 r, n
  412.       }: i. q( M" F: N
  413.       else8 b! `  k! Z, }* a6 F/ S  w9 l+ ?
  414.       {6 ?, z1 K# b  k* Q& D
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 T* R: L; x9 H. x! E3 A5 ?- h2 S* r3 E) U
  416.         c++;* b8 u' c% {% |2 Q, m
  417.       }
    + c- o4 H1 L6 g: x
  418.     }* q. W5 {: a8 V* d) I4 k# t  {1 t
  419.   }
    ' N+ w* ]) x$ E/ a9 y$ N: i4 f
  420.   unlink(".\\DownLoad\\update.txt");9 h# s* D! T! i3 F4 J; T. W
  421.   if(UpdateLocal.size()) return TRUE;
    ( j, M1 I! h; S
  422.   else                   return FALSE;4 S8 w8 ^) S6 T7 w  x5 ^
  423. }
    3 R1 u- E) f, c2 P+ Y

  424. & A+ g6 x. v, ^& n3 L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    0 W  J9 ~6 U5 l) R& [" t/ R
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ; Z1 Y$ h' k+ A' F8 q& H* o
  427. $ C7 r# O5 t$ U

  428. 2 r9 E) m3 Z. a3 h& E9 A# y4 C) j

  429. ' y" J& z; a. J( @
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)9 C. M- [0 J+ P1 w+ {, X3 K2 A3 L
  431. {$ T4 c! K$ s0 I- J; m7 ^  F' R1 c
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;; S+ W, d$ `' S9 I
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  r' h: G5 d2 ~/ [- x4 h
  434.   {
    & h: L( V+ s% s& Q: b: ^6 B
  435.     char szLanguage[50];) F% T7 h# L- y# S) \
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 a* _8 e+ f( H
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: B! V* P4 J1 x3 U4 N$ e# |
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - z0 o2 }) _7 K6 Y& j9 |7 Q
  439.     else                                   m_iLanguage=ENGLISH;
    ( I5 ^. s' Y4 h1 s9 Q" O. r
  440.     char szRegister[100];8 K# R2 K& ~5 |- A+ V9 x
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");* N5 ^9 y3 Y9 B  f+ X
  442.     strRegsName=szRegister;
    7 U% y" x+ z" H. C; v: S4 B3 }% |
  443.     char szPatchURL[100];2 y. s( l  P/ |0 B  [
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 h* o( M$ H* t, e! G# [( h; x
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 c. [& [4 F* F) g
  446.   }+ o- N4 R6 \) r6 a, w
  447.   else! [" z, C( z- J0 E3 U7 M
  448.   {
    # I) k( G5 j$ Q" d7 ^' @
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - j2 P# k4 P# l7 _; H/ b; E
  450.     strRegsName=DEFAULT_REG_URL;- q! _* S6 j% d" ?: v+ K
  451.   }
    & B# Q7 W3 r% _0 l
  452.   if(GetFileAttributes("hosts.ini")!=-1)+ f+ V9 X' `+ o$ G% Z
  453.   {
    ' n, k- o4 v2 W8 h: _* ?
  454.     char szIP[50];
    4 b7 m2 ]8 L- ^
  455.     char szDIR[300];
    9 \" h2 }4 D: B
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))" }. X2 u/ E/ `* ]1 S2 c0 k- b
  457.     {
    0 r. i! \( C( n) q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");' I+ g& C) k, m/ c$ d
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");9 y) L) T* z$ `, `5 g
  460.       strHostName=szIP;
    ( L! F& F' K5 {% {3 r; T
  461.       strHostPath.Format("/%s",szDIR);! h% f0 ?: U6 {* v; \
  462.     }
    ! z$ |! ~* _, G/ B
  463.     else
    % b" y" b+ i2 d' u
  464.     {
    4 V. G* w! A/ Z% ~; v( ~( |) {
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 \8 D! S: D: K( g' z; }: R
  466.       {
    6 C& g! \5 K$ y$ g- w
  467.         char szLanguage[50];' C& n5 g" K+ J, e; ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 T+ _. ?0 [5 H( H6 U
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: R: U* t: g; G% r; ^8 c
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) {8 ^, k. \$ m6 }6 S
  471.         else                                   m_iLanguage=ENGLISH;+ o- ?* I; T! H: i5 q- g$ p8 E
  472.         char szRegister[100];! R2 n$ I2 q1 \' J( \# H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");3 \, {7 A- d5 y) c* l; z0 X$ s
  474.         strRegsName=szRegister;. K* i7 z- l( k# q" I4 a7 G% N
  475.         char szPatchURL[100];
    % e+ N' D& }0 s
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( Y, o7 x' f+ k- v- N: ?
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - a2 @0 O% G% @: t$ J. o! l1 p
  478.       }; N1 L6 ^' u) k4 n7 O
  479.       else: L" a/ c/ O8 x0 K
  480.       {
    * {& Q) \7 Z/ v( h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & W8 @7 k3 ^0 L/ m
  482.         strRegsName=DEFAULT_REG_URL;' e( D5 {% [: o  |: l
  483.       }
    9 D) M( g6 j! g6 [( M2 ^1 K: H: Y
  484.     }( |% L: z$ ]3 p. D
  485.   }
    $ _  l- b4 b: y* {6 V; ]* P* ?" J8 ?
  486.   return true;, L; \6 h( W8 l# Z* \* e
  487. }8 G5 F6 o5 }3 k. b7 Q% q
  488. + b0 C6 z4 S: m
  489. #include ".\ZLib\unzip.h"
    1 u  g+ ?# }$ F  C% \
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);; x0 U7 \  i! L& y9 P& Y
  491. /////////////////////////////////////////////////////////////////////////////
    , w# f- c' p1 z' N# o! U6 _
  492. // CRevAppApp initialization  z* T& J7 j& \
  493. & A& k  x8 W' ?: z! f+ b
  494. BOOL CRevAppApp::InitInstance()- P, F6 c+ E3 }; J" u4 s. L5 j
  495. {  Q7 e! ^& A+ E3 v: C( l
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];/ ?7 c0 H' V- N8 M2 y8 E

  497. & t: M/ |1 {9 o6 j3 H
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);/ u2 O1 z; Q$ o( H) b; T& }
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))* ~# T: E6 t. M; Z6 {$ h
  500.   {9 _/ B0 h+ f2 w9 i9 J8 S
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    / }7 |3 C. n# e( ]) a; ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);6 R4 q# d! K6 ]+ `2 D& K8 D- ?
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    + F6 r+ _: v! n1 b
  504.     {" E, V& D; r  C7 }2 E( n( @! k( C
  505.       strcpy(szPath,szPathTarget);* z1 x4 I5 F! T) u  {1 Z& y# a
  506.       SetCurrentDirectory(szPath);
    3 a% E4 l1 Z/ e: R; Z8 X
  507.     }
    0 K) H0 g- Z5 |; M5 T
  508.   }3 U; g7 y1 h6 M
  509. #ifdef _DEBUG" K/ s+ }& a# y, P5 T( o( _9 W
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 p0 o5 p0 }: s+ E! |& M& Y
  511. #else& \- K, o; e' l9 H
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; @3 W+ \2 Y- i0 L( |% M- e
  513. #endif- [! q/ V" B- M6 c& U# f
  514.   {
    , s3 T, E# d8 V- S
  515.     char tempFileName[MAX_PATH];0 R, b# M8 y" {7 t& B2 N
  516.     strcpy(tempFileName,szPathSource);
    9 o& V- s: X5 q  E+ M9 `7 R' i3 w
  517.     tempFileName[strlen(szPathSource)-12]=0;/ Z0 [0 r% k: G" m; g
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    3 P8 f3 n: y  L" Y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    - X# l% a% [/ X
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);( h! _/ W2 V6 P; v0 b' N' Q+ P
  521.     return TRUE;* Y# e4 G$ w9 l! ]
  522.   }+ P) o& R. g3 D( d
  523.   // Nuke 0118: Delete run.exe
    6 K. W" A/ X% h6 v/ R$ ~9 G  F
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );- f5 u% I2 d7 P( w2 x8 Q$ f
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    $ f$ ?, C& J9 I- h' \7 D
  526.   if(!ReadCfgFile("Config.ini"))% q0 Y( P- j# `9 K4 Q* K: r
  527.   {1 k$ m1 Y5 L5 C7 l  u
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 `- E5 ?/ y* s0 X
  529.     return TRUE;; o9 U; O/ N/ ?5 ?' i
  530.   }
    4 z, N0 k! _3 I: w0 n! H/ E
  531.   HANDLE mutex;& A, A# w) E- m- {& V" Q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    , C4 j: t. |# b: S4 L
  533.   {
    5 q: Z- E) c; K: T
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    - E  m) H3 z3 a$ {$ ]3 f
  535.     {: ]" F8 D3 G+ l/ G. {/ y
  536.       CloseHandle(mutex);' I/ C6 L+ \) M& L
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);' B, D( U2 e; N' w
  538.       return TRUE;: L; k# C1 o  R1 o" v: ~; W- F
  539.     }
    ( |" R5 G9 S  X
  540.   }  $ m) X1 X% z' ~; a3 Z, \
  541.   CloseHandle(mutex);
    + ^, y0 Z4 q) a/ B1 ]
  542. 4 F; C; [4 a7 b4 p' i; G
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    4 _6 @& E& O1 Q# d

  544. ! l# I$ m3 z, T/ T/ ]
  545.         AfxEnableControlContainer();
    ; h4 O6 A* g# X  c8 N

  546. 1 p% g" C. T0 V& U* _& _
  547.   bCanUpdate=FALSE;
    + k4 c8 f/ |5 ~# i1 P$ b
  548.   dwStartUpSteps=1;8 J* q& ~" s! |. [* R5 M; w! P
  549.   dwProgramState=AP_NOTHING;
    4 G$ t5 A" h( y0 K1 c; L4 a4 U
  550. % H7 J% A8 Z" t9 U
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & E0 T; W% Q0 z& n5 U0 g

  552. " L3 G% Z2 C+ `+ s% `
  553.         // Standard initialization3 C" o+ L5 L, ~1 k
  554.         // If you are not using these features and wish to reduce the size/ N, a' N0 p/ j6 S' T! w
  555.         //  of your final executable, you should remove from the following; l, l8 ^/ E4 o7 P' M
  556.         //  the specific initialization routines you do not need.
    # L3 G* n9 z6 A( S' [
  557. ! r( s- H4 e. \/ J( E" q
  558. #ifdef _AFXDLL0 j7 |. a" D; U/ G) T4 H( L
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    & C# O% l  C+ k' ?# S0 Q4 A: H
  560. #else# x# Y5 D% s% i" e) }: q
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( s2 W; {( q! b+ X0 s( }) P) m
  562. #endif
    ' \6 R$ B3 ~' U. U

  563. 1 r- P: X& W) I& v3 P' Q" r
  564.   dlg=new CRevAppDlg;
    6 q8 M3 ~1 C$ G
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 v. D1 Y5 n; H, h
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    . p/ a+ K/ p; N) w! a
  567.   m_pMainWnd=dlg;
    ; Y* N  \1 T1 x3 D( H/ L$ L: W
  568. % O3 z/ B. ~& ]6 K' r+ F
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ' H5 h" P9 G* R2 |8 A+ L
  570. 6 T& u+ `1 Y; t/ r$ ]" G  x& g+ x& _
  571. //  GdiplusStartupInput gdiplusStartupInput;! p4 q4 W6 D* H+ R% l4 q: x
  572. //  ULONG_PTR gdiplusToken;$ w2 l# C0 V6 K3 `' h! ^7 A
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    1 K: M, A  V" N8 x5 I
  574. 0 ]/ M9 s* D+ v4 f& s2 g" _
  575. //        CRevAppDlg dlg;: m" K+ X* {$ X- _( J3 C
  576. //        int nResponse = dlg.DoModal();5 w9 e) r  A. ^( v* q
  577. //        if (nResponse == IDOK)
    % P$ e  }& S4 n
  578. //        {  F' f" H8 }2 l' j) j
  579. //                // TODO: Place code here to handle when the dialog is3 C! T/ q. P" u$ Q
  580. //                //  dismissed with OK% V: m4 S0 c+ h' O0 D
  581. //        }
    9 m+ P4 f2 G4 G  N6 ~( t
  582. //        else if (nResponse == IDCANCEL)
    2 V$ W2 f2 W1 U) n5 O
  583. //        {
    8 K3 G" D; {  _
  584. //                // TODO: Place code here to handle when the dialog is6 _% |' q# j3 t
  585. //                //  dismissed with Cancel. d) a0 G* N6 l7 t( l
  586. //        }& U4 ?& Q8 p( {) a# C1 m2 y$ n
  587. 5 [2 ^/ C& O8 g2 U+ S9 M& c
  588.         // Since the dialog has been closed, return FALSE so that we exit the! s0 e# G2 r$ @  Q
  589.         //  application, rather than start the application's message pump.4 L+ |: ]) k) d( }" c( b
  590.         return TRUE;
    - L9 ~5 v: t0 t! _, Y/ K+ P3 o
  591. }" L& ]" L4 i  C' [  ^4 Q
  592. + b$ J8 m* k; W0 i
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 a- C$ C* ?% s( ^" G3 \
  594. {; D; @5 k* c5 j! x9 p: g
  595.   int i;' y! }4 I1 X0 f. l3 c
  596.   char *szRet;
      @9 U) N  Y2 F5 I3 P/ k! C+ P9 w( ]
  597. / e, x2 |6 F3 u
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    7 L; ]0 D9 ]8 W& {/ D" i9 `" H
  599.   if(sztoken)+ n1 k3 K: J7 r  n
  600.   {; v+ X7 E- a' K" P" g0 ~' e
  601.     szRet=&sztoken[itoken];
    , {' s# s' q# K5 k
  602.     while(sztoken[itoken])
    9 N- Q. y3 ]6 s+ m5 Q
  603.     {
      M. W) m/ b; I% S, V0 E
  604.       for(i=0;i<(int)strlen(token);i++)8 u0 ?3 A( g$ k, m; n( p( o- E
  605.       {/ {+ j- T, k* t3 {/ |: J9 o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])/ X- {. Q/ i3 z
  607.         {
    : R) R/ K' H6 E9 {" @. T' s1 j, i! a5 u
  608.           sztoken[itoken++]=0;
    + r9 U: R1 C* E* i2 H  ]2 Q- F
  609.           sztoken[itoken++]=0;
    ; ^8 d, x$ G- ?! ~! Y
  610.           return szRet;: _  u2 |# k: E
  611.         }
    8 y/ G8 R, V- ^0 i
  612.       }$ i6 \' K' F) J, R3 |6 Q
  613.       itoken++;1 n  `/ v3 ^( N
  614.     }
    & z3 R( U/ t  y2 v" g* ?  `: S
  615.   }. N0 y, T& G$ Q
  616.   return NULL;
    7 ?5 y+ D% ]4 i% j: ]
  617. }: R1 C4 B; a" v( f3 R
  618. # H1 `* a7 ]: ?: g* H) h
  619. void ProcessProc(long Total,long Current)3 t$ B' c  D6 N! x6 G" R
  620. {
    6 `$ m2 f: K5 l
  621.         MSG msg;
    1 G8 n! a* X* k8 }2 i% \- s3 f
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);' R* c& }% R2 Q& H
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ( _- m# M+ n& a  l2 v( `# ]- G) s
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))- N4 ?$ {* Q5 D8 g6 C/ R
  625.         {+ p( |) [! y& j
  626.                 if(!GetMessage(&msg,NULL,0,0))) u0 p& A2 y9 y* K7 y9 {# f7 X3 ^
  627.                 {& I& q3 T, w9 X/ Z
  628.                         return;
    & w" l0 h7 Q. L. N* H9 I* b
  629.                 }, `  O( R3 r$ U6 X
  630.                 TranslateMessage(&msg);
    4 P/ J' s5 C% h5 E2 Y5 x8 y5 B
  631.                 DispatchMessage(&msg);1 R! n1 {1 m- j% o
  632.         }       
    ) P1 [+ l5 g3 Z0 ]
  633. }+ G+ T7 U& r  s5 U; F& |

  634. 6 b( |! L" x. g. _# X; b7 r
  635. BOOL bFirstChar=TRUE;, @+ j6 T' S  G; h0 P
  636. # A3 q5 E3 q7 y) G2 G2 _' c
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    1 E- h+ K# j" B5 J- I
  638. {
    ) i& v! M$ W, P3 G: V
  639.         // TODO: Add your specialized code here and/or call the base class: b' ]- y! K4 j+ C: u4 G1 b: D
  640.   switch(dwProgramState)
    8 J9 D6 a) l3 K/ n$ c% ~3 x% s. Z
  641.   {2 f4 c4 X0 C6 N# D2 X
  642.   case AP_NOTHING:) q0 m4 X5 f! v: x, K) s
  643.     switch(dwStartUpSteps)
    5 B. C" ~/ A0 x) t
  644.     {
    " h, o: P8 C5 S( Z3 e
  645.     case 1:
    , H% B. S! u- J
  646.       {2 ]& R  @# x  Q+ I
  647.         int i;% _. @! w; J0 W$ _$ H. H* h
  648.         CDC *pCDC=dlg->GetDC();7 T4 S2 }6 G- n, J9 M
  649.         HDC hdcwnd=pCDC->m_hDC;' _* n+ C3 Z8 B- E
  650. //        Graphics graphics(hdcwnd);: `* K8 u8 k& S
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    0 F( ~$ `5 {1 Q; R- ?: y& V9 q
  652. //        INT iWidth=bitmap.GetWidth();1 V2 Y' z  n) Q- ?2 R+ T. D
  653. //        INT iHeight=bitmap.GetHeight();
    / H% W0 u8 A% K! H& Q
  654. //        Color color,colorTemp;" N# f0 J' s+ T( ?! i  h3 E8 \* E
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)( \' e* f+ b1 f- Y
  656. //        {
    ! V4 \. ]# ^0 {" k) L( O
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    / C3 E% G  k0 Q6 d. C; h
  658. //          {
    ) J* P1 z. G, R, P/ `4 q1 u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    . @. _1 g. m* b0 E( l/ v3 A
  660. //            colorTemp.SetValue(color.MakeARGB(
    7 `( n5 F* f8 H  g1 I4 k! J
  661. //              (BYTE)(255*iColumn/iWidth),
    * o% T5 K! x1 [0 d  B4 ~- ~2 D3 u: h
  662. //              color.GetRed(),
    ; o3 c2 k+ F, Q! |' C, K
  663. //              color.GetGreen(),
    0 C* S. ?: e9 l3 I: o
  664. //              color.GetBlue()));9 B# g" f" @+ Z9 E
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    - }, ~: |1 m, z# W2 s) O  r; x- @
  666. //          }$ k+ g) h0 |0 v. l% @
  667. //        }
    6 E  @) W* n: K& C
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    $ W+ {1 @& h; i* r+ Y6 M
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 i8 ~; u' g+ J8 j& ]% y! b
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ; J/ f- ~, l; v$ R! a
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 c6 S+ H$ o2 f$ k2 o4 h4 B; b
  672.         for(i=0;i<240;i+=8)
    $ C; I) t4 G; Q4 p
  673.         {0 K$ b( ?3 Z) }. T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) c, ^5 x+ r; S; _2 c1 h, l
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; }) r  p! O6 {1 _8 g* p
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( p' q0 [/ c9 ?; x3 [0 Q
  677.           Sleep(33);
    : Q1 M" w: ?$ i6 j6 d  T
  678.         }
    * x7 C: j* X5 t" i+ ~
  679.         Sleep(1000);: A7 G8 p, y# {: D( h
  680.         for(i=240;i>0;i-=8)* o: J) H- b* N" f0 e
  681.         {
    - h& V, i" c9 k% k; w
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);1 [  n" X/ y: I1 N: }4 w
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" [. V1 n* B/ O: h
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( j& `4 d) c2 m/ D$ F* ?1 l, q! U) h3 L
  685.           Sleep(33);6 z. I. `  S: S0 o2 G  m1 v  f4 i
  686.         }. l. W4 R: F0 ^8 M: I; K! a, {
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);5 ^; ]  t' G0 a6 u! S7 ]6 v6 y' X
  688.         dlg->ReleaseDC(pCDC);. H% Q* ]& {4 u' _; m% T. [
  689.         DeleteDC(hdctar);; `! w+ b& e' P0 f' v
  690.         DeleteDC(hdcsrc);
    * a% h2 j& X" V2 T
  691.         DeleteDC(hdcorg);) I+ n2 P7 `; |. [3 R% D
  692.       }$ }# |6 l3 T- W" o* c, {
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    2 Y! L6 b# U! Q  g) ^6 _
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 m+ B6 P/ {3 z& z* p
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");; _* M; Y$ O8 J+ u
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' v7 f* N/ \/ D1 m
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) y- o/ {! w& B
  698.       if(!Dn.Connected())
    ; e7 [, z* O+ B0 V1 @
  699.       {% P2 `, ~) M' E3 O5 M
  700.         dwTotalFiles=1;. m7 d7 Q. g2 N6 ]5 `+ n& X
  701.         dwDownLoaded=0;
    - d4 \1 T$ G" d0 O6 m3 ?) |! N2 ?/ G
  702.         bSilentStep=TRUE;
    # {5 Z: H, C. e( w
  703.         bCompressed=FALSE;% p7 g2 a$ E/ w3 k5 m
  704.         strExtLocal.Empty();( `1 D4 C( |, h. q0 a. l6 t
  705.         strFullName="readme.txt";: Z0 A8 C/ T& k( ]7 x" Z+ W
  706.         dwProgramState=AP_CONNECT;. g2 J1 X/ o0 N" H0 X- \8 G
  707.       }' ~1 b; t9 e9 I7 M1 s% _9 G5 c* S; w
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();6 B4 Z" ^7 H2 |. v3 ?: P' ]
  709.       dwStartUpSteps=2;# A6 _9 b3 U1 j
  710.       break;
    . G0 u# j* ]) T7 N5 q' n& G
  711.     case 2:1 z* q* U1 V  v& R
  712.       {3 d0 y8 B& Q& U
  713.         int iEOF;
    " U6 r6 x& d& P. N
  714.         FILE *fp;! M6 q9 Z( Q/ O& r
  715.         char szString[512];& ^4 [# w7 f1 `* r' d. Q- |
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ; n4 h' v$ o2 q  A1 b
  717.         if(fp)
    % z0 f) @6 c( b/ J* F
  718.         {5 P# \$ Q) I$ I# Y' @$ p
  719.           do: b# c" l6 t0 }! P+ X6 b
  720.           {
    ! w; w9 }0 c+ y! Y) m9 }5 |
  721.             iEOF=fscanf(fp,"%s",szString);" ^. W  {  |  Q" q4 d
  722.             if(strlen(szString))5 d$ M8 k* h8 `5 N* Z3 m0 j+ v  [
  723.             {  A. @4 y% p  K
  724.               if(bFirstChar)
    7 ~  i) m. C5 H" K" j/ }
  725.               {
    ; {5 o/ q, F9 ]# {. t
  726.                 bFirstChar=FALSE;8 I7 }. k  A: |) ~- Q
  727.                 bConnectIsBig5=FALSE;# e' V% I$ ~0 c
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;% s+ S1 K: e( L$ f# A( Y5 E
  729.               }# ?# |( v+ X7 P1 R* l6 e! M
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));+ u7 @* N# z2 H/ |' ~
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));; W5 i7 Y/ W5 W
  732.               dlg->m_ListText.AddString(szString);1 [6 B* T/ j1 [: V: g" ^7 l! V
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ d& T$ N- h. y) F1 O
  734.               *szString=0;# R8 }1 j) z! i
  735.             }
    ' F/ E" P8 x  U8 R% C
  736.           } while(iEOF!=EOF);8 |2 j* L; J. s3 F" s1 O
  737.           fclose(fp);
    4 ]& a2 e, P3 `" Q/ F
  738.           unlink(".\\DownLoad\\readme.txt");% P$ u0 _# x1 `
  739.           dwStartUpSteps=3;
    - e! K7 ^, s) Z+ Q4 G
  740.         }
    1 d& N* S' J9 b9 Q
  741.       }
    4 k+ z& d+ v# o" b# i& ]
  742.       break;! B3 k/ o- ?- n# F4 T! j. X
  743.     case 3:
    - w. K" {$ l  G3 }
  744.       if(!Dn.Connected())
    4 a8 w: x" q5 i# h+ `, n: f% z% L
  745.       {' G* w" f! H$ U$ H
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);& N- u; h9 V  S- ]+ W/ P# W
  747.         dwTotalFiles=1;0 i! u/ t+ C- c7 S( \: P0 q
  748.         dwDownLoaded=0;
    ! A! ]; H: z; K& [
  749.         bSilentStep=TRUE;' O; X" p/ n2 y% w- o, w
  750.         bCompressed=FALSE;6 y0 [: z6 J9 G1 I+ G: L4 h
  751.         strExtLocal.Empty();) d* \# g) }! O
  752.         strFullName="checkversion.txt";; T; p6 \  g* m) q# {# j0 d2 X
  753.         dwProgramState=AP_CONNECT;
    , F9 ~' }; d) ~
  754.       }
    ' ]+ E% @+ j" F" D
  755.       dwStartUpSteps=4;' r7 W' `: [2 \& U; r' ]- ]/ F
  756.       break;
    0 L7 `" x7 X3 f& x0 F* R2 T
  757.     case 4:
    1 D& S; f8 B0 j! X8 ^) X" B
  758.       {2 f  v# q2 J& K& s/ `; D* Q, l, d
  759.         FILE *fp;, [4 C  ~- `7 L/ C
  760.         char szString1[128];. T: f$ X3 j  F* S7 W* S
  761.         char szString2[128];! N0 O: c2 Y( K5 h
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # v$ l, g5 S/ ^9 c: u& r
  763.         if(fp)* o# ~8 `7 j( Q
  764.         {
    3 Z" X* y4 Y6 m( J+ H$ ?
  765.           fscanf(fp,"%s",szString1);; P5 u6 x% r" [7 ^4 [# s/ Z
  766.           fclose(fp);" \/ [  r$ J* X# b( Z+ x
  767.           fCheckVersion=atof(szString1);
    ) {, p  ~: T# b9 J
  768.           fp=fopen(".\\checkversion.dat","r");2 q% ?, N; @; }; \8 A4 d
  769.           if(fp); h4 _6 g& [# Y# i7 T
  770.           {( \. G. T1 x. q6 y% V8 ]
  771.             fscanf(fp,"%s",szString2);
    9 S% O9 ~; }# M% P' j
  772.             fclose(fp);
    # W' N- Z2 n: ]4 L; O5 e  {+ [% E+ }
  773.             if(atof(szString1)!=atof(szString2))
    5 ]( M6 X) R$ m: k/ i1 g
  774.             {* Y' i, Y3 x: d6 C) T
  775.               if(!Dn.Connected())6 {' f4 {6 n+ ?- t* q
  776.               {/ s  `2 ~1 @& C. T# H
  777.                 bFirstUpdate=TRUE;
    / Z' O0 j8 _- r) B* t8 E
  778.                 dwTotalFiles=1;
    ( E; n% |$ Y$ m$ d- A! m5 ]
  779.                 dwDownLoaded=0;, J6 n- B1 s9 H- [" E( T
  780.                 bSilentStep=FALSE;
    # t1 T9 }, {, F& ]
  781.                 bCompressed=TRUE;4 e5 S# ], R/ y) }0 N
  782.                 strExtLocal=".\\DownLoad\";  e9 g8 g  w: R8 V( |6 V
  783.                 strFullName="update.txt";9 Z3 T$ ~0 W& n; b% f* H
  784.                 dwProgramState=AP_CONNECT;
    & c6 w8 Q- V3 E$ r
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      |0 |% ?! {& F6 F
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : ~) T. b" X3 p) Q& e, }
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & g. c5 T( j, S
  788. & F2 g% T0 E- ~1 P+ M/ W
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 _3 }% A: Y# \, y4 `+ y  {9 e
  790.                 unlink(".\\DownLoad\\checkversion.txt");8 R2 Z2 \: g2 Z- n% @  p2 j
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 ~' _- T3 }% W6 ~2 A/ [1 o
  792.                 {0 D4 r/ H  A( X/ L
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- v4 O% [  ~7 B5 m
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % M5 o+ q% t( ^7 k# L
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");( y" |. l. R3 r7 g8 T
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  v! j( \2 ]$ b! t
  797. 6 i/ h9 Y$ q2 J9 H2 Q! `: _
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 R9 ]) q# @, R% v, v9 ?  M
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 e4 a8 x! V: @9 g0 j+ i3 \# M
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ! C8 D$ j' y6 s' T0 n! h7 s) u# @0 n
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , v1 }. o+ d: |  y; K2 ^
  802.                 }
    ! f. A* ~- r  F3 O9 `; n
  803.                 dwStartUpSteps=5;
    - t: D. ~: f1 X. x( n
  804.               }: u0 S2 X$ z( r
  805.             }) b) B3 R5 ^  H* }6 j
  806.             else
    4 q1 I7 U( A& j* ^2 e5 W
  807.             {
    # L0 W; t' L& T- ]+ p$ n
  808.               unlink(".\\DownLoad\\checkversion.txt");5 z) l9 s8 I. n# ?- x0 p. ~: a
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 K$ H) d" M  P: D
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    , f( Q) F6 z, O, K4 u1 C
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");5 I# Q! n3 q: u  ^% e' X3 S3 G
  812. " K/ Y0 {- d9 B) s0 C( u) ^
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 A) w- C/ S3 m3 B$ \' @
  814.               dwStartUpSteps=99;
    : X) K  F0 U- R; A% @+ X
  815.               bFinishUpdated=TRUE;" e; U- p1 k+ T- u! F
  816.               bCanUpdate=TRUE;2 B4 h7 |& Q' B
  817.             }( ^3 v7 I$ @6 R$ f
  818.           }( P! z9 V6 W* t) R% X6 s
  819.           else* U6 F: B* W+ x3 \
  820.           {
      V. u: p- w4 e6 X7 T' n" o% o
  821.             if(!Dn.Connected())
    8 a7 u3 H: H$ \2 F6 F
  822.             {
    " f1 E# c; y! j. x( a
  823.               bFirstUpdate=TRUE;) g3 e( G$ P% |5 \
  824.               dwTotalFiles=1;
    ' l/ A% w# D; E8 c
  825.               dwDownLoaded=0;7 s  e  D3 `( V+ ]: |0 F1 Z$ @5 B
  826.               bSilentStep=FALSE;, b0 m( \4 z- ^  `& i! V( V
  827.               bCompressed=TRUE;5 C' R+ N6 X4 [0 ^( v
  828.               strExtLocal=".\\DownLoad\";0 }6 }/ e+ E- k
  829.               strFullName="update.txt";# s$ z% n4 Z3 X) q( b
  830.               dwProgramState=AP_CONNECT;$ F; z. L% M2 C9 `& N
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ l9 F. X& N6 @, d! R
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - h; _3 \9 ]' h6 i, \
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " O0 e( r; u2 M$ ]  d0 s% ^! T
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ {8 ?+ I; t& I) D0 L  P
  835.               unlink(".\\DownLoad\\checkversion.txt");7 n4 E9 z# K+ i$ Z
  836.               if(GetFileAttributes("Wsa.zip" )!=-1). f# e  T3 `, s0 @
  837.               {
    2 I' S9 m1 z/ h& B
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    " A0 R1 e  Y* q& |
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    $ E5 z/ T  T  C/ L# X
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    & e1 M3 |3 C7 U3 g5 x: H' a
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 k2 }( W- p# I) b2 ^6 w1 _
  842.                
    7 |* P. `! u7 s! Q5 U/ R/ ^
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");0 O9 {3 W% x* t) I
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");9 |  m% }( \# J2 J- e
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    & n8 l  M: @3 d5 @* n( O6 X
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) R2 A5 b$ _/ Q
  847.               }
    + l$ f' T. f+ v2 r4 n$ @: v7 R
  848.               dwStartUpSteps=5;) q' q7 U+ r6 E
  849.             }
    ( W# @9 x( {3 ~$ G
  850.           }: k9 B# I, _5 k9 F1 y9 v
  851.         }
    5 _3 ~2 j1 s3 j  s) A/ H" q
  852.         else* k% |; f7 v7 |2 @9 l
  853.         {
    3 W; K. _# |3 d6 ]3 E; T0 U2 e
  854.           dwStartUpSteps=3;
    ' k4 t$ N- y, w; A% B( Q5 B! S+ H5 x
  855.         }
    * }' g! ~7 d2 Y$ I
  856.       }, k0 P! q8 X% g( t; F$ P' N
  857.       break;
      s+ F# W, i1 D
  858.     case 5:
    % C, f! `# l+ n: }
  859.       {
    ( I, o! s+ K2 ~' c
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)! @$ n& o7 R: K$ I+ n% `, N" j% X
  861.         {  H4 I/ s" B) F0 }: d
  862.           int opt_overwrite=1;. H( ]. S! o. I+ B
  863.           int opt_do_extract_withoutpath=0;  W' C# ^  B7 u  h- Z9 c
  864.           unzFile uf=NULL;/ F0 j" N: S2 v+ Q# k, P  {- A
  865. 9 ^  O0 [0 v4 _0 _, z4 q1 b$ i
  866.           uf=unzOpen("Wsa.zip");
    4 v+ B9 F/ Q( a% u$ r$ {
  867.           if(uf)
    5 b2 W' X# [6 K' G3 @3 J
  868.           {
    . H" z( R% V) G- C7 w8 z& [
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 S6 `. g& }3 v$ J
  870.             unzClose(uf);
    + j( s, Q- M  N; K5 T
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");4 s( i1 v9 t% }5 t( h& U
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
      q4 [- f, ]% d( _+ B' z' y
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");( ~3 x  ], g; W( ^+ T" w1 T
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + r6 A* t6 l+ c& i8 l9 @
  875.           }: S% s/ H5 W3 ^$ I0 h3 I
  876.           DeleteFile("Wsa.zip" );! t+ u) V" L; I" Z& l' P1 x. u( J  S
  877.         }; ?2 \) K7 m6 O  g( w. x

  878. 6 r! I# O0 {5 G! h& b1 w
  879.         if(CheckLocalVersion())
    2 `3 A% e+ H6 p4 k) c
  880.         {
    - C0 \0 b! m; z; G! T
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
      f7 s7 t" w# P1 i$ U3 X
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    4 K2 R+ t! \# z( {
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");( @* |  F6 {, ]
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 _" [/ E8 a6 ^6 A, z4 @% c
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ) l: r2 J# w5 y% e
  886.           dwStartUpSteps=99;: t$ r6 }9 B# c# q8 `% y
  887.         }% k- n" O! J9 x6 M/ }* r# d
  888.         else+ r6 P6 N$ l: d. r6 [! x- G
  889.         {
    $ A: P! b& E2 s: [5 m
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    * F6 M6 A8 Q$ [  s0 d" ^
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ X/ q/ {; s" h
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    * _+ C; @' a7 I4 S8 h& B

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

( B- t3 w) e( p6 M- X$ U! U/ e, e( B. A5 Q8 j. v

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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