找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
) b7 w4 _) L' D0 g
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , U) F* T  I( s$ R
  2. //6 h, h" z% r& W! e9 G% {* U& N2 [: }
  3. . S6 B4 J2 t! Z' G) X. d6 T
  4. #include "stdafx.h"
    7 U' z5 f7 G; S# Q; f9 f) M  v" q

  5. 9 ^5 r" p! [0 p2 t
  6. //#define UNICODE
    . _; c  y9 s" H( y6 u/ c
  7. //#include <gdiplus.h>0 b$ I0 d3 w' `' f) U% _
  8. //using namespace Gdiplus;
    % l2 b4 v. p" z* Q. F9 e/ {
  9.   f* ^. Q5 [% L# w1 T# \. G) Y
  10. #include "RevApp.h"' P, i! {( K0 m/ O6 u- ~- Q8 c1 v
  11. #include "RevAppDlg.h"
    * x6 I# j1 Z7 M* s; W

  12. 7 O0 i) ]" h6 w+ O
  13. #pragma warning(disable:4786)& i4 b; \7 }' [+ J
  14. #include <map>
      G* Z) n2 T0 o8 k
  15. #include <list>/ S$ t4 j, b) s" }9 m6 [4 `" }
  16. #include <direct.h>5 P5 W1 {% z  f9 d; y( u7 y

  17. - w( q) ^2 a$ q7 V: q
  18. #ifdef _DEBUG
    8 t* r6 D9 T! m8 u5 u6 Y
  19. #define new DEBUG_NEW9 d: Q) p  W% j' m: F
  20. #undef THIS_FILE
    * U. D7 {1 O3 v
  21. static char THIS_FILE[] = __FILE__;
    ; U3 N/ u* I# N$ v$ @. j9 i" r0 s
  22. #endif. q1 f2 c# t7 g2 Y$ S
  23. #include "SkinResDef.h"  D" n6 p, K, G- h. q# }
  24. #include "ChangeBG.h"' d& p8 l/ D" t0 {- _8 r2 @9 }
  25. #include "AFXINET.H"5 h, u6 _: i2 X; P8 }2 x& r/ T
  26. ( K) [  j  x1 [2 J) s" i
  27. #define TRADITIONAL_CHINESE 0
    / `3 X( ?: T7 b( ]
  28. #define SIMPLIFY_CHINESE 1
    # s% {9 B* L: U! v+ N
  29. #define ENGLISH 2
    % d( N2 i0 t  K/ g! N
  30. int m_iLanguage = ENGLISH;% S8 \* z5 a0 c! T0 y
  31. /////////////////////////////////////////////////////////////////////////////8 W9 f% U6 O, b4 d
  32. // CRevAppApp
    + r! S) [+ _0 r4 K
  33. ( R+ F; i* V  q4 H9 u) n
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)3 {  H6 {+ j& S1 S1 t% N7 G! Q% C( b6 e
  35.         //{{AFX_MSG_MAP(CRevAppApp)5 A# Q6 J' }1 g6 I
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.; R1 [& u7 z5 c: V
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!$ p* ]/ J& q4 C; h5 A# F2 w; q8 }
  38.         //}}AFX_MSG8 {* o7 z. i) d- U: u
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)  [4 S/ S' _& b5 n! ^4 _+ Q: C6 ]
  40. END_MESSAGE_MAP(); r/ a+ }! Z& q: C/ H# f

  41. - |$ G' z6 s3 e0 r
  42. /////////////////////////////////////////////////////////////////////////////
    - d: Q7 {% [2 |* J2 I1 d
  43. // CRevAppApp construction
    $ g& D: H* v$ f( \9 u4 v+ u7 q: `% H
  44. 0 ~7 P! ]0 K9 d1 q& i
  45. CRevAppApp::CRevAppApp()
    % z8 W% x7 k" d" O: b
  46. {) v% ?7 c4 J) m
  47.         // TODO: add construction code here,
    ' K* }0 E2 s) D
  48.         // Place all significant initialization in InitInstance
    ' Q! A% G" }0 @+ \
  49.   bDisplayIsBig5=FALSE;
    ( D! |9 v: L* C' ?! e. Y
  50.   bRestartUpdater=FALSE;
      H/ d4 y5 j. R' M( p
  51.   bFinishUpdated=FALSE;: p: Z- u% S( z- z% N
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;3 G: E8 Y6 p1 J: z0 j
  53.   InitChangeDataBig52GBKS();
    + [( i" f8 D; W' U/ ?7 J
  54.   InitChangeDataGBKS2Big5();
    % H% Q9 ^% ^1 n. N0 f4 x
  55.         /// s, B9 D: w: Y
  56.         bClickRunExe = FALSE;/ m/ @( t$ J; \* m# {6 t
  57.         //
    3 j5 z! n/ b$ r: D- x+ `5 ~
  58. }. k9 |  a8 K% D  g% x

  59. ' q& y7 k7 ~! v2 i
  60. CRevAppApp::~CRevAppApp()
    . p) j  z9 @4 o2 }5 ~
  61. {
    - v. F$ r6 O2 I' C% [/ Q
  62.         // TODO: add construction code here,& G- o" D! K& z6 j# r
  63.         // Place all significant initialization in InitInstance
    5 \! S1 o% R- w
  64.   EndChangeData();
    - E% ]& {8 Q( M2 M2 _. b; R( [( c
  65. }
    - u0 R# ], k. x
  66. 6 i+ A1 j' D1 A8 |
  67. /////////////////////////////////////////////////////////////////////////////
    / ^& p9 \0 A8 g* f- c
  68. // The one and only CRevAppApp object6 a0 Y: D. i9 c3 K* G3 f+ w1 q

  69. 3 y( ?: `1 b2 {2 K. M6 E
  70. CRevAppApp theApp;
    ' e$ z4 g- l: H* O8 \
  71. 6 E5 t* `% D% h+ m/ k* V
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)  q! z' o7 ~4 k
  73. {7 z  G; l  y0 h  R1 E2 L9 V
  74.   int iEOF=0;
    & [6 F, J8 l% C/ y6 u& D; o- `
  75.   char szTempName[MAX_PATH];
    7 G2 H) f5 ?0 Q0 r0 [
  76.   *szFileName=0;$ t0 @8 B: q/ a
  77.   iEOF=fscanf(fp,"%s",szTempName);
    2 b& y3 o- P# j( L. Y2 q# s
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    7 W6 j0 g, w2 o
  79.   {6 _1 z4 R3 @: n; ?
  80.     strcpy(szFileName,&szTempName[1]);
    ' N: ?% E* z- U$ G# x" S/ n& @* N
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 b4 V: O* a' H
  82.     {
    / p7 W! h4 y+ F% P3 _7 k; \+ R
  83.       iEOF=fscanf(fp,"%s",szTempName);
    - d! Z% u7 l! c1 R1 j8 H) R; |
  84.       strcat(szFileName," ");
    # x# t) l6 |) ?2 J& S
  85.       strcat(szFileName,szTempName);0 {" V: r4 |0 s. N
  86.     }- |- }) p: w, Y
  87.     if(strlen(szFileName)>=1)/ W. d- `& w6 r1 d7 o
  88.     {. g& Z1 x" T1 [7 @! n, n- @
  89.       szFileName[strlen(szFileName)-1]=0;. i  q7 `; |+ @# \- m# l
  90.     }+ v( y$ L- H3 C4 H4 |- {9 U  k4 Q0 K
  91.   }3 h1 N; Q) K& ?: K
  92.   return szFileName;
    / V& j3 U- |$ s# g4 A" l# G1 S0 |
  93. }% M& p' l8 V1 s$ K: f$ ?4 H

  94. . J! Y' P# H$ {6 q9 I% H1 g- u
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)) k9 @% L. t9 o8 q8 e; Q& k! Y
  96. {$ y! d4 M- v  \
  97.   FILE *fp;
    ; V) d0 w# \; X5 I( O
  98.   char *key=NULL;
    0 T7 M" y+ x" m5 l* U, }
  99.   char version[MAX_PATH];
    / e2 {0 @0 p7 @8 E* h$ w
  100.   LPUPDATEFILE file,olds;& o/ f( G1 ]6 w1 B& r( W4 b8 Z, e; `
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 f" z8 |% u. X, ~- p" Q' f5 B7 f" r

  102. . g( p4 c7 x; s/ O; ]& o' ~
  103.   UpdateList.clear();$ _+ R$ S( [, Z3 A1 ]
  104.   UpdateFile.clear();
    8 v7 K7 _1 f, J8 J2 Y
  105.   if(GetFileAttributes(filename)==-1) return false;
    * G, t: Z7 Q  `2 Y8 v; E0 {
  106.   if(!(fp=fopen(filename,"r"))) return false;5 _" Z& }0 I4 \$ q% V
  107.   fscanf(fp,"%s",version);, O- B: y% J& @4 e, h- k. l8 ]- W
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    7 I. z1 w& _) M3 u' ^2 ?0 A
  109.   while(fscanf(fp,"%s",version)!=EOF)
    & V- Q& {/ `( R7 d4 {1 \
  110.   {
    ! N: s" m# U8 F" ~) O7 x
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 f) @, J- A( m2 D2 O
  112.     fscanf(fp,"%s",file->path);
    ( n1 ]3 m8 Y$ e( P$ a# E
  113.     ReadFileNames(fp,file->file);
    . I- C9 t) ~/ q7 Z  K' g
  114.     strcpy(file->full,".");
    1 B. C7 A- _" R
  115.     strcat(file->full,file->path);% h: e: T) \  t) Z2 d; {
  116.     strcat(file->full,file->file);
    4 i* @: P: W: _9 w+ q: N
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())/ J; j" j. F0 R7 O' `
  118.     {
    1 i! g# w  ~! \" w* E* @+ T
  119.       file->vers=(float)atof(version);" K" A8 k1 Y5 q/ p! G' A4 N
  120.       UpdateList.push_back(file->full);
    / w7 ]7 r; N2 p. k8 `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));! o- V/ r; v  D2 g$ n6 N, p' I& _# g
  122.     }
    " T  m0 }) s6 ]' ]/ p
  123.     else' z/ W% Y. I; o3 f1 c' t- n
  124.     {
    % \& {# n, ^9 C$ D# ?! K$ D5 V
  125.       olds=(*p).second;
    ' }4 E! W2 F! }
  126.       if(olds->vers<(float)atof(version))
    3 r% H, u5 X8 d, m+ ]5 g( Q4 C: V
  127.       {
      j/ o5 Y$ D/ ?' g* o) e& V
  128.         olds->vers=(float)atof(version);
    0 [: `8 i# v0 [6 Z+ S) ]' p# d
  129.       }6 p$ u7 j  I' s' @4 j. t4 ?0 {
  130.       free(file);- |1 s1 f- G# h9 \# |$ J
  131.     }
    : \3 Z: @0 ?( q( c1 [5 x
  132.   }% E& P) S6 m! s, M# ^. B; ~
  133.   fclose(fp);
    3 R% @' a- r( Q- t) `- m
  134.   return true;
    , j% G& s6 M! W1 D2 ]1 S% I3 @3 O6 S
  135. }  E6 S" Q, m, `4 f, u6 e9 B4 z

  136.   l, s5 c& X& W  W# J
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  l7 ~2 d2 F/ d3 N4 k# R) L* S* f+ o
  138. {
    ' F' F2 [- E9 x( n6 d
  139.   TCHAR  szFull[MAX_PATH];
    , k/ L2 j1 O7 o7 C/ ]
  140.   TCHAR *token,*inter;0 ~2 x$ X7 ~5 F9 |3 v7 C/ \
  141.   *szPath=0;
    $ W, G5 t2 o! S0 }
  142.   strcpy(szFull,szFullPath);7 V4 f; m+ E$ ~9 O) L' f
  143.   token=strtok(szFull,"\\/");
    5 B2 y5 D" X0 z
  144.   inter=token;' K$ |5 m1 ?, A5 Q( C
  145.   while(token=strtok(NULL,"\\/"))
    . n. R" n3 J$ I! u' |$ n! g
  146.   {3 F) u9 M3 e: q* ^6 P
  147.     strcat(szPath,inter);
    ( T% m: U: I  `
  148.     strcat(szPath,"\");+ |0 r& r& X/ R" `
  149.     inter=token;
    2 q, l0 C2 l, T3 T/ G/ P
  150.   }$ R* \7 L) z5 H+ V: i8 j
  151.   return strlen(szPath);
    9 C  K0 H; W( c/ Q& t( U" i
  152. }' q" Z: x+ f7 ^2 d; n
  153. - e( t7 `' C" N. t8 y* _$ i( i
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    2 }0 I# V$ t4 w. g1 Y, g
  155. {  _4 f' r7 k- q# E
  156.   DWORD attrib=GetFileAttributes(Target);* U' G% h4 g" s4 x/ f9 `
  157.   if(attrib!=-1); Y3 a, d; c2 l9 m' O5 m8 G
  158.   {; }9 S3 N! s5 c9 j( U/ y; h
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))3 l( \9 _# g, Q  j6 l- a  q7 n
  160.     {
    0 T. l; Y' C* u% x' z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);1 c1 F* m$ H, X0 f
  162.       SetFileAttributes(Target,attrib);
    8 B! s: R' m6 U
  163.     }
    6 ]! b2 U" F& C8 {
  164.   }
    $ s: a6 w7 j/ W/ k: W
  165.   CopyFile(Source,Target,Erase);
    ( l* s0 h6 O7 Q; S
  166. }0 r# Q; D4 j' r
  167. ) n- W# x* [* F; Q/ t) p
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    0 _9 v, G" N7 o) X6 @, _7 z; x! [
  169. {
    1 G8 W* T5 k1 Q3 q- J
  170.      FILE *fp;
    ! W5 c8 Y4 P- \# \
  171.      char  szBuffer[8192];
    - I7 x$ ?: H# G3 [) D( ~: U; T
  172.   va_list  argptr;
    + [% y' S( A' c
  173. ' H/ s$ C) N7 t6 Q: C5 Z$ d% \
  174.         va_start(argptr,message);
    ' Z0 O) k0 j+ J
  175.         vsprintf(szBuffer,message,argptr);
    5 |+ ~  r3 @0 @" g' q6 Z5 J( L% Y
  176.         va_end(argptr);6 p, H% }; A$ k' n
  177.   fp=fopen(FileName,"a");
    ! v+ K0 @1 M' P. }% N" @# G
  178.   if(fp)* C& A4 C: B- x2 l/ P
  179.   {
    4 ~( w+ x9 P8 i2 v1 X. U
  180.     fprintf(fp,szBuffer);
    , u' m+ u7 h7 f2 D
  181.     fclose(fp);- ~4 g/ A0 K4 d+ u; ~" Y* \
  182.           _flushall();7 ?* X6 e' ]; m3 p- I
  183.   }' ]2 H3 n8 ?- @' W/ I
  184. }
    " J# i$ A$ [6 r! N7 o# b
  185. & U4 g# M# w0 I3 o
  186. BOOL CRevAppApp::Fclearf(char *FileName)
      F* p/ x  U0 e$ R: W
  187. {' h9 s' A- [& e; F* K' u/ j+ B
  188.      FILE *fp;: h- d' H. f) A. }# a! ]
  189.     DWORD  attrib;
    + h: i  {2 W( a9 |) a
  190.   attrib=GetFileAttributes(FileName);" L9 e" w7 C1 \% G1 q2 s. I: Z) j
  191.   if(attrib!=-1)
    0 I  x% r3 N) z! y
  192.   {1 j' ~8 _6 x& ?
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 \, G# k: ^9 k* p) d
  194.     if(!SetFileAttributes(FileName,attrib))0 S* I- [4 c: E7 x
  195.     {
    , p& n) L" f* F; ^. ^: d
  196.       return FALSE;
    ; o& O% ]6 P  k0 z, Z8 ^" n- j
  197.     }3 G9 o) {; m: [/ G1 R7 b) O
  198.   }# q% A% n* M* `9 Y8 r: ~9 w9 T, L
  199.   fp=fopen(FileName,"wb");( Z" }0 T9 Y( ]* c  p% ?
  200.   if(fp): g6 D, C2 E. l7 q& g' b" Z
  201.   {$ p5 I6 T3 A# r* K: C) S
  202.     fclose(fp);! {+ A/ Z* a& x8 N5 L/ i* ]
  203.   }
    & J3 _* a0 |) |' b5 X
  204.   return TRUE;) v9 E) |1 w2 S4 Q( w; h
  205. }
    0 V7 Y) I" U1 b& f! U

  206. " x: k: k8 M$ R7 x1 z* J' c
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    " s0 m/ J* g7 g5 w  R1 P. b
  208. {
    % ~  w0 @- _8 v) d; A
  209.   char filename[MAX_PATH];) |% R$ K- ~3 V/ v1 e' `
  210.   LPUPDATEFILE file,olds;
    8 X- d! M2 A: X5 p: Y9 z& v! U
  211.   std::map<int,CString>::iterator i;
    3 d7 B5 A. m, {6 |) n, V# q( V
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 C* h2 j) |0 `0 B) E
  213.   std::list<CString>::iterator l;
    2 U$ p8 v3 n; Y3 M$ H& Q

  214. ; r* x" `- n" f0 l  D5 M8 b6 }
  215.   if(bFirstUpdate)
    $ |( y3 s# z' ?; H! w
  216.   {* a) U- A; s4 Y+ h: F$ n
  217.     dwCurrFile=0;& P2 s* d4 f  J, b8 G) b; ~
  218.     bFirstUpdate=FALSE;+ p; P0 x% @  z3 U9 P$ M1 r8 ]
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 x7 c2 u- g3 ~2 _: C
  220.     {
    ! o" f" S! J: m! o
  221.       dwTotalFiles=UpdateLocal.size();' A1 a  ^) i9 z# q( O0 q
  222.       dwDownLoaded=0;
    : n8 {; ^, I4 W; U8 w
  223.       bSilentStep=FALSE;
    ! H+ N! a, K0 J7 e$ A& S. @
  224.       bCompressed=TRUE;
    9 G9 h2 t2 |( j1 Y
  225.       strExtLocal.Empty();
    8 @  U( u  V0 H- r5 q* A2 i
  226.       strFullName=(*i).second;0 G+ j1 H% `( S4 |" z/ }8 H
  227.       dwProgramState=AP_CONNECT;( g" U7 B% c: U# a% b& T
  228.       return TRUE;
    * s  J& K# O4 C5 D! E. e
  229.     }& v- }& x& q) H! a9 a/ E
  230.   }2 `8 B3 v! _5 K* d" A
  231.   else if(bRestartUpdater==FALSE)' P7 g6 B) T6 c
  232.   {
    6 o* U. A4 G5 H
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- T' ^5 P( ]$ h& P3 U' k1 Z/ J1 y( Q) v
  234.     {3 F4 M: [) K6 k. n; n2 N. `1 `
  235.       file=(*p).second;0 i6 c$ _8 h3 y2 W) H
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())$ o' K( @3 A% F6 ^3 b- L5 R
  237.       {
      ^3 x8 O+ [; B. G6 t
  238.         olds=(*p).second;
    7 r  P5 g4 h+ B$ n* Z
  239.         olds->vers=file->vers;2 F' i' j: B& V" D0 s: M
  240.       }
    * i& y. R5 ]' ]8 ]/ h
  241.       else
    2 |5 @+ b, Y& K  ?( V
  242.       {
    6 O$ q4 J7 W7 P& _5 E% |# h
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 J% i& F/ |0 n4 ?! P; D
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) W) a6 T; ^: E
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));$ d. l8 B% W6 G" ^/ o7 W, {3 ^* R
  246.       }
    / u8 c: ?1 \1 R2 H9 h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    : ^$ K& n1 [% v9 K) Z9 x
  248.       sprintf(filename,"(%s)",file->file);& B: H' h$ x; K
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : J1 R2 {( f3 X- P
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    , ]- ~1 R' O7 P
  251.     }8 I. ?! F) A4 \$ M0 b
  252.     dwCurrFile++;! \- s  [) c7 g
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ G. U2 d/ y7 y
  254.     {
    2 E7 j1 x6 `8 K- r1 C
  255.       bSilentStep=FALSE;
    ! B; |& X' Z( r
  256.       bCompressed=TRUE;
    8 @. F! p2 _* D: t. C3 _0 z3 I" H0 w- o
  257.       strExtLocal.Empty();5 E: X' \5 J* o0 ~
  258.       strFullName=(*i).second;8 w9 p- j( G& m) ]  }- w- w
  259.       dwProgramState=AP_CONNECT;3 @. X/ v) p+ w5 E
  260.       return TRUE;
    8 D* U  i9 b1 H: K
  261.     }
    6 i5 x- G; N/ M4 W
  262.     if(!bRestartUpdater)! W; L3 G3 V6 }% v- x  n
  263.     {
    ; e5 f5 _2 \- A, x: A
  264.       int iCurrSize,iFileSize;8 g8 _6 s3 [+ @' n$ r0 Y2 W
  265.       iCurrSize=0;
    5 O0 e1 }& z1 w: R, q
  266.       iFileSize=UpdateList2.size();
    8 b! Q& Y9 V6 b; A
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    8 Y+ H+ d) ^# v) Y, q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");: \2 j' K# }. @
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");; p& c+ n. u' f, q4 L  a: h
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 v! U: A) e6 Y" _2 |
  271.       Fclearf(".\\update.dat");3 l2 F# v: s5 m8 w  H
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    : T( v( u, d) H3 g* |
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 a  n9 @8 H* i' g& ~* d; Z( K
  274.       {, {0 l2 a1 }2 k2 r
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
      }! d$ T3 R8 L# X4 T
  276.         {
    ( g4 A& ^% H" n  z
  277.           file=(*p).second;/ z/ [# I7 W) \/ H& s8 U3 R
  278.           sprintf(filename,"(%s)",file->file);! Q' t0 X. F" X, t
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' Z, t& O6 C# U, _6 o% J
  280.           iCurrSize++;
    ) ]; F& P& ~$ d3 ]7 F# M9 S
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));3 g8 ?6 t; j" J. p0 T+ e% n; }
  282.         }
    % A' Y) V5 @0 ?/ i  Q4 B4 H
  283.       }+ b# r5 }9 H% s  g
  284.       unlink(".\\update.txt");
    3 `  D* N" s7 b% B( M/ _8 P  K# }
  285.       unlink(".\\update.tmp");
    + y: Z1 @4 [# ]8 G  o# ^
  286.       Fclearf(".\\checkversion.dat");7 k& ^; R3 T+ D2 A0 z* f* D
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    & D7 p0 U3 \% P+ P
  288.       if(UpdateLocal.size())- S' \3 B4 G) e8 }, z9 |
  289.       {
      Q, C) X, M1 X4 q6 i, ~0 `
  290.         UpdateLocal.clear();3 e6 i- C% b. d" O/ j2 }6 s
  291.       }: |& p$ z7 r* m( h; |9 O  d
  292.       if(UpdateFile3.size())2 ^) j7 @" e% K4 L" x: V5 [, C
  293.       {
    0 P2 n) x3 [4 p, C- V) {2 x% k
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 Y2 Z" @) l" P: q! _
  295.         {. s$ x" Y0 ^6 I5 b$ g
  296.           file=(*p).second;
    0 Z8 I( ]! n5 u1 {* s6 K
  297.           free(file);
    # F: h8 H: g9 e7 `4 Z
  298.         }. P- G' P9 j- f3 x' T1 z1 e
  299.         UpdateFile3.clear();6 o1 o- f% P0 c4 }
  300.         UpdateList3.clear();
    / H' j7 T: m6 `# F" ]1 x
  301.       }' W& d. G1 `2 |  ^9 _& A1 w9 Z
  302.       if(UpdateFile2.size())" p# @4 X3 Y# k* o
  303.       {* e, D4 ^" Y2 f  ~2 Q9 A* g
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)6 h3 e+ D, u' i( S2 c! N
  305.         {
    ; w' }$ E; k0 {6 b
  306.           file=(*p).second;4 Y% v/ H5 D  o: Q  P: t
  307.           free(file);3 C" t  B) @0 w  J% e  f, U6 a
  308.         }
    1 W3 R( T: b& m! f( ]0 a
  309.         UpdateFile2.clear();
    ( x2 [+ j% Z# v# S
  310.         UpdateList2.clear();$ k0 R9 h/ X" r* [
  311.       }
    8 g, ~# w/ v2 b
  312.       if(UpdateFile1.size())0 _6 E5 R, F0 C5 X* d$ k$ O
  313.       {2 P# ~6 k2 \9 S4 i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ r$ \( Z6 q6 `  K
  315.         {
    ) {  A9 I' B& U$ _4 k3 B+ ^& t
  316.           file=(*p).second;2 p+ i  Y- N/ c
  317.           free(file);
    * t4 a4 K% U" \  u  X, t! b7 ~, y
  318.         }6 Z0 L; M2 [# {: M' s# ~
  319.         UpdateFile1.clear();
    ' x& ~0 l4 i+ Q  _4 e; }0 k
  320.         UpdateList1.clear();( m* `+ U$ |  h3 \
  321.       }1 L/ i; P1 D9 }1 q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ! V  A% t$ }( n; Z. w
  323.     }* o, j8 z& P( G: [: `" L+ ~
  324.   }
    $ Y% O) E# }3 X( Q) u
  325.   return FALSE;
    & Z/ I7 K; I$ J& t0 }# W4 f
  326. }# b! p' q6 h4 z2 c

  327. 6 q2 o5 U& `8 ^2 J6 J  H( M
  328. void CRevAppApp::ClearAll(void)
    % g" f2 y7 _% {! g0 F- i" S
  329. {! _, ]2 H: h) @1 y3 k& ^
  330.   LPUPDATEFILE file;8 r- Q$ a7 a2 d$ v- `
  331.   std::map<CString,LPUPDATEFILE>::iterator p;! b6 u* |* P2 s$ S
  332. ) R! J# W- p4 {' e1 v! N7 j
  333.   if(UpdateLocal.size())
    / L/ k8 n- P/ N: R8 G: U
  334.   {. }/ m; U) D/ H5 l& k
  335.     UpdateLocal.clear();
    ( ]& \3 n6 V" E2 ^. v, _
  336.   }7 D: s- \' }# g4 x/ o
  337.   if(UpdateFile3.size())! D0 M6 h% s7 p0 m" I- |
  338.   {, t8 o0 c1 t9 i( a
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ g7 v$ U$ |& `  X) U  C; k
  340.     {( {3 s2 p1 H) v) W5 ^, [6 _' O
  341.       file=(*p).second;% {  \% k. m% J
  342.       free(file);( C& z: L/ w+ W# d8 O. S3 L1 H
  343.     }
    " h1 ~- l" {% ]- l& q
  344.     UpdateFile3.clear();& u4 D; M( ?7 t" k9 N# J( [
  345.     UpdateList3.clear();
    . F& a3 y- U  B4 U3 P9 g6 W
  346.   }7 Q) A5 k- K  t: h/ A
  347.   if(UpdateFile2.size())
    3 ]+ U. G# i) `# L) S
  348.   {; K. I" Z! g) \# n& P
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" n1 I. z$ A. U, N/ d9 J; O
  350.     {
    ' ^$ N& m; G  L9 t: M
  351.       file=(*p).second;
    4 i0 X$ n4 P; A' e! `9 D
  352.       free(file);
    0 q! q: E* A' E0 d2 z8 P# y0 x3 r
  353.     }
    1 H" z( `& \( P' ~6 {
  354.     UpdateFile2.clear();) `' R; b1 p/ B
  355.     UpdateList2.clear();
    0 G' l6 X& c; q4 x( A) i8 f! y( j& U0 L0 w
  356.   }
    0 j) E7 Q: v, C9 u( q, t
  357.   if(UpdateFile1.size())
    5 H+ z7 O/ w6 f! _2 F$ t2 N
  358.   {
    2 F! y; R6 i9 R/ Y! Q, a
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 m* U8 y# }2 w% R; V
  360.     {
    1 N' s/ h( c; x: t1 J% }5 W
  361.       file=(*p).second;) p  f8 \, M, ^! f7 M
  362.       free(file);
    ; P; Y, K( u& z+ S2 O! J
  363.     }
    5 [" v( Z# j7 k  Y
  364.     UpdateFile1.clear();2 \! d! F( `7 ]4 L" @: l
  365.     UpdateList1.clear();' C3 o6 q& B3 n; ^0 i) Y
  366.   }
    - }  s3 T) n+ A" j2 ]  l
  367. }  7 r: a$ K  T* S' j: Z0 H1 u7 N6 K; p
  368.   ; r1 R9 _5 c3 J0 v$ \" S
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 o$ I5 h6 q& [$ X# y3 l
  370. {% E3 n/ M+ e0 |) S% K
  371.   int c;7 v  [6 G( v: b4 \" i/ i! @
  372.   LPUPDATEFILE file1,file2;: S8 V1 e8 N' k4 I8 d
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 v+ x; t7 y- ]/ l# h7 n/ q
  374.   std::list<CString>::iterator l;
      e  X0 m1 ?% @. Q9 `

  375. 6 w) C6 V- |. P1 Q
  376.   UpdateLocal.clear();
    ( l/ d# p: C9 m% C
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ r4 k. ~3 F/ W+ f* P* ^$ P- N5 h
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);- B$ s5 S' ?. q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ( q: f' j9 |, [' G9 B
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);' l* @. k2 r4 F8 s* u
  381.   if(UpdateFile3.size())- I7 x. O3 m  W$ C# P5 R
  382.   {4 ]6 f' z  y9 [0 N1 M) o# I" y# B
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++), Y# Y; I8 h3 M1 U9 P: I* ^
  384.     {
    7 ^" Y9 b; d# ]/ L5 _
  385.       file2=(LPUPDATEFILE)(*i).second;
    ) ?# R1 T% B7 i& P" n$ t! ?
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / {& q2 s! X( K6 D6 E7 w: x
  387.       {! l# l; C6 D" e, |
  388.         file1=(LPUPDATEFILE)(*p).second;
    4 q" O) g( _% }+ T( ^+ Z. t9 L
  389.         file1->vers=file2->vers;8 C8 |1 ~% _) W' `
  390.       }- ]" N+ I/ V. l
  391.       else
    ! h7 ^1 J% i7 j/ K9 r+ a+ \4 x
  392.       {
    % A6 t0 L4 g& H5 o' K/ @- q( r
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& T, B$ q3 C7 s/ B' L
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));3 ~! ~9 B& Z3 e' f' z+ }- m
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ( j/ y" W4 x' E7 H5 s4 Q! }3 p6 _
  396.       }
    3 `- f) n6 V: I9 O
  397.     }
    . [3 k8 d5 Y* ?' J5 @% u
  398.   }
    ! D( F0 a2 e! o$ V7 H1 ^" i$ F
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++); W6 J- ^% K/ }
  400.   {
    ; }* w1 H& r4 g8 i9 E, z  m6 S
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())7 p# d) N8 D% M  v
  402.     {
    # ?0 E$ w  l% C* u) b6 j
  403.       file2=(LPUPDATEFILE)(*i).second;- R$ F1 z( b- Q5 L* X
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 [: r; g8 Q  ]# K4 u
  405.       {) G- Q+ O& Q5 D0 `1 q
  406.         file1=(LPUPDATEFILE)(*p).second;6 X* x, ~8 g3 c" Z7 l5 i( @
  407.         if(file1->vers!=file2->vers), |' \. r2 L4 R6 V+ x' D
  408.         {3 C3 D- Q7 w* g) A+ S
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : ?/ w! Y# g2 p
  410.           c++;
    . |3 q+ F% V3 y4 b+ U: e) L* ~3 ~4 T
  411.         }
    8 K# ~/ P  P' Y; k. E6 k8 ]1 a/ x
  412.       }3 w' i$ Q# w+ D% |) M
  413.       else7 ~. E0 t( x+ l3 ?4 A9 U. Q# e
  414.       {, Z4 P- V  }& }
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 S( D; o$ q9 q4 @1 H$ f3 X
  416.         c++;' C0 u: q: z9 b. {: h: k" u
  417.       }
    / `$ {" o+ w2 a% `7 d9 w4 }/ p0 Y
  418.     }3 {. ^9 c& U3 `. O% E
  419.   }
    ! C# o  Y1 ]0 h+ g0 g! Q+ c
  420.   unlink(".\\DownLoad\\update.txt");$ ~# R* z$ T; b5 a* Z0 E% K6 F1 z
  421.   if(UpdateLocal.size()) return TRUE;, D* R; O1 a, k8 f
  422.   else                   return FALSE;2 z7 z7 w6 m! a" H' ~& ?
  423. }
    & S0 X9 C) H/ C. t& U2 G6 `* t
  424. 7 |) x7 {8 W# G: u, ~( J2 j
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"# @! k  h4 _* l+ }" Z. V
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ! {8 X! {+ w- j- a% C
  427. 6 t8 i# ]* W2 Q5 _  S" R- ?! X6 E% g

  428. * d) C7 k+ u& ]6 w

  429. 1 S" {" j( R/ [
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; F. Y8 |. s- A% E, D" V  g: S
  431. {1 S# c, H) ]& i
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    2 D1 c8 l4 ?  }! g: R3 `
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( D# }  R  B( ^6 U/ w, c$ x' p
  434.   {
    8 O8 ?1 f; l2 p: t5 n& c
  435.     char szLanguage[50];. R, B: F- d6 G5 F% l$ a4 I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : R# N4 [( W% n# P* U% g
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; e4 O( F* f; A/ b( m/ b
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  R3 g* s9 g: V7 Q
  439.     else                                   m_iLanguage=ENGLISH;
    . _9 w' x4 z" [; y
  440.     char szRegister[100];0 l9 V" g- |* p  g6 U6 b
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 V1 {* k8 |2 f- ]+ I# S8 n
  442.     strRegsName=szRegister;+ E  x3 ]. R8 o7 `5 z3 Z) P5 w
  443.     char szPatchURL[100];
    9 u! @7 x* R2 V/ H
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 P2 A! Q1 r/ ^2 U- d2 i& F
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 Q! p" F$ r0 g6 j; B  _
  446.   }
    * [* i# b5 M) T  s
  447.   else
      J9 v" x  o' |$ K
  448.   {
    ( x$ h  N* x$ w& ?& p2 N- F
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : L$ w/ B! ?! t! O9 T+ Y
  450.     strRegsName=DEFAULT_REG_URL;
    ; X* L3 ^. e" {) i, Q7 J. t9 Z$ Z
  451.   }1 J3 u4 h' s3 D6 n: F1 o1 B- m: x! u
  452.   if(GetFileAttributes("hosts.ini")!=-1)' t/ Y9 c2 }! ~5 g0 R5 ^) I+ T
  453.   {6 T8 D0 Y& D7 z* \) L
  454.     char szIP[50];
    7 X% O4 \; e3 g) X4 N
  455.     char szDIR[300];
    3 L+ q! V' ^+ }. Y' H5 G
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")): `4 L& n2 e+ S0 |  Y
  457.     {2 n6 k) ]( ^* m* t# n+ Q4 z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    9 c" ~5 T$ x' l: {! a* L6 F
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ( ?+ N) _4 i* @0 ^
  460.       strHostName=szIP;
    5 M- j  E( T2 Y: b- V/ U" W
  461.       strHostPath.Format("/%s",szDIR);* z7 ^8 ]* o8 L* e; f
  462.     }; q& M- _: D' H7 n
  463.     else
    . s7 {; i) l1 w2 F- ]
  464.     {: b- t' i. C& w0 N9 h
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 T. i1 t  I1 b' o
  466.       {
    0 M7 @, B+ o- c7 y: r
  467.         char szLanguage[50];
    + E: J7 G( q9 p+ ^1 I
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + n2 [% j: E% n1 i9 O
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 g! w! x0 `4 k3 M1 c, s9 R! E
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 L9 ?1 X4 W+ {* n& y+ N6 P0 |
  471.         else                                   m_iLanguage=ENGLISH;
    8 K: p3 W% ]1 Q) {7 ^* @
  472.         char szRegister[100];
    0 U3 @: }% b: b4 o" `
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 Z( @2 V, [% @* G$ V9 g( s% o
  474.         strRegsName=szRegister;) n; T9 B, Z6 s# e/ Z2 |
  475.         char szPatchURL[100];
    8 q1 S/ I% S. C5 g' ^/ d
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ m$ h4 O: a4 ^' H: t$ }
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, w; I: y2 W1 M
  478.       }
    ' [  D" ]6 e5 [: e$ E! g
  479.       else+ d3 n$ g, A5 X  Y* K+ y
  480.       {& e4 [+ U; f/ K
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / B3 F3 ]" e2 }+ R
  482.         strRegsName=DEFAULT_REG_URL;, S' t/ A6 j$ C6 e1 `
  483.       }
    , f3 u: ]  n7 ^
  484.     }
    5 I3 Q6 f' l! `
  485.   }
    ) W% W) h* V* S% R; C
  486.   return true;
    8 [$ O$ P: n; b3 v( ~
  487. }
    ( i% T4 [; F9 q& p( v! @  _7 v
  488. ' z4 ?$ P9 L: R
  489. #include ".\ZLib\unzip.h"7 S5 [- s3 W1 K; u7 A5 P: m; ^
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    2 H. F, v  R7 `, t3 K2 Y/ O0 `
  491. /////////////////////////////////////////////////////////////////////////////
    9 T* y: ]3 D8 T! V& V" y- w
  492. // CRevAppApp initialization
    $ }% Z; B1 [8 r+ w! N, D$ @, {, ~

  493. : d4 R/ J/ v1 K4 }- o
  494. BOOL CRevAppApp::InitInstance()9 U5 B& a% H% x+ x9 c
  495. {- m% w3 `; N* O
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];% }8 F2 F  N0 m( p: F- Y% n- N! P
  497.   _& w' L+ ?5 S  f' h2 q( G' D
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    & T3 M* U+ V# X# k9 x* E
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" j2 Q2 l+ A5 ^/ h, l
  500.   {" D  G, S( X$ p, k" n  D( v6 h
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    $ m4 B) H, o( l( f/ ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    2 H- m6 |% k7 t- E, d1 [% X
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))9 q" `/ c9 I0 ?) s  p
  504.     {
    $ m$ i9 q; d: N' D) ]
  505.       strcpy(szPath,szPathTarget);
    # i. @6 F3 d" b7 U: h
  506.       SetCurrentDirectory(szPath);+ G- L/ T0 i5 |, o9 c3 p
  507.     }
    , }+ m4 B( p+ C  `  v
  508.   }. l% t' ]! C$ F$ R8 C" T
  509. #ifdef _DEBUG
    3 \% o4 Y1 [4 Y4 g  f7 U
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " c7 ~: B9 X0 |: q9 S* @) J6 P
  511. #else: F; C6 [7 _1 d
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' e$ j* M, m3 M- g' s2 ~% d/ g' z
  513. #endif0 V# a. S9 z; r
  514.   {: p0 x% }6 f  E4 ]& x1 W
  515.     char tempFileName[MAX_PATH];4 [* S1 ^2 I, d2 p
  516.     strcpy(tempFileName,szPathSource);) a$ y0 q- @6 m1 H: ^
  517.     tempFileName[strlen(szPathSource)-12]=0;
      k# i( G" c4 w1 [1 S
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ) u' X/ M9 |* f& a. ^  W+ ~
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);" Z% ?% v. J6 z3 u- y& W! K
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ) b! V8 S' t/ I, n
  521.     return TRUE;$ T% o1 ?9 @5 ~. l* ^+ J( W8 |! \  d
  522.   }5 W( c" W0 q$ u+ E
  523.   // Nuke 0118: Delete run.exe( \/ z4 q9 \* U* Y2 y- A6 e
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    . H, V6 }1 e" t  H. U; S
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / e5 a1 h$ A8 h# B& [+ N
  526.   if(!ReadCfgFile("Config.ini"))
    & @' k- f7 h' F
  527.   {# G4 F# M4 s8 ^/ \) _3 P2 E8 m
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);5 m. X6 _/ C1 W
  529.     return TRUE;
    : x$ w6 l: \8 [/ D
  530.   }
    - b" E: [: U  X$ u. o! I: o; o
  531.   HANDLE mutex;
    3 A8 S7 e; V9 b, }/ B
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    & e% F9 ?$ H& U4 [" W
  533.   {, m% D0 ]9 }- ]6 o$ ^" j: O1 p! f
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)' N) n! h+ |7 t8 v3 _5 }* x
  535.     {: d3 W! P, o4 x* Q* g
  536.       CloseHandle(mutex);( _! n1 m' x5 E7 y" u4 E! p
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);% B$ C2 Q1 O8 K- A8 i
  538.       return TRUE;
    6 O3 ~" b$ F  ~2 Z( K+ y
  539.     }
    5 m/ d5 H# I  ^  Y5 o) P- ^
  540.   }  
    2 L' s1 L  L1 z- g9 Z6 q. l
  541.   CloseHandle(mutex);
    1 L+ L6 d  j; w
  542. 3 ^) g$ z7 J; ^  A
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);" T" d" Q8 s9 s6 L# u1 |5 L
  544. 1 a( A# z' G8 i5 y( O$ _1 w$ o2 O
  545.         AfxEnableControlContainer();
    4 o0 k7 z1 l1 H0 M- A" x

  546. ( ~2 N: Q0 m2 g6 y1 r
  547.   bCanUpdate=FALSE;
    7 e) ?4 g/ c0 O* b# r% f7 U
  548.   dwStartUpSteps=1;/ ]! Z. R: `: v- f% h3 [1 ~
  549.   dwProgramState=AP_NOTHING;6 s: E1 o4 g# d
  550. % o2 q+ Q  D) H% d5 V2 a3 R$ f
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ' _# w- K8 \! _: o9 P- |

  552. / @& D) T6 F9 j# u5 w/ i! p
  553.         // Standard initialization
    ; @6 i" I. Z% U# q3 A, L7 o* R9 H
  554.         // If you are not using these features and wish to reduce the size# R' S* i" b# M7 H! M4 u
  555.         //  of your final executable, you should remove from the following* T% w. M2 s4 h
  556.         //  the specific initialization routines you do not need.
    + ?/ i0 [+ t( o. Y7 d9 r

  557. 9 p( `) T/ [& d- W- J  n. R
  558. #ifdef _AFXDLL
    4 a% w3 a! s- f) U
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    $ k  y9 }7 j4 `# Z9 ]
  560. #else
    5 a, e! s% q7 F' m/ J( [
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically0 P3 B# F) q- E# D+ B
  562. #endif8 n0 y" k; u$ {0 K& V0 o6 ^

  563. ' k; k; _  U& S5 v4 Y' p
  564.   dlg=new CRevAppDlg;% ]" }- Z) K2 |# m) S8 ^0 b+ t
  565.   dlg->Create(IDD_REVAPP_DIALOG);. ]/ V: i4 E1 x; }( n& m8 W
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    * p& d, q4 o3 _$ S' ?- v  S
  567.   m_pMainWnd=dlg;: L: |) d) @$ I+ L$ G

  568. ! Z1 c4 C. x, R! M" d- e" U2 O9 k, [: y" ~
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);6 M+ V2 i/ D0 t9 ?; Y$ y2 ^! K7 F* L

  570. 7 M5 E) S* q* @6 s# h# H
  571. //  GdiplusStartupInput gdiplusStartupInput;, O, o3 E- i9 {2 g( Z
  572. //  ULONG_PTR gdiplusToken;
    7 V% P1 B4 S; o/ s% P& u% @
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 z  F* H7 w' |, o$ s7 ]& ?
  574. 1 t3 h8 f7 H* X0 y
  575. //        CRevAppDlg dlg;9 L+ {. M8 D6 n$ ?4 H6 O
  576. //        int nResponse = dlg.DoModal();. V6 i# G: [$ {% I" }
  577. //        if (nResponse == IDOK)0 ~7 g- A# D# z4 o$ H$ M( C
  578. //        {2 t6 Q, }8 x/ n) T6 T1 W" Z
  579. //                // TODO: Place code here to handle when the dialog is
    9 ]5 T' m6 t0 I" k& c, ?- F
  580. //                //  dismissed with OK
    : ?9 G4 b9 D, M: U1 X/ C5 _8 `0 D$ I
  581. //        }3 Z8 @6 n9 N2 {. x1 @
  582. //        else if (nResponse == IDCANCEL)
    ; k8 G7 c' `% x  k0 H
  583. //        {
    0 k3 r' U* k7 ?
  584. //                // TODO: Place code here to handle when the dialog is
    0 }4 f1 n) M6 g( c$ H- s
  585. //                //  dismissed with Cancel
    4 A5 B: A* Q' p! T- b$ r' @
  586. //        }. Y5 \4 N5 a( E0 i  u) k* y
  587. 7 K( Q1 n" q7 d
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    2 F! {. f) M* d" p  [6 h* |
  589.         //  application, rather than start the application's message pump.; a1 o& U4 D/ @  f
  590.         return TRUE;6 r& R. C1 x: }' |4 f) W
  591. }
    ; o( [1 y* \! v1 ?) x# m

  592. 1 f3 t$ g0 M4 M# I) P
  593. char *CRevAppApp::strtok3(char *pSource,char *token)( L" h% ~# O9 w; M* m' f, Z. E+ O
  594. {  a* Q! ^0 N' ]; \/ A0 m+ G
  595.   int i;) J8 S2 O: `) Z5 }% h! _5 m
  596.   char *szRet;, I8 F% H) E. a0 X

  597. + C) i+ e5 u3 _+ w
  598.   if(pSource) { itoken=0; sztoken=pSource; }3 d5 o2 E9 i5 J$ |
  599.   if(sztoken)
    8 ^% `, {. s( ^0 p9 S
  600.   {
    + |" r$ ]" d8 w
  601.     szRet=&sztoken[itoken];
    ! `! q; L% I; N( n% T7 [. h
  602.     while(sztoken[itoken])
    6 g- u  S1 e5 a% z; J+ W
  603.     {6 y/ H/ \: V3 ^7 ]
  604.       for(i=0;i<(int)strlen(token);i++)
    7 S8 H# W9 n. _1 y4 V
  605.       {
    : C- c5 C1 s# F% z# S
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])$ I+ j2 u2 B# [  B
  607.         {
    6 ]" t2 U4 W8 e3 l
  608.           sztoken[itoken++]=0;1 e/ h5 M6 w! x
  609.           sztoken[itoken++]=0;
    + a3 @2 q  S+ c9 X: j4 g# A
  610.           return szRet;
      e% [* [6 [4 R/ `
  611.         }
    " e. W! k5 ^. N1 C
  612.       }
    , N9 y2 [: ^, }" [0 F9 E% U0 C" `
  613.       itoken++;
    / L& K6 U$ P. Q6 c4 r$ ]9 p1 `
  614.     }
    1 x/ }' R. f: G! Q/ M6 a+ P8 ]
  615.   }
    . g% w0 n& e& [( b# h9 n
  616.   return NULL;% _: N4 y; m! N% E
  617. }
    8 S1 K$ N  M; O1 `  A7 C

  618. 5 u4 D! ]( Y0 j3 E; A
  619. void ProcessProc(long Total,long Current)
    2 ^# g' |* \: I2 P3 c1 l2 y
  620. {' x  _0 |' E6 j- |$ T5 x
  621.         MSG msg;! _0 X. m2 c3 h- h
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);* m) z8 X6 a; R3 c
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    2 Q7 G9 B2 I: @$ i4 Q  W
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    7 q" K  B0 H" Y' Y' h# Y% s
  625.         {
    # s, e$ x/ a: ^: f1 x" f" w
  626.                 if(!GetMessage(&msg,NULL,0,0))% Q* u( Z2 E+ A0 R$ L. s& h- X4 V0 c
  627.                 {4 c! ]: i% {3 h" m+ J2 ]7 g. u
  628.                         return;7 m- d# @8 S! w% m1 i; e
  629.                 }# l# @7 b9 l8 B4 Z% c9 U& ?
  630.                 TranslateMessage(&msg);: B( {9 q% E0 O  p9 Z
  631.                 DispatchMessage(&msg);4 F( {: H  r+ A! x/ x. G
  632.         }       
    " s% ?: n$ t+ F8 R9 t
  633. }
    $ n$ e- t: P: w; T( z3 _+ c1 B

  634. ) a. N0 D2 S- ?+ H# n( G8 `
  635. BOOL bFirstChar=TRUE;
    % I( v) ?6 d+ o% `. c

  636. ) a/ K& V- a9 \5 m3 @: e
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    " {# m+ }+ V" c/ O+ o/ V! t# F4 L& s
  638. {4 `9 L: _" G% ^; s8 @9 _# u9 t3 ~
  639.         // TODO: Add your specialized code here and/or call the base class
    3 P; T/ @* t! i" q( k- t
  640.   switch(dwProgramState)
    0 H3 f4 K  B% N$ N: G! F2 `/ D/ p
  641.   {
    6 K% \8 q2 h* V: d' K
  642.   case AP_NOTHING:& G0 i- [* k. T- C0 E
  643.     switch(dwStartUpSteps)
    / T- f! R4 p" N% d
  644.     {
    6 x& {) ?/ m: i& l* ?* }$ r
  645.     case 1:
    6 F: q, `: O7 M: @6 H  D& t
  646.       {
      x# h! n; J7 t8 R
  647.         int i;
    0 a. }* _3 b& B$ k4 b7 r
  648.         CDC *pCDC=dlg->GetDC();& n2 L, L! ~2 O' o
  649.         HDC hdcwnd=pCDC->m_hDC;
    - S2 _$ c& i. D: {+ E
  650. //        Graphics graphics(hdcwnd);0 a3 l! {+ l8 I7 G6 Z3 R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");: \+ D, x  l$ g5 c& w% |" |# P
  652. //        INT iWidth=bitmap.GetWidth();
    3 a2 h; i8 Y. O# g
  653. //        INT iHeight=bitmap.GetHeight();9 ?9 P+ d& E' K4 V# q
  654. //        Color color,colorTemp;/ y( f+ P7 W' `2 w/ o" z; T5 |# @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    2 S5 X' h. u- k# t4 K* N5 i
  656. //        {4 V* D$ q# B4 k5 h' o
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    + m7 d8 ?0 J+ E4 p$ B8 b
  658. //          {, a  g: G9 m* k7 x  A% P: X6 {
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 w$ _' l9 b4 H& h% L
  660. //            colorTemp.SetValue(color.MakeARGB(
    4 y  I3 ~( h$ o
  661. //              (BYTE)(255*iColumn/iWidth),
    3 y, f$ U1 _8 p5 u
  662. //              color.GetRed(),
    7 X" M1 s% K' q
  663. //              color.GetGreen(),
    . e; S" t% N+ G
  664. //              color.GetBlue()));1 i0 h7 L, a0 U+ V
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);2 M. i* u9 R. X' j* A1 @2 O3 g
  666. //          }
    8 M9 f4 o9 `' \! h
  667. //        }
    9 [3 u. B; I! @2 M
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);2 J! o- \8 g- x
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ P4 Z! l! e9 K! t- q% ?
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    $ d' W' h8 h  C6 v1 ^" e5 _  v
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ s" G0 {+ @! p! a  J# E- ~
  672.         for(i=0;i<240;i+=8)4 c1 Q, I5 y  i
  673.         {( M$ `7 B' |: {! `9 |
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % k4 g( g- p8 M. j/ x
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 N, m6 j) T5 y# f9 @  {
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 O" o# X* c0 `  Q& P7 v6 P3 R
  677.           Sleep(33);
    $ Z, {% {. A* H+ y" V* n
  678.         }- F% F4 x! F; s9 F* U4 e, c- @6 d
  679.         Sleep(1000);" ?! g* `# s7 _  j0 o
  680.         for(i=240;i>0;i-=8)
      O9 L2 T2 ~& H6 a- R
  681.         {9 p) N% C# h- {" }0 p
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 c3 j% X9 d- T+ I7 V* j$ c
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 O, M. ~: C6 ~4 q0 G, c
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # ]! q9 G1 M! [- l4 n7 B
  685.           Sleep(33);8 T: B4 h: k& \$ j% R! q
  686.         }
    + q" P% V* `! R1 `6 D! G8 n
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    , B% r- w! ]/ t/ J7 Y
  688.         dlg->ReleaseDC(pCDC);* I3 n, ^( L$ h, Q" K
  689.         DeleteDC(hdctar);# }9 L5 y! X2 w  O
  690.         DeleteDC(hdcsrc);( O8 P$ v5 a' M% W; Y" S' K
  691.         DeleteDC(hdcorg);5 d0 @! j4 w' U7 E, V3 n
  692.       }3 x: ]. ?, ]' o! [  T
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    6 k4 a/ Q- S. A, {# m1 J7 R
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    3 u$ I5 h2 R$ @( |7 I5 v( ]
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");2 P& X& B8 `* {# }2 _1 t
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 @" s7 o3 {# p  Y, }
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ f  E: T4 N( s, F0 v8 p
  698.       if(!Dn.Connected())
    * w3 {3 L$ J! o: c: w4 e& o, Y
  699.       {
    9 R0 a! S7 v9 q5 }& V
  700.         dwTotalFiles=1;
    8 O6 d6 e- g8 ~
  701.         dwDownLoaded=0;
    5 J7 n/ Y% O- g
  702.         bSilentStep=TRUE;- Z& i1 h% y& I
  703.         bCompressed=FALSE;
    7 P+ Y/ |# I& o* ]8 C
  704.         strExtLocal.Empty();
    ! p% o# d1 P% t' h* u. _8 n
  705.         strFullName="readme.txt";
    ( s/ y; M4 h* x; b/ _9 B
  706.         dwProgramState=AP_CONNECT;
    - f4 |$ ~0 G1 ^5 U0 w
  707.       }
    1 ]( E+ s. c0 Y9 M
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();% i% M& }" O3 y; J, B
  709.       dwStartUpSteps=2;
    4 k" A$ m( o7 ^0 _8 {! d
  710.       break;& ]' ?/ X' d& u  v, W" Z
  711.     case 2:
      d, R" `9 q- A( F; z4 |
  712.       {
    7 C; E8 B9 u! A8 W! t8 f
  713.         int iEOF;2 x- C! A6 m; P- ?
  714.         FILE *fp;7 u* I8 m* r4 w! P  j" b' h# h
  715.         char szString[512];, }$ k0 z7 O4 p, v$ {( F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");. d7 W: M* A* ]" F- X
  717.         if(fp)
    + v9 K3 `  O% O& @% z8 Q; F6 p
  718.         {
    , E% _+ m$ \) v7 B. L
  719.           do
    / Q0 k" B( l$ i/ Z/ r
  720.           {/ T. i9 i5 R" ~- c
  721.             iEOF=fscanf(fp,"%s",szString);3 z- L! n2 a9 a3 B# I
  722.             if(strlen(szString))
      k3 c3 f# d, z, Y! r2 F0 E
  723.             {
    6 `& l0 Z' R/ Q/ T! D
  724.               if(bFirstChar)( ?( h3 E1 ?! M. m" h
  725.               {
    ! P5 ~! }! T8 A* D2 V
  726.                 bFirstChar=FALSE;2 {$ C) Y/ K6 E8 Q' N* K  s0 S
  727.                 bConnectIsBig5=FALSE;, m! q# S1 v% Q" L4 |
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;. z+ T8 |' E  Q% S! M& p
  729.               }3 [$ T- c) Z+ J
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));1 R  O& k% `5 p0 s4 }2 A
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));6 d& D* P% V( m) F; H$ B
  732.               dlg->m_ListText.AddString(szString);
    + U" j2 \( V' P7 u3 Z& O, `
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& a$ h3 V; D4 r5 z! F
  734.               *szString=0;
    9 q4 j, O- O' E; R/ u5 I
  735.             }0 P! E: y, L0 d/ X8 W. y7 x
  736.           } while(iEOF!=EOF);  v" g% D! ^3 Z1 R! P
  737.           fclose(fp);
    ; c; e/ V7 `! W( p0 U3 X( f% k/ L4 K
  738.           unlink(".\\DownLoad\\readme.txt");2 c% ]$ z" u0 u, [  w
  739.           dwStartUpSteps=3;6 y9 S+ n5 r9 @  J5 E  p
  740.         }
    2 b) z& L+ ]# J) J' g0 N
  741.       }
    7 |5 r; m* W! W7 Z8 Z
  742.       break;
    . b; r' c; K1 O' C
  743.     case 3:0 e+ J1 Y* X: o3 h( Y
  744.       if(!Dn.Connected())* w, b& e. F6 v# l% l% Y4 L
  745.       {
    , R& ^4 I) `1 i! k$ A* ?6 A
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);7 c# i7 D; N) s- u, p+ `
  747.         dwTotalFiles=1;7 m+ f9 \4 M7 W- e$ b
  748.         dwDownLoaded=0;
    . K7 v& _3 U& W! f. W
  749.         bSilentStep=TRUE;
    ; C6 h& c5 U5 @7 j8 y# D
  750.         bCompressed=FALSE;
    + C: l2 E3 l$ {% [4 D# f
  751.         strExtLocal.Empty();) Y9 R9 ^4 }" {9 \( b
  752.         strFullName="checkversion.txt";
      x% i" f, g  [/ z+ a; |* ~
  753.         dwProgramState=AP_CONNECT;) k5 Z# H  l+ v0 S
  754.       }
    / H5 p" k9 `5 m, b4 A9 Z8 R
  755.       dwStartUpSteps=4;" Q0 _2 C3 r+ \, K9 R
  756.       break;2 c" U5 a7 `  W. s: w9 I% L
  757.     case 4:; ]7 f& y; v, f8 r4 z' V
  758.       {# m+ _) j( v5 j+ j& J
  759.         FILE *fp;6 Y8 x6 N( k# I4 r1 Z6 z2 Z
  760.         char szString1[128];# }  c& b( T  e& x" H
  761.         char szString2[128];: z3 h' \. L9 f9 M4 Z. j/ F
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    " M0 U/ Q6 I& A& I
  763.         if(fp)
    ' n  x7 h/ a: Q7 _, D  Q! L
  764.         {
    : x9 M$ U8 |# u- d$ l. P9 a1 `
  765.           fscanf(fp,"%s",szString1);
    1 g# N+ a. o/ K% B. L' D6 S& _
  766.           fclose(fp);
    # {! J- D" \9 A; X" u2 z
  767.           fCheckVersion=atof(szString1);
    : S2 T- [/ x3 I0 a1 Q: d
  768.           fp=fopen(".\\checkversion.dat","r");
    & ?6 |0 A  _; r! k) m* }
  769.           if(fp)3 d- I( O6 F( c
  770.           {
    " J. \% d( ^! m
  771.             fscanf(fp,"%s",szString2);  ^( u% [! i, d8 L  F; A) \
  772.             fclose(fp);7 J+ W6 O- }+ }2 h# e$ L
  773.             if(atof(szString1)!=atof(szString2)), I; ~/ E; J" W9 O& X
  774.             {6 u3 s1 J8 R% X: Z& [4 r% W
  775.               if(!Dn.Connected())
    4 i" b  F. r/ S$ \# Y* G2 b
  776.               {6 }- _! Z/ G  f- L0 I
  777.                 bFirstUpdate=TRUE;
    9 ?: U+ h: D. J2 a# q: c
  778.                 dwTotalFiles=1;( O$ v4 R  t3 E/ j, T
  779.                 dwDownLoaded=0;
      m9 T8 B5 a7 Q0 m
  780.                 bSilentStep=FALSE;
    / Y4 d8 O! g8 u7 _6 Z7 }6 b9 q
  781.                 bCompressed=TRUE;# V7 u  Z- d0 H* g8 [* }; Z
  782.                 strExtLocal=".\\DownLoad\";
    / i3 X& l" y! w0 F7 h/ E9 j) i! C
  783.                 strFullName="update.txt";8 P( t& V9 S" r9 G# b
  784.                 dwProgramState=AP_CONNECT;
    7 g0 d0 }3 z6 k; D. e
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! b& c  p, k- i! y  ]
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 `9 q) a' O0 g# d7 x2 n
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) s0 J6 |, L6 s  O. F

  788. - t1 v7 i" d. _8 J0 b3 h+ X
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / G* v$ q2 ?/ S: Z' w$ F+ @
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ! Q5 j) j1 T# m" X
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    " r7 r* @* x; t# ~5 Z" ]; `
  792.                 {
    1 N# z5 I6 Z1 M7 P: O$ h- t7 x
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");( Z9 b, u$ t- @7 S0 `  f1 a
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    # B7 h2 e  ^$ l4 r& h, D
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");) J- |1 A* \$ {0 G- Y1 P9 I
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 s( F6 x7 J  E

  797. . g' |2 [! \; b. a7 P
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");& g; P( Z/ r* k/ E. Y( ?: w
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & g- W6 ~& Z0 [+ V& M8 O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 x8 F7 O* G6 W) U
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 B6 V( s: V- z
  802.                 }
    8 J3 g- L! y- z7 V
  803.                 dwStartUpSteps=5;5 s. `0 [8 o( i6 Y8 a" |6 U
  804.               }
    + G4 d1 g6 N3 v7 u+ M  Z- h- l1 {
  805.             }$ o$ I. Y$ k# e" R
  806.             else( h) {  j6 C, S
  807.             {" S( ^- C  M) ]4 V! M  m- H
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ) ~6 G" R, |" g$ M' \6 Y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 }, a! J% B8 y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    0 X$ b, V9 a; Y1 |4 I
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");! a7 [3 g8 u8 I2 d) a
  812. * r) G2 w$ t  v+ m
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 J1 E, \' e+ g1 S9 s& Z
  814.               dwStartUpSteps=99;# J3 O' O4 `1 Y; |1 U9 Y( L9 J
  815.               bFinishUpdated=TRUE;
    1 I1 s% T# e! S( U# Q% a/ T
  816.               bCanUpdate=TRUE;7 `5 D5 z7 j2 T: \" A+ O/ p$ \
  817.             }+ |! [/ v7 C3 V& \
  818.           }
    3 W5 S4 F" e3 c$ T
  819.           else- ], X# c) f1 C' u) Y$ J
  820.           {/ p7 [8 V4 u1 h, W
  821.             if(!Dn.Connected())
    % Z3 {. [5 w( d" ~2 k" l
  822.             {
    ! F" H- g3 u6 Z, }
  823.               bFirstUpdate=TRUE;
    8 P8 B. Y; Y' s' U9 p4 S
  824.               dwTotalFiles=1;5 d" Y1 @" D, ?- F$ L
  825.               dwDownLoaded=0;+ N- d0 d. b# {4 r8 b
  826.               bSilentStep=FALSE;  O7 ]; M# G1 ]( u! R( l% c" ~& C
  827.               bCompressed=TRUE;% f# `1 c1 @+ b9 [+ S( j2 l/ t) K
  828.               strExtLocal=".\\DownLoad\";
    * i$ L0 p3 G' Z$ ^$ d
  829.               strFullName="update.txt";
    . Z; i, A( _# [- ^! w, ?7 ~- }
  830.               dwProgramState=AP_CONNECT;& q9 Y$ \  v% [: Q* W/ y+ z# b# x3 h' t
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 R( \: Y1 @, e1 A' g+ \
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    % Q5 v2 y% j5 p+ J& B( B
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");8 U6 W6 t4 n5 W- H% `9 h; y/ L
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( f# D- `' N* ?! u( v0 u- z
  835.               unlink(".\\DownLoad\\checkversion.txt");# C6 |- l/ b4 |! T$ D  E
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)" T# B! h! n+ `& I& M
  837.               {( g! m8 s7 `- R5 e3 v$ P
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    4 I/ n. M. Y9 P1 {; a
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    : U3 a  N: o/ w6 T3 n. `8 F
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    & r$ B1 V) g& i  r
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ F, m" z$ k% {0 d
  842.                
    ) N0 {4 `( L' a( n1 o
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 z& Q( h# U& u1 G/ b$ Y1 ~
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - T8 N$ N/ o. D$ Z
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( V  s1 p2 l' ]; v. A
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ r" l2 d2 }3 C6 H+ Y9 m6 j% W
  847.               }0 f, k- {/ J; J: ^* c1 b: {- G
  848.               dwStartUpSteps=5;
    / H) V- T. k4 |5 R9 C4 f- D2 |
  849.             }4 G8 s; J: L2 j5 s) c
  850.           }
    + J) l, n4 e3 |
  851.         }
    $ n" x& U! L/ E/ Q8 B
  852.         else
      H' m& q6 K' p5 a
  853.         {3 A2 [) D8 K; @" r/ L4 m
  854.           dwStartUpSteps=3;/ P0 \# |/ Q8 }& S, }* R! }9 D
  855.         }
    1 {5 B: f2 z2 O
  856.       }0 N1 N, {5 D' v. z& `
  857.       break;
    6 z: v5 k* g) N6 l4 y- _
  858.     case 5:$ W1 O- s& R: R( s; _" M  \7 G% ]# R3 k
  859.       {4 n1 q% I8 B2 Y$ {6 D* D9 D& l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    0 F/ C* P: v% D. {. S8 @
  861.         {, L* i4 D0 a/ Q; R5 a
  862.           int opt_overwrite=1;
    $ g4 K3 C7 E! u6 l
  863.           int opt_do_extract_withoutpath=0;3 s5 e( v8 s$ ], U4 w7 _
  864.           unzFile uf=NULL;, @9 d6 M+ D  _& W

  865. 1 z' a9 }, O) W- K
  866.           uf=unzOpen("Wsa.zip");! m/ K& F, \, R. M1 t# S* g5 N, z
  867.           if(uf); d: T3 A3 n1 }, i: F
  868.           {, v. C% B8 A7 l# ^" L$ D6 P
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);! i. A6 G- o) s6 m+ H
  870.             unzClose(uf);
      W# X% B* o( g6 A% j3 D$ p
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    8 y  [9 O8 P1 ~8 N' p
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ' e+ Z! b& v0 |" p# P! u% v5 z6 V
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");+ u' S$ j; x9 S4 w) G7 M
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 b" z  |9 A4 t. g; A# ~5 b
  875.           }- j1 A, ?% N# o! W( K' }' t
  876.           DeleteFile("Wsa.zip" );
    ! ?6 X5 S6 x3 Y$ _
  877.         }
    , k. C) `$ \! j. @

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

/ Q4 b; O6 H7 s: j' ^8 R
7 B# z. z5 ~# m! b& A1 l% q* [

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-11-28 07:36

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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