CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
4 L; L6 z5 o. z; ~
  1. / RevApp.cpp : Defines the class behaviors for the application.
    # s1 J- R9 h# P
  2. //
    ( g  L8 i4 P- u2 U- _
  3. % M. K( Y1 r5 H3 b3 y; ]% F
  4. #include "stdafx.h"5 c7 V" ?4 S/ g1 _  J
  5. $ d2 n" S1 c/ |' t4 D
  6. //#define UNICODE  x+ l+ k: n7 j6 X7 H' \
  7. //#include <gdiplus.h>
    1 ]/ E+ \+ L. m. L9 C
  8. //using namespace Gdiplus;
    # c- m( B4 ^  w
  9. , l* L  l( ]! U2 }/ _) T( P
  10. #include "RevApp.h"
    0 B8 p5 L0 b& Y, Z/ c) C. y, S
  11. #include "RevAppDlg.h"! J4 ^+ U# O* s$ a! h& y
  12. * ~* C! H4 ?8 _: q" w; s6 T1 @
  13. #pragma warning(disable:4786)
    , P, ^1 [" H3 r4 k( i% R7 R& z  j6 ?
  14. #include <map>" {2 b0 i7 [& m
  15. #include <list>6 ]& r# y2 h- f6 U$ I6 d+ M
  16. #include <direct.h>6 t# @5 y, k2 ]7 N( n

  17. 4 a/ w. P' y( g9 I* ^( m# [4 k5 m
  18. #ifdef _DEBUG7 `- W* R0 `  [0 K, C# ]" T6 k! l
  19. #define new DEBUG_NEW. @6 J. f. x4 |8 F+ c0 I
  20. #undef THIS_FILE, g+ f6 K$ r7 i1 b6 v  }4 x/ _
  21. static char THIS_FILE[] = __FILE__;9 F/ @# s4 z/ y: |* Y
  22. #endif
    8 g+ E, N' Z6 j6 [7 J+ k
  23. #include "SkinResDef.h"
    1 ~# ]. U( F, w+ u: q4 \$ G
  24. #include "ChangeBG.h"
      p2 t$ J# T/ P; E% ]5 E+ m/ m
  25. #include "AFXINET.H"
      Y; F- E( I: a- k3 g

  26. 1 {4 o' j$ i# R
  27. #define TRADITIONAL_CHINESE 00 r# s- [9 s+ b* y& u
  28. #define SIMPLIFY_CHINESE 14 y& c( {3 D7 l$ n
  29. #define ENGLISH 28 A! m- R! [6 w, Q; g/ X
  30. int m_iLanguage = ENGLISH;
    9 ]6 [8 B3 V1 _8 b
  31. /////////////////////////////////////////////////////////////////////////////2 U+ ?7 {2 }9 K9 x: X
  32. // CRevAppApp
    ( v( S9 r' T  ~3 o
  33. 1 o) q6 f( d& A/ }+ z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp); @! h& \" y1 g, X
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    & a0 I& x8 j. w* J! n$ h
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.& Z7 B" Y2 u* F" w
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    / q2 y0 F4 ?: K6 T7 l3 M
  38.         //}}AFX_MSG
    ) @5 A# K* e2 e& K* o0 F' Q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 d2 y$ R7 x: z. n. T' v' I
  40. END_MESSAGE_MAP()/ t6 r8 g  G( E5 `
  41. 2 q" v- W, ]1 K; y% j8 Z& Y
  42. /////////////////////////////////////////////////////////////////////////////, }6 a' o* l: J( W, i
  43. // CRevAppApp construction9 f# I1 O4 _! {. q2 w

  44. 7 Y! m' s! C2 G
  45. CRevAppApp::CRevAppApp()
    7 s" r. |2 a) K, v
  46. {
    ' C! i6 r4 Q. h7 F  v
  47.         // TODO: add construction code here,
    $ B+ t+ e& T$ H8 C* ^% ^; |5 s" b; q
  48.         // Place all significant initialization in InitInstance& X; ~  O4 Y  e) |7 ]
  49.   bDisplayIsBig5=FALSE;5 j7 N' e7 I1 A
  50.   bRestartUpdater=FALSE;  {+ \; j. @2 L% V9 j
  51.   bFinishUpdated=FALSE;
    ' L6 O1 A  n1 R- j; ?
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    . G' h" @" V( @& F6 u
  53.   InitChangeDataBig52GBKS();
    9 Y  k$ q, w0 J3 m+ g
  54.   InitChangeDataGBKS2Big5();
    ) ~0 C! b1 V# y+ _6 u* c6 y
  55.         //
    $ Z, P2 k; x  _( g# h& h
  56.         bClickRunExe = FALSE;# W% L5 G1 N1 H3 Q
  57.         //
    $ N3 Q+ S& F# R" ^/ h
  58. }) i$ P. V+ P8 J& |

  59. 3 X" u3 L" f) R' h, ^% I3 L7 \
  60. CRevAppApp::~CRevAppApp()( }; u7 ^+ E2 b% }' n* ^  `2 j) x
  61. {- I. G1 }2 j. E: i. x
  62.         // TODO: add construction code here,
    9 `1 f. X* b! O0 B4 L" x
  63.         // Place all significant initialization in InitInstance
    * e9 x/ p' O( e
  64.   EndChangeData();
    : l! [& Q" ]! c( W, l
  65. }
    * M9 B4 }4 b, x* W7 O

  66. 3 r  r# B0 R% f$ \: |6 {- F( ^
  67. /////////////////////////////////////////////////////////////////////////////* c8 r) K* D( z9 }7 M
  68. // The one and only CRevAppApp object
    $ p( ^1 c, a5 w9 V

  69. ) X: A: P9 n0 V  v
  70. CRevAppApp theApp;3 l( c( H1 \0 r# s1 z) @6 \
  71. . }: f* z) m4 O2 A! O3 f: r) h
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ' _: d4 `  C# K. |( a& [6 T
  73. {
    1 M6 ~4 U# R6 c" C
  74.   int iEOF=0;
    7 c' N! I. G: _1 l! l
  75.   char szTempName[MAX_PATH];
    7 q7 f0 P1 ?) L% `! n7 ]
  76.   *szFileName=0;
    4 y' u& E/ u* C+ y0 k
  77.   iEOF=fscanf(fp,"%s",szTempName);- K4 p! d! W# }2 Q( d
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ) ?5 Y4 e6 `, a7 a  |
  79.   {
    + X% j5 Z5 [2 S  m$ v
  80.     strcpy(szFileName,&szTempName[1]);$ J' b2 ]3 o' W9 |- o* @. L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)3 {3 V+ U. o  N7 ?- b% J& y1 @. L
  82.     {
    9 b. Q' @* J% m4 A
  83.       iEOF=fscanf(fp,"%s",szTempName);
    $ M, {8 Q6 y2 ?% `
  84.       strcat(szFileName," ");
    . w. c  t+ `3 h
  85.       strcat(szFileName,szTempName);! {2 V7 t& s. _' m
  86.     }2 Y5 X! c* }0 ~$ B2 J$ K, x
  87.     if(strlen(szFileName)>=1)
    + d( ~5 E' [, _/ }3 h
  88.     {8 t# M/ {" q! o3 z  R" h
  89.       szFileName[strlen(szFileName)-1]=0;2 b( R- i+ _9 Z! B2 x  l9 H
  90.     }
    : y3 b; S' T% X. j/ u
  91.   }
    7 V# R, T( n; V/ }
  92.   return szFileName;- Q8 z' O+ J  K* n. e
  93. }9 v# F0 t1 l% c7 q& Q& j
  94. 9 A2 _$ w' C: g" A$ d# h! D
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    8 u, P+ k  A& ]3 S: i) }& r
  96. {2 i" U4 g( z4 w2 h  C/ j. \
  97.   FILE *fp;# I( i) O# c* F+ D
  98.   char *key=NULL;
    . ~, ^+ b6 l# ~) G- o9 ]+ o
  99.   char version[MAX_PATH];4 K3 e1 x. h7 N) t% Q+ {
  100.   LPUPDATEFILE file,olds;4 C) d, I* i7 B% ]. h0 Y. u' _3 E$ x
  101.   std::map<CString,LPUPDATEFILE>::iterator p;+ \9 I% L# h6 J- L, H2 I' G+ _3 `

  102. % n5 P1 C, G! s1 r' t
  103.   UpdateList.clear();
      J/ e% ?; F2 |9 Z
  104.   UpdateFile.clear();: O; y% E1 m4 p1 w- g
  105.   if(GetFileAttributes(filename)==-1) return false;4 x# r9 D! M' R5 i8 ]7 H
  106.   if(!(fp=fopen(filename,"r"))) return false;1 J1 u7 a7 M4 z/ S* n
  107.   fscanf(fp,"%s",version);
    5 u9 P2 d' _: t4 V  p* }2 {. m
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . j9 H6 x$ x- q& B; B4 `7 i
  109.   while(fscanf(fp,"%s",version)!=EOF)6 Y( I7 F: O4 p7 o3 [
  110.   {
    8 D1 A  b- j; k2 [8 y8 U2 Q) R
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! f( |) F+ \" D" M
  112.     fscanf(fp,"%s",file->path);
    5 y2 S3 l; |+ ~# l3 v2 _
  113.     ReadFileNames(fp,file->file);& G% _* [+ t6 r& n
  114.     strcpy(file->full,".");
    0 {$ ~" z5 P$ _& a. i2 @1 ^0 A
  115.     strcat(file->full,file->path);) d2 q# J! ~# d+ Y) S+ M, X) g7 m6 n
  116.     strcat(file->full,file->file);
    * F" K! j: j: ?( z4 l' e3 D
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())7 A- I, P8 ^+ S- o0 }3 |3 @3 O
  118.     {
    ) G* {9 H$ d2 f$ X
  119.       file->vers=(float)atof(version);
    $ d/ M8 V# q2 s* u6 C
  120.       UpdateList.push_back(file->full);
    % d0 U. q- R" w1 L( J( i8 u
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));3 w, m2 [+ k  n; r: v6 U% d
  122.     }' }% R0 b. \- i& L" p4 Y
  123.     else/ b5 @) ^) M. J+ g' i
  124.     {
    # |7 D/ G0 q9 Y9 q) X5 g
  125.       olds=(*p).second;
      G5 \5 E  V0 z. M+ _' N. S# f
  126.       if(olds->vers<(float)atof(version))
    ' b& ?+ Y8 [& V
  127.       {8 V% t7 ]+ F2 k) [; ]! _1 i+ t
  128.         olds->vers=(float)atof(version);1 |$ b  _! L& C
  129.       }
    4 W2 B: {6 ~8 K) t
  130.       free(file);
    . i2 D1 A; E4 X( s' ?. a6 j
  131.     }6 R4 S( I; z* N1 O9 l
  132.   }1 @0 r  J/ \3 S
  133.   fclose(fp);
    / p( U) O: s" C& p6 I
  134.   return true;
      Y2 a: N2 }) G0 Q+ q
  135. }
    ' k: a- m- L! U8 X' a' m/ n6 h
  136. & ^8 H* n3 Z) o6 m, h: l
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)% D3 M2 C8 E5 O3 H1 X
  138. {
    & m- \0 y, f- c! B3 o! W
  139.   TCHAR  szFull[MAX_PATH];
      b: S! Q: k! }6 f+ E6 l' t
  140.   TCHAR *token,*inter;# c2 ]  X% ?/ i; N8 @
  141.   *szPath=0;* J' c' D  ~& @- m
  142.   strcpy(szFull,szFullPath);: l/ x0 U7 _6 f; H% m
  143.   token=strtok(szFull,"\\/");
    % b! ^! J! e. Q6 V' V. c- D
  144.   inter=token;
    - H9 m# x$ k; Q& M
  145.   while(token=strtok(NULL,"\\/"))
    / S- ?: i  }! H5 r1 l, V* D$ D
  146.   {
    6 m! V/ [) E6 I- h- p# A% L9 u
  147.     strcat(szPath,inter);
    1 n9 V8 |0 I3 g8 K3 f
  148.     strcat(szPath,"\");
    ; f: M* n5 }& X7 V- H& u. Z
  149.     inter=token;: c! b- o% a' H1 G/ q  B
  150.   }) w# p! p" T2 F# [0 i( W
  151.   return strlen(szPath);
    7 o  _3 S( o7 @1 F- Q5 n
  152. }
    0 i+ N+ @: ?# h. T7 Q9 C& g3 X
  153. 5 `' A( M- Y1 \8 L' K- S
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)6 J' k" ~- s# u" D
  155. {
    ; U* Y, c! L9 }5 H' f+ z& ]! m! G
  156.   DWORD attrib=GetFileAttributes(Target);) d9 u: a9 ~1 E
  157.   if(attrib!=-1): ^' E. S" D  a: N& h$ v" C0 J
  158.   {
    + R/ ], [( A& q1 n  S2 C: K
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    % }( l0 C) J6 K2 _" K9 \$ w
  160.     {
    1 J0 [% X# Z4 {2 ~( c& A8 U& g
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    % B- K# K: P2 h3 s: b7 y6 u
  162.       SetFileAttributes(Target,attrib);% K& L" v, I. {7 Y* ~3 W
  163.     }  _4 h1 x7 R* J3 {% i
  164.   }
    : b' ^0 \# ^' |. s% C. l; X% v& |0 A
  165.   CopyFile(Source,Target,Erase);
    9 U4 b9 s1 A  n
  166. }
    $ B  v$ N, z3 X, z6 y! w$ w, z) U

  167. & n" N( u. N* y* T# V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    0 K$ @# _! j+ q0 L+ U# {3 V" v
  169. {9 |" d8 \9 T7 x+ D5 N9 T$ ^8 b% N
  170.      FILE *fp;3 i* u9 {# _' v1 v5 h. T5 `
  171.      char  szBuffer[8192];9 Y+ X& S8 D  M' J$ \
  172.   va_list  argptr;; n6 N( w- y0 U* w" [) D
  173. 6 S- T: v* O0 r: W, v$ c  W$ A
  174.         va_start(argptr,message);% ?7 S$ B! b4 j4 \& C; ]* F3 Y$ V) Q& c
  175.         vsprintf(szBuffer,message,argptr);
    : X  d" u+ }8 U
  176.         va_end(argptr);
    6 a3 o9 y/ M/ b: }& _& V; o
  177.   fp=fopen(FileName,"a");2 h5 \0 S( Z: G1 k7 V+ K2 _- I
  178.   if(fp)
    ) ]8 o/ ?+ A. b7 V! g2 E
  179.   {
    * z! p4 e2 i# H' e2 O
  180.     fprintf(fp,szBuffer);
    ' {( V" e! Q% x! I: f
  181.     fclose(fp);$ Q+ t5 }* \- A
  182.           _flushall();
    . M( p3 u  h* p( t: S- j) q
  183.   }6 l+ d: u( w# X' t7 W( \& A3 i- Q( D
  184. }5 f4 T6 |+ P1 i; L! \" w; _

  185. 6 Y: N1 X# p/ q8 d( {; |
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    5 W/ A' {/ ^( Q3 M0 _
  187. {% d) q0 g- X  M4 `
  188.      FILE *fp;
    : X, T, v" _# m) P2 ^7 @
  189.     DWORD  attrib;
    , N% {9 X$ j7 a7 g5 r; I
  190.   attrib=GetFileAttributes(FileName);: [3 \- B/ u* y, Y" A' T+ ~8 z
  191.   if(attrib!=-1)' H9 u1 i& Q1 R* \9 h
  192.   {% ?" W& E0 d8 p. D. w1 y! _- A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ( |6 [7 D* O) z1 r- A, F
  194.     if(!SetFileAttributes(FileName,attrib))
    . K" j' Q& g* @2 `. y# g! S! D0 p
  195.     {  @1 j% X% @4 I! a( f
  196.       return FALSE;2 L" X' h9 L% u: z$ \3 Z9 R
  197.     }! u4 e; _- w9 Q+ t4 k! ]
  198.   }+ g1 ~, w0 o4 q2 a  Z
  199.   fp=fopen(FileName,"wb");* b' g: ^# k7 S% @
  200.   if(fp)
      v+ \0 x! S7 q. d- ~# Q
  201.   {
    ( h! D+ F6 l/ R- x, n, L7 `: o7 F
  202.     fclose(fp);
    # k6 X2 F, H, s- c4 D' L- [/ i6 e, i
  203.   }; W( i- \7 ]8 M0 F5 h
  204.   return TRUE;
    2 D9 W, o3 f) U! K$ M
  205. }. t# u' D" U# {. a
  206. 4 l: S8 a2 ~" e7 z- P
  207. BOOL CRevAppApp::UpdateLocalVersion(void): j* ^( o' z+ T* F- |
  208. {
    ( l1 I- P+ i" Z$ m4 |9 e) N
  209.   char filename[MAX_PATH];
    $ V( X6 {9 x2 z+ M6 s
  210.   LPUPDATEFILE file,olds;% h. o- e+ b' M% U* Z. _
  211.   std::map<int,CString>::iterator i;
    4 A: e& K: H6 L  F
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . n2 l# N( i3 c" z) a6 `
  213.   std::list<CString>::iterator l;# g3 i; T( A7 {: Z+ ?
  214. ) s$ ]6 K/ @! j8 ^7 Y
  215.   if(bFirstUpdate)* L) X3 i& S4 |5 V: D! a: }2 a
  216.   {6 I* q1 u3 X6 r  w' r
  217.     dwCurrFile=0;
    , X/ r- c6 L  o3 n
  218.     bFirstUpdate=FALSE;
    " h  m. [0 o. ]) B! p# m
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# b6 X% u% C; d( h- b$ d: I2 `4 X
  220.     {
      ?6 N) T% j% o) E: ?+ N' R
  221.       dwTotalFiles=UpdateLocal.size();
    $ k* g) t9 v2 ]5 L
  222.       dwDownLoaded=0;
    + Y: R! _) v  F3 g0 s" v
  223.       bSilentStep=FALSE;8 A  j. f! K& a+ V
  224.       bCompressed=TRUE;7 k* p7 p$ E" m, w8 |$ i' X
  225.       strExtLocal.Empty();
    1 E/ V- x' I4 F4 L. O) [- X
  226.       strFullName=(*i).second;) W9 m6 J1 B7 I- r0 J9 f% e7 {
  227.       dwProgramState=AP_CONNECT;
    # r7 |4 ]' d+ ~8 u9 P
  228.       return TRUE;
    2 c  r) K3 V. ^
  229.     }, {* ~1 T# ?; Q$ g' x
  230.   }( M2 u" i2 e! \: f" O3 r' W
  231.   else if(bRestartUpdater==FALSE)# F3 m6 p7 ~5 H+ t
  232.   {
    # f# V3 Z4 i! ^9 {6 R9 b! ?
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    , P  ]% y& y. p( {) ~% Z
  234.     {
    0 H; ?! v! N* c+ r5 _0 a7 k4 t5 ^- c7 g
  235.       file=(*p).second;
    0 o" \" B# \) J/ q+ N
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    : D- M7 e6 `4 T0 Z. D6 ]: w, J5 }
  237.       {5 c: v8 n( q8 y7 \: A$ T/ p+ r
  238.         olds=(*p).second;
    * t/ l' j7 T& E5 `/ d
  239.         olds->vers=file->vers;
    & X. m# K. y; P5 g3 F
  240.       }4 Q9 d5 S/ ?2 N9 G  k' I# h
  241.       else
    % R5 J5 f" f* s/ B# H; w: O0 l7 C
  242.       {
    0 {: v7 f# ]# D" @9 M/ D; L
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! ]2 U- Y5 `7 P% P; v* B; p
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ( F+ j0 o) Z- H  y8 D
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));7 d; b4 u1 |# K( o( C0 X$ A. K
  246.       }
    8 T( Y4 w: D! b) L3 u# T
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");: a3 \3 F: |9 v
  248.       sprintf(filename,"(%s)",file->file);
    5 i0 y- k3 y, _$ a2 b* c
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& o% U1 b% P0 Q. M7 G- U
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ' C8 o2 k3 g3 }- a3 O8 O
  251.     }6 H# z0 _! o% Q7 \5 R: l. \$ V2 R
  252.     dwCurrFile++;
    ( ^( r7 b. F( S* {  c6 ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ y, l- i# o! z0 g$ }5 ]: z3 j
  254.     {6 t* x/ f5 @  d" [! F- s' R& D
  255.       bSilentStep=FALSE;
    / ?* K8 U3 |6 I1 D. h& }
  256.       bCompressed=TRUE;
    ( H0 g: q% D$ O: v7 i' W
  257.       strExtLocal.Empty();" w+ J6 U; Q8 D: l
  258.       strFullName=(*i).second;
      b  n. K% L$ N4 e& k
  259.       dwProgramState=AP_CONNECT;
    ( h1 L( v4 W$ l0 c
  260.       return TRUE;
    ; ^3 W9 k2 D9 y+ [6 R
  261.     }; o" u* R- G5 G) M
  262.     if(!bRestartUpdater)
    ( e' c: w; T8 ?, n1 M( ~
  263.     {
    ! M8 D/ B/ a0 v! Q! v; Z0 E# v* E9 i
  264.       int iCurrSize,iFileSize;
    9 A4 V, M) l; X0 `4 r
  265.       iCurrSize=0;
    8 ?5 L# i9 S% a4 R* c  o
  266.       iFileSize=UpdateList2.size();
    4 n3 r1 s$ i9 ?  g& R0 g- |8 [( r
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");; k, @: @! H2 h4 n- ~% d  S+ J
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    / w$ b% x  w; ~, K' r8 `
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");6 m/ u# R4 V/ h; X6 m
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( K5 S$ p6 z, M: u& y
  271.       Fclearf(".\\update.dat");
    . |0 `7 |6 t7 @( P1 k2 }
  272.       Fprintf(".\\update.dat","Bloodyf\n");2 @, _$ P" K! K1 e! B3 r
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++); [( ?( P1 _* v7 w- m' W+ U
  274.       {" h" O) M! l; s; d/ `
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 f& }& M1 L: I0 _3 L0 h2 p& V( ]
  276.         {
    & X9 j% H1 m! ]. z+ n7 G
  277.           file=(*p).second;
    . O& Q6 D7 ^! K1 y
  278.           sprintf(filename,"(%s)",file->file);
    ! [+ H+ D' H* L- W
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 ?& s  L5 S$ o* x) ]+ X
  280.           iCurrSize++;
    * q2 |4 H2 z" H+ W, e2 T" X" w, L
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));  I: w; `. F  x; Q, Z" [
  282.         }* f% H. B2 S' E. Y( v+ J( _+ ~
  283.       }
    & {/ G0 }* ~! z! b7 v3 M6 u$ c0 Z
  284.       unlink(".\\update.txt");0 W. @" }" I7 B- H* A
  285.       unlink(".\\update.tmp");/ A! F. E  q% t
  286.       Fclearf(".\\checkversion.dat");3 i# e4 i8 F2 X$ P2 Q3 }
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 V3 _& K; t1 I) h. `  B* {: U
  288.       if(UpdateLocal.size())1 a4 V4 O" [* s# B; J9 @" M# ?
  289.       {; h9 Q3 A! I& \" p: n# x" ]
  290.         UpdateLocal.clear();
    . I* |2 E* e& E. ?; Q, h, j
  291.       }
    $ ^% J+ M3 j$ M- [/ ]0 e' ~2 e
  292.       if(UpdateFile3.size())
    0 C; q* X! L8 F% M$ K
  293.       {) t- e% v/ s0 Z9 f+ q( q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)2 V; \4 l) z0 Z  r4 W
  295.         {
    $ s: X! c% b2 |! ]5 r+ F# u6 J
  296.           file=(*p).second;2 p( A# [3 u+ T! w! w
  297.           free(file);
    # }9 ?# T$ W) ?4 }5 O( i
  298.         }
    ) n9 _: ]0 L/ ~; ]
  299.         UpdateFile3.clear();
    0 Z/ H7 i4 f, z9 M. J
  300.         UpdateList3.clear();# A. Y! Z9 r9 R' `6 I- v3 ~# L( v, {1 z
  301.       }+ y) v9 r5 ^: W% \: P. n  \* C8 C  L
  302.       if(UpdateFile2.size())1 U& |) w7 Z4 |6 S0 Z* Z, H
  303.       {( c, Q4 z6 d4 G  n; l# j/ U3 `
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& W2 o* r) d2 T3 L+ ~/ i
  305.         {0 m- w" N: ^1 A+ h* y! Q
  306.           file=(*p).second;* k9 J% l9 [" r& h* o( T6 z9 J
  307.           free(file);
    # \: n0 j+ W/ J9 a/ g) s! L$ Q
  308.         }% C  ?/ Q# _4 S2 k/ M7 b6 N
  309.         UpdateFile2.clear();
    $ B- j+ q0 {  ~+ o- n
  310.         UpdateList2.clear();; u6 m9 ], K* }8 O& V2 N4 U5 T
  311.       }
    2 A/ f6 x' L& w5 D
  312.       if(UpdateFile1.size())' @( |* y& x8 {! h0 O# @" M
  313.       {
    - N: B0 Y  u# k
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 j. O, _( n3 f5 M9 N
  315.         {6 W  V7 b& a% [. g& P5 r( t
  316.           file=(*p).second;
    7 V  w% e# i0 h- z  f) F5 z
  317.           free(file);# l7 a; @: p" i( P
  318.         }9 F. `) B( \- Y# p
  319.         UpdateFile1.clear();
    & K' h; t2 j4 x2 |! }. c9 s
  320.         UpdateList1.clear();
    * }) H, u2 ^  M( D: q8 h6 l6 b
  321.       }$ o. n  H6 M9 i4 t% E6 E- O
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));" G/ E: g- P/ ]/ i  A
  323.     }
    8 p+ l+ S, Y7 d2 n- d
  324.   }+ `9 Y& T0 E0 t5 O) u5 i; G
  325.   return FALSE;
    6 r  z& N: W6 W/ n3 `' `
  326. }
      ]2 _' @7 y0 b/ J# \7 s# n
  327. : o; A" z8 q$ M, O
  328. void CRevAppApp::ClearAll(void)
    1 [+ N' S0 J$ U3 v& h. [2 `2 O4 d
  329. {) }) ^+ m0 F% |% G6 t$ R; K
  330.   LPUPDATEFILE file;' O1 j8 _# |- c1 u$ O  R  a
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    , L' e3 Y) D& }
  332. ! X8 [  e* Z' L: R2 B+ R
  333.   if(UpdateLocal.size())
    5 X# R8 \% v+ _7 ]& A
  334.   {
    5 a  c! T2 ~) ?7 K; v. b
  335.     UpdateLocal.clear();6 G7 p. h, u+ \9 T8 A6 l2 O4 J
  336.   }5 y' ^* a9 }( o; z; V; U1 A1 y
  337.   if(UpdateFile3.size())
    3 i, u6 ]8 N  F. ^: V( L9 o8 s1 o
  338.   {
    & O. s% }! y6 ^; k/ P# b' w7 i
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- K% r/ Y, s; l+ G
  340.     {4 k1 \; t0 S; P# E
  341.       file=(*p).second;
    ; G8 R. `! n" [+ O4 `
  342.       free(file);$ s% a8 r3 G3 f% y; x, j, L
  343.     }8 f; q+ N! u& v- [0 \7 Z$ G. i- q
  344.     UpdateFile3.clear();% X+ \. l2 X- G! B: \) o
  345.     UpdateList3.clear();
    3 |7 G  _) ?) t8 m
  346.   }
    : h1 M' b% ^; d8 @4 [2 P
  347.   if(UpdateFile2.size())" q) Z& B# M' l/ ?4 L
  348.   {0 I: G1 v5 [5 x6 Y  K9 m, f, l5 E
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% w' Y' @. x% Q& P
  350.     {5 Z8 E) Z6 u) O' }' o
  351.       file=(*p).second;
    3 m+ B$ C% P8 \. a
  352.       free(file);
    9 k3 ?% A+ k9 `& ]3 N
  353.     }4 N9 H7 |4 C# l# Q) _0 ]
  354.     UpdateFile2.clear();
    9 c! B1 B2 s! G" p. w/ P- l! r
  355.     UpdateList2.clear();$ L+ J$ r, w# y) [( J  o
  356.   }  E& r! m& B1 V. E$ j- R% {6 j7 L  }
  357.   if(UpdateFile1.size())
    ( S7 z5 U& [9 Q- k- O
  358.   {) N( Z" }1 [; v
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 F, h; I) u9 c- y- R: \
  360.     {3 @' a' e3 ~5 M; e' N8 n3 w
  361.       file=(*p).second;
    4 X8 W  X1 R+ g0 o& I
  362.       free(file);4 [5 K5 n# i% |' S
  363.     }
    , }2 |* P6 b0 _% [( h: A4 D
  364.     UpdateFile1.clear();
    % |5 m4 E6 C* G+ B& J( [8 h# Q
  365.     UpdateList1.clear();
      a; o/ y' b3 x: }
  366.   }
    6 O( e; I7 r- E8 o
  367. }  
      f& H6 ]( I' d4 ~2 E
  368.   ' F6 @5 v/ c9 w9 D" u) E7 K
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    # B& p! _8 ^; w% H/ M
  370. {
    : f. p* C7 `1 @5 d# l
  371.   int c;
    ) G9 s2 x) L( p0 q2 W2 i' H9 S
  372.   LPUPDATEFILE file1,file2;
    2 r7 N6 ]$ _  ?, u
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    : j9 }% x& \& g5 p6 k" v- a
  374.   std::list<CString>::iterator l;6 F+ T* q* M+ c( d7 V
  375. . y* W) ]; i+ f) v
  376.   UpdateLocal.clear();! ]; o- W0 w1 A) _. n" w/ f
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    % ]. F: g8 A4 V, Q9 p
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);0 }, @* ]* h/ m4 x9 t4 E# T& N; x0 r7 R
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);& Y( [) J. u! @8 D- q) s
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 g; B; j/ V7 @) F2 v
  381.   if(UpdateFile3.size())
    * g0 v* K+ q7 W4 R; |0 Y
  382.   {$ w' Y$ `* }+ o
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)7 e  T0 C7 ^. q( M" ^( o  k0 m5 a0 \
  384.     {
    + n& {, l* \8 t3 T
  385.       file2=(LPUPDATEFILE)(*i).second;1 D3 u7 W9 o8 A% e
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), Z9 I' \7 Q  Y) H" E" j7 X0 l
  387.       {
    2 {( }7 q7 U* B
  388.         file1=(LPUPDATEFILE)(*p).second;
    1 L5 O" Q+ X) N& d. p5 d1 Z$ z
  389.         file1->vers=file2->vers;# Y. @7 L; g1 w+ H+ [
  390.       }/ m, f$ s( I6 R1 N' H$ k. m/ l
  391.       else
    , Z% s5 r$ l, D. v" `
  392.       {
    * U# U0 H) `1 U/ ]$ U2 q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; P  O% b, z# W1 M8 W% |
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    * W. n2 q: b! d2 P* ]% `0 S8 D3 C
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    1 j' o) {/ @6 ?) i# R% M2 C5 e! G
  396.       }4 L; k" w" l2 x' z* f
  397.     }% Y( D0 T+ \* m. I% ^) K
  398.   }
    3 |! z9 l: v! P9 }" ]" K( X$ |/ v
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) W/ u3 h5 {, w. X
  400.   {
    ; S7 G1 W. d& l$ a
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    $ ~9 f* U: i6 k7 j# s
  402.     {
    - T) W5 |0 H# Y, y) g
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 b  N6 g# q' ^& r) z. @: t0 h0 L
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( [; x: F( j8 ]% b! N2 R
  405.       {
    9 E( [& W8 l4 R1 @9 I/ G/ G6 Z2 a
  406.         file1=(LPUPDATEFILE)(*p).second;( Y. Q2 o. w" ^8 S
  407.         if(file1->vers!=file2->vers)
    # ^( I: t- a4 J" Y5 w
  408.         {1 N6 v4 M& `. M. w
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 ^, r& p; A# ]6 S3 e5 I; }5 |
  410.           c++;* f/ W$ A+ ?2 W6 L
  411.         }
    ; D8 ?1 T; b; F/ n
  412.       }
    6 [' c- J# @7 W! O" |1 J$ a
  413.       else
    2 i4 {  y. _. j/ P! o, S
  414.       {3 n8 j; p; b8 D7 ]" C
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 J3 f# B5 L1 f/ N% D0 w
  416.         c++;  Z* `/ i: t7 {! o! Y* D, i! P5 n9 Y
  417.       }6 h, M6 k6 ~; L6 [8 `, F5 s! t  G
  418.     }
    8 ]. x/ h& R. Z4 x
  419.   }
    5 y. w6 w$ H0 J: y* m, w# p
  420.   unlink(".\\DownLoad\\update.txt");
    . a% U+ y& ~! l  ~6 e
  421.   if(UpdateLocal.size()) return TRUE;( t; r2 m, v! A3 z9 B4 H
  422.   else                   return FALSE;( D) R: i8 ~1 r
  423. }
    1 v5 Z& V- Q- @$ u/ `6 l' h9 K

  424. : x2 K* L/ X- G. C
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      j* Y& g0 U  ?5 C( V1 t2 E
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"7 P6 `1 H: \3 A+ j: y/ k5 S$ k
  427. , N( N% K3 I. _" ?. R+ t! u$ {& Q- T
  428. 7 [1 n7 m3 ~5 W# t

  429.   c/ g& ?/ Y& v# `6 b; o' X
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)& i2 e+ G/ e, j: ?# y1 k: t0 r. \
  431. {
    1 D$ z/ _5 e: D
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    , g, W* N) H" }. F! o2 T
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # u* D$ w. a8 e! x% c. A2 k/ e4 |
  434.   {
    0 v& ?8 T2 N7 o5 u- ^
  435.     char szLanguage[50];3 u) e, N8 Q9 k$ @
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ v, n: j! \; _2 h! O( T7 a% `- ]
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 _* D# y3 B$ U; w$ c: N
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 i& E6 ~) c/ B! ^! _+ i
  439.     else                                   m_iLanguage=ENGLISH;
    . e' [) s8 E0 {' o$ M$ k" q
  440.     char szRegister[100];
    ' o' X2 m- ^  g4 |7 b0 t; o+ v
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    0 P! C8 h" N! q. \' z7 e1 E& z
  442.     strRegsName=szRegister;1 J: f0 n  J# P. [
  443.     char szPatchURL[100];
    2 X. l! @7 ~# ?
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 q! K! K! X* ^, }# }$ `
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 E% z" O1 G' R
  446.   }
    9 l$ B4 \" k* F
  447.   else2 U, [: o1 N9 V0 p) O- D
  448.   {
    * v* R, ~# q8 |  h8 A! o
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 `2 d# W% g# h/ |
  450.     strRegsName=DEFAULT_REG_URL;
    , Q* T! D/ f) p/ w
  451.   }: {: X- V* u0 A" e
  452.   if(GetFileAttributes("hosts.ini")!=-1)4 g7 i' T2 h% F3 H( |
  453.   {. T1 N0 u8 S1 w1 v
  454.     char szIP[50];
    . r2 R& a: b" n/ M1 T  i* w% i
  455.     char szDIR[300];
    * a5 ~$ x9 g7 U* n# W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 N  O7 A8 ?0 r0 `" m+ f2 v
  457.     {) ~2 J7 F4 }7 _6 s" p. M8 M
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");+ t* ^4 S  D. P) f% [+ q" z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    $ G  K& h0 O5 j/ i  Q; s3 K- e
  460.       strHostName=szIP;1 x7 H; ~( u% k( z0 a! f% s
  461.       strHostPath.Format("/%s",szDIR);- P3 \. ^( ^* V% s5 M. `+ Q7 p5 R% I7 T
  462.     }1 P! i/ @& {; t5 `+ M
  463.     else, s: E( @) a- ^* c; `$ O2 p; _1 w
  464.     {) ~. K0 f: `, W, l; p/ i) D
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 r3 _0 ]) D" }7 b
  466.       {8 X1 A; R" ]6 q* C" p; @0 z- i
  467.         char szLanguage[50];# x; h# m# Q. ]/ b2 \$ v6 [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 E  m  b5 q0 ^" \  }4 G+ p
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. `6 c: g6 p1 \9 V, b1 E
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 l; `  f, c/ Z- V
  471.         else                                   m_iLanguage=ENGLISH;
    2 a  h) G9 m9 D4 b9 U
  472.         char szRegister[100];
    $ e1 Y7 l) G6 t7 ~: s' A7 L
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% k& g- N8 z, i
  474.         strRegsName=szRegister;
    ' l: N2 V/ x$ {0 M" x
  475.         char szPatchURL[100];0 D- R9 Q; e6 Y( K9 p* M
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# }5 J1 d( }8 J) ~, k9 j
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 a0 Q; t6 t. H
  478.       }
    3 R) A; a( V) G9 o0 Q) B6 F& V) Q
  479.       else
    , U  R4 U' ?2 }
  480.       {" k( }0 a0 i5 K' }1 m
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);, y' ~0 W/ u! W
  482.         strRegsName=DEFAULT_REG_URL;
    5 a& X' F- _" Q, k; r- N
  483.       }$ V, q2 L- o1 {% h1 p+ ]
  484.     }
    ( l5 l- w+ C1 W9 l' N
  485.   }  N# q0 Q: T% w' f: H  `2 p1 w7 @
  486.   return true;! t$ F6 o! M( @0 K
  487. }
    & ^9 @+ j( p& l& }- a/ Z) E: Z
  488. ( c$ a% s% v: \! D( U* G2 ?
  489. #include ".\ZLib\unzip.h"' R8 k; b3 P3 C# i# z2 [
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    # m0 M) N. Z' K: Q  M
  491. /////////////////////////////////////////////////////////////////////////////9 n+ a/ u0 z+ Q3 a" e
  492. // CRevAppApp initialization
    ' \/ T3 G! x, r8 }% g
  493. * b2 q+ ]. [, n6 p5 ?+ `( v4 n0 D1 Q
  494. BOOL CRevAppApp::InitInstance()
    7 z0 g. X, s+ r$ s: B
  495. {( y5 s+ Q" }2 `% [
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];, w$ c* f: Z, e4 X8 z1 ?
  497. 6 f9 ]( s+ g' I, ]
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    6 t- Q! s: X/ O6 S
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
      {! |2 o( y' [
  500.   {7 E, x" c  w+ ~3 B
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    9 g" P. d% N) o$ y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);$ C( v" t( N0 o; n$ j6 X
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    5 w& }, ?' _5 g- L3 t$ Y
  504.     {8 z' i: }3 b0 h* E: A/ z$ s
  505.       strcpy(szPath,szPathTarget);" {* ?( T2 o* i: h( B
  506.       SetCurrentDirectory(szPath);5 k+ I1 d4 m' b: P
  507.     }
    6 Z3 ?; _% M3 n6 _# }4 S
  508.   }- a* u+ n6 g( F1 B) l! {/ E
  509. #ifdef _DEBUG- L/ o7 F5 b1 n( @; e6 b! w8 Y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' U* G' v8 ~& A- W( I% f
  511. #else% {3 H7 g6 ^: \/ T
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; D! x4 \2 A% E
  513. #endif
    / F# I# g8 `( N9 d  ?% p9 m' }3 N, g7 R
  514.   {
    # M3 A: {. W9 g0 n  G2 q/ q
  515.     char tempFileName[MAX_PATH];
    * f8 A- h) O5 o1 H$ @. p
  516.     strcpy(tempFileName,szPathSource);  K1 S4 b( N1 V+ f+ K
  517.     tempFileName[strlen(szPathSource)-12]=0;6 L5 p  ]$ v- K
  518.     strcat(tempFileName,"\\$CSUpdate.exe");8 F; t* ]0 b4 {2 j$ V0 K  S6 x
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    # j5 P4 ~7 u  I  ^  _! N
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);$ b; E9 S+ p. G9 M6 V/ S
  521.     return TRUE;
    / _+ h9 F2 x, Y
  522.   }
    * J0 Q& q, M. w. D5 V: {
  523.   // Nuke 0118: Delete run.exe
    ! Z# H* a, \* _& o2 Q' E  e
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    0 x* ^# a5 i3 M- {/ ]1 {2 @) u- w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    6 D" T0 |9 @* f% Q2 n  a
  526.   if(!ReadCfgFile("Config.ini"))
    , ^5 F' b$ \1 o
  527.   {
    0 |2 b) H. v/ F4 i  R% e2 ~1 y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 Z& U/ P7 D2 n) M5 i" s# W
  529.     return TRUE;
    4 j* T0 Q. r) T& I7 {0 S3 E
  530.   }
    / n# c/ C) _0 u$ G
  531.   HANDLE mutex;
    * t3 Z1 l$ K$ s+ b
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 ?; k3 @$ w. K9 |0 v  M3 U
  533.   {
    + u! l7 J5 g4 h8 B4 v* U
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)+ y5 m0 C( P  h' n' p5 c
  535.     {
    ( I, ^: M! c: y& r; T
  536.       CloseHandle(mutex);" ^' V. c/ G. I2 |  J/ R, ], `
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ! o% F& {% Z+ b7 K* v
  538.       return TRUE;
    6 @% {6 F" v0 X" I7 i, ~
  539.     }
    - Z' a5 c5 V( d
  540.   }  
    9 A7 M0 V& E  R9 S' x5 T9 B
  541.   CloseHandle(mutex);7 g) L7 K6 ?1 X3 l
  542. ; A/ X; D2 Z* U/ S# ^
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ) |; ?3 P9 C( {

  544. ! S" t$ t3 s$ d2 t' E
  545.         AfxEnableControlContainer();
    $ ~/ I1 `5 @/ L1 C/ n0 T
  546. / S! w  k& u: O) P- N, R
  547.   bCanUpdate=FALSE;
    ! N: v. F; I- G4 c
  548.   dwStartUpSteps=1;% p: A9 k( O* @" e: g+ J
  549.   dwProgramState=AP_NOTHING;
    . e8 n! H& ], x7 s! J
  550. 9 u+ O* I  I8 g
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);( A# X+ W; T, t3 n' D' I% P
  552. ' r0 o+ S) C* z$ L, z8 G) ^6 D
  553.         // Standard initialization2 M# `/ d, X) q) P7 M3 d
  554.         // If you are not using these features and wish to reduce the size3 s1 a! W. R3 l) F
  555.         //  of your final executable, you should remove from the following' ]5 Y7 S' H2 L/ A5 O
  556.         //  the specific initialization routines you do not need.
    ( P4 w* R  U! }+ u
  557. " Y( T( t9 z& e5 {) h
  558. #ifdef _AFXDLL
    $ U( L& M  Q! ~: ?, }
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL* A7 P; a3 @- L/ n) u# f, f
  560. #else
    7 D: }! y2 {- G- V% P* E
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    # j) n" h) E" I4 B
  562. #endif
    : y/ o- i& g, d- P

  563. 7 i9 q4 M. ~2 \
  564.   dlg=new CRevAppDlg;
    7 f# _( ?, k. l% t4 I, M+ g
  565.   dlg->Create(IDD_REVAPP_DIALOG);8 f- W' `5 ?! a! y' [  X' r
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) v  q* p( T) V9 I
  567.   m_pMainWnd=dlg;
    1 R- e3 S% z2 Z- Z2 d

  568. 4 [# b7 o4 _! W! A, T& N3 x. C, g
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    : H  k5 ^! |! J& x; E. d
  570. 5 Z% p) ]! U4 N+ ~5 [0 c
  571. //  GdiplusStartupInput gdiplusStartupInput;
    " b- V# l$ ~/ Y5 ]/ ?- a
  572. //  ULONG_PTR gdiplusToken;
    5 F+ h" `: ]! F4 G1 }" Y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);: e/ ~* w* k' ^1 I3 j7 H. c

  574. % X1 y1 d* A/ R$ T
  575. //        CRevAppDlg dlg;' g' A7 v6 Y, A9 o; \1 W
  576. //        int nResponse = dlg.DoModal();2 _9 h' z: H5 n8 r) i: {3 y
  577. //        if (nResponse == IDOK)
    ) `! P2 _7 s; J/ A
  578. //        {! F9 @$ E7 D5 X
  579. //                // TODO: Place code here to handle when the dialog is9 Q; \! [( r4 T/ d
  580. //                //  dismissed with OK, K0 [" h) k& @; ^% D7 |
  581. //        }6 ~2 S( a* |7 q, Z
  582. //        else if (nResponse == IDCANCEL)2 M& e" j( S) l: P1 v
  583. //        {
    ! e( _, O9 N( ]
  584. //                // TODO: Place code here to handle when the dialog is4 ]: M1 o: B$ t
  585. //                //  dismissed with Cancel( d- j6 ~( A' x1 \
  586. //        }+ V/ p# P. M9 `
  587. 3 J5 M6 p% w/ _$ O8 \! ~
  588.         // Since the dialog has been closed, return FALSE so that we exit the, F8 d/ l8 Z9 `* T# U
  589.         //  application, rather than start the application's message pump.
    7 h" c# e" W# X) C/ _8 k
  590.         return TRUE;
    4 e4 z2 V9 ?4 g$ g9 O  b$ y) j
  591. }
    9 R4 V; D2 J% p/ Z1 D

  592. 9 P) ]  n$ s" B' y7 X0 D; ^- U$ {
  593. char *CRevAppApp::strtok3(char *pSource,char *token)! Q2 h8 Q5 @; b! F( L
  594. {/ T6 X, @3 z8 M! e
  595.   int i;  W% W- U$ x" {2 R) _& X5 b
  596.   char *szRet;& d6 X: I$ j# [# f
  597. 0 H6 ~/ U' h2 M3 a1 P
  598.   if(pSource) { itoken=0; sztoken=pSource; }* \2 e$ Y% C9 X) A3 Y9 I7 x
  599.   if(sztoken)
    $ p5 F, S/ X) H* h- k. Z2 X, E
  600.   {
    : {6 @; Y" T. O4 l' D
  601.     szRet=&sztoken[itoken];* n8 z7 l' n; {1 j+ v8 N1 q6 o- ]
  602.     while(sztoken[itoken])
    ( y* ~, c7 {, v
  603.     {
    - {& k: Y% Z( w6 z6 C
  604.       for(i=0;i<(int)strlen(token);i++)
    6 H, g# |6 ?; S" N- |
  605.       {
    ' y. r2 I% Z1 Y" S+ D  ~
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    / v% j8 F& R8 ]' ^& F- @
  607.         {" P' B" V, p) B4 O1 G
  608.           sztoken[itoken++]=0;
    9 S, h5 v7 q4 a# k: j# k
  609.           sztoken[itoken++]=0;
    , X- Y4 d: @* p3 A9 Y
  610.           return szRet;4 L* x1 l9 t1 `( |! o
  611.         }
    6 u1 p: f0 l: ~9 _4 w' K3 H4 r
  612.       }
    5 T3 G& ]- y0 T; K! @
  613.       itoken++;3 [. p9 u; G8 j/ \/ Q7 |/ e+ f: M
  614.     }; K2 p" @  D! H
  615.   }6 l5 I& q4 s3 p0 z+ i/ p
  616.   return NULL;  Q# _( J5 J" k
  617. }
    - P: ?; s0 b2 Y4 U! h1 t+ K

  618. ! T. W7 X$ R/ {
  619. void ProcessProc(long Total,long Current)
    % r2 D& V" b' Z: A6 Z6 `
  620. {- o1 [, i/ P: J, F/ d1 e9 e% E
  621.         MSG msg;, v0 U6 N3 L; J0 {( _+ N
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    2 _6 i  O/ f4 ~
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));: I) D" S* N. J" k
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))& u9 @1 v/ |: V6 f0 F
  625.         {
    ' g! y2 C' b! x, J; S
  626.                 if(!GetMessage(&msg,NULL,0,0))0 Q8 N: P: T! @9 g- o$ f$ Z
  627.                 {" q  \/ @# N) e' e* D/ ?* E: P) ]
  628.                         return;
    - q! Z. {) w+ E* O' ~
  629.                 }' C  f) ?( |0 k3 ?: V$ _# _4 M
  630.                 TranslateMessage(&msg);2 {7 |5 U; W; @& N
  631.                 DispatchMessage(&msg);& O2 u5 c8 Q2 H0 @2 h0 l: m' \
  632.         }        7 u; N- h" P& b6 Y; Z% N5 t
  633. }
    ! |3 [7 v2 M6 C! O

  634. & m2 [: i5 K* [$ w% K* ]9 N
  635. BOOL bFirstChar=TRUE;2 T) j6 `5 d- C0 y7 }

  636. 1 b! a( Z; d4 ]. m
  637. BOOL CRevAppApp::OnIdle(LONG lCount)- }2 S: y1 u: H9 m
  638. {
    # h7 K2 P$ I; j
  639.         // TODO: Add your specialized code here and/or call the base class2 H; m8 u& x* c
  640.   switch(dwProgramState)# G" ~: K- _/ ]' y) l
  641.   {% g* ^7 b: s, }. v4 @
  642.   case AP_NOTHING:
    " `, O! w& u$ U& ^1 Z! m3 r. {
  643.     switch(dwStartUpSteps)9 R3 O% e0 g/ u
  644.     {
    * V9 Q% T7 M: V  `8 F
  645.     case 1:3 S+ o/ L$ q6 m( Y
  646.       {
    7 `1 T5 q3 f2 B6 T) R
  647.         int i;) N$ x9 s4 C, @4 N8 ]) |
  648.         CDC *pCDC=dlg->GetDC();- L1 P9 R5 A! F# d5 ]& R/ D( m
  649.         HDC hdcwnd=pCDC->m_hDC;
      \+ A4 c0 p8 q0 c  L
  650. //        Graphics graphics(hdcwnd);! p( Q$ Q% C$ P& U/ Y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 T3 ]) u# w3 Q+ I5 p' ?/ Q7 l# F/ K
  652. //        INT iWidth=bitmap.GetWidth();
      \7 L; j8 ~( O) |) j
  653. //        INT iHeight=bitmap.GetHeight();
    2 E$ h: Y) }1 L
  654. //        Color color,colorTemp;
    0 P. a: a/ n) R: ?! P/ o; P9 s/ a( h" p; j
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    + _. C. d# g  t* B, m6 `3 D
  656. //        {
    0 O/ n3 B$ @5 D; [5 f# J/ B/ W4 d
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    , x( W* `9 W% |. `
  658. //          {
      D( Y3 D1 o. x' w( D
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: T( M; m6 X0 Z% x" [5 A- @$ c
  660. //            colorTemp.SetValue(color.MakeARGB(; }6 E, D# @2 Q
  661. //              (BYTE)(255*iColumn/iWidth),
    . l% P% Y6 P3 J
  662. //              color.GetRed(),. g! |* l; b; o1 c
  663. //              color.GetGreen(),! r7 R( m2 v: w1 y5 I
  664. //              color.GetBlue()));- h/ }  \( ?4 E# G: d% ^/ h: P
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);3 {' w) {9 N9 Q( ]& A, a
  666. //          }
    * r9 H2 O$ e7 y1 E) q
  667. //        }
    0 h' U5 p; z( G* v$ B
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);& ~- _5 S  @5 Y8 h" J( U
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& ^8 G, m8 a6 l  D- i3 U( Z7 U
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");+ q9 @/ b2 u2 Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    6 ^2 t6 H; m, j' E  \/ c1 {4 c
  672.         for(i=0;i<240;i+=8)- J- f' B' p7 `" _+ r3 g
  673.         {
    & \2 N2 @! J; g" X: H. ^- p  _
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      n/ J! w5 ~' L2 l3 O$ s
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);' o- n+ ^: z' q- q
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ w3 [* E& B# ~3 b2 @7 R" E
  677.           Sleep(33);
    ; F5 y' D, U. x+ Z7 K$ d: n
  678.         }
    & ~& G% k" F& n; _
  679.         Sleep(1000);
    . k  l' d# p- K
  680.         for(i=240;i>0;i-=8)
    # ~( z3 T/ I  ]  D7 _0 i5 I1 L0 p
  681.         {
    / N9 r  M1 c- l/ @% b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " ^. `( J$ t2 m0 }# n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, w, i1 r" ~7 p0 d
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 Q2 l/ n5 h$ m9 T  C9 `' s! t
  685.           Sleep(33);% v" }8 _# [( @+ K/ ]  `
  686.         }
    $ @  `/ S+ o, Y* T
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);& Q$ M/ B! U: I3 f
  688.         dlg->ReleaseDC(pCDC);5 y0 L# l! V6 \5 A9 U' ^
  689.         DeleteDC(hdctar);& I: A" p' S( }; h
  690.         DeleteDC(hdcsrc);' d9 v' w! A( j8 ^* ~- H
  691.         DeleteDC(hdcorg);& S# M- q0 I( j8 Y: E2 ^; _0 Y
  692.       }
    ' n( B3 _7 A9 o' t- [0 G/ L' Y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);  T* [/ i& W) Y( e( E5 T- P
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
      ?- R- }" s* [/ u
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    - X; E* b" p: p9 S. {
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");9 g! a$ T" U; h, |0 ^( [) s
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 M( F2 y* k$ s( Y
  698.       if(!Dn.Connected())
    . q+ x& S& Z; [: f% g, Z! d
  699.       {
    ! @; ?4 o0 b! t& Q
  700.         dwTotalFiles=1;6 `2 @) e0 J9 T, ^0 O
  701.         dwDownLoaded=0;
    0 |/ U, g5 C- p  U( V
  702.         bSilentStep=TRUE;
    . Y6 Y0 O/ @1 H& d. Q
  703.         bCompressed=FALSE;
    , c8 O+ T5 w2 ]9 C9 L! a( U8 e! X
  704.         strExtLocal.Empty();
    2 f6 v0 d# k* R6 P9 L+ [
  705.         strFullName="readme.txt";
    ) ~* S. p: v7 C& F+ y
  706.         dwProgramState=AP_CONNECT;
    ; W& G, w7 q. J  G$ F
  707.       }
    1 c# E# |3 J0 k
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    , F6 B5 |" _# Y3 A8 u
  709.       dwStartUpSteps=2;  E& l' o$ D1 Z/ N) `5 r
  710.       break;
    5 U. ?0 |0 k, K2 `. F
  711.     case 2:
    ; _- G6 q. E$ ?* o3 ^
  712.       {
    ) N2 U+ O" t+ o  K
  713.         int iEOF;
    3 X3 T/ \8 t8 J1 G: D* O
  714.         FILE *fp;2 l% D% [$ N( n, n
  715.         char szString[512];# }: ?+ h. c6 k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");8 {$ ^; z: ~3 p
  717.         if(fp)2 c4 {5 _2 G3 `9 e  Y/ b+ Q& ?
  718.         {# T* n4 r6 s$ Z
  719.           do
      c! D$ q& @' k( V( _  z9 G% g
  720.           {
    8 C! \% v( ?% }4 @
  721.             iEOF=fscanf(fp,"%s",szString);
    . W4 Z1 u4 ?9 A2 e0 C7 `
  722.             if(strlen(szString))
    5 \; D1 G; [" _( [) _# F/ \$ N4 O
  723.             {4 k9 |, v. ~+ p( i0 S
  724.               if(bFirstChar)
    , Y7 s4 k( I3 }# W
  725.               {
    ' ]: l" f: x4 f0 v) _# Q/ @
  726.                 bFirstChar=FALSE;8 L/ }; v+ L; q! O- t. N, ^
  727.                 bConnectIsBig5=FALSE;
    * b) ?1 C6 l6 m' o+ A
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; C; l1 y% C# |& ]: N9 ?
  729.               }+ K  m9 p7 I- g1 V6 s4 W
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));5 L3 x) g, R( e
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));) X8 Y+ E3 _+ j4 F( ]) r
  732.               dlg->m_ListText.AddString(szString);
    ! f5 v1 ~( e# b- B! M
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / {% A. U% r- q1 B
  734.               *szString=0;- b& U3 Q. G$ c
  735.             }
    + P! L$ ?8 @2 b9 K2 @
  736.           } while(iEOF!=EOF);5 t' C* W  f* a9 L% {
  737.           fclose(fp);' K' d6 g/ F1 n. j( M7 b4 e
  738.           unlink(".\\DownLoad\\readme.txt");9 i, y3 a  `7 \0 Q' Y5 f
  739.           dwStartUpSteps=3;
    : T8 B0 ~) X# ^/ Y' t& z% D
  740.         }( C% r, P* r$ Q  \6 b
  741.       }$ L9 y4 b/ K' L/ e4 a
  742.       break;; p" w7 b# }# [' j. X6 G4 @
  743.     case 3:" i$ u  S/ \7 }
  744.       if(!Dn.Connected())
    . C! ?2 L" V0 r, ]- y! t. ?
  745.       {
    % D6 ^# p3 ^. {. U8 M3 a
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);- J% i, C" v' B; j9 |8 @
  747.         dwTotalFiles=1;
    8 `0 Z! r% T4 |5 |. B
  748.         dwDownLoaded=0;9 ~4 ?2 V$ K# T. v$ {. h
  749.         bSilentStep=TRUE;
    / H( X) v$ b! b
  750.         bCompressed=FALSE;
    ( ^0 g# W: j* m, l5 [
  751.         strExtLocal.Empty();; F8 |& G: T7 u1 X3 u. o; Y. i
  752.         strFullName="checkversion.txt";- Y7 l& a+ u4 b8 N9 y0 @8 a
  753.         dwProgramState=AP_CONNECT;
    ! Y. I* D7 Y: A0 u. k$ v, x
  754.       }
    2 h6 ~0 N4 \, [: R7 A5 l0 z
  755.       dwStartUpSteps=4;( X/ e, c+ H9 e0 B2 a- [8 ~
  756.       break;* g6 E5 y( t- ^; _4 I2 T
  757.     case 4:0 D  Q- o  ^1 L: Y4 _4 i1 g8 P& S6 D
  758.       {
    - w! j- _) l. V/ w5 M7 G' L& q
  759.         FILE *fp;4 i2 s6 d% ]2 g7 p: |- [8 R# |! d5 T
  760.         char szString1[128];
    # o7 O. f$ w" ~3 @
  761.         char szString2[128];3 C7 W; |8 ~0 V: A
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");3 E/ ^5 I0 J" M5 Y  n
  763.         if(fp)
    3 j/ P: A; C0 \" w. F
  764.         {! {3 |1 D+ t" R* @' J
  765.           fscanf(fp,"%s",szString1);
    2 Q( C0 y6 L+ V
  766.           fclose(fp);
    ( S9 o5 Q% V; \
  767.           fCheckVersion=atof(szString1);
    * e( n+ \! Q5 l. v& e
  768.           fp=fopen(".\\checkversion.dat","r");
    0 u+ x" e/ E8 i' \+ F5 A5 P
  769.           if(fp)
    4 S, Y' u( A$ Z: F
  770.           {
    ! {* h2 u8 r6 A, {2 h/ a% z2 P
  771.             fscanf(fp,"%s",szString2);3 ]. b  \( h0 X- W0 M, f
  772.             fclose(fp);
    " e4 B9 z+ {1 T* u
  773.             if(atof(szString1)!=atof(szString2))
    8 O9 J4 s# L, c. @& G) N5 H) H
  774.             {5 S* x8 c% v% B, l' }# q
  775.               if(!Dn.Connected())
    6 l3 x- b+ @( j+ V
  776.               {
      J# W9 ]. U3 X- H* X
  777.                 bFirstUpdate=TRUE;' i7 Q( X' D( |
  778.                 dwTotalFiles=1;
    , M* v4 \  _" }) d
  779.                 dwDownLoaded=0;8 y/ t$ X  C0 h$ s) t7 N5 e
  780.                 bSilentStep=FALSE;
    " O" m, n5 ?2 t, r' {2 e; p0 ~
  781.                 bCompressed=TRUE;
    % w* h& ^- W2 k0 {- J
  782.                 strExtLocal=".\\DownLoad\";& K$ |  K2 l; B3 k8 g& E4 D
  783.                 strFullName="update.txt";
    9 j3 y  r, N, k+ @4 b) _4 Q
  784.                 dwProgramState=AP_CONNECT;
    ( E$ M! m8 E, b+ @5 W2 h5 K
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ A- H0 T* F! i+ a$ {
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. W. t- v' w+ v* n
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , t- L" k! r2 n6 V$ X; r
  788. ; \' x  M! ~1 o% F6 ?4 y( v8 v
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) u. A. X7 S1 S; G9 Y( C& ]
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    2 e, g7 q6 q# O3 T' T
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / g$ U  o2 _+ k3 X! n
  792.                 {
    3 e6 R; R8 t1 v) M
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    . h# Z' a( l; u' u
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" d. K% _8 L) y# A2 g2 ~$ Z4 p
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ) t3 F  C0 g5 l8 Z
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& t# i; S1 S. I' b2 G! F
  797. 3 C' u# |: R' r' ?' r  D. O
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# _3 W8 M8 K( _5 P# O- F" b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");( ~, O! B' T6 R1 v  f+ m
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    * t/ h- m, c9 d
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 ?6 a$ k& ~* B
  802.                 }
    ( L3 \, B' L8 B/ U" p; f: B( v5 Q
  803.                 dwStartUpSteps=5;$ i7 W  ~) ]: d, V
  804.               }6 Q( I: k+ v4 K+ O0 E% c7 H
  805.             }( x* A2 \5 A. {
  806.             else* J- C* [+ S1 B3 K$ `. U2 K
  807.             {
    1 r* b4 w$ c6 F/ x% W
  808.               unlink(".\\DownLoad\\checkversion.txt");
    0 i; V2 s; @# q2 g: y, r5 _. B
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : E4 V; i* z) C8 K2 s: D' I- L
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 Y4 r1 P, S/ e5 u4 p6 t
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");' H+ o/ G7 Y( }: u& q3 H$ C

  812. % i1 m: N6 Q6 g  g" }- o5 u. W
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  F0 I7 F3 y6 h3 Z& h  p5 P
  814.               dwStartUpSteps=99;- `+ a% y1 S! m
  815.               bFinishUpdated=TRUE;. }9 ?0 {% o) F0 S, t8 A7 N( v
  816.               bCanUpdate=TRUE;
    ) W" m8 m. R' y: J7 x
  817.             }
    " \! V- I8 F5 O3 @
  818.           }
    # ~  N: u% [, x% f
  819.           else% _4 {" X( p) N
  820.           {
    ' p& Y/ N/ L/ c0 Q5 j1 G- j
  821.             if(!Dn.Connected())7 _- T: P  o2 Y. U/ p+ @
  822.             {
    1 p5 z) P: r$ o1 L# r  M2 s
  823.               bFirstUpdate=TRUE;
    3 d- e! b2 Q: \3 W
  824.               dwTotalFiles=1;, F! l; g* U! b3 Q2 r
  825.               dwDownLoaded=0;( r) D9 G+ ?* C3 N+ ]
  826.               bSilentStep=FALSE;, X5 b0 C% D7 @. d
  827.               bCompressed=TRUE;) S" v9 M9 W* R1 |0 Z$ A4 h7 a
  828.               strExtLocal=".\\DownLoad\";
    # c" j. E2 C4 h* v
  829.               strFullName="update.txt";9 Q4 |5 ?9 O8 c- a& G
  830.               dwProgramState=AP_CONNECT;
    ( I' j# V6 C8 H- Q! J
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    0 e/ Q5 C. k9 h1 @5 e
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");! m. Q$ K4 t1 N3 K. D
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
      x& n' z- G1 J% I: t' B* y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: _& X4 [1 k2 Z* N: \
  835.               unlink(".\\DownLoad\\checkversion.txt");! t8 Q5 B5 A3 @4 e; B0 y6 M' i
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . j. L; G! Y9 ?2 f, I  H
  837.               {
    $ q& V0 E& K# a( d
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    - q% ?2 D1 q, H, w. j5 {  P0 F
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");! v7 F6 p* c. T: f. w) |2 Q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");1 J1 u) f5 S" N$ o9 X* Z: Z1 k
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# v, L( s% u* d  r/ ?) x
  842.                
    4 @- q4 T! x6 u/ }& h( u
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# ~9 K- e2 ]* W
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    5 W/ I# y9 v$ z# T! F4 E& j
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 \% y9 v4 C' [" F3 g! }
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 q1 t. l3 s* e* M0 W
  847.               }
    . c8 J2 S( x' W2 x6 A" F
  848.               dwStartUpSteps=5;+ C/ N6 R0 a- L! G& {( ^( H
  849.             }
    1 K6 w7 G6 z* H2 d6 B# S: o* a% q5 m
  850.           }
    ; R8 P: d- |7 w0 b( @# k( C5 o
  851.         }
    3 Q) @/ H6 ]7 y" N2 L. {
  852.         else/ X7 C, i3 b: X) ^+ F0 Y
  853.         {
    . U5 p4 a7 {' R
  854.           dwStartUpSteps=3;
    & R4 |+ m8 P; H0 a: J8 Y) J
  855.         }
    & s1 ]+ N; `! g5 \
  856.       }9 H+ T5 o$ v& f0 u" i$ U6 Z3 i" D
  857.       break;
    6 r) d5 Q$ ]& E- E6 R5 Z
  858.     case 5:
    " N( a9 m: }1 d# i6 f! i- J) Y1 J
  859.       {! ]& h: b- A( m
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)) @! }$ s! j6 l
  861.         {8 ?5 ?4 S' P) p& o
  862.           int opt_overwrite=1;. ~  ~6 |5 K) O
  863.           int opt_do_extract_withoutpath=0;
    8 E! u+ h& y* I  P9 x; ?8 q; E, D
  864.           unzFile uf=NULL;+ G0 {2 j: x8 E; s( j  r4 D

  865. : X; Z- y" G1 K0 f5 T- h
  866.           uf=unzOpen("Wsa.zip");
    , R* r9 q/ s* m
  867.           if(uf)
    , D7 j) J* S: n7 O- c
  868.           {& I4 i, Q3 I& l- W" B
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 ], p: J1 u# Z5 \2 y* I- B) K
  870.             unzClose(uf);
    * Y- Y& ~, D( Y( T
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* S3 O9 r% o6 N( V' e2 q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");9 E. |/ K7 a$ ]  ~
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");* x+ e: l" U# h
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ Y) B5 T8 R0 @: `8 M' T* b1 G9 o' C
  875.           }
    # a$ M+ a% B6 n2 g3 E* N) N
  876.           DeleteFile("Wsa.zip" );
    6 c2 w0 s' p0 G! f/ a% a* K
  877.         }
    & t, J; c0 J2 b: G9 j

  878. ' R. U3 h. v6 S
  879.         if(CheckLocalVersion())
    ! g8 K8 g+ }  \2 y
  880.         {& O5 ^/ s+ a; R. W2 X
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");7 P- o, x( A) d% n
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");% P0 j5 B! G+ w: N; C
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    0 J1 \' w8 O. n/ V7 Z
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ g6 |0 u, o2 `& c) l
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);) a" A: a; g: }0 Y
  886.           dwStartUpSteps=99;
    2 v$ x. }1 Q  k8 b! u% ^9 A, a2 r* o
  887.         }4 ?9 W3 N* b9 p0 B
  888.         else2 w9 g& g: w9 b0 `1 I
  889.         {
    # u3 ?' [) M* D6 L0 A
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ( p& |( d$ L% P
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) R; S) k; ^/ `' ^
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");% O9 i1 k2 O& a8 l* k( h2 M$ v% ?

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

4 \  z# ~) F: r  |0 i9 H% A- G$ ?" Z' t9 {; C4 F1 h% r

評分

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