找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
% |5 O$ K2 e4 D+ s( w
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 b# g* E" ^3 h# Y& Y0 V+ d
  2. //7 i& g* ]9 s4 p% W; G6 s, @

  3. . c% D" i# d9 i( Y) E5 A
  4. #include "stdafx.h"
    4 }9 X0 T3 r% P, C3 l8 ?
  5.   ]" w0 w% L& ?& h5 ~+ C; I' z8 T
  6. //#define UNICODE
    7 ]6 t0 R, E  l6 s8 b3 [/ _
  7. //#include <gdiplus.h>
    & ^0 K& q# A3 A. g; p
  8. //using namespace Gdiplus;
    , r3 {! j- K; @: K

  9. 9 I4 e: @6 F1 N, |! B# q
  10. #include "RevApp.h"
    " i; v& K. O. {6 H5 q
  11. #include "RevAppDlg.h"
    % V8 G# T7 Z- n' A- M# d
  12. / W6 s. H; E* Z
  13. #pragma warning(disable:4786)- p+ y7 o  A, ]# H7 f2 f+ a% x/ T
  14. #include <map>$ y" Q& c6 B* [1 H4 l
  15. #include <list>1 d( L( B& m1 x
  16. #include <direct.h>* M6 p- o+ |# t" l

  17. 0 |2 o' h; y- X9 @' P( l
  18. #ifdef _DEBUG
    $ `% z3 U. a" @! U
  19. #define new DEBUG_NEW
    & E  P& Z$ q4 W; M% J# k# O% r
  20. #undef THIS_FILE
    - z9 L2 S' Z4 E$ O( p
  21. static char THIS_FILE[] = __FILE__;
    / Q; Q9 D! A3 A1 C9 s
  22. #endif: u* ]8 a! X) k& S
  23. #include "SkinResDef.h") q/ S  D' P+ L6 Z) B! L
  24. #include "ChangeBG.h". U# c  G6 ^$ B/ f- U5 t/ [
  25. #include "AFXINET.H") |0 o/ o; ^3 f* C" r" q

  26. 8 l+ i3 Y+ H1 S9 Q3 Y) B) a
  27. #define TRADITIONAL_CHINESE 0% y0 B! v2 W: x+ ~: n5 \! s1 P2 y& l
  28. #define SIMPLIFY_CHINESE 1
    * X1 B1 h* a  }8 ~  P. S
  29. #define ENGLISH 2
    * Z" w' N5 ?3 c( n/ S
  30. int m_iLanguage = ENGLISH;
    $ [+ g7 Z5 d- ^( ^% J
  31. /////////////////////////////////////////////////////////////////////////////6 u7 T4 Q" x$ }: W7 ]7 q  G6 ?3 t8 ?
  32. // CRevAppApp) U1 S7 M3 a8 W/ L2 G( f

  33. + Q$ v: t! `. A- V: F9 }9 F  [9 f
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)( B5 D; m0 |- G3 i
  35.         //{{AFX_MSG_MAP(CRevAppApp)' |( D4 b6 F( m
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    & _" Q) u7 T. }* e) R
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ; K! Z2 ]' ~# |" R8 s
  38.         //}}AFX_MSG
    ) @! V9 \: s$ S3 E6 M4 p0 Q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    " M8 j  m/ L8 C7 v8 q
  40. END_MESSAGE_MAP(); ]3 U# U; |; D2 E

  41. 3 z- ]. R- u( V' d5 v* k
  42. /////////////////////////////////////////////////////////////////////////////
    2 C9 i( |5 D2 A4 O# s; A# m6 ^
  43. // CRevAppApp construction
    3 u  L7 S1 E# R/ l0 r
  44. ! x: ~7 O/ l, Q; a7 W* s3 E& k
  45. CRevAppApp::CRevAppApp()1 Z" K& I8 z# d: _3 \- \
  46. {
    . s+ V, D# e( h
  47.         // TODO: add construction code here,
    6 Q' [% Z4 C2 l' b: ]/ u& z
  48.         // Place all significant initialization in InitInstance
    ' X1 E. x5 e4 [6 I6 }+ m" n; A; T
  49.   bDisplayIsBig5=FALSE;
    & J7 T( j4 _& Q3 G2 U/ `2 t  z
  50.   bRestartUpdater=FALSE;. L% }# m" _& z% F1 c0 v% n% J
  51.   bFinishUpdated=FALSE;
    0 ?& b! V# I8 P$ E1 f5 v2 ]
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    4 j6 X6 }# `& K% [: v8 M
  53.   InitChangeDataBig52GBKS();
    . u+ K9 ~, V- c, s* N/ M
  54.   InitChangeDataGBKS2Big5();
    ' H8 d  Y$ C0 _: o# q8 n% }
  55.         //
    & P. E' o! f$ Q7 c/ P! ?
  56.         bClickRunExe = FALSE;$ F7 r1 K- {8 _8 a: v. d3 A
  57.         //( e* t9 y! m7 r( M
  58. }
    6 d7 p- L; J$ ^! q& [

  59. , I7 ]: q5 Q# b* k5 T: s' A
  60. CRevAppApp::~CRevAppApp()
    $ b% ^5 h9 e. K+ ~
  61. {
    $ z; C) f) _9 b* {6 e
  62.         // TODO: add construction code here,
    8 d0 m# B- A$ C8 I) G- w
  63.         // Place all significant initialization in InitInstance
    " c& E" E  D1 M, U3 E
  64.   EndChangeData();- V% f2 u9 s! ^: D5 |" M
  65. }
    2 v  w& ]4 L  b; t1 A
  66. 4 n$ ]* R1 ~: \3 {
  67. /////////////////////////////////////////////////////////////////////////////& l  H8 c; M& V4 U: ?* H
  68. // The one and only CRevAppApp object* b/ i. Q1 ?5 Z7 y8 o, S

  69. 4 b" x6 f3 Y7 a' X% |9 Y; D" y: p4 q# p
  70. CRevAppApp theApp;
    3 s! f6 n1 Q8 S. m3 k" Y

  71. 7 {& d' d+ y; E) X; p. O
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)+ K( J1 ]0 J& j  s3 X1 v9 F
  73. {" c# B" s; I" f. _% [) g9 {+ M
  74.   int iEOF=0;8 c  Y$ J) a5 O
  75.   char szTempName[MAX_PATH];
    # d$ C; o* h5 {) q- E! d
  76.   *szFileName=0;* x3 x( E1 g4 ]  F
  77.   iEOF=fscanf(fp,"%s",szTempName);
    0 Z$ ?- E. j5 B# [
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')! \, F, I/ F! |" ^7 Q0 h
  79.   {5 O0 ^5 f2 A3 C* l
  80.     strcpy(szFileName,&szTempName[1]);
    % m7 i' n1 q, o0 d, B8 j) }# Z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    + p5 Z0 r% ]/ W
  82.     {
    " J/ C- U. A1 U& E$ a! A
  83.       iEOF=fscanf(fp,"%s",szTempName);; ^( P8 q* C+ a" h+ s% L) K
  84.       strcat(szFileName," ");- ]/ r2 V: w5 D) T6 D; ^# o
  85.       strcat(szFileName,szTempName);2 j7 r7 |+ G, Y5 b. S! @2 D3 ]
  86.     }
    * }" W" o) O& M3 ]/ R- _% l
  87.     if(strlen(szFileName)>=1)8 f' |/ K& i: |4 K
  88.     {
    : t! s# s2 T; X; j% P3 j
  89.       szFileName[strlen(szFileName)-1]=0;
    1 O; d: j* D! \8 X0 |$ S1 _3 @& r
  90.     }
    0 b; @" l# x8 S* O2 }3 ]
  91.   }5 J& H; i0 ~6 ^
  92.   return szFileName;
    : Q) m8 K4 A" N. i3 B, e
  93. }! R1 G! ]) _  w; r
  94. % a7 \0 l# S( @% n$ q! N/ n' Q
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)1 ^6 i7 V* j$ p: s8 I
  96. {& \4 |/ |. Y9 }  c& J- `: C1 v: s
  97.   FILE *fp;
    ! B. n3 B, y6 Y( a, j- B
  98.   char *key=NULL;
    % c8 s8 y/ d, a6 ~- e7 G; F& _
  99.   char version[MAX_PATH];7 c- G# z9 \1 O7 |( V, c
  100.   LPUPDATEFILE file,olds;
    , e7 d4 w+ J/ l% P* E
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    - m0 {1 L0 I4 L
  102. ! e/ h5 `. h2 S% `8 ^
  103.   UpdateList.clear();
    0 S! F" D3 s3 [
  104.   UpdateFile.clear();5 h1 Q& |% I8 o+ d, j; l) C# e
  105.   if(GetFileAttributes(filename)==-1) return false;) v0 {* E# Y: n# Z9 J/ g; s
  106.   if(!(fp=fopen(filename,"r"))) return false;
    * {. L1 t6 ?. V' Y$ @+ ~
  107.   fscanf(fp,"%s",version);- o6 r; r+ H6 F  r, a  d: M- o
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }. l) F2 _( |- J
  109.   while(fscanf(fp,"%s",version)!=EOF)
    8 Z3 N/ h2 L' p) R0 v& W5 Y
  110.   {8 H' l) K4 C/ h( R# ]. F$ ]
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 I" R& Y5 O3 c7 L- I. M7 X, E" p
  112.     fscanf(fp,"%s",file->path);
    & ^( O) n5 K4 I2 U+ r) E
  113.     ReadFileNames(fp,file->file);
    7 C/ Q8 m' M7 M1 L1 a$ i' b1 h4 z
  114.     strcpy(file->full,".");
    2 ]% ]% \' Z) Q. \8 ?7 O0 L) s
  115.     strcat(file->full,file->path);
    9 A# g' d& b4 h' R0 D. z- v
  116.     strcat(file->full,file->file);. c8 P0 b# t3 g& T( Q# P7 Y' I* w4 u
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    , q& l" w" ]9 |% x3 U0 b; q8 a
  118.     {% P9 L$ @4 S6 R% k- S; F
  119.       file->vers=(float)atof(version);& ^3 A4 T9 P4 k: b" h
  120.       UpdateList.push_back(file->full);
    ; c6 ~! r: _, `( z6 L* i5 B* J
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    + z9 t0 E8 s* F4 u/ p8 t
  122.     }
    , P" H3 o# ~% ?
  123.     else8 n- I: l! t% ?
  124.     {
    6 G" N5 ^/ f8 L. C% @+ B9 j
  125.       olds=(*p).second;$ C# U% U: x' u. S
  126.       if(olds->vers<(float)atof(version))- ^$ N) [9 ^: ~) ~% Q9 G
  127.       {
    % M% b& o8 u# ]' q$ i9 i
  128.         olds->vers=(float)atof(version);, P% y& v5 [5 A2 h" j/ I, R
  129.       }+ d4 N$ H# W6 p2 a) C) F& q
  130.       free(file);6 B6 z+ ^) |+ k6 x: }2 c
  131.     }6 t/ t7 E) ~8 r; c( k* U
  132.   }- M' ^! G+ b* C( K  n. W  {) ^8 B- N
  133.   fclose(fp);
      }3 |8 m- n! C/ K
  134.   return true;7 b' b/ K% C$ v) E( H. o! \. W' S
  135. }
    3 t- j9 ?2 m5 P, C6 w
  136. % c. [( w% x5 `1 H7 G) M. R
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    # s: |: S/ h( p) `3 g0 N
  138. {
    # R4 l6 b% U2 {# V! D
  139.   TCHAR  szFull[MAX_PATH];
    + x0 z' q# v* K& t  [- u( W
  140.   TCHAR *token,*inter;
    # U! c% e6 V" u1 l5 c! W( L
  141.   *szPath=0;
    / S9 R. n3 z; k/ s
  142.   strcpy(szFull,szFullPath);
      \8 M6 }3 h8 y( ?* N- x
  143.   token=strtok(szFull,"\\/");7 W, h  K- |" n* q
  144.   inter=token;+ \& S& v* k& O( f# y* {7 t; s
  145.   while(token=strtok(NULL,"\\/"))* @2 x9 s. i: h- [- o
  146.   {
    , ]7 H+ j$ }1 I: d/ P: G. Q
  147.     strcat(szPath,inter);
    / _; t. a) Y& B8 @) N6 z
  148.     strcat(szPath,"\");* O! H* b- Z: T5 g
  149.     inter=token;
    : n" [5 e; i3 m7 O9 Y9 J( e% p
  150.   }2 U5 \2 u: F7 s7 |
  151.   return strlen(szPath);0 W+ J8 B' H$ x
  152. }
    2 G4 Z& `; X6 x- s3 W% C: Y) ~

  153. % Y+ u8 {# m6 f4 Q3 I4 R
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) Y1 R, n% y1 I
  155. {. `6 t$ p. k% u$ t
  156.   DWORD attrib=GetFileAttributes(Target);& o- Z7 b' r& G* O* A
  157.   if(attrib!=-1)
    ( I/ l- r, g: A; p0 P$ u
  158.   {) A! Q# L0 J, H9 Y# S' V# f7 y* e9 ~
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))+ ~0 g! ?, G! Q# j; H. D; x
  160.     {  d" Z6 o. r1 c9 l/ X& I& l
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    + x. ~$ ]) p3 }) i  d0 S) R: P
  162.       SetFileAttributes(Target,attrib);
    & `; h3 p& s' ]2 p5 ~+ h6 V8 f
  163.     }
    : l5 _: r4 J) K/ t  X  A" K+ K
  164.   }
    9 I9 M0 q( ]5 Z  B
  165.   CopyFile(Source,Target,Erase);9 t, g) I+ |  P* d  S
  166. }  [; X! n' N% O* W9 l
  167. & n/ n3 |" Q1 z) U$ k* B8 {; Q9 v
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...): }8 s* ~& J8 T$ B, z
  169. {
    ' \6 ]' \2 ^. \, [. n1 \8 ]
  170.      FILE *fp;
    1 z0 {# y1 b+ i5 n5 m  x
  171.      char  szBuffer[8192];  I) C4 U# Y) b! \3 ?. l  R" A1 g
  172.   va_list  argptr;
    + `- O6 h& v) Z5 ?, O

  173. - l* \, g1 x2 v! m& y) ]* G' {
  174.         va_start(argptr,message);% e$ {; g( K7 g( R& o/ o+ f
  175.         vsprintf(szBuffer,message,argptr);
    : U# A, [( K  J" I
  176.         va_end(argptr);0 s$ H6 O; S' C2 M* i/ j
  177.   fp=fopen(FileName,"a");! h+ u' V* O" y& A3 O; k
  178.   if(fp)3 w) f. q; C( |1 J) v9 k
  179.   {& d3 X' ~! y& s  D5 j
  180.     fprintf(fp,szBuffer);1 v  ?, w3 B0 q& o
  181.     fclose(fp);
    + E) u* T0 Y( t, Q0 T) @
  182.           _flushall();( U* k5 h4 g7 U6 S
  183.   }/ E9 r7 p7 @! {; H/ I1 P
  184. }6 P' h7 J7 z# H4 i" N; u

  185. ; k- z) g9 I1 ^; a* i7 ?
  186. BOOL CRevAppApp::Fclearf(char *FileName)# I+ }$ B, q8 y) ~7 q
  187. {, F2 y" @- t0 C8 o' W8 v& ]. y
  188.      FILE *fp;- s3 d9 Y! _1 k6 x2 L; c
  189.     DWORD  attrib;/ Y7 }7 m9 |! O( I. J
  190.   attrib=GetFileAttributes(FileName);% C! A  ^# B2 a! X
  191.   if(attrib!=-1)
    2 h$ i) m2 }7 x! h: H' }: J) f
  192.   {
    # h9 Q  l# O, O, }: P+ J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 `! B3 H/ q8 f  Q
  194.     if(!SetFileAttributes(FileName,attrib))
    & P6 t) J' K( ^8 W! B3 H, }
  195.     {
    1 @; x" Y7 Z# d
  196.       return FALSE;
    + C. J" j' Y' `) l
  197.     }6 T) K' {* k2 x$ O
  198.   }
    ; Z! C7 a4 D2 s9 ]4 a
  199.   fp=fopen(FileName,"wb");
    8 Q2 L) W, N; u2 R- q
  200.   if(fp)& z( P1 J5 T* g3 ?( I$ ?6 O' F* M
  201.   {/ o& ?, r& q# c+ f: k$ [. Q- @
  202.     fclose(fp);& `: t- ?) J, j% g3 O- `, h% {
  203.   }3 y; Y9 H, k; Z7 Z- f4 f* x
  204.   return TRUE;" m/ {( `  P0 |) A" R
  205. }
    ' M( I7 F0 Z( ]/ _( H. U
  206. 3 j' [* o6 C/ F0 [$ H; M
  207. BOOL CRevAppApp::UpdateLocalVersion(void)( v* ]9 l  V4 G$ C
  208. {
    : K' W" j6 Z3 H/ W% C
  209.   char filename[MAX_PATH];
    * n+ k5 F3 @. _# `' e7 h
  210.   LPUPDATEFILE file,olds;( k0 Q! l  [  [8 b# c
  211.   std::map<int,CString>::iterator i;! X# h- n, i9 W# z+ E, ~
  212.   std::map<CString,LPUPDATEFILE>::iterator p;$ @! e9 y4 r1 G; J: U- u' J
  213.   std::list<CString>::iterator l;% p. v% `" V; c' T5 i- Z' H

  214. $ J3 X0 j! }2 X. Z0 Z! `0 Y
  215.   if(bFirstUpdate)1 C* F5 H+ o2 r# ]3 b* P! P
  216.   {( L3 {, G+ {! n6 D7 D5 y' @- k
  217.     dwCurrFile=0;2 r4 D* e) `8 u7 S6 p! g  g- P* p
  218.     bFirstUpdate=FALSE;$ w6 e5 h; ^' e
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # U0 x! g1 R) O9 y' t7 y0 g
  220.     {# Y& O4 c! Y: x& j
  221.       dwTotalFiles=UpdateLocal.size();
    5 x7 x0 @; @! g0 M  k( D: `
  222.       dwDownLoaded=0;7 [7 N( o, B/ r& @& X: q
  223.       bSilentStep=FALSE;
    8 r4 L: R# d, _* h, y+ q! m
  224.       bCompressed=TRUE;
    ) @! i% e* k5 `, i
  225.       strExtLocal.Empty();
    5 l9 x5 A8 N4 k, p/ p
  226.       strFullName=(*i).second;
    ; Q# r- k# N" _4 m, V
  227.       dwProgramState=AP_CONNECT;# i; d8 d6 Y$ w* ^" b( Z* K6 Z
  228.       return TRUE;3 F- u! m1 Q5 J0 _. l
  229.     }$ C7 @2 l  k6 b. Z
  230.   }, K1 W0 w  b1 f4 r. t
  231.   else if(bRestartUpdater==FALSE)' c! s) S" n% `) A; M; K
  232.   {1 B" T3 e6 {: }% c. e$ C% y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    , b# f2 Y$ V, L8 P4 B7 i. S4 N+ g
  234.     {
    . n" E" q7 t( {* O1 Z
  235.       file=(*p).second;
    3 R/ ^  l! x  b: `, A- C
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ; ~( r+ c$ p  R  W1 r
  237.       {. d& d: r4 a( Z5 e/ v
  238.         olds=(*p).second;2 T' A: ^" h6 l3 C3 M9 B4 U
  239.         olds->vers=file->vers;
    7 [4 l; F3 {0 ^. r& U
  240.       }$ M! s$ u' A3 B. L2 E6 k
  241.       else
    + F' I! d6 r# u; X& u) n
  242.       {
    * B: E, m* C9 E8 [& U- a# o
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - ~' j, f+ K+ W2 h1 k; ]1 a) E) l
  244.         memcpy(olds,file,sizeof(UPDATEFILE));' f* ~) k6 ?$ q- z/ ^( s
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));" f) z/ N) ?- s* H! F3 J
  246.       }
    % q+ w8 g8 O( a, ^' x* |( k' y& r
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ! j8 O( U- N5 P4 Z! J2 s; H
  248.       sprintf(filename,"(%s)",file->file);: R1 B5 @& S& D# m% e4 q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ) J6 c1 @* x8 W3 b7 U
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }/ {9 z* E) v$ [5 R
  251.     }$ E( M% [9 V4 U  D1 h; @  F' {7 I
  252.     dwCurrFile++;
    ) g& Q2 `; V5 k) Q0 _0 J
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # e( @9 D7 @* V3 Z
  254.     {
    3 Y8 o3 p9 _1 h. ~* k2 o9 y
  255.       bSilentStep=FALSE;3 T( h2 a5 e$ d; y) o: J
  256.       bCompressed=TRUE;
    $ D; D4 o( ~& X3 ]! w" A
  257.       strExtLocal.Empty();4 j/ {  d, o* v" h  V, Z
  258.       strFullName=(*i).second;& Y6 v  H1 S7 F3 i/ ?
  259.       dwProgramState=AP_CONNECT;/ W9 V1 P$ J- a
  260.       return TRUE;0 ~+ E* v; k: [3 x/ V
  261.     }, l$ b' q$ `3 m+ h' @$ w! s" t% G- g5 J* b
  262.     if(!bRestartUpdater)
    8 I; @, h4 k. y) t9 K* u# I
  263.     {
    # C9 O; |# h0 L  E
  264.       int iCurrSize,iFileSize;& I' z% _& u% V/ r2 ^
  265.       iCurrSize=0;4 c3 ~+ {" B8 v
  266.       iFileSize=UpdateList2.size();
    % C; i  }, c. N8 f. E: k* g# t
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");6 D) Y! L: m- ?9 r: T  R: A3 U
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");2 v: b) @- p9 Y& G0 B# L5 r
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");/ X- ^+ ~0 E; K9 A8 D2 y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. b( x; t2 i) b2 W/ M1 }
  271.       Fclearf(".\\update.dat");
    & z4 b6 |& v, J* U5 v3 L$ o
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * b+ o7 l( ]- F0 @8 X( ]9 a) F
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* q0 {( O5 Z/ w
  274.       {
    " N: O/ m; D$ o/ J6 a
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())! ~% l) j0 F! J8 F6 R4 T( T
  276.         {
    : u. B0 [, \6 X8 `( l; S6 o6 K
  277.           file=(*p).second;3 F3 m( @3 C/ D# {% v
  278.           sprintf(filename,"(%s)",file->file);
    ' d! _" M( s: i! [3 |- [0 V
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ( }8 @3 H0 G: r. d; B9 X, J
  280.           iCurrSize++;4 \" t+ Z4 `" R* ?' K
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: R' M7 m! C" m) u* [
  282.         }
    7 V6 T) I! U( W, u$ h
  283.       }5 A3 l# h. j4 W. P5 T! o0 S
  284.       unlink(".\\update.txt");
    2 }4 |5 A- |* f! G3 o
  285.       unlink(".\\update.tmp");
    9 w0 t, ]3 S- J2 f
  286.       Fclearf(".\\checkversion.dat");
    , l6 n+ X$ v5 ?
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    5 \1 d7 G! [5 N$ F' {) N! @
  288.       if(UpdateLocal.size())3 `. f- p8 V6 r+ d
  289.       {
    & B' D& m. Y, |0 e! J
  290.         UpdateLocal.clear();/ r5 x: R; c& Y0 I) A- q; \
  291.       }
    4 y5 ^0 X6 n  X: F
  292.       if(UpdateFile3.size())
    % x& K) t" a# ?
  293.       {
    8 b" K3 ^% N" C8 H+ a- d3 B" y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 @/ ~, `7 S9 Z$ l5 m
  295.         {
    7 a* @3 K8 f  a6 T% [/ o
  296.           file=(*p).second;0 Y9 ]7 i6 @) k1 _# [* x
  297.           free(file);) m  j; O6 P& m! R0 j, p, u: e% g9 N
  298.         }
    6 z6 B9 N, m: ?
  299.         UpdateFile3.clear();5 R( y% I4 G1 V/ O3 l
  300.         UpdateList3.clear();
    * s2 A9 y; f( B5 l3 a) A8 b6 k
  301.       }
    $ a; n* {/ B7 [+ ^7 }  ~: g0 i
  302.       if(UpdateFile2.size())
    7 _* A/ V" Y7 h0 O9 e' Z' N
  303.       {
    - y/ s& v+ X/ T1 Z
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : V3 Q- J+ ?2 W6 e% [* L) i7 u' }1 w
  305.         {
    $ q$ i0 f8 K2 L( E, h
  306.           file=(*p).second;
    2 a( U4 i, b7 H* h) ~3 S
  307.           free(file);
    8 z- [" P& B  J
  308.         }( I/ w0 s2 g+ e* u7 j
  309.         UpdateFile2.clear();
    % K" b4 J( m+ f- g5 ?$ C2 G
  310.         UpdateList2.clear();
      L3 J1 `& D+ D3 V* C0 R
  311.       }
    8 _, H$ h  J) E% I' B
  312.       if(UpdateFile1.size())) ^% }6 w6 Q0 {( j# W
  313.       {8 _, m2 P+ ?* ~1 o
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). t2 `0 e1 R) x: h6 x
  315.         {
    9 s8 d2 W6 Z* k! V! g9 c
  316.           file=(*p).second;
    # e5 {/ q: h$ k, b! Y( C: B3 J
  317.           free(file);
    9 L2 ?6 h4 E9 j2 v( w5 K
  318.         }
    ; O% r9 Y8 l1 [4 s. F
  319.         UpdateFile1.clear();
    - _- E0 \. V; }. I
  320.         UpdateList1.clear();7 e1 H6 Y! n; l" I
  321.       }
    ) j4 ?5 G" `* p8 \: J
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    , ?$ ~1 M* n* n' }$ s
  323.     }2 b+ k' f# M8 i- c/ z1 X, d
  324.   }
      J; }" z5 p2 q. d6 q
  325.   return FALSE;
    6 [! J6 d# c3 c! S) z
  326. }
    + _; O* W$ b9 X; ?* j& M# e: i

  327. ; ^5 o5 d9 x8 A% O, M" w
  328. void CRevAppApp::ClearAll(void)- w; _5 `2 {" x; v, B
  329. {
    ! c8 \: ?  Q1 t2 Q; y
  330.   LPUPDATEFILE file;0 W2 q( |3 _) X
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) C2 D/ |# F/ d; u. X
  332. 5 v6 |% [+ v  p' c1 r* N& v
  333.   if(UpdateLocal.size())
    ! _' {+ `, H4 e+ H6 g
  334.   {' y3 i) _' P: n' @
  335.     UpdateLocal.clear();: X/ w0 t) O- I( {
  336.   }
    7 o+ f" W- q2 n- Y9 t5 b, X9 u) |
  337.   if(UpdateFile3.size())
    7 p5 W: K, ^" @2 y; B/ X
  338.   {4 [. R" N2 j. g! v  R/ F- l7 m
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ( R0 [* l; h6 F7 y, G1 r
  340.     {0 Z: H1 e+ k: b
  341.       file=(*p).second;
    ! y4 Z, M6 o0 @
  342.       free(file);
    ! D. A2 S2 p7 f% i, E  _0 Z
  343.     }
    7 m" M( P" e  J
  344.     UpdateFile3.clear();, z) k% |  U& L- T1 ^
  345.     UpdateList3.clear();
    ' t' y% i7 K+ ]; K" j- Y+ h
  346.   }
    " T1 p7 f  l# z% |( o% o
  347.   if(UpdateFile2.size())
    . v& o( j& r) R/ f' z3 J) |/ {
  348.   {+ S: p0 D% R4 K- j0 v3 Q4 V1 T% ]
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 O: s0 Z# p7 y7 q5 d$ O" {
  350.     {' o: J. T, n7 O4 O. E
  351.       file=(*p).second;
    7 A9 R% q+ L5 B: @
  352.       free(file);: |) w/ v) a1 B  J( v: T8 A
  353.     }
    5 D* M) b4 r4 b; Z+ d: @
  354.     UpdateFile2.clear();
    7 s3 V. U' b* @1 ]
  355.     UpdateList2.clear();2 J7 |! J- Q6 s6 u# [& a9 m! \' p
  356.   }
    6 R. t8 j( {7 x* k. ?0 a
  357.   if(UpdateFile1.size())
    . T4 T  E! Q# c" b9 r8 J
  358.   {, X8 a; O8 I/ y9 _- b& k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; V! h: S) H1 l- l+ M
  360.     {
    & h) Y. ~" w+ Z. _  j; j
  361.       file=(*p).second;$ B( h3 x7 r/ i& a5 f
  362.       free(file);9 p- X5 |/ A- f1 l% q; P/ k
  363.     }7 ?$ {7 N' _) _0 c
  364.     UpdateFile1.clear();
    5 v! Q& ]4 W1 ^0 w0 ^, v
  365.     UpdateList1.clear();
    / X: o: h& L8 x
  366.   }6 U6 ~9 W4 @7 i% l/ M' E
  367. }  
    + _6 w+ u: K. x- P
  368.   
    " t- F! {& k0 D
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 j; \3 x8 u9 l# W
  370. {
    : B7 m5 k  q  s2 M! I  p
  371.   int c;
    2 P, `/ Q7 N/ X* E0 F
  372.   LPUPDATEFILE file1,file2;# Z/ q  t$ s! f
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;; _* D0 Y# }  A6 {) U9 I8 V! _
  374.   std::list<CString>::iterator l;  U/ t5 O. A1 r( [+ {" C
  375. 9 {, X8 x4 y& ?1 A! r
  376.   UpdateLocal.clear();3 P0 g; K, l: I9 J. O
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    2 m& z3 U, I- A9 y, Y$ Q1 k  O% C
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);% d7 X+ P. F' n: `$ v
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);( f, p: z+ X4 U3 K$ C* T  W
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    3 c; z3 \+ B2 e* v# G
  381.   if(UpdateFile3.size())
    , B" Y# \0 ~/ r
  382.   {
    5 S1 B$ X& ?# C5 F1 z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ) _, m1 n, H) Y9 h3 d; P0 c
  384.     {
    4 V! h2 j1 V% Q  X) D4 j' {
  385.       file2=(LPUPDATEFILE)(*i).second;
    0 D% a# _4 `9 H3 G- n
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 u$ F+ `+ m+ n# |) @3 V
  387.       {0 F2 u' \3 p$ C* L$ ^
  388.         file1=(LPUPDATEFILE)(*p).second;/ q, O5 j. |( f" r5 M
  389.         file1->vers=file2->vers;
    " ?" Q/ p) c# {; m+ K1 ?% r
  390.       }$ C' p/ i" ~. o
  391.       else
    2 E) f2 P# h/ g! H
  392.       {8 z8 Y0 N% m' T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; S) n7 v5 D& G$ V7 t6 Q
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    6 y3 }; U7 x- u% o
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    9 ]& f! m# \7 [" E
  396.       }: m; y3 c. ~4 U  }+ w
  397.     }
    5 i& |9 _7 n, J6 Z
  398.   }
    " e6 s1 \- m* _/ ]7 O4 K
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)! Q: e8 o% m2 e9 y" Q
  400.   {
    ( d+ H- y& l1 U: z) q* E0 \2 C
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())4 u6 y7 F5 R# {# S# A, ]6 z' E
  402.     {
    9 `& v1 K) G% c
  403.       file2=(LPUPDATEFILE)(*i).second;% D) w! b3 |3 C1 d
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 k2 G' U. k5 ^
  405.       {  x5 [1 |' e) Q
  406.         file1=(LPUPDATEFILE)(*p).second;
    . R1 Z7 B; C) c) o
  407.         if(file1->vers!=file2->vers)' Z* w# K* `$ f4 \; |: q- l
  408.         {
    0 B# d! q. S9 o3 u7 V* s% e% T: Y9 {
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & {/ q/ u* v' r3 [
  410.           c++;
    % b# E4 ?3 w" Q3 C# G
  411.         }
    ) O) }8 ]# J+ j6 V7 n* h
  412.       }
    & N1 S  q: h! A/ @
  413.       else
    4 C6 Q/ _! l% o6 l
  414.       {
    3 S4 ~0 ?  W( U! U' R& G  {4 \
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  K, P( P9 f2 Y: Q  X  S
  416.         c++;5 n; j" K9 T  o
  417.       }. S6 p' k# ^6 ?  `1 t
  418.     }8 w) E$ y+ K, C/ d7 I
  419.   }
    2 W. z% Z- G3 i
  420.   unlink(".\\DownLoad\\update.txt");
    . i" Y! B! ]* i
  421.   if(UpdateLocal.size()) return TRUE;* G1 P4 M( D+ z! G
  422.   else                   return FALSE;
      B. b5 e5 r$ n. R* V
  423. }9 A; g: V" i6 e( u6 A& S; p
  424. ( A/ A* @: k, o. T" U/ r9 E
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    6 t4 l' X2 }" d+ S" z" M  k
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    / O1 x+ d4 q0 f6 x& W
  427. 5 i  q2 g+ q+ Q! R* O! \: ]

  428. 8 d0 i4 Y8 ^, |# k/ Y: d) h

  429. - ~! h3 I# v8 M- ^' E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ d* j: w# }7 `) h1 i4 D
  431. {
    ; ^# |* J* `% H, l# }8 u" d/ f
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;9 v9 S# w& }6 e1 |
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1). h0 x8 w* J  s1 z' y/ T( o* a
  434.   {
    1 H- I* i* T$ @/ f' |9 h5 C
  435.     char szLanguage[50];
    ' H9 E4 S+ ^: O, |; Y( j5 z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) S2 j' w' s( d- w. S( Q. e! `& y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! _/ E* ~' t, U0 W% g' G$ G
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 ]5 b+ b8 P5 j" i0 j* S  n
  439.     else                                   m_iLanguage=ENGLISH;) f9 B# d7 n; z- j7 W& Q+ R0 j
  440.     char szRegister[100];
    4 {. H5 e8 N1 c0 Z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ D% n7 ^7 z! V$ H0 l2 I. G- R; i8 W
  442.     strRegsName=szRegister;; h* o& C9 R: T) m
  443.     char szPatchURL[100];9 ^. I3 e4 Q, ~
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 H1 Y; w) c" W4 W
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      O9 {2 v( [! X6 }4 s
  446.   }
    & i+ C4 |5 b# ]; E
  447.   else( [8 s$ l4 `5 ^/ C0 @) p
  448.   {
    + V2 o0 I/ ]" s* m7 c0 w, @' _
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 s% u/ a, i+ ~. s% A
  450.     strRegsName=DEFAULT_REG_URL;( s" K& }- p* Y& m$ f/ m
  451.   }
    2 o: D) O& d2 {* |2 ~
  452.   if(GetFileAttributes("hosts.ini")!=-1)' V- K+ W0 \8 Q( ~. `1 H. h
  453.   {
    / x' K4 T" I5 J2 h7 ~
  454.     char szIP[50];
    5 G  }# _! k9 X5 \
  455.     char szDIR[300];
    - h# O( W3 w9 y( w
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")): r+ g3 T7 l' Z9 Q
  457.     {
    : X0 r3 ]3 Q( R) O/ [. F
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");8 d$ S1 _1 M- ?
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");2 S7 {  n9 W/ `- W  B
  460.       strHostName=szIP;
    3 H( O! r2 ?; U, B$ N$ W# `
  461.       strHostPath.Format("/%s",szDIR);
    & d- w! [3 j" w; g7 T
  462.     }
    6 }8 s# k7 S9 y
  463.     else' J$ b( m  }5 s, g4 z- m$ {7 F' D
  464.     {1 H$ K6 x% w( D7 t! J
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  @1 g; P+ X. U
  466.       {
    # @8 @/ t0 g' W: y6 ]+ ]
  467.         char szLanguage[50];% i7 R) e! J. L
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! ~9 f& A" D# [
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. \0 ~3 }8 u" e! U0 |! L+ V
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 S6 a# V6 ]% ~5 ^) Q. }: ~
  471.         else                                   m_iLanguage=ENGLISH;
    : H0 y2 a$ \) G8 S% E: p
  472.         char szRegister[100];9 X+ T) K/ y3 }8 E
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . ], [8 K5 \- ~8 x' N9 s# |9 y
  474.         strRegsName=szRegister;) Y; ~5 Q* C& r$ n+ I* X9 p
  475.         char szPatchURL[100];; i. d% u, |1 k8 i5 k8 Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: e0 c$ d1 y2 r8 ]6 z: \4 o
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 m' E" J& g5 y- v4 e
  478.       }
    ; |0 A9 u' r4 ?6 L
  479.       else# m, c3 D- Z3 H9 a2 i
  480.       {
    9 r# G0 b; _. O0 a. a) a) C- h8 Q: D
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& z( o+ ^; J6 {8 ^& f0 _
  482.         strRegsName=DEFAULT_REG_URL;. D7 t. w$ y0 ~4 X' d! h
  483.       }
    * Q5 z9 ]$ [8 L4 T& s
  484.     }  p9 N+ N$ k  ]6 [0 S
  485.   }1 T# |# x" P1 d
  486.   return true;
    + s% k/ j+ n  Y1 d1 V% ~$ ?# G
  487. }8 g* j- ?" `5 h) B+ R" J

  488. 9 p0 @' b( t' Y8 l, j2 A0 |
  489. #include ".\ZLib\unzip.h"
    3 a! }0 Q1 z3 `0 p, `* ?
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ' G9 I) T" D7 S8 [2 r" f
  491. /////////////////////////////////////////////////////////////////////////////
    6 i9 {+ x$ a7 L- w% Y! j! {
  492. // CRevAppApp initialization
    . ?, n6 d* U( p) P  \

  493. 2 j  C$ B) q* y2 i& K0 h" H
  494. BOOL CRevAppApp::InitInstance()1 M& |" L; L3 h% ^4 @9 w5 m( a3 w) E
  495. {
    ; n1 Q9 R  V6 o# W: f( u
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    6 x' R+ _% O/ E/ g
  497. : A) f2 N; K) o1 r) ?
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);) [3 H; ^$ _; ?7 d" ~: r
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))( T8 h: B- M' d( v$ `( v* a
  500.   {9 x. Q) u6 T2 _2 B7 L' I
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    / l' [4 L5 a+ y  `5 N& Q. X, }0 o
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % d# @, _5 M. T, \
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))8 S, z+ J. S+ t8 q
  504.     {- p4 Z+ |. I6 V9 Q. L. b2 s
  505.       strcpy(szPath,szPathTarget);) g: ~% w; V# @
  506.       SetCurrentDirectory(szPath);
    0 z8 r4 n% e5 Q9 \& ~5 E
  507.     }6 L. Y1 V+ Z  n; k  n$ _1 k
  508.   }+ z3 n! u$ C7 ]- I5 b
  509. #ifdef _DEBUG5 P0 q8 V6 H6 K& ]8 {# m; F
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 }5 _. p5 T7 F1 \7 u6 ]9 w
  511. #else
    2 ^' b+ j' V9 h# z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ K0 ~9 B4 [  H, Y  S( N
  513. #endif+ r* O/ ^" O: B" X$ y1 d
  514.   {+ Q0 n, v2 z# j
  515.     char tempFileName[MAX_PATH];5 u; P* Q7 y5 q. Z9 ]
  516.     strcpy(tempFileName,szPathSource);- i) c2 o" b3 h1 v8 I$ V
  517.     tempFileName[strlen(szPathSource)-12]=0;% F2 {3 m6 P" {' J
  518.     strcat(tempFileName,"\\$CSUpdate.exe");8 a1 v9 F! E1 r) ^1 n
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
      O' f" |/ n& i7 K2 D, O& W3 {
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ) @9 x" o, b% l) u
  521.     return TRUE;1 ~5 E+ `) K+ E
  522.   }
    4 d5 R; N  Y, [, f1 [0 [0 I. Q
  523.   // Nuke 0118: Delete run.exe1 Y) V- g5 |1 L, S9 G( _/ g+ R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );: z) d4 v+ x& h! d9 S
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");9 Z3 u/ n1 o$ _% j7 `& o) n
  526.   if(!ReadCfgFile("Config.ini"))
    / M( S. E0 }1 n6 w$ \
  527.   {8 ~& T9 Z/ l/ W5 t- g" c$ {
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ' v1 D8 s) C; p) }( Z
  529.     return TRUE;( }) K0 m+ }6 e- v( a2 ?$ h
  530.   }
    8 J& c  d  c8 \% z7 w
  531.   HANDLE mutex;1 Q! p0 g: @( D. S
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    % ^  e' E4 r: F( H
  533.   {
    & E( t0 J4 F/ m4 A. S
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    # G3 M% {% T* @+ A- F' H5 u! Z3 y
  535.     {) q) \7 _  Y0 Y% t
  536.       CloseHandle(mutex);6 q. r3 Z* R7 W9 l
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);- Y6 U) s" s% |' ]& _. g' Q
  538.       return TRUE;
    ! R% a% r$ s: i* H% C6 l6 S8 {
  539.     }2 s4 e, O( P8 p! P  w0 Z( V
  540.   }  : F) x7 F7 ]1 A3 Z" N
  541.   CloseHandle(mutex);9 ]0 }3 D& Z3 p" ~; L6 g/ J

  542. + B: |9 t, `9 b3 x$ |& a
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);9 Q4 v3 W: j8 O& S* C9 [0 A1 S3 q$ d

  544. : |2 `* \: j6 G+ T1 [
  545.         AfxEnableControlContainer();  z; X/ n2 o2 n* ~

  546. , y: Y. \$ k. q, e! p9 J0 I- H. X% y
  547.   bCanUpdate=FALSE;; @7 X# E1 ^; i& T  ^) P
  548.   dwStartUpSteps=1;/ M( W- H' k- b! ]6 n& d# ?
  549.   dwProgramState=AP_NOTHING;/ w: T8 T4 k$ L" f6 ^

  550. 2 a6 l* }  X" J6 K3 C1 z$ @+ L
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    2 F8 N3 J" y& C% H

  552. 8 A# @) \" v. Q) F$ t& C
  553.         // Standard initialization
    ) }2 p! Y* L- w
  554.         // If you are not using these features and wish to reduce the size* f; A7 Q  b/ G9 A: |; G4 Y
  555.         //  of your final executable, you should remove from the following$ B% G, e- r: ^- m
  556.         //  the specific initialization routines you do not need.
    2 h- n$ v2 j9 @* E  w7 }0 l

  557. " X0 q1 i2 y& w7 X  K8 Q! P
  558. #ifdef _AFXDLL; Q* J( Y: D7 n
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    - c8 [0 k- n2 S; o0 x
  560. #else
    : M& f. Z- I5 g* d5 Z) x& g9 I  v
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically' z6 m" i9 I1 I3 T+ b
  562. #endif5 @, y( k8 U& C- m0 I: F, v$ U
  563.   c0 w/ G! }" T+ S
  564.   dlg=new CRevAppDlg;) H; a5 A; H# d
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 I4 d7 b, U( _: p0 N$ M1 ]
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + G& e0 x3 E3 p& m
  567.   m_pMainWnd=dlg;" _) d& R' {: x1 t$ H, J

  568. / z8 J$ F5 L1 H" R
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    . o% ?/ s: P' B$ g/ S; u

  570. 4 U/ @, I! l1 H' t3 G5 ^7 T: m
  571. //  GdiplusStartupInput gdiplusStartupInput;
    / {( c  Q* u7 g0 F& R$ k9 A- a
  572. //  ULONG_PTR gdiplusToken;
    , a$ V+ U% e& S/ {3 }
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);1 ^! T- X$ m9 L$ q/ X7 w2 |0 h
  574. 2 n* W5 n( Y' e! K" B: D
  575. //        CRevAppDlg dlg;
    ( G) F+ a5 ]% a' B
  576. //        int nResponse = dlg.DoModal();
    * K% l, f; G- R
  577. //        if (nResponse == IDOK)
    ' Z( i0 D6 z7 C7 H3 C' c
  578. //        {5 t* p  g. ^. y  o
  579. //                // TODO: Place code here to handle when the dialog is
    3 r4 `/ h; G# d3 ]; l8 B. }) z
  580. //                //  dismissed with OK
      g7 {! y) }( U  F. y4 X, g6 R
  581. //        }
    7 W. b" A4 w% X) }" {1 o
  582. //        else if (nResponse == IDCANCEL)9 S' A; Z- X$ @  _9 q. Z
  583. //        {; p  E* Z. r  b1 K; v: h8 W+ q( s
  584. //                // TODO: Place code here to handle when the dialog is
    . u9 A1 H4 X4 B% J7 |9 H9 W/ W
  585. //                //  dismissed with Cancel
    4 v: H, C& z: r* |
  586. //        }1 q: \+ R0 `9 c2 {

  587. , d" t6 \( j% _2 f/ p7 e. V$ f# h- n7 c
  588.         // Since the dialog has been closed, return FALSE so that we exit the7 K& r  y8 S% B8 g4 o, M! ^
  589.         //  application, rather than start the application's message pump.
    - R) D& L* F  |+ }. i1 H
  590.         return TRUE;1 o1 ?6 I% n8 Z) r- I
  591. }- N9 ]$ c0 z. c# M, j3 c' l
  592. & a; n7 \! t& z- S, V
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / v& y! X# q5 a
  594. {
    0 [1 R/ Y" V; U* l
  595.   int i;) i. j9 G9 [, S1 [* C9 X
  596.   char *szRet;* P5 a, s0 j" F/ }! z/ i

  597. 8 Q# i4 z: {' R: a: x
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    $ K2 d/ i; ?% q4 l& B4 c( J8 _
  599.   if(sztoken)( \: U7 L" j2 R3 Q
  600.   {1 y9 T9 W' }, E4 i$ E& O& `2 o
  601.     szRet=&sztoken[itoken];3 c: Z/ s7 o0 ~, k1 q2 \
  602.     while(sztoken[itoken])8 {* o+ Y- P+ _/ f2 e
  603.     {7 w. v8 m0 {3 V6 f$ f; I
  604.       for(i=0;i<(int)strlen(token);i++)' L# {( D% z! p+ y5 ]& ^
  605.       {
      {' u" Y+ @, G1 Z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])0 T- \3 |7 ~* \$ j3 ]" r
  607.         {& j( \/ n0 f$ W9 t) w/ r# T3 |' R: }
  608.           sztoken[itoken++]=0;. r( t" Z/ D7 f. a0 I$ m
  609.           sztoken[itoken++]=0;
    + v' X& r5 M7 z9 h
  610.           return szRet;
    , g, s$ t7 ^5 N2 l4 O. d. u
  611.         }
    / f( Q; |7 c7 U/ J  P' d1 P  h" C2 L
  612.       }6 v& d6 L/ I7 v! V8 }
  613.       itoken++;# H  m9 @& K  @) r0 Z
  614.     }
    : ?9 `( A/ M+ I3 z+ H, Q
  615.   }' N7 a3 }% v( K* C
  616.   return NULL;
    ' y  U9 D: {  O8 J& o9 }6 R3 k3 [1 q
  617. }
      k- \5 B& I; \& d7 @0 p

  618. ' ~- L0 i1 j. W
  619. void ProcessProc(long Total,long Current)/ E- S- {! \# ]. t! k
  620. {  ~8 q# G0 M9 m" P9 X  b) D* a; C! h
  621.         MSG msg;$ I: G' f7 y! ?2 t; u
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);. J8 D% A9 e2 x( p7 Q0 M8 k7 b! E; Z: ~
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    & o: }1 B% \- T/ D, j) i( i
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))& K) I. ]! E' m3 V0 F0 A( Q& B
  625.         {3 j( V; g: k: O" l$ |! K
  626.                 if(!GetMessage(&msg,NULL,0,0))' u4 D  }9 `: }9 c2 |$ N
  627.                 {
    ( d3 k" o( K' o# r, ?
  628.                         return;
    & ?1 d! B# b1 k$ v) g" Y9 k) r
  629.                 }
    ) D! G5 ]8 U7 \2 z2 v0 W
  630.                 TranslateMessage(&msg);
    6 O' ?! L+ n  E% W" B" P
  631.                 DispatchMessage(&msg);
    ( [! N' @$ q, e6 g$ X
  632.         }        2 f  ]1 t9 L( D$ Z# ~: A% [' O; V+ B$ V
  633. }9 [, Y; g1 e+ U9 q
  634. 5 X4 G) q8 l5 e
  635. BOOL bFirstChar=TRUE;3 i$ @& B# q& t1 z; J+ \

  636. 9 h5 s. Z) c6 R; k5 o
  637. BOOL CRevAppApp::OnIdle(LONG lCount)' P  j9 u% O; J" v4 b* W7 x
  638. {
    : o) M4 i- F7 _+ g8 k- e4 c3 y
  639.         // TODO: Add your specialized code here and/or call the base class% v: |! @* X" m! ~! c
  640.   switch(dwProgramState)
    9 L8 y* G* @! z* d
  641.   {- J. B8 T4 b1 g9 F4 w/ D) m
  642.   case AP_NOTHING:6 i2 G5 T- h# E
  643.     switch(dwStartUpSteps)6 T2 w& W( e+ F! {$ G
  644.     {' A' u- o! x. f
  645.     case 1:
    : X7 m4 K. w% d4 u* k9 u
  646.       {5 B# c- z: W  e$ v" y
  647.         int i;
    % E2 {/ l' H* y7 [
  648.         CDC *pCDC=dlg->GetDC();
    / ]7 x+ l8 C5 B; k+ t. g/ J
  649.         HDC hdcwnd=pCDC->m_hDC;
    3 s, @9 L! L6 P. K
  650. //        Graphics graphics(hdcwnd);8 W# o6 \" n0 ], M) L3 R: A
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    + @% I7 |# N5 t7 ^* N& F, }7 ?
  652. //        INT iWidth=bitmap.GetWidth();
    ( _  ?- a, e1 Z9 x
  653. //        INT iHeight=bitmap.GetHeight();2 M# ?5 b' l! z2 `- u1 j9 `
  654. //        Color color,colorTemp;
    ( y" F7 b& d! O& j2 G% D9 |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)  t5 {* k0 {6 C2 _
  656. //        {
      |7 X( w; S8 W6 }8 e
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ! ]  k, v( ?* f$ F' e& Z
  658. //          {, E( I1 y7 _% x: J
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 s# j9 X3 A! U  E: }0 z
  660. //            colorTemp.SetValue(color.MakeARGB(5 l5 s# h# d  }
  661. //              (BYTE)(255*iColumn/iWidth),0 g3 h& p& i0 a+ N8 S
  662. //              color.GetRed(),
    4 F& v6 `$ q3 ~1 q7 O/ |0 v' N
  663. //              color.GetGreen(),
    / g/ {" w4 e. q
  664. //              color.GetBlue()));5 H  i0 d; R$ W% p( M- l3 \
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    . C2 R& n# U& c
  666. //          }, ?$ D! I. |7 t* [
  667. //        }& ^3 u( N5 w4 h! f
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);7 }5 v( u+ t& [1 J
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    6 m0 i$ P& r, p0 F  d3 f
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    3 w* \; a3 P  E) ?  h7 ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    * S8 ]; Y+ r) S, n. `
  672.         for(i=0;i<240;i+=8)/ }. D- s. A/ R% [
  673.         {: f" R1 O8 C9 [
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' ]+ ^2 P! n( f+ c# x, Y- M
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* N: ?  v" i: X# {
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : _* h7 H( z2 Z# ]
  677.           Sleep(33);
    * D/ \/ h8 u$ y9 O5 H
  678.         }
    * \( M- O3 Q8 ]& _' [( E8 I
  679.         Sleep(1000);9 z' J( Q# y' h( S: B
  680.         for(i=240;i>0;i-=8)1 w( j, A# \+ E4 F& E  y9 a4 @
  681.         {
    # }6 b$ {& N" J+ {) S! r, O
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 |$ n( S5 @0 j$ N; v# N) N0 v
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      E" |5 w) Y/ t1 m1 R' E. x$ s) e5 Z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % V+ J& X0 {& D8 u; w# |7 z# U
  685.           Sleep(33);( [' f/ B6 L& r& W% E3 [. R0 W) q, U
  686.         }4 q/ C/ |, B% n
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);2 j- U) ^3 ]1 q1 k4 F$ h- N) |
  688.         dlg->ReleaseDC(pCDC);5 ]& M* U3 a! y0 B) n
  689.         DeleteDC(hdctar);7 L+ H- ^: X" {& o* Q- F
  690.         DeleteDC(hdcsrc);
    1 z9 m3 w" |6 d8 W1 ^* p$ _
  691.         DeleteDC(hdcorg);" r! B% b. w4 I9 c, u1 x
  692.       }
    8 G5 A& E' @: V9 C$ [/ x
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    . l3 o6 b. L- R/ O8 Y; ^
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    * ^7 s7 u8 U& D6 u9 ~
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");" M3 }9 [- X$ a% ~5 x
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");  A$ c3 S" h2 E" F7 t- S% ^
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. s  o$ o! W9 {" y1 \: k6 z" Q
  698.       if(!Dn.Connected())+ X( @1 s8 v; Q6 s! J/ j
  699.       {7 V3 K5 ^% d5 g
  700.         dwTotalFiles=1;5 v% a7 r& \/ V5 R6 w
  701.         dwDownLoaded=0;
    / a9 Z1 O$ ^. y1 S+ r, N) T
  702.         bSilentStep=TRUE;
    & V" Z; m0 q7 h2 u; \  y4 W" D
  703.         bCompressed=FALSE;
    1 R* ?7 E6 J5 J6 I$ J9 `
  704.         strExtLocal.Empty();: N$ y' U+ b, ~- V: i# D
  705.         strFullName="readme.txt";
    . Y: A: C6 v! U6 E6 \
  706.         dwProgramState=AP_CONNECT;  j% X4 f" M/ b2 \; I; K1 M9 a( w
  707.       }- `% O6 f* _) M% b' h
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();  E3 K" M* x% Q/ ~
  709.       dwStartUpSteps=2;
    6 _; Z) u8 f) h9 R! ^' f# O
  710.       break;
    * b1 S2 Z: Z9 R+ X1 b' H
  711.     case 2:# ^; O7 @" e2 w, y8 I* R8 q
  712.       {
    7 K. b( }/ l5 w- F6 \# }
  713.         int iEOF;# |6 s6 X* H4 t2 b: V# Y' F
  714.         FILE *fp;
      [3 N( F+ r& x/ }6 z2 g) V0 H
  715.         char szString[512];
    & e; Z' h! X  k( M
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ W; p" G0 H7 N4 d5 m' a
  717.         if(fp)
      }3 t! r" S: A( @+ e
  718.         {0 F4 r6 g& v0 F' Q4 N( w1 @. a: H
  719.           do
    " Z6 j" P5 l0 v$ \' P8 X4 }8 f
  720.           {. \' C! K* E; m/ Q% g% D: w
  721.             iEOF=fscanf(fp,"%s",szString);8 H0 f, h+ ~' G( C6 Y/ H. S6 V# ~
  722.             if(strlen(szString))3 E, ^' s" s( H* R! o! ]
  723.             {7 l2 Q* F4 [1 y6 D
  724.               if(bFirstChar)" @6 _) m4 a7 K( Y! r9 Z) S
  725.               {. ]  m: K4 h% Y# G# K
  726.                 bFirstChar=FALSE;
      i) @  y: V0 w6 J( z. S  ~
  727.                 bConnectIsBig5=FALSE;
    , V- V: ^# Z- i  X2 A2 `5 U0 M! `9 o5 o
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;6 G3 F  Z- O) J0 H4 [4 Q1 E
  729.               }
    ) k, q# ^- u* }" a0 E; R- \- U
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));* o: p  V) P4 x: [. X: V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    : S& L3 d8 H! }0 Y
  732.               dlg->m_ListText.AddString(szString);
    0 E' ~5 ]" H8 P% p) u9 a, [  {
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! w3 r& B2 D2 d  B. Y* ?
  734.               *szString=0;2 L) e1 o4 m4 I1 r7 F. L4 a
  735.             }: e7 s. k) |; W
  736.           } while(iEOF!=EOF);) M6 l; |* F. U9 b; m
  737.           fclose(fp);5 Z6 ~0 q$ Z: e1 H$ y# E
  738.           unlink(".\\DownLoad\\readme.txt");
    ( D. o  q( o$ \
  739.           dwStartUpSteps=3;9 S1 r; U/ d. D
  740.         }4 Z" H; c1 L0 l6 k( e9 g
  741.       }; z) S+ v- c- q0 ^7 x# S  S! \
  742.       break;: N% b2 e3 s. K! r$ k  w
  743.     case 3:
    1 Z( d3 R. E- m3 I% I" i* L/ _
  744.       if(!Dn.Connected())
      N$ W  Y) D4 [& [- y2 X9 f, \4 X
  745.       {2 H& G. s* @* V+ t; R' C0 K9 s) L. C  Z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    + k7 w* x- k) i8 y
  747.         dwTotalFiles=1;
    % V/ H1 J. C1 W  |1 ?1 `
  748.         dwDownLoaded=0;
    % E" n# z# d% V( c/ Q. ?& e3 E5 v2 H
  749.         bSilentStep=TRUE;
    1 y5 i& D: V  L6 ?6 z, y8 S3 \( w
  750.         bCompressed=FALSE;! ]; E% h! u; j( f- C7 h6 ]
  751.         strExtLocal.Empty();- i) u% x% A: X, @7 e6 M8 t+ h
  752.         strFullName="checkversion.txt";+ S5 K( g& W; D% v
  753.         dwProgramState=AP_CONNECT;; W* ?5 ]; C! p: t1 G  h
  754.       }5 i; g( t1 Y4 p- H0 Y4 i
  755.       dwStartUpSteps=4;, a9 K: B8 e& d6 w3 A+ C
  756.       break;
    ' h  N# z2 j0 H, b% d& d
  757.     case 4:; t# b# X: e7 I& Z/ S+ t( E
  758.       {
    + D! H: ]" X, k! D& O
  759.         FILE *fp;5 t4 M" x1 B) {6 @/ m" l& j
  760.         char szString1[128];
    / t; }7 N8 _4 z. X0 |9 O
  761.         char szString2[128];
    % ?% E* x/ l/ T$ X* W! M
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");. V; P* ~4 r% x$ g4 v4 F
  763.         if(fp): l( R% C; x0 @. x9 b& L
  764.         {
    # Z# ?0 @* J0 u: W
  765.           fscanf(fp,"%s",szString1);, ?$ N8 u) h/ k# F
  766.           fclose(fp);
    # [2 q1 D7 ?5 n' w
  767.           fCheckVersion=atof(szString1);
    % I3 I( K5 L( a9 X# v% h
  768.           fp=fopen(".\\checkversion.dat","r");
    & C! A" }7 K# D2 M: L6 d
  769.           if(fp)
    1 Z* n/ r" @8 K
  770.           {8 ^0 y$ D( h$ c$ ~" l% b
  771.             fscanf(fp,"%s",szString2);- M; t6 S. k. ^4 w1 s
  772.             fclose(fp);. ~+ t# S* O( s# _9 E" b) ]9 L
  773.             if(atof(szString1)!=atof(szString2))  ]9 a6 n: `7 P! B
  774.             {
    - [6 ]$ A. ^$ B: s5 S5 y9 i
  775.               if(!Dn.Connected())/ s2 S: J7 v* H3 @' c! g, ?* p, q% D
  776.               {7 T5 g* q# A( e
  777.                 bFirstUpdate=TRUE;0 I: W8 |# z" S% H, Z; I
  778.                 dwTotalFiles=1;
    4 Z' f5 J4 {  h& j
  779.                 dwDownLoaded=0;7 D, ~, Z8 x; X* X" V" p
  780.                 bSilentStep=FALSE;2 K6 J, O/ f3 o. l
  781.                 bCompressed=TRUE;& p( e2 S" x* \( I: f& \1 P- X
  782.                 strExtLocal=".\\DownLoad\";9 W# K* b) y+ i3 l/ f
  783.                 strFullName="update.txt";4 N& K8 _! Z+ a5 _; S/ x& _
  784.                 dwProgramState=AP_CONNECT;
    4 X/ W! [) k. ^# e7 l7 O- b* L- ^
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 ?2 w+ S7 n- q: M# D2 n5 }
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    . i9 K% l& i3 N* x5 b
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");" E  v8 F; ?7 L- ^' {& f

  788. ) o' `; g% K0 y% `
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % V5 T5 U# t( C$ S" Z3 n0 c7 T
  790.                 unlink(".\\DownLoad\\checkversion.txt");4 N3 U! A/ Z  y& y) F
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ) J) h; C) Z: K& ?; S
  792.                 {
    4 P4 n6 j; L  T0 p
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ' ~6 i9 v) k* Z: K. B" P! _; v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ) x$ C* ^& B9 w8 T  B, |. ~
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");9 X. l! j8 k1 m$ d
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 o: C. E8 y# b+ T
  797. 2 I- r7 w$ }% X% z) @5 ~0 n  A* P
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 `& e" A4 |) e! _* e( _  T
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - A6 [4 c/ G1 E. O8 }2 I  ^
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ Q5 J. ], o& J# G. w1 u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: ^- n; N6 @$ p% B
  802.                 }
    0 I7 Y" d0 s. t: I5 Q6 ^6 r  ]' z/ l. s
  803.                 dwStartUpSteps=5;& c7 s1 R! o! B
  804.               }; J& C( K" \+ B( g) S- h7 q
  805.             }
    / x4 ?8 `" w9 I3 ?4 f
  806.             else# ^& a6 T1 R% N* |! C
  807.             {
    0 ^2 Z7 V7 c8 \" b5 f1 ~2 _: ^
  808.               unlink(".\\DownLoad\\checkversion.txt");
    . r0 K. `- K; _
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! n0 ~# }( n  u  R+ d3 }0 a# n
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");/ e( }' a+ Z* G# O& U% G
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");+ k2 j3 C4 _8 r; V  W# }
  812. . G) F9 V" j  M: p
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  R. p; H( Y) Q# c7 D6 I
  814.               dwStartUpSteps=99;
    1 g5 \1 }  _: V) D
  815.               bFinishUpdated=TRUE;% T! [* E& Q6 v( T
  816.               bCanUpdate=TRUE;6 L9 \9 ?. ]' d- H2 }. R1 O) T. q
  817.             }
    - W* l5 |, d3 O; J5 F
  818.           }; @: W% N: A9 b
  819.           else) J+ d8 S9 z8 b9 Z0 J9 G4 D0 q
  820.           {- m6 h- @9 p+ H' V9 j
  821.             if(!Dn.Connected())
    3 \* l; L4 x7 c  O1 _* L  o7 O- i) T
  822.             {2 {! E! V" P& D$ H$ S- V. `
  823.               bFirstUpdate=TRUE;
    7 u9 V4 H4 I3 L+ a3 J& Y7 R
  824.               dwTotalFiles=1;
    8 I3 a: M  @& P! C0 i
  825.               dwDownLoaded=0;
    5 ^" R3 `' `2 u
  826.               bSilentStep=FALSE;& a, j' }- M. k( m  p
  827.               bCompressed=TRUE;# P% S1 ~4 Q. z$ [3 A+ F! _' y' N
  828.               strExtLocal=".\\DownLoad\";& b0 q' T% O0 h0 t) i  e
  829.               strFullName="update.txt";
    - M# Y4 M9 ^. Z" t2 I- i/ m) M
  830.               dwProgramState=AP_CONNECT;
    4 G2 T/ [1 ^! I: F* U
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, {% @" [! T3 s& j/ I3 |
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% ^9 n, _: z4 e+ F! A# k2 b9 M' k
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");  A+ {" |4 V# H5 `. `
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + C/ ?' {* w" b
  835.               unlink(".\\DownLoad\\checkversion.txt");/ L; H5 X5 q; j4 c4 a
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)& d- X" `1 M/ `( ?$ L  J" `
  837.               {
    , I+ O, h% A) U0 e1 {) d- h1 s& ?+ j& Z; [
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");0 N) B9 w1 B/ U( j  J! i$ S
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");3 W" l( ?% [/ R9 r! }6 Y8 k
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    1 a7 D! R& M( X. A4 P& y) f
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) c4 X9 j% i: \) t! N  M: R
  842.                 9 r0 I- g0 P2 \8 L! T
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 J1 R/ W2 \- q# u5 O2 l
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - g% J; v# n- c9 M( ^# Y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( d6 }- }4 U$ ^
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ s' @' c* b, |; Q" `
  847.               }
    ' O# M' v/ b% j$ ?4 g# z- O
  848.               dwStartUpSteps=5;
    ) N% ?( Z  j( S; _6 H/ U# z( z
  849.             }1 L1 {0 S, d2 s8 X+ K
  850.           }
    ; P, p0 D' p! i/ |- {. d% i% G
  851.         }
    1 O5 X  ]) n3 T- `% K9 k
  852.         else
    7 N! A! r5 X: X1 D
  853.         {6 _- h' G- M9 M7 p7 K( u) W6 b
  854.           dwStartUpSteps=3;
    " ]& J& y$ b5 }9 h; `& R" b
  855.         }
    3 S# G( d2 l, r
  856.       }
    8 @/ _& P. ^0 G- y$ [- Y
  857.       break;
    4 a8 `; G- d" t
  858.     case 5:8 Z0 W+ `+ H" c+ Y$ d9 J
  859.       {
    0 A" C: d  T+ L$ I' u/ a6 Y' t
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    : O$ s" {3 C% N0 o; z/ r* r3 |7 M" q* Y
  861.         {+ s% a. Z3 |+ c" j& A2 y- `
  862.           int opt_overwrite=1;, Z- b# c$ [; }. L/ s
  863.           int opt_do_extract_withoutpath=0;
    2 S5 k4 r$ v. i. F: u
  864.           unzFile uf=NULL;
    " Y6 V9 J. F% e
  865. ! T" u% W& W7 ^: W: Y
  866.           uf=unzOpen("Wsa.zip");& Y6 z. Q+ G; R
  867.           if(uf)
    6 B0 M4 N, U6 h0 _6 V' ^
  868.           {
    - Z- \4 D, y* I6 Z8 y& h
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);. o: e: S/ {# N* _9 q
  870.             unzClose(uf);
    & Q1 K0 r# r& L6 R- @! O- s. i6 i
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    4 v4 A7 m1 X# c: t; Z4 x" \0 A- S
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    # p0 a& ]0 x8 c2 t8 i, Y" o4 _5 W
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ; b7 t  a/ V7 y7 P( t
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; r0 R" R& X8 ^2 G6 r# G+ f5 {- u! H
  875.           }
    9 C5 O4 S- i% w7 N4 i5 [0 v$ e
  876.           DeleteFile("Wsa.zip" );' O+ n$ p: A4 y/ r9 X
  877.         }
    5 o/ _# j% D" U

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

$ W7 ~0 Y, e, A6 e( |8 m

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-7 12:35

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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