CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
% h% r5 ^* |& T/ s
  1. / RevApp.cpp : Defines the class behaviors for the application.
    " e" G5 S, `( Y3 o
  2. //; B' Z! }. p4 Q. S/ J; L: R
  3. 9 A: `# O8 G( h6 b7 Q" U$ [
  4. #include "stdafx.h"
    % B0 B, Y& z! U
  5. ' B; Q% c; f7 v. L9 Q" n( \
  6. //#define UNICODE" [' i* b: M# q
  7. //#include <gdiplus.h>, B) z1 [9 f, p5 _
  8. //using namespace Gdiplus;
    6 Q2 ]5 f' Z5 K) [3 d

  9. 7 G% E1 h1 Q. _5 q2 v8 w
  10. #include "RevApp.h"( o- y, L8 G0 w: h
  11. #include "RevAppDlg.h"
    , d7 d4 W3 {: a; D. N: f
  12. 4 P) n$ b* ]+ E* D
  13. #pragma warning(disable:4786)
    " n0 x$ |0 i; T. ^0 W
  14. #include <map>6 S2 `( K7 ~7 W% Z
  15. #include <list>
    + R! n& l3 j8 Q1 M" b8 s2 g
  16. #include <direct.h>
    3 j/ W' j& y- L
  17. * z2 L7 x0 g2 ~% Y& z/ R  u* h
  18. #ifdef _DEBUG
    1 [9 V5 b! G- s- F" K5 j* Y
  19. #define new DEBUG_NEW
    , @& D) K# z9 v% ]2 n3 _
  20. #undef THIS_FILE
    $ \# d# S" J! Q. Z: o4 M7 z8 b' j
  21. static char THIS_FILE[] = __FILE__;
    + S8 `' d1 B8 C  Z( @
  22. #endif6 K# w7 \7 {5 W0 G3 |+ _. f
  23. #include "SkinResDef.h"" n: i$ ?/ |# S& T$ [5 f
  24. #include "ChangeBG.h"0 W8 j5 Q1 V4 a9 F- ]' D, N! n
  25. #include "AFXINET.H"; p  m2 f/ E3 e) h1 J- v1 E* o6 g6 u

  26. . p" l4 v4 j( u8 f$ A0 u
  27. #define TRADITIONAL_CHINESE 0
    8 `* O' U* i, A& p4 B& |
  28. #define SIMPLIFY_CHINESE 1
    % C8 j) n9 A7 ~( x6 X
  29. #define ENGLISH 27 u! _5 p1 R4 w, Y$ _
  30. int m_iLanguage = ENGLISH;: y/ }+ A& i0 l" [& p& a
  31. /////////////////////////////////////////////////////////////////////////////4 I! z3 P& d( B/ R$ ?8 O1 p
  32. // CRevAppApp" J, @0 r" ?; U' p, _) I: R8 ^
  33. / h( z  u7 S5 n, [4 r( K/ D% Z- }8 u4 S
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp), ]5 m! v1 E& C% ]1 Y3 O) w
  35.         //{{AFX_MSG_MAP(CRevAppApp)  t% m  @4 D- R7 ^8 x* E2 q4 `% @
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here., l) }' G& K, w
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
      n" f3 U: E; x. H$ x) ]0 w& }5 v6 A
  38.         //}}AFX_MSG
    : a! `/ m$ Q; n9 x  k' T0 I
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ' @  {; {& W+ K
  40. END_MESSAGE_MAP()
    + s! o4 b) R/ p9 n( r* |

  41.   h: a; g) m) S( k- m
  42. /////////////////////////////////////////////////////////////////////////////# _" ~3 ?, F, O0 E8 B! v
  43. // CRevAppApp construction- F# \) h: F' q9 ]
  44. ' P4 q* u5 \7 c! l
  45. CRevAppApp::CRevAppApp()
    " L8 F: {. i% M0 I' L- R8 p1 ^) _
  46. {
    * ]. [' V, j% x
  47.         // TODO: add construction code here,
    8 w' Z" ~8 R6 X& w
  48.         // Place all significant initialization in InitInstance
    4 t9 ]& u" Y4 v* C
  49.   bDisplayIsBig5=FALSE;# H$ N6 L; x! h
  50.   bRestartUpdater=FALSE;& I$ \: V6 \' _2 K2 E, G3 Y
  51.   bFinishUpdated=FALSE;/ k, o' Z7 B3 a( c/ q7 W( }
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    , Y' [* h+ l! D1 Z! Z2 D5 W
  53.   InitChangeDataBig52GBKS();
    / [1 {- n  `+ Y  n
  54.   InitChangeDataGBKS2Big5();- O! T6 ?  j" Q
  55.         //* M4 z1 C/ ~% m! H! L. f, L
  56.         bClickRunExe = FALSE;
    2 r+ [$ E" ^, s# t( X
  57.         //2 y* u! n- E9 Z- B, x
  58. }
    4 S# S% ~+ F: ]% y* G

  59. ; U! n" ?+ G8 l
  60. CRevAppApp::~CRevAppApp()
    . s4 s; V( ?0 j' ]; }; m
  61. {6 N/ U9 [3 }+ F7 A  q6 [
  62.         // TODO: add construction code here,' @, l9 {% X# g. ]6 n
  63.         // Place all significant initialization in InitInstance( s' o$ O; R8 E$ @5 q  A
  64.   EndChangeData();
    8 b' H& X8 a8 j( a9 k
  65. }
    * k; |! n+ I2 U' C/ v/ @5 ]+ S6 l

  66. 4 ~" u- i2 p+ N( T
  67. /////////////////////////////////////////////////////////////////////////////. P. n, ]) K& E: }/ i5 L
  68. // The one and only CRevAppApp object- F( D7 y4 z8 R' S* \
  69. + T8 m% O4 N. ]( t7 A+ [6 r
  70. CRevAppApp theApp;
    2 |% ^1 s( S- a! \: L0 ?

  71. 7 i- u: d( P+ ]: r6 a  j% f. M9 g
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)9 A5 d7 G2 m5 z+ k
  73. {( q3 C1 m8 \) V% C9 T& u
  74.   int iEOF=0;" g( F  y5 c$ c- T  q" V
  75.   char szTempName[MAX_PATH];2 K* B( T+ p0 `3 Q
  76.   *szFileName=0;
    ; |& k, N% K8 a0 a
  77.   iEOF=fscanf(fp,"%s",szTempName);6 L8 p. d/ @; s+ d
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('): m- u) Y8 I9 I& t' K5 B0 V
  79.   {
    6 H: ^, `9 x# |5 P7 Y& h) c
  80.     strcpy(szFileName,&szTempName[1]);
    + k6 G, E2 M" i. C+ R$ a  n. H
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)7 ?: E4 c' _! g0 [( W& i; J4 R
  82.     {
    ) x& I8 y3 b- e3 X' q. [# g
  83.       iEOF=fscanf(fp,"%s",szTempName);
    1 q* A' L) Y/ J3 P# D" V
  84.       strcat(szFileName," ");
    4 J. a4 {. D$ J
  85.       strcat(szFileName,szTempName);
    ! R9 r) S! J: y& u
  86.     }4 H" z  x* H  Z' ~
  87.     if(strlen(szFileName)>=1)
    # u- E2 |% c+ \) o0 V- ~
  88.     {
    " G! S$ X, |% x5 }9 ^; c+ P
  89.       szFileName[strlen(szFileName)-1]=0;
    - v! ?& {3 X5 B
  90.     }
    : q, V* ]0 K4 J+ s: w: r
  91.   }4 ]3 r7 ?8 ?, w$ q
  92.   return szFileName;
    ) y! x0 F3 ~; {; N
  93. }4 ^2 o# n: Q+ i2 u0 ~
  94. 2 H) X8 E, W' I$ Q8 r8 j
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    5 ~# S- e8 Y6 `5 K5 d( N( K
  96. {
    ! w1 d% L8 m+ x2 z9 O
  97.   FILE *fp;4 K/ H" J1 _2 N6 V3 }: q
  98.   char *key=NULL;
    ; o- u! |2 c; d- k, d9 h1 K; w
  99.   char version[MAX_PATH];
    2 b& z  R7 E, Q$ U$ H
  100.   LPUPDATEFILE file,olds;
    6 i# a. R+ L4 c0 E& `% ^
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 Z$ s- a0 J/ g7 Y* @+ A

  102. / w3 l7 V4 l' B, q
  103.   UpdateList.clear();& ]. n9 J" L' H" u  l
  104.   UpdateFile.clear();' d) H* m' O- F
  105.   if(GetFileAttributes(filename)==-1) return false;: j5 ~& D: p' P# N" I1 _
  106.   if(!(fp=fopen(filename,"r"))) return false;+ f- s) N7 F7 Y& t- _" G: M' @; L; E
  107.   fscanf(fp,"%s",version);
    + X! i: j) I' w; E- N1 l9 o7 D5 P
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    5 J. o' s% M/ `8 y% D% c
  109.   while(fscanf(fp,"%s",version)!=EOF)7 n# F6 E  W/ i9 V, V8 S6 a& U' y" D
  110.   {9 b5 F' D6 @9 u6 u; \
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % L% r; }: c4 I9 L- i
  112.     fscanf(fp,"%s",file->path);* }: f! D# z+ A+ ^  r- s8 a
  113.     ReadFileNames(fp,file->file);
    2 z* t( y- |7 E7 y5 X
  114.     strcpy(file->full,".");: N3 ^7 J( E8 Z; I6 @
  115.     strcat(file->full,file->path);1 R7 @2 T4 }2 Q/ _* U4 M4 a7 Z6 B! d
  116.     strcat(file->full,file->file);
    0 a5 Q( o$ x& J8 q/ y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& k) `% ^' P* u+ U& a
  118.     {
    . a7 u& k- R8 q9 x
  119.       file->vers=(float)atof(version);
    # w. P* g! Z5 j2 ^
  120.       UpdateList.push_back(file->full);% d% x2 o8 [0 \8 [/ H  a. c5 g; F
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));6 Z/ F$ x* u: d3 t
  122.     }
    - O  y, n3 w! V5 y8 d/ j8 M+ l( r
  123.     else" g/ \. k" E% x$ A; |$ k9 E7 C  m
  124.     {: ]* P% A/ A- `
  125.       olds=(*p).second;
    - i/ @/ [' J2 t! j0 U& W
  126.       if(olds->vers<(float)atof(version))* m% h1 j6 a. ]1 q+ U! w% c( I
  127.       {
    ! e& n; p3 D- j+ U0 q# p# g0 d
  128.         olds->vers=(float)atof(version);  I* ]# e  H  ^, j  r* f
  129.       }
    ! O. ]5 b3 ]' ]2 w# A
  130.       free(file);: n- `4 V/ ?3 c  Z. P* S
  131.     }
    5 \" o4 g: y- T6 y2 P& I
  132.   }1 V, D. W1 V1 x. n5 {' o- M0 B
  133.   fclose(fp);  A7 [6 O. W- M- G. r. T
  134.   return true;
    + ~2 S! J/ b3 d+ w9 ^$ n( @
  135. }
    & v- O! a  x. F' |3 \

  136. $ @* M4 D2 ~6 T6 n1 Q$ ~
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    , k3 K2 j7 w  K
  138. {& o: q  a8 L+ q: P
  139.   TCHAR  szFull[MAX_PATH];0 u2 M" G6 [; ~! Q" ^/ K
  140.   TCHAR *token,*inter;9 C$ x; ~* ^8 H4 l- I- D
  141.   *szPath=0;
    ' o3 H6 a% v4 n  P
  142.   strcpy(szFull,szFullPath);
      v% S6 O# T$ k9 Z5 ?/ }
  143.   token=strtok(szFull,"\\/");
    3 D! I+ O1 |6 C  t
  144.   inter=token;
    % m; W/ C2 \6 K) B; X6 S; Q
  145.   while(token=strtok(NULL,"\\/")), }% n- H. Z$ z& ?% D' A1 O7 r) [
  146.   {
    " O2 h$ f2 {' W/ |" r
  147.     strcat(szPath,inter);
    ; P3 b4 _5 B' E
  148.     strcat(szPath,"\");
    ; d* \$ n' |; Y) V: d& P/ z
  149.     inter=token;
    9 M, U1 c! h6 R& b5 w" M; ^
  150.   }8 B7 o$ j% e* q6 h! ^( }/ ^
  151.   return strlen(szPath);
    , G9 |, I+ C6 K5 j/ {9 v9 W
  152. }6 [. j2 u+ A) D4 V% T
  153. - C6 k: e6 Z; C; m2 r! U
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    3 o' t. O0 ~- ^  ^2 Q0 o
  155. {3 b) x. n7 [  Q0 h% Q# y1 c5 M+ a% V
  156.   DWORD attrib=GetFileAttributes(Target);
    , o5 `8 q+ j9 w* F) p
  157.   if(attrib!=-1)
    ; l: d$ d" @6 o$ n- Q
  158.   {
    # R2 i- x6 K$ ^
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    & ?# s3 S  v5 O$ W4 s) r
  160.     {  N5 e! u" }9 q8 G  t% [
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    & ?- b7 R) |. J9 ^9 v
  162.       SetFileAttributes(Target,attrib);4 n- Z' y3 _/ r; n( {) y! ?
  163.     }% h. p" \* S1 c1 z
  164.   }$ \4 U+ `3 k  o7 v) L% h
  165.   CopyFile(Source,Target,Erase);
    1 j6 |1 ~  s% U0 `  b* j. y& ?
  166. }
    " ?$ \( \+ h. M. `: ~% t! X' e0 r( D

  167. " C! @4 k( j7 @% I8 I/ U: c
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)! m8 S* p" v4 h6 N+ \% }
  169. {
    6 X  y- e6 D) `# j- x0 M$ F6 t
  170.      FILE *fp;
    " [7 N- I( w+ k8 n: ^4 |
  171.      char  szBuffer[8192];
    3 X9 I+ l8 Q9 c8 Z5 w; Y- H
  172.   va_list  argptr;" J" O5 J9 h; Z, p$ V6 n8 ~

  173. ) B' _" I; v3 e! v
  174.         va_start(argptr,message);6 k8 N1 W, I: `* w; v2 V
  175.         vsprintf(szBuffer,message,argptr);
    ' r2 z" M3 W$ q6 z2 `" F& W
  176.         va_end(argptr);
    7 h( R8 |. x; `, K
  177.   fp=fopen(FileName,"a");
    % R% Y" T: }2 i! c4 ^+ |% A8 t) s. Q
  178.   if(fp)
      _4 i& C: Y3 U
  179.   {
    ) j7 P( F( q3 z+ \
  180.     fprintf(fp,szBuffer);
    4 c& ~& R8 p! I, L/ w
  181.     fclose(fp);
    3 ^. }8 R: H, Q; {9 ^+ |
  182.           _flushall();
    9 H% g, ^. ^( d, R3 y
  183.   }
    - q. c% N- s# H! B
  184. }
    " d: j8 w' n, W% a
  185. ( U- l. J1 j8 Q4 n9 `' o
  186. BOOL CRevAppApp::Fclearf(char *FileName). f( O- Q) }- }2 f) S
  187. {' l2 S7 c2 F# f! T
  188.      FILE *fp;7 T2 D. k2 F/ Q' N4 m9 \& g
  189.     DWORD  attrib;9 u7 P# B: s6 r( P: e
  190.   attrib=GetFileAttributes(FileName);
    9 q3 ~3 V' M: k  L/ b( s
  191.   if(attrib!=-1)8 m' \' k" h4 B, Z1 _) w- M
  192.   {
      H0 K3 [+ j( e$ m4 @+ ]$ m0 c3 P& W
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    / I0 _9 R6 H9 N: G* U
  194.     if(!SetFileAttributes(FileName,attrib))5 M2 F4 J' W' F( s4 ~  j
  195.     {( @9 A( r* t# u+ v; P
  196.       return FALSE;, f( z* H& X3 C; |6 s
  197.     }: G2 i+ x' u; w5 _; m
  198.   }
    7 ~& y9 U# `. s  X0 v
  199.   fp=fopen(FileName,"wb");
    2 S/ S' y9 g" |- l( ~8 Z
  200.   if(fp)  \4 L4 u. O- ~0 b# Q
  201.   {" Q& Y- {- J# g6 B  P" S
  202.     fclose(fp);
    " b; p5 [- ?* @% ]
  203.   }  G  c" }; M- ]
  204.   return TRUE;
    6 N( K6 J( O$ q& n- W1 @
  205. }1 B% s1 ~" m) i9 C1 A4 Z& E* V- l5 n
  206. & P3 Y. m8 j; E
  207. BOOL CRevAppApp::UpdateLocalVersion(void)1 R6 n0 h, _0 |0 v9 Z
  208. {
    $ ?! W9 ]' D8 q, ]5 z
  209.   char filename[MAX_PATH];/ L0 f$ u! U; [" ^6 t6 o3 c
  210.   LPUPDATEFILE file,olds;7 |2 H- z: ]1 p! z4 A& g. ^+ Q
  211.   std::map<int,CString>::iterator i;
    , N1 y% T& w( j2 V( A/ R& E0 b
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    % d& I4 y; U/ b0 Q; k5 W7 e
  213.   std::list<CString>::iterator l;2 r* q2 }/ V2 m- w6 c1 C) ]
  214. 6 w; M5 n3 F" K. |9 E) g1 e$ y$ w
  215.   if(bFirstUpdate)
      w4 A7 k# P- v8 [" X9 S7 ~( L
  216.   {5 X- [/ G" G; F1 P$ Y$ i6 z9 y2 e- ~1 a
  217.     dwCurrFile=0;, w$ ?$ E5 D, f. N  _$ S* a
  218.     bFirstUpdate=FALSE;
    : ^& l& }8 r: t# F' ^8 k8 q) \4 H( c
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 x! Q7 S& q$ X9 ^9 r$ k0 d% @
  220.     {6 d% z! Q1 T. K5 b3 r- j+ Z
  221.       dwTotalFiles=UpdateLocal.size();
    # A% V  R+ K9 I0 {; ^. K, e
  222.       dwDownLoaded=0;
    0 A9 V" A0 p! L. u5 m
  223.       bSilentStep=FALSE;$ V- y& `' q) f
  224.       bCompressed=TRUE;* Z$ p7 J; |6 h
  225.       strExtLocal.Empty();7 D/ L1 s3 E1 ]
  226.       strFullName=(*i).second;4 E4 H0 q0 H  n) u
  227.       dwProgramState=AP_CONNECT;5 g0 R) W6 a) D$ t' s1 I
  228.       return TRUE;$ ]$ f5 r. g3 v0 z+ e
  229.     }
    * f3 j: K5 H/ j1 Z* ~$ p9 a
  230.   }
    # o. m; A! {9 c: z+ W0 D7 _- ?
  231.   else if(bRestartUpdater==FALSE)2 i! l1 A3 j  J) O
  232.   {
    . B- g+ K4 b; f2 n1 a; d
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()): P# D" N8 \8 |
  234.     {5 l9 }" H" F$ E, o
  235.       file=(*p).second;; p0 k# E; @7 d! a& i! z# _
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())+ J1 u9 W0 k9 e4 Z1 O
  237.       {
    1 l8 \* [$ j% b- J0 n3 z9 |/ v4 l& T
  238.         olds=(*p).second;
    4 ]7 A9 P) S4 T4 D1 Y
  239.         olds->vers=file->vers;
    7 Q# _9 P- r, N% R; {/ b" G
  240.       }! F( V# }( P& _; B8 @7 @5 m+ ]5 J
  241.       else6 S2 @7 D9 h, S/ h8 S) l- J
  242.       {
    % \. `4 e4 O# s
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / v! m0 r$ y: e5 }2 G$ o
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    . K% g9 `* X3 T( r+ E( X0 m8 J
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));0 h- z6 Z4 A2 T& x3 v; Y: |
  246.       }) `- Y: P# @% y$ ?' Y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ) _0 u5 d# K: F5 o, i6 o4 @8 p
  248.       sprintf(filename,"(%s)",file->file);
    ( M% z6 m. n: p- N. k& N
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , i( f- i% |: g
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " X( J! e- Q9 z8 C
  251.     }
    " j- s# @. p( l8 R
  252.     dwCurrFile++;
    8 ]- g3 F: Q: E; P$ D! v& P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 P9 t6 f/ B: i% p+ A+ D6 \& t9 p8 m
  254.     {2 O& }1 T! k1 x1 b4 P
  255.       bSilentStep=FALSE;& Y( \3 e7 j! P" h; f4 d3 R
  256.       bCompressed=TRUE;
    + {; G: d) k8 v* p2 [
  257.       strExtLocal.Empty();) w/ x+ g4 c1 O& N, q( d
  258.       strFullName=(*i).second;% I5 u! l, E3 a. t( W
  259.       dwProgramState=AP_CONNECT;+ P6 u2 o" U3 R
  260.       return TRUE;0 W) |- V9 q9 b. U
  261.     }
    , u5 h5 P- y* J: ^. Q* K
  262.     if(!bRestartUpdater)1 }9 C: K5 |4 ^  n6 U# p5 ^
  263.     {
    ( U; {/ L/ u) ?/ _1 |* D7 ~
  264.       int iCurrSize,iFileSize;
    ) ~; H7 r0 Z( t/ \4 u1 }, ]% x
  265.       iCurrSize=0;# g& g. D9 K$ u1 L# Y! e5 P
  266.       iFileSize=UpdateList2.size();  k# l+ p. l6 v  M* m  \
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . W$ s5 u% ^0 m# X; d& O1 n
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");  X) `- a7 I8 V3 F
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    3 I& u! G" S8 G1 g$ M# L. [0 R3 R
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. @& @+ ]7 w( f! N: o
  271.       Fclearf(".\\update.dat");: G9 T& C5 l# l+ _4 S1 K
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    + z: E+ E  H; @& K9 Z
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / I8 X, W6 X* E" F
  274.       {  \1 |5 Q5 X3 T' r- Y4 _
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    , j+ s- m! K; F, K% z: p
  276.         {% Y) L8 f& e1 N6 }, V; e
  277.           file=(*p).second;
    : `  p9 Y2 R' y+ y
  278.           sprintf(filename,"(%s)",file->file);
    + l! g! W& e! p5 N
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# Q' v2 y% X( ]) K: W7 ?
  280.           iCurrSize++;, P1 D; a' a% z/ ]! T
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));7 ?* l6 S; I8 i; f
  282.         }
    8 E4 S' G4 Z, _8 [/ p
  283.       }/ M, m8 u, z, L1 m
  284.       unlink(".\\update.txt");
    . ?% ~/ \, A. ^: h# E# M
  285.       unlink(".\\update.tmp");
    / O% ?; C# a, w: l* |
  286.       Fclearf(".\\checkversion.dat");
    . ?! V/ O8 l) N$ u& R# ^
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ! A" A5 H8 y  ^% F1 s, q
  288.       if(UpdateLocal.size())7 Y9 L6 H4 T! f  g6 e4 L' S; h
  289.       {: x& V4 r, K  k' D2 ]* l8 J
  290.         UpdateLocal.clear();8 q& }( N; \; R
  291.       }& Y0 F9 z7 _: v! z6 q+ o. l8 S) `+ h
  292.       if(UpdateFile3.size())2 ^! D- ?. b; T4 ~/ S" D3 p# W
  293.       {
    1 m& Y% ^% j" h& ?) J- r
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). w6 h8 {2 V8 o, @' D: v
  295.         {
    # l- L. K, Q+ K- u
  296.           file=(*p).second;
    0 b3 W# _1 ?+ Q. S( `
  297.           free(file);
    : \) n8 o; W/ K8 \5 x( A
  298.         }! m2 B# m3 A* _6 Q
  299.         UpdateFile3.clear();
    # X3 V* H2 i( i* z
  300.         UpdateList3.clear();
    , R/ X, Z6 \( X) F' h# M
  301.       }
    5 \) r! A  ?1 ?7 k& @4 Q  h7 k' e
  302.       if(UpdateFile2.size()), _8 C4 w  }/ i. {# e8 k
  303.       {3 ]+ M- T3 a2 J. n! z7 g
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 Z2 N$ W$ t" a) s6 U
  305.         {
    : ^0 [$ b" {1 [% x- i0 S$ c
  306.           file=(*p).second;
    - I6 F" D' j' M
  307.           free(file);
    # R4 H$ m; \6 c, q% ?. L5 p6 a! B6 y
  308.         }* g2 u2 u5 y! ?7 \8 B4 T7 A8 F
  309.         UpdateFile2.clear();
    ; P6 \6 M1 |5 K, k; e; t
  310.         UpdateList2.clear();
    4 X' k) w3 ?  u
  311.       }
    ( w' x6 H8 K0 Q- b7 {
  312.       if(UpdateFile1.size())6 w3 ?( J% D0 N- K
  313.       {
    8 m% Z- I& j/ h7 n1 y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 Q) q$ |8 k' c( f5 |4 W
  315.         {
    + \( q; l% D$ y4 H+ J/ |
  316.           file=(*p).second;8 {& Q( l: L0 X5 Q( c
  317.           free(file);
    6 M7 Y  i) ^& ^! Z' v- B; q
  318.         }8 s' V2 n( ]  s+ X+ }; }( z
  319.         UpdateFile1.clear();& M/ a0 v- ^$ Q& t4 F
  320.         UpdateList1.clear();5 i, r& J5 @0 h
  321.       }
    2 E+ y, ~- V$ o0 u, J2 ]0 u3 I% B
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));% X) K) f6 {! c. R  e  R7 ?
  323.     }) E2 x  e. n, X/ h  `; o* U# F# i8 E
  324.   }
    ) v' N, J$ V: ?
  325.   return FALSE;5 j( h$ }8 f3 e* p$ e" x" P( {
  326. }
    1 R# b& R4 C" Y0 Q

  327. 8 u, X" u7 Q7 I& s- B+ J
  328. void CRevAppApp::ClearAll(void)3 W! J, `# q' d
  329. {
    ; V! C4 |6 }  o+ o7 G4 Q  l, O
  330.   LPUPDATEFILE file;. f! i- x# i1 ^: O
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    : }6 |) A0 S- |# g& J7 }
  332. ) B/ Y) b# k9 m. V
  333.   if(UpdateLocal.size())) O; v/ c4 ^2 z9 ^4 Z, R. V
  334.   {% c/ u& Y3 V2 L6 ~* W! h
  335.     UpdateLocal.clear();+ q6 {5 Y2 w- H8 e2 E
  336.   }! O5 ?0 ?+ L6 B1 E6 t9 {
  337.   if(UpdateFile3.size())
    & W8 _  \) ]9 o" b* X
  338.   {0 K( z: k. ?9 x- l+ d$ L& T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 J( h8 g% k, t6 I* _+ C
  340.     {
    % n& O) I0 I0 G. @0 u$ v7 n
  341.       file=(*p).second;
    0 [7 P( O& w2 i  B' V% S
  342.       free(file);
    0 v  g& n0 j  P# w* ^
  343.     }
    1 N) Y* C4 b0 D0 |+ o# W. t
  344.     UpdateFile3.clear();
    + X! d9 x" O! X0 q( o* \' n8 W* x/ a
  345.     UpdateList3.clear();$ w  [' P& h4 G& i
  346.   }" k0 p" |* D8 M
  347.   if(UpdateFile2.size())1 S0 v+ L' v1 K% u7 V# \0 F
  348.   {$ e# _2 O$ k7 Z0 i5 F1 [
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ w4 D' ^! j5 }& l9 ]9 |. i
  350.     {
    - f" m5 Z/ C: E- g+ Q
  351.       file=(*p).second;
    2 ]5 z; X; B8 ]5 h! A( |3 l
  352.       free(file);* C/ u0 n" f& D+ x
  353.     }
    . B7 [- D, a2 c6 z8 v
  354.     UpdateFile2.clear();, V0 ^% q$ i& @' Q% ^9 J
  355.     UpdateList2.clear();3 X+ y: j/ g" l2 }/ c
  356.   }
    . R7 O4 W% u" @7 E+ P; K0 k
  357.   if(UpdateFile1.size())5 t# J" J/ m$ {
  358.   {
    " q+ k: y- q0 [, y$ e
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 i4 q) ~4 a" @
  360.     {( e* f# t* G+ v9 i  {  l; o$ Y
  361.       file=(*p).second;
    , ~9 W* l4 m7 H
  362.       free(file);( q& y" `' P& ^' e! f% O2 p
  363.     }
    5 d/ T$ x6 M$ p1 _
  364.     UpdateFile1.clear();
      l6 w8 U! d% I  E9 w  D
  365.     UpdateList1.clear();. V( ]& ]/ g5 O. x
  366.   }
    0 W, _' c1 p7 t4 T
  367. }  ' [, y0 }# e$ m- |: Z
  368.   1 X+ J8 {0 z7 I9 S2 }+ G1 S4 h
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    0 Z& W' H: H6 r9 D
  370. {) \% U/ ~+ u8 Q3 Y) G* ]( S
  371.   int c;) Z2 i; |8 D* f$ S- o2 }
  372.   LPUPDATEFILE file1,file2;
    * b( g5 a# B+ C: L' D1 F
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;6 }: `5 `1 A1 m( `7 O7 \6 x( q
  374.   std::list<CString>::iterator l;9 ^' D3 a# C8 |! H0 q2 [
  375. 5 W* r5 z) T9 \1 r- ]7 e. ~3 Z
  376.   UpdateLocal.clear();: B3 T1 z9 @, p/ F
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 ?' k8 v: w* y% d8 @6 [2 ^
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);, @4 n5 _% q3 M5 n* F, ?6 L7 {
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);; z6 j8 a; v2 c: f% e
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    . J) n4 W* \. b$ J
  381.   if(UpdateFile3.size())
    4 ^+ Y+ y% R9 u2 V. V
  382.   {' k5 {/ ?: j* C! ^0 }
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++), S2 D  q8 _7 o1 ]
  384.     {
    % t5 i# N5 l( Y8 P
  385.       file2=(LPUPDATEFILE)(*i).second;
    / U( V" G4 {  U! E! g) C. g9 O
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 v0 b" \& f$ R* w
  387.       {1 N& W) b9 B1 n$ Z
  388.         file1=(LPUPDATEFILE)(*p).second;& g+ i0 y1 G% K& B5 ^7 `( O( z$ X: b
  389.         file1->vers=file2->vers;7 a1 R  s' j0 Z. l, c$ O9 \9 X/ ~
  390.       }
    % s" r3 h) o9 B8 A4 V% P
  391.       else; O5 l7 Y+ ?+ z$ N$ A
  392.       {0 q. {& `; o# T9 |- T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 g! e5 |" N" t5 X
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" |  ?5 _1 d0 `9 J% P9 C6 ?/ Z$ z8 J9 m
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - z; w- i& q9 X, L% J: S; b; _
  396.       }4 `# y9 J' K, ], u2 ?
  397.     }
    5 x- j- q5 q, ~/ u) N& X2 C. Z) V
  398.   }
    ; R) k, p! f2 ]6 h6 X; \, [  m
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % q% n" H$ P$ R, i
  400.   {
    . S+ E7 T- g% ?( Z3 n7 U% v! _7 p
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())4 A1 L  y8 E, r! m
  402.     {. D( ?$ j, W8 h5 _' z
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 Y# w# d+ a! p9 o# g* a
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + g2 I  H. }9 G3 [3 f4 v( Q
  405.       {
    : V7 W0 s) x4 m6 z8 s
  406.         file1=(LPUPDATEFILE)(*p).second;
    ) N/ ?  [; B% O: u5 Q
  407.         if(file1->vers!=file2->vers)
    % q6 p1 W9 G" O; S
  408.         {2 T+ j& E; H4 |) a* N
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % ]2 R7 }8 J' m
  410.           c++;; W; O' z# J8 f3 \9 M4 x
  411.         }
    * f$ z/ A3 V$ H' @
  412.       }3 F0 g4 X5 ^# K. q
  413.       else9 B9 ?6 i7 ?+ U' B1 \! v% d
  414.       {4 t1 `/ K2 O; d
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . Z7 g% q( {6 j0 x, q$ `% ?
  416.         c++;
    8 F: f  G9 _) J& s8 n7 r/ {
  417.       }9 Y$ T0 _( _+ c
  418.     }  L0 W9 T" t+ s7 T+ U" R* d+ O
  419.   }
    ; o' H+ a7 Z# @4 X2 O
  420.   unlink(".\\DownLoad\\update.txt");
    & @$ l2 X0 Z! `- v6 L. z
  421.   if(UpdateLocal.size()) return TRUE;
    " q+ b4 q1 [/ ]. g! z
  422.   else                   return FALSE;5 o( \7 a' C3 T/ k' p+ s
  423. }8 h1 g# y  j, n' a- Z, J

  424. - n: x* x7 a; X; l
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"$ R/ y1 g( F8 n! x  H3 Q+ P& r6 M
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn", ^8 t: o' _4 M& k& `1 I
  427. 2 C, @, ^# U# k5 P  [  ~  {) Z

  428. * S: o* q4 _# h7 m: L
  429. 4 x/ l4 m1 \. f
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    4 A! i6 E; L8 d+ B8 c# \+ R
  431. {' _1 ~) k: P5 q- T. c
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;; f6 l: Y' `0 z' Y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # v  i; c3 W2 q+ k  Z
  434.   {
    7 Z4 _6 A+ z" R% F+ f
  435.     char szLanguage[50];
    ! Z; V! u+ A" [0 F9 A" S& U' A
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * v/ ]$ M! S# c
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  y! s1 ~2 T# a, ^
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " B0 p# U7 P  |: t
  439.     else                                   m_iLanguage=ENGLISH;, G( n" h* c* s8 Q/ b# |- d
  440.     char szRegister[100];
    2 [8 o" G2 V. F5 ~
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& A( j4 q7 r5 |
  442.     strRegsName=szRegister;
    ' K4 l$ |! ~$ E: [3 |6 Q* `
  443.     char szPatchURL[100];
    & z  A( L) q/ F# ?7 a% U
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 I6 Z* ]5 v' b6 L# V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * _* I" f4 ]: s) e; q
  446.   }8 s5 x9 C+ x) K* o, j' S- H
  447.   else; r/ f: S/ b- Y2 u
  448.   {
    . c. d% i  c1 r3 b# A  L0 f& U
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 X0 O4 k$ b8 h
  450.     strRegsName=DEFAULT_REG_URL;: I$ _' H+ [; Y; |& M1 `
  451.   }
    % h3 V7 x! J# @# L
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 I( e, n* ]* S% C& w
  453.   {
      b- O0 Q) G" }
  454.     char szIP[50];1 B( s: l( E0 h" ~' I) j) o
  455.     char szDIR[300];
    # f/ u) H* n. }3 i3 N0 J6 I8 c
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))6 u7 y) p& j$ t% e! i
  457.     {
      Q7 U/ p. i6 `7 S
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");1 ?( I! m, L5 O, z$ f* ^: `
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");/ ?9 b- q  S$ b, Z8 h# U0 }
  460.       strHostName=szIP;
    : m0 o1 Q% l9 ]- u6 ~
  461.       strHostPath.Format("/%s",szDIR);
    ( E( F0 _2 w5 H$ R6 s# b' {) b
  462.     }
    & O* Y- f" J; ^# N# |0 r/ q
  463.     else
    1 o9 z; s3 @' G( q& t
  464.     {, h2 o; I) h. f# F2 H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* R& V9 G  @6 D6 Q$ }! L
  466.       {# F& [  @' U0 B- U- A# `# N
  467.         char szLanguage[50];
    , x$ h$ E- b7 E7 {
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 ]9 F9 Q# n4 P: P/ t
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 g0 Y9 ]* O, J$ M. b# k
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 o) k! n2 Q9 E3 b& [! O
  471.         else                                   m_iLanguage=ENGLISH;' P) Y5 b& P- {! W# W% G
  472.         char szRegister[100];! w" u8 e$ k6 k8 m; f2 N
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");$ F3 q: z3 \" n& V8 c
  474.         strRegsName=szRegister;
    : s, ?$ ], A1 R; X3 `
  475.         char szPatchURL[100];$ Z1 c+ I! W' }8 T& T
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . k( w+ i/ D) U8 [% M8 Y  {! f
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* q* _4 }* l# c) A4 n+ c
  478.       }. f5 t. F( t+ F( D
  479.       else' @0 n( v6 ^! V7 U: T
  480.       {9 l+ ~, B- W! L* w$ U$ n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : \; h# q) r! O3 r5 J
  482.         strRegsName=DEFAULT_REG_URL;0 x! D8 S7 L! {* r6 B, |9 X0 g
  483.       }  c. N0 ?( U. o$ S
  484.     }8 b+ O8 |: e1 t# ~0 S5 F
  485.   }( G9 d( D' c& t7 }! z
  486.   return true;
    6 B+ S2 k5 n% A
  487. }  K" q  q) a* r" l4 X# f
  488. 5 [- I, n+ j1 y, y* F( r% w
  489. #include ".\ZLib\unzip.h"
    $ Y7 @: `3 X5 I3 n
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);9 E! V. T6 C2 t' u
  491. /////////////////////////////////////////////////////////////////////////////! S  o% w, A; m' r5 P! V* e: s2 M
  492. // CRevAppApp initialization$ R* K8 t  c3 S9 g( G, f

  493. & ~& w# p* {  ?& D, [, ^
  494. BOOL CRevAppApp::InitInstance()
    0 U! G5 {! [6 O) |7 e: f0 U" r
  495. {
    - P1 q( q, z( C2 N3 i
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , A' O# H* J) ?6 X

  497. 3 z, p/ Z; P) D. u6 Q) k
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    + ~" x- S' T) [& K$ Z1 q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))- z9 ^* E3 x* b0 H1 k' e' c3 N# ~
  500.   {
    ; K1 Q! @/ d+ p7 i
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ' Z1 J3 Y; F) Q3 C' D7 o: ^; c
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 u+ ~. H( ]/ h0 p8 e4 B% S
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ' P  a3 c4 I) u) `7 H: s
  504.     {# c- O6 h" b' o* U2 q
  505.       strcpy(szPath,szPathTarget);
    2 P+ t8 `8 r1 I
  506.       SetCurrentDirectory(szPath);+ ^" ^+ @+ {  o8 @5 s! d' m* {
  507.     }
    : F0 S- B/ Y/ _
  508.   }
    % s* @  ]' P- w1 M; M
  509. #ifdef _DEBUG4 x$ [  i2 C- V5 I
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 P7 e" C! d- H8 k% l" K; U6 m' ~
  511. #else; I1 t4 a5 X# @/ I# {
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 B. E$ `4 b; B
  513. #endif
    9 C( v/ h" l1 f8 R# j/ h
  514.   {! q* z+ P7 Q9 {* A6 O
  515.     char tempFileName[MAX_PATH];# y$ I( i* F$ d% _8 a
  516.     strcpy(tempFileName,szPathSource);3 n3 K! X( _! ?6 n8 n' ^* H. n! x
  517.     tempFileName[strlen(szPathSource)-12]=0;! L, ^6 ~; W5 x  C
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    0 x  h8 d: z. S) T
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);! m, H/ p2 x- k1 m
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);. W, N) L) o; Y" n, t+ U
  521.     return TRUE;
    ( G' _0 n5 p# M6 i) d  h  a
  522.   }: p! H" ?1 F# M# k; C1 k+ X* H! b
  523.   // Nuke 0118: Delete run.exe
    ; {5 S% ?: [8 W. U
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );9 l" ?$ L' J- m+ ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    8 Q4 E( p6 N6 s8 j* w
  526.   if(!ReadCfgFile("Config.ini"))
    6 J/ r! Z3 Z, Q9 h: c
  527.   {
    $ H+ X8 O: u& y$ M# X7 c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 j* m4 W) s" y* [
  529.     return TRUE;$ }3 n/ W) E: [. G
  530.   }
    0 E6 b! H, F" w$ e7 J2 e. n
  531.   HANDLE mutex;$ M3 q$ h/ z: w9 s. j& d
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 q  v9 T# t8 ^: ?( i
  533.   {
    9 H& k; R0 h( b4 `1 I1 k. w9 y$ s
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    4 \/ x+ ^& K$ k5 `7 A- U
  535.     {  |9 d: {( b; u) q* m$ ]
  536.       CloseHandle(mutex);
    " I+ k; K  X  c- J/ z/ K
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    4 w- i0 H) \1 q% }; n
  538.       return TRUE;; `- N4 d. P' u* `$ u# p" E% e3 w: o
  539.     }# H2 x; G2 a# ~5 B) V7 @
  540.   }  
    2 }  i3 v7 r( E! M! x' U1 ^6 v
  541.   CloseHandle(mutex);
    , X& b5 N2 j4 ~% Q, T
  542. ' W, ^3 t3 ?- T: W9 a3 g, Y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    - t& K( ~5 p  n& R
  544. 3 N7 X* W# k1 c2 e1 w, [
  545.         AfxEnableControlContainer();
    # v: z* f, H  ^0 G

  546. # Q) _1 c+ W1 \% ]* _
  547.   bCanUpdate=FALSE;
    ! i4 f& {" ~1 `
  548.   dwStartUpSteps=1;" f) F& r# C$ \9 z
  549.   dwProgramState=AP_NOTHING;
    8 V6 p% ~/ Y  h& G6 ?" b* j* t
  550. ( a) R' ]! V' X6 c5 k
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ( `- w# c3 Y+ m3 n" v5 X  k9 R
  552. $ G% o% h! k1 A8 ^1 H
  553.         // Standard initialization
    3 b# c8 G4 z! j: W
  554.         // If you are not using these features and wish to reduce the size% p9 D* d7 ?! c7 _+ A. m3 A  D  @$ i" {
  555.         //  of your final executable, you should remove from the following' R; x$ x* ?! K0 |% O( Z
  556.         //  the specific initialization routines you do not need.' k% O& [+ q( N. ~" H

  557. 9 E6 x. G: e, F0 T- P6 Y6 v
  558. #ifdef _AFXDLL
    $ e  j8 O. \8 `
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    : r2 o. t- s" i& q8 o( s4 c5 T  W
  560. #else; I+ x! P& q9 v* @$ K9 N6 h
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically! g9 V: V; Q9 j
  562. #endif
    2 i. T& ]: {! ]6 I' T8 a
  563.   {. o$ M" F3 q! b5 G2 g2 h2 a/ e
  564.   dlg=new CRevAppDlg;
    3 C+ T; E5 n" T$ v5 t0 q' y
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    / M6 q' H5 |+ \& T" u% f
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    8 B1 J% k* D0 h7 y- M% L" g3 S
  567.   m_pMainWnd=dlg;4 b# }" L- g8 g6 }) h: h
  568. 5 P* a* v0 C# Y$ H. h
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);; Y: U6 M1 F2 \% S6 U9 `

  570. - K' B9 D. {$ e: H$ A
  571. //  GdiplusStartupInput gdiplusStartupInput;: f+ X( b6 V& G* P0 d
  572. //  ULONG_PTR gdiplusToken;7 [. \+ ?! Q3 K+ e
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);  j4 N2 N1 |- N+ q) N
  574. % T5 G' [) n! q' m* j' l$ O. |
  575. //        CRevAppDlg dlg;
    # I/ C9 }/ w2 Y
  576. //        int nResponse = dlg.DoModal();, G) [3 E4 [4 S: l. k3 ?. {
  577. //        if (nResponse == IDOK)
    1 ^; v4 I" l' @6 |0 ]
  578. //        {: a; t' t9 O" X' A" s! N
  579. //                // TODO: Place code here to handle when the dialog is* |5 C$ m4 Z) |
  580. //                //  dismissed with OK
    * I4 t# n) p: Y/ ^3 S" o1 p
  581. //        }
    . Q0 ?: l3 u9 B$ y1 W7 A. e5 ]
  582. //        else if (nResponse == IDCANCEL)% A, o( t8 x# a  W0 i0 P
  583. //        {
    + j, T, V9 }# f! A$ j
  584. //                // TODO: Place code here to handle when the dialog is* q' [7 }8 \- \# a9 m& R
  585. //                //  dismissed with Cancel
    - R* ^2 U) ~# ]; J1 u0 U9 M, @( ~2 s
  586. //        }
    $ |1 L4 c( x$ s; A( o% B  V( p2 i

  587. 7 U. \0 b3 A3 i  {% I1 e) `& |
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    1 X, {5 w, j8 `7 ]" Z  B; r, D
  589.         //  application, rather than start the application's message pump.
    # }& n* M  i9 n% E  f. ~
  590.         return TRUE;
    , H6 s  e( G4 k# a+ D
  591. }
    # S4 c: v# u0 \, `9 V% {+ g

  592. ! c) c) o2 ?: M( c
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    3 I! X+ Y0 E/ _. t* \
  594. {3 E# j7 f5 ~5 I
  595.   int i;
    ( q' Q# t2 `/ U
  596.   char *szRet;/ h3 `% G3 G2 c& X* V" Y; G9 r% A2 Y
  597. + L& i6 F6 d3 `4 E& S
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    3 F& M8 D* z  o- d5 L6 O' n8 L$ P
  599.   if(sztoken)! V: u' z4 S- H# Q
  600.   {( j$ Q3 g# W+ R8 l. {
  601.     szRet=&sztoken[itoken];3 z2 \7 x- b4 L5 J
  602.     while(sztoken[itoken])8 m) S$ S% N7 u5 ^
  603.     {( _5 U* B8 J  |# i1 k- Q& P, v3 u
  604.       for(i=0;i<(int)strlen(token);i++)
    & F7 j* a4 g6 n0 z9 o
  605.       {# j7 T6 B5 }* }  w5 Q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 ^9 T6 k/ i) [& f7 d) Y
  607.         {4 w8 d/ j! R+ v! r' [, [) w9 [
  608.           sztoken[itoken++]=0;
    * S0 n0 I/ ?" X& {/ O! a
  609.           sztoken[itoken++]=0;) c$ ]- L8 g; X7 d
  610.           return szRet;
    4 Z5 Z! b! U9 s% K" @
  611.         }& U7 F2 t( |5 H* ^1 j2 s; ~
  612.       }
    ! V5 X: s' l" G1 t
  613.       itoken++;  }0 C) }7 f- p( l  t0 F
  614.     }! a6 E4 [& E- V* j$ K5 T
  615.   }8 p; @& Z' w/ j; ?
  616.   return NULL;0 a  U% ^6 L4 Y- @  r( a7 U
  617. }
    3 Y/ h0 I- @( a- x0 @- j

  618. 4 J! G  A" {0 z6 Y# \% D2 V7 x, F
  619. void ProcessProc(long Total,long Current)& }. [; ~& ?+ b. g( P: L6 v9 }
  620. {+ }% R+ M+ r: e- R
  621.         MSG msg;
    1 Q# m1 o! B1 q$ e1 ~
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    $ T% K0 p: k0 s/ l2 L# L5 C
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " B2 P4 r/ p8 L! B/ F
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    4 @0 x) C! U3 K3 l% y5 U' w& E
  625.         {5 v: g0 o( d0 {, A( D
  626.                 if(!GetMessage(&msg,NULL,0,0))5 X! K+ M: X. B8 V3 ~5 G
  627.                 {
    ) l2 I8 _; C1 l
  628.                         return;
    6 d- j2 p! [6 n1 K% b; n; S
  629.                 }7 j9 o# ?- v# a1 V2 J! O5 G
  630.                 TranslateMessage(&msg);
    ! N7 @# x3 V( ?- D& D. s; T
  631.                 DispatchMessage(&msg);) C$ m5 u" j# H# c; h0 h1 l7 Y4 Y, C  O
  632.         }        1 n+ h6 Y, {& |
  633. }! S9 h# g% t+ ?( z
  634. ' V4 [. Q: R' ?! b
  635. BOOL bFirstChar=TRUE;
    4 k  m/ {5 y* m$ e/ G& X1 s
  636. - k1 g% P( p5 z; }; Z4 b7 h4 t2 ?
  637. BOOL CRevAppApp::OnIdle(LONG lCount)4 n8 K5 M- H; s8 F3 x" m. U( \
  638. {
    & X5 n( j7 D/ o3 K0 d
  639.         // TODO: Add your specialized code here and/or call the base class
    6 c4 i, c9 g0 A2 k! G* Z9 L% {8 [
  640.   switch(dwProgramState)$ r! C& Y/ d$ {* b
  641.   {  z+ X$ M! n3 c/ s3 u
  642.   case AP_NOTHING:
    ( T& P8 F- Y& B3 c! u  _, h
  643.     switch(dwStartUpSteps)
    ! m  T" T% C) N+ \( y% v  d
  644.     {5 p/ n* {  D9 _2 B" u8 L* L; c0 |
  645.     case 1:4 w, C/ p& R  k' `
  646.       {" `8 v8 o( u$ d+ z" p+ H
  647.         int i;
    ( J% p! {1 S& S. v$ S
  648.         CDC *pCDC=dlg->GetDC();
    + _( s; T) e7 w- R! m7 r
  649.         HDC hdcwnd=pCDC->m_hDC;2 k: ]% O1 [; G  e5 s/ e
  650. //        Graphics graphics(hdcwnd);
    6 {) F( N2 B" B4 N
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    , S+ r+ n7 I  M  j; U/ @' f
  652. //        INT iWidth=bitmap.GetWidth();: k% L( _5 C: Z- ~0 H; ]) V
  653. //        INT iHeight=bitmap.GetHeight();  \9 V& F& Z" T3 L0 N, R$ J
  654. //        Color color,colorTemp;
    , a1 ^3 ^8 s+ E: u4 j- l" |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)2 u/ g- [2 _- `
  656. //        {# f/ F4 o2 M- y4 s0 l. E
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    1 I, x4 v6 G# H$ f3 A' d/ Q3 ?
  658. //          {( S" w1 ^" m9 K: ]! a" R! [
  659. //            bitmap.GetPixel(iColumn,iRow,&color);& R8 @. t- g  t) P4 b
  660. //            colorTemp.SetValue(color.MakeARGB(2 M- B- m8 H" b! V% w* V! e
  661. //              (BYTE)(255*iColumn/iWidth),
    , J6 r: @7 O5 o1 V9 d' f
  662. //              color.GetRed(),- F6 D( G  e( ?( U, a" P3 V
  663. //              color.GetGreen(),$ {( w5 p; m3 z: b3 I
  664. //              color.GetBlue()));
    ; g4 e( U9 ^5 D9 D
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    6 ^- k% ]( S) |( n! @* B& P
  666. //          }% G4 U( S9 W5 K! Z6 n! _
  667. //        }/ _% C- j4 t% o( k6 N0 z# M
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);1 `4 b+ b0 e9 e& J  N7 F  w
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. b. q1 z, D9 J) \& e' B" K! n
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");6 `) d% z5 n% n, C7 o4 C  S
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: j. Y/ `1 t, _7 t& D' q3 q9 M
  672.         for(i=0;i<240;i+=8)$ K4 G! N. d6 c; O' Z
  673.         {
    5 H2 t1 a; S; A0 ?( Q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 Y, v# C! Z4 V' Z* v
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , x; s0 i" K. {! A
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # i& k# @. n  U9 u& a1 R
  677.           Sleep(33);/ M" c6 W7 k( D: y
  678.         }
    % S3 d+ t9 i3 J& C% T) z
  679.         Sleep(1000);
    - b  Y# }7 v. q% @! ?" D& @7 l
  680.         for(i=240;i>0;i-=8)
    3 v$ e# @( [: I1 U
  681.         {+ M5 q; F3 A, b+ o# f4 ~% H2 @# t0 e
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) C" _7 S. c# E6 V; R. |
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# S: h8 s8 o4 g# p* h* H
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 r- f* j' m& W9 s# h7 n# ^
  685.           Sleep(33);$ ^( W3 r; x' P2 W! i
  686.         }
    & w1 E  m* n% e0 @. w! M9 ]
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 F8 ]: E. B* K9 W4 T
  688.         dlg->ReleaseDC(pCDC);1 T" @& r: E2 U& T. {
  689.         DeleteDC(hdctar);
    % G) ^* a& D6 ]
  690.         DeleteDC(hdcsrc);
    . J" v0 q5 X7 h( Z: @6 I
  691.         DeleteDC(hdcorg);
    : X  n- @  {0 |3 ?
  692.       }6 ?; `, N& c( ]8 [$ S/ z& y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    0 a3 l" K1 w6 _
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    5 Z8 s; F9 g1 h% \
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ' a! e# e4 P7 S0 d
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");, v+ @! O( @) H" q! x- B  U
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      d6 u; I! K  p3 C4 H
  698.       if(!Dn.Connected())0 ?  `- w2 V6 x- Z$ Z" i
  699.       {
    7 L5 L9 W! t' P" e8 y
  700.         dwTotalFiles=1;' D/ ~) X; N8 m
  701.         dwDownLoaded=0;. P2 \- }- l/ p- b
  702.         bSilentStep=TRUE;
    7 x: e0 [. V7 @' O2 ?
  703.         bCompressed=FALSE;
    . R  o4 {* C% ~. W, @
  704.         strExtLocal.Empty();, T: m( h. I. ?& g, _" L/ t8 F
  705.         strFullName="readme.txt";1 G; G3 N2 w4 z) W  t: F- b+ C, H
  706.         dwProgramState=AP_CONNECT;
    7 E" W2 c$ ]6 C: Q9 Z& B% y
  707.       }8 F9 |1 a0 W, U
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    9 A+ e+ I% h* W8 b+ Q/ c/ z5 a, o
  709.       dwStartUpSteps=2;7 B7 v: d$ x3 [. }8 M% i' w
  710.       break;" x6 L! H5 Y1 K! j: D
  711.     case 2:
    : _9 Z  P* J6 E/ m( F( K  W/ q. |
  712.       {
    0 z  X, t7 M0 V
  713.         int iEOF;5 X5 H" G' \" ]
  714.         FILE *fp;
    $ M( w5 W  ]! C6 G8 t/ e
  715.         char szString[512];* }3 r9 ]& V! f" ?% }8 m
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");0 A& t" {1 Z9 t* C3 v0 Y
  717.         if(fp)
    ; u" Z8 A" T5 ~" ]1 N% r( w; m6 L7 n
  718.         {  W  G9 _* p, O( s
  719.           do# ?9 C1 @( H0 D& R, L
  720.           {
    4 ~/ a' A1 }9 J& _/ B2 A
  721.             iEOF=fscanf(fp,"%s",szString);
    ' L& _% n1 X3 l- }
  722.             if(strlen(szString))5 {" o1 q  r6 `, d% K( m+ d
  723.             {$ E9 m$ B' Q) B) t8 {9 R
  724.               if(bFirstChar)- t/ ?* C8 v0 ^
  725.               {4 Q. E3 a( a! t- O
  726.                 bFirstChar=FALSE;+ Z  u2 f- d& @! {* Z, i* X5 j
  727.                 bConnectIsBig5=FALSE;
    & H' w2 ?! o$ T% q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;2 i/ R" s/ c/ T0 y- R
  729.               }
    ! U7 G' H1 J( k% A9 {0 L* E
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));1 I) C2 K+ D8 W5 Y  t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ) J, `. Q6 u9 z
  732.               dlg->m_ListText.AddString(szString);3 \. Y9 f( s& f& L2 q: d
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      W$ W6 M# K+ g' d: A
  734.               *szString=0;
    % p" X) @0 P0 E
  735.             }
    , p4 N- M. F6 A7 b& k& L
  736.           } while(iEOF!=EOF);& E# }5 g) B! j5 l6 j8 y7 Y
  737.           fclose(fp);
    % I& U. p& {4 _+ _
  738.           unlink(".\\DownLoad\\readme.txt");
      ?$ Y$ g  m/ Y8 k
  739.           dwStartUpSteps=3;
    4 C6 M: o( @) X8 t1 w5 ]6 `+ p
  740.         }! L* ~- R/ J8 x3 J2 c' V: J
  741.       }" ]5 V9 \( d0 Y; i; I. {& l
  742.       break;
    * ^6 V2 u2 w& T% t
  743.     case 3:
    % b1 f" R' j+ k' Y2 y: c! D
  744.       if(!Dn.Connected())
    $ b) o, M3 i6 r* ]1 Y
  745.       {# Y9 y( D- N8 a+ \" c8 n! n  Q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);' k) J3 z& I) t1 J
  747.         dwTotalFiles=1;0 t9 _4 N, l: w. m. A
  748.         dwDownLoaded=0;9 l5 r8 t0 L/ p
  749.         bSilentStep=TRUE;5 |& y- ^. M2 y$ t9 k
  750.         bCompressed=FALSE;
    ' C6 V' o+ ^, ~" u) G% W; [
  751.         strExtLocal.Empty();
    # g6 u! [+ \( o; K3 W
  752.         strFullName="checkversion.txt";
    & t# q; C$ K9 C
  753.         dwProgramState=AP_CONNECT;* l# v; k. n( v6 T9 C3 i- x
  754.       }
    , a$ t+ R" e, I: F& y
  755.       dwStartUpSteps=4;# R7 c3 A) I, K
  756.       break;
    $ r! ~+ A& Q0 m
  757.     case 4:
    & O5 ]. `0 v- N1 T, W( F
  758.       {
    / B) ]3 m2 J1 [. B4 j2 Z- m
  759.         FILE *fp;
    9 b8 s: f; B# i1 o
  760.         char szString1[128];
    , J& h6 B! i9 P& X( @! j; @) x. @
  761.         char szString2[128];
    1 s7 K/ {# d" l6 W) [6 g
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    9 S0 m: i$ {, c* O% L
  763.         if(fp)
    . |3 e4 ^! a- ]+ G0 u
  764.         {
    ! [- @. y2 v: H$ T, a
  765.           fscanf(fp,"%s",szString1);
    3 w  Y8 N( e" V# z9 ^/ X
  766.           fclose(fp);
    ! d; a/ ]5 i  _8 j% c$ Q0 M
  767.           fCheckVersion=atof(szString1);* Y5 L5 Q2 T3 h+ D
  768.           fp=fopen(".\\checkversion.dat","r");
    1 X$ g' e9 X) [' c  H
  769.           if(fp)3 I7 d! v% ]$ s
  770.           {
    8 G/ a, [/ |$ {$ [% d, s% ]5 [2 ]
  771.             fscanf(fp,"%s",szString2);8 s; _7 y  t8 F6 O; y; D& k7 E3 t
  772.             fclose(fp);( y& w2 B, _7 P* |' d# V& x
  773.             if(atof(szString1)!=atof(szString2))
    ! P+ _$ g4 B2 ^% l( j' ^
  774.             {& I9 Q& l2 N& H6 S
  775.               if(!Dn.Connected())7 R3 w  Z+ ?& W2 S4 P# _8 ~- i
  776.               {' Z. Q- K1 K- E  J! `
  777.                 bFirstUpdate=TRUE;; C, W, A: }' L% r/ |- i
  778.                 dwTotalFiles=1;2 W/ N# K6 \, y$ z; q0 O5 E. e
  779.                 dwDownLoaded=0;, Q6 X3 l, s2 R- t
  780.                 bSilentStep=FALSE;
    9 K8 f) y9 T* a+ r; y7 V; M+ C
  781.                 bCompressed=TRUE;
    $ K' |) A+ I3 Q$ Q
  782.                 strExtLocal=".\\DownLoad\";
    : k+ B2 \" x: J" _7 O
  783.                 strFullName="update.txt";2 o, _' n! H! e4 d) M
  784.                 dwProgramState=AP_CONNECT;
    ; ~/ I- D; S+ W7 ?1 {; x% T: t
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 M4 l0 |  \& H$ o
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 Q, s/ f  P6 \; e7 H' j
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");+ J! \4 y4 w  R2 u- M
  788. 0 n* \: m2 b: O, l4 E0 c
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " |5 A- D1 p5 z4 t
  790.                 unlink(".\\DownLoad\\checkversion.txt");1 d: h9 n8 ^( z
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ' I( k  @6 _9 v7 z1 N3 X
  792.                 {! ]+ A5 @9 T+ H0 y% G/ n
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ! P* E9 Q' _1 l; |- y/ F
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 E9 o$ s; v6 W& U8 a1 F
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    $ d9 ?! j) B$ V+ L. S2 A. J
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: w/ H2 h8 w& p7 d( o. S+ A

  797. 4 _* L' x4 q1 n1 u' F
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' f8 w. k! C( `  z$ a, V8 Z
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  k4 r! U5 f! f  C1 |
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");  A* d* p: Q' F. [, u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- U& S+ ^8 c. o/ c1 D: m) ]
  802.                 }5 r5 M- E0 |  f2 N% _  m5 N
  803.                 dwStartUpSteps=5;* y- _! v$ C+ g4 {: [
  804.               }
    / R- `* o) {* a% E- R; n
  805.             }
    $ r# S' S4 B7 t' k9 K
  806.             else
    ! R8 L# h: T4 t* J; e# x
  807.             {
    : Q# X! f+ Q- \+ U' l! g
  808.               unlink(".\\DownLoad\\checkversion.txt");. j  s, Q- a% t% L- G1 W  [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 D8 v* B6 c& q' m. x9 E
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 S& k' Q/ ]3 S; B
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    . u& I: p0 G. O7 w
  812. , Z% ^5 z1 k- m3 @0 I1 l  z
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; R9 k0 r7 }! Q6 g. ~4 X( X
  814.               dwStartUpSteps=99;" p7 l+ y8 U5 {) i2 U
  815.               bFinishUpdated=TRUE;
    8 V, `4 N. B3 L" [. ?9 Y, E- a
  816.               bCanUpdate=TRUE;
    ( }0 |5 C4 q; X- P  P% Y
  817.             }
    ! N9 r+ A; ?7 f; S# ^
  818.           }8 d+ v' `* G' x  [3 M7 Y# j! F, x
  819.           else# O) u% M: `1 }. q, r1 X5 k
  820.           {9 X: R! g7 U( ?
  821.             if(!Dn.Connected())  P1 l5 r+ B/ U  x8 }
  822.             {
    3 ]# c0 e$ x9 m* z
  823.               bFirstUpdate=TRUE;- x  y+ v" U+ k$ M/ a: U
  824.               dwTotalFiles=1;+ |6 Q; q$ O+ b5 ~% c) e
  825.               dwDownLoaded=0;
      @' N& H, k9 r2 G9 g( F
  826.               bSilentStep=FALSE;6 M# n' F2 Y' `1 ?' W, H
  827.               bCompressed=TRUE;
    % ?7 c7 Z% |& |) ~1 J$ _/ }* i
  828.               strExtLocal=".\\DownLoad\";
    5 C3 w4 N  g, S" ^. P5 U
  829.               strFullName="update.txt";
    + S; T3 j! O& T, D
  830.               dwProgramState=AP_CONNECT;
    ! V. s3 L- @/ s6 D3 ?' J( [5 }
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , B3 S) r# r' T! n: h+ v
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : r6 S$ \" ]* R7 n- `  y1 r; x
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    0 q- T4 O6 N+ Q$ m9 O6 a
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 j0 h1 Q  l0 p- @3 m3 j9 s
  835.               unlink(".\\DownLoad\\checkversion.txt");
    # ?! Z: k8 b2 b- T
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    " @! \. D# @) V: T
  837.               {5 F- b) u! X' W" f; p: R
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    " {5 x: k, j4 P7 T7 L  p5 t. i  x
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");" O! W: {$ [1 n$ U$ u: o1 N
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");# e, |; Y) B6 u7 t2 \
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / \  {. R' I  ~8 E, j) C# |
  842.                 ) |$ f; e+ u/ F1 r# i
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    2 p* ~  h- C  D( s
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ E$ [# x  J4 N2 h$ d5 z% B. M* B
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    . o# n9 X  T, k; _8 i7 Q
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' J, H' A$ j, X; u8 Y: O
  847.               }: q* q, a: L  b  w( m1 K
  848.               dwStartUpSteps=5;( F+ d% k* Q0 m' w# W  n, T
  849.             }
    . F( M3 ~3 _! V" Z: V' S4 Z
  850.           }+ j' B% k0 [4 c  h" |. w" i2 t
  851.         }; s- d( y: v0 k& E
  852.         else. W6 a; F" ~/ o$ W+ u6 ^
  853.         {3 g  R4 J5 v: F3 [
  854.           dwStartUpSteps=3;
    $ {% |2 x# n6 a5 \( I* D4 d) L
  855.         }+ W& f  L) z3 C- Q
  856.       }/ z( a; m, c# i7 R% z* V
  857.       break;8 g4 p$ d7 O# h% d7 |& j- ~' c
  858.     case 5:0 n1 B6 D/ ]  h4 }  P
  859.       {. j6 L' Q- [/ A/ S, A. B" D
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& h8 V) L/ w  D; e8 a7 l3 \
  861.         {6 `+ p  W2 L! N8 U1 O8 v
  862.           int opt_overwrite=1;
    3 w) ^4 c, Z& u/ }; k- d
  863.           int opt_do_extract_withoutpath=0;
    ' N2 ?5 x) x' f* M
  864.           unzFile uf=NULL;$ v$ l: c( {9 T1 |1 P

  865. % l, ?& Q7 t& h
  866.           uf=unzOpen("Wsa.zip");
    ( C+ Y6 E' y! N: a* H5 Y( m
  867.           if(uf), I, n1 B: E, L4 A$ |! Z
  868.           {+ h  t; c: ?2 t; G8 G0 N/ A
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);9 J9 G* g  I& s1 N* y
  870.             unzClose(uf);
    4 c7 X4 Z2 I8 j# A
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    - |6 T4 i% x; M+ x# A+ @0 x
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    % k9 r  U, R; P; r
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");- x4 o, O7 d2 @# Y5 o4 D8 r
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- w  M! [+ ]' O1 ~# C. O- ]
  875.           }
    : L' Z* \# F  x, m  ~. C
  876.           DeleteFile("Wsa.zip" );3 ]4 f; L. b, d4 I7 v1 p
  877.         }6 ?8 E1 t  w) [) }0 z
  878. * A9 p4 l" ^' n0 \, S$ E) {& q
  879.         if(CheckLocalVersion()); E1 v; B! Y- Q
  880.         {& }* Z  y5 ~$ Z5 ^  U( \
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");3 ?! y. d0 }( z# W
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    - E. e3 w" h7 L# l$ T" O
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    8 y4 i$ j1 F* o2 Z6 q+ k( e+ v
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* [2 O2 h0 n: v2 B8 d9 k" P2 b7 }
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    $ l. d. Q# F( X8 x9 f2 C3 R
  886.           dwStartUpSteps=99;
    ' k8 }% ]1 n9 R& h% K
  887.         }
    % G2 G. E% Z# y& {; @
  888.         else
    9 u& Q" H' A: m6 ]  g8 x4 V
  889.         {5 E# u; S& {% i8 q
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");4 F- |) v& i2 Z. m% _; L  h% X
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");( g# Y/ B# ^$ B8 T, ?; Q9 i% H8 l
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' H# L1 f0 x2 o) L# K

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

$ j+ @3 A. P% c9 v4 ]" {
% z0 N6 O% @  Y* ^$ m; i; M

評分

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