CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
6 A% A0 V* F6 W! p! X
  1. / RevApp.cpp : Defines the class behaviors for the application.( I3 V7 r2 u1 _& f: x
  2. //' a2 e( ?/ f8 s2 F' v4 U
  3. 3 ], L2 U2 @/ W. [# h  W0 ^- ^
  4. #include "stdafx.h"" o! V' N  k, r

  5. " p, R: E9 j0 p. b5 Z" z  Y2 v
  6. //#define UNICODE
    % k  N9 K  D! O. p" P* U
  7. //#include <gdiplus.h>$ X- t9 n& B* b4 m6 h
  8. //using namespace Gdiplus;
    1 H8 ^+ P- E6 E4 @
  9. * [3 a' [$ B- m, i
  10. #include "RevApp.h"
    * R8 a) ?7 g% r5 }
  11. #include "RevAppDlg.h"1 o" r- I; X; N
  12. 8 S& N+ @0 ~1 n  a& n* x
  13. #pragma warning(disable:4786)
    % z  u. ?1 D) ^
  14. #include <map>
    # E3 w9 }( }) f1 n
  15. #include <list>9 h- V6 d9 G' s+ ]2 K) `2 f, y& d) S
  16. #include <direct.h>+ Q  T6 Z7 a0 {
  17. * ~" M6 n' B7 P) J% C
  18. #ifdef _DEBUG
      I5 f. E# T# r& ]$ }# ]+ L
  19. #define new DEBUG_NEW
    3 o* n% [* x0 M0 q1 {' f7 d! {
  20. #undef THIS_FILE
    0 h3 Z  B( p) [9 Q
  21. static char THIS_FILE[] = __FILE__;
    " C6 n! J9 I8 x) A7 I+ W
  22. #endif; X# z+ U( ~! ^: i/ q) D4 E! u% n( w
  23. #include "SkinResDef.h"
    4 p" H) \/ `8 L5 q
  24. #include "ChangeBG.h"8 W7 d6 n* ?3 J/ N$ Y0 J
  25. #include "AFXINET.H"
    - k3 l+ Y& ~3 q% v7 x# D# M
  26. 9 R( J, p7 L) O9 f3 ^4 v
  27. #define TRADITIONAL_CHINESE 0" C& W7 J+ O0 J
  28. #define SIMPLIFY_CHINESE 1; G3 e. X, k6 l) Q+ A
  29. #define ENGLISH 2
    : ?/ v  L) R4 {0 T& {
  30. int m_iLanguage = ENGLISH;
    6 q. r. y) o- h+ I
  31. /////////////////////////////////////////////////////////////////////////////
    - U% k8 l6 r+ O5 S8 U& M
  32. // CRevAppApp
    : F3 j' ~6 {8 r- p) r7 S

  33. / m7 @2 E$ f8 Z& x, `
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)) N2 ~% w; a4 L4 J! E; A
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    # ^/ n1 P4 F  l8 w( i: `+ S
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.) Z9 i" C' y; I. C) Q* q2 c
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!+ l; O# v7 ?9 h: z5 W
  38.         //}}AFX_MSG
    9 w* z% R- w$ ]9 a: _* D
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)3 u4 s4 o2 e0 R: q  w
  40. END_MESSAGE_MAP(), Q. x5 U* a& K) z9 d
  41. - W2 b! f" O; S2 G3 E: Z
  42. /////////////////////////////////////////////////////////////////////////////8 s" h. y; h+ p$ v
  43. // CRevAppApp construction
    + W& F& R4 T' A/ h0 [) D" l

  44. / h$ e2 X# U. }1 b" w+ ~2 z
  45. CRevAppApp::CRevAppApp()& a1 N  |0 B$ u1 _
  46. {
    7 ^0 X4 s+ l1 L* A9 P" w
  47.         // TODO: add construction code here,
    5 S3 ~6 @& F+ L* c, |4 d" _
  48.         // Place all significant initialization in InitInstance5 ^6 L- |7 g1 ]6 }- f$ Y) o4 W- z
  49.   bDisplayIsBig5=FALSE;( B( M; W2 |1 M: V+ t# T; G& k. \
  50.   bRestartUpdater=FALSE;
    - P- z! U7 n) g% k/ a9 t" |& O
  51.   bFinishUpdated=FALSE;
    $ \. l3 D7 F) [9 ]4 x) G: u
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;# [! z! w4 _0 C! @% f
  53.   InitChangeDataBig52GBKS();0 h: t- @' e4 n4 A/ d
  54.   InitChangeDataGBKS2Big5();5 @5 G1 y2 s$ `( |0 P4 g8 v0 a9 Z
  55.         //
    . z4 C9 l" E" s" n0 D' \
  56.         bClickRunExe = FALSE;% \" W+ \+ [0 @4 K& A; u0 P9 ?
  57.         //+ A4 K( k1 m5 x1 D) k
  58. }
    ! A# o$ E: I  \9 H$ a, `7 t7 H

  59. : Y6 r; t# [% i9 Q) `6 |- {" C. G& @. \
  60. CRevAppApp::~CRevAppApp()8 P. G$ A, }0 c9 g
  61. {6 d( }0 a& [4 A
  62.         // TODO: add construction code here,; m% O- H* ^4 y( ?9 S% V
  63.         // Place all significant initialization in InitInstance+ x, A# T+ q5 ^
  64.   EndChangeData();4 Y) u( y. h) g  l* X
  65. }
    8 i+ ]% _$ _; A1 t* @

  66. ) t3 T# Y4 w/ L% k( v7 @
  67. /////////////////////////////////////////////////////////////////////////////! j# G% Q4 A- e: t! I/ X
  68. // The one and only CRevAppApp object
    2 n* n5 s( x- p  O) g7 a! f+ |
  69. ( a& k- o% v( b0 H; N6 Z3 K" a8 d2 T
  70. CRevAppApp theApp;: l2 A: ]# g( `0 X- t1 e0 P
  71.   b5 ~9 p/ C5 P, N- Y$ o
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)- W7 `7 @, N/ n/ s* Y9 A
  73. {: o+ O; V6 a. b+ R7 R% }& g
  74.   int iEOF=0;
    ' T6 C( Z' }6 t0 [
  75.   char szTempName[MAX_PATH];& R$ d  \2 k" [. c; m
  76.   *szFileName=0;
    0 |3 d1 e  q- m5 J4 j* \
  77.   iEOF=fscanf(fp,"%s",szTempName);9 ^6 p3 a  F* L% d3 v
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')- A9 ^  p' X( o
  79.   {
    : C( l. m) V6 g9 I
  80.     strcpy(szFileName,&szTempName[1]);
    6 b; \0 Z! ]+ b
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    8 ?/ w9 E& x  o% o3 L" D3 b' y& l/ V' X# _
  82.     {; j& i. O) O3 x% C7 V6 a  l
  83.       iEOF=fscanf(fp,"%s",szTempName);7 l" K% s+ r5 _. {1 j* |# E
  84.       strcat(szFileName," ");
    5 N8 K+ \% R/ T& q) \. W/ x
  85.       strcat(szFileName,szTempName);
    8 I/ B$ w: T* w3 E
  86.     }* D& U& V* X! D# i# a7 [8 l
  87.     if(strlen(szFileName)>=1)/ Y) F! b! B  ?; A9 M
  88.     {
    & g  I% X; O2 |  X
  89.       szFileName[strlen(szFileName)-1]=0;
    1 h* ~; w: b" O, z7 \
  90.     }
    $ u8 ~, v. w2 B8 D, K. Z
  91.   }
    ) n4 P- F) u; l
  92.   return szFileName;
      P+ S, w2 R+ t
  93. }! N7 b' H$ E; g) m. K8 ~1 C

  94. 5 r. N# H+ n* w1 A5 r' U
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    + Z) }! _! t* z% G! ~) r
  96. {  u" {' T% `, Y5 ], @2 q
  97.   FILE *fp;
      c, v7 l8 }# Z: B. `3 U7 ~
  98.   char *key=NULL;
    ; P/ S- K7 U$ ^6 Y
  99.   char version[MAX_PATH];2 [2 P* n  C9 b/ j* u
  100.   LPUPDATEFILE file,olds;9 a3 L8 m( V9 Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( e$ z4 u; x( c1 U

  102. 2 t) `/ y9 J1 E9 h' k4 h* E
  103.   UpdateList.clear();
    % F5 Y% e( G- N! A1 Q4 [
  104.   UpdateFile.clear();" i; c/ E0 I3 U: i) H1 T( ]# K$ }5 @- l
  105.   if(GetFileAttributes(filename)==-1) return false;
    " I+ k6 y& F1 c2 Z& _
  106.   if(!(fp=fopen(filename,"r"))) return false;- f6 f! F1 N) H, }* v; p
  107.   fscanf(fp,"%s",version);# Z8 j5 s: V4 v+ q; o* P! o, _
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }5 {( P3 h+ f( A  L
  109.   while(fscanf(fp,"%s",version)!=EOF): `+ j# t. b+ ^" A4 I0 w# @
  110.   {
    0 k+ C! _  Z" K
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 [/ W2 r+ F8 c2 p# \0 }6 M; g) ^
  112.     fscanf(fp,"%s",file->path);
    . ]# C8 q1 r7 Y- f
  113.     ReadFileNames(fp,file->file);
      X- R+ P$ e8 M' o
  114.     strcpy(file->full,".");
    " Q5 V$ B' L/ R* @4 m6 O) Q7 X
  115.     strcat(file->full,file->path);4 r8 a1 \* x- s, n$ D3 h  X7 j
  116.     strcat(file->full,file->file);
    * l& a- g7 a7 ?+ j' X
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; e7 a! U6 s9 O2 r
  118.     {2 d% R* l8 _) B2 h- g0 p: S4 O0 e5 ^
  119.       file->vers=(float)atof(version);
    / ^! H" l8 \4 ?, K1 K: x# O# j+ I
  120.       UpdateList.push_back(file->full);: `2 B: d/ X+ k6 P6 f3 y' |
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));" X, S& B5 l" Q) x3 y- j
  122.     }
    2 ]0 g) h! ^% u. r
  123.     else6 ], v- @0 T. O$ d4 J5 R; F/ I
  124.     {
    ; Q% Q/ A3 Q8 Z$ j" A
  125.       olds=(*p).second;9 O0 U* F: _2 H4 k6 ^
  126.       if(olds->vers<(float)atof(version))0 F9 G3 {* a' g2 C3 f' T) C
  127.       {
      s) b0 V: D* p+ X1 d
  128.         olds->vers=(float)atof(version);
    / ]) g+ \: F9 b2 W2 Y6 n+ h
  129.       }9 S* p( h* E! q( u& r) p$ `) @  j2 t5 m
  130.       free(file);# ^" R6 N' @6 R0 `
  131.     }  ?$ p5 [- e- q. E, s, O8 U- \
  132.   }
    " c/ H! c( o2 T  r5 j1 D
  133.   fclose(fp);8 k" A' `! O( a" G3 V  q
  134.   return true;9 {; r, c5 U$ B: y' Z. Q2 h% b
  135. }: z3 d- l1 J6 C" S
  136. 0 O, T8 ~& X! `' V; [
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    + l- E6 C+ p- h! G3 f& q8 e
  138. {) m. d* C9 H$ H* v3 Z; v
  139.   TCHAR  szFull[MAX_PATH];! d9 c2 j9 m/ d& H
  140.   TCHAR *token,*inter;5 f" |2 M# \: F, p$ G- s% N* S
  141.   *szPath=0;
    & e; F- X4 [$ f4 a; V% n
  142.   strcpy(szFull,szFullPath);
    / M4 R$ ]2 c& O6 X; F% c9 \( `) a
  143.   token=strtok(szFull,"\\/");
    : m& t8 S( }+ }: @0 ^
  144.   inter=token;% u( @/ E9 s* S  J, l
  145.   while(token=strtok(NULL,"\\/"))
    $ G8 ~( @& w1 p: K
  146.   {
    9 e+ @. [+ _$ U# H. k& D
  147.     strcat(szPath,inter);
    1 x, P! W* D9 r7 p- y6 p
  148.     strcat(szPath,"\");
    / U; Q% Y' {& ]& T) v
  149.     inter=token;; F& K4 j$ J8 h
  150.   }
    5 r: _- M& R' L, e
  151.   return strlen(szPath);
    : i- V4 H* |3 w+ O% X
  152. }
    4 k1 a& U7 _* M+ @5 s' k4 z/ y9 K0 g

  153. & x6 ]- x  W9 ]: b
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    * w5 H! w5 M7 L* U, J
  155. {
    # k& C0 x0 O7 t7 T; b% V* W) |
  156.   DWORD attrib=GetFileAttributes(Target);
    ) r3 D' G+ b, Z9 k. i1 \% @6 A
  157.   if(attrib!=-1)
    0 E' n3 H- V& w3 M
  158.   {
    + k7 f: X3 }- A; @8 K& ]
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    1 b2 E! ~" i, S$ a7 h
  160.     {
    + o- n  j1 n' d2 m; P+ X7 y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);; B6 i  v# O. K  [
  162.       SetFileAttributes(Target,attrib);
    . K6 C) I) R# K1 v! [
  163.     }
    3 @, t) `1 p  j* D' ?" a- y5 P
  164.   }
    ' D) x7 u4 j" N; i2 d. N
  165.   CopyFile(Source,Target,Erase);
    ; O; D- \) X6 c8 u, e  B1 a
  166. }
    ) d9 j! _4 k/ z! T

  167. % p" F9 ^! l; Q+ e9 m3 {) ^
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . _; k, _4 h! h( m8 N7 P
  169. {( I0 J* y  H6 l
  170.      FILE *fp;
    : b! U9 o+ X6 O# g1 a
  171.      char  szBuffer[8192];
    5 M* ~/ j8 X0 `7 {
  172.   va_list  argptr;" {4 m  U2 T+ ?7 q2 \+ U

  173. 9 g; Z' i3 ^& }  X
  174.         va_start(argptr,message);+ E% ^+ ~7 h2 H& Z
  175.         vsprintf(szBuffer,message,argptr);: A# \% [1 z- |' e
  176.         va_end(argptr);6 S. z; k& f  L7 B
  177.   fp=fopen(FileName,"a");
    ; M% b: S( e9 |/ h$ E
  178.   if(fp)' R/ h# [0 C5 d
  179.   {
    2 i9 o4 h5 I. v% i# T7 F  g
  180.     fprintf(fp,szBuffer);
    5 w: ~! y& [' \+ t, k6 k
  181.     fclose(fp);8 ^! z% [& j# p9 w& p9 e; v
  182.           _flushall();
    5 G$ F( W3 f. C# I/ X
  183.   }
    1 L, o2 j6 ^' h# D! {
  184. }
    7 |% z8 \9 u; }5 |

  185. ; Q- ~! C0 O% F( a  K5 I
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    3 X+ {! @) y% y% |" P; q
  187. {
    7 S& B0 K/ k# _' E
  188.      FILE *fp;5 ]- s( T* d' ~0 j
  189.     DWORD  attrib;' g7 g: A  v: |! |; S4 Q8 @
  190.   attrib=GetFileAttributes(FileName);/ D1 p3 c$ {. I; _! `! V
  191.   if(attrib!=-1)
      N6 D. N/ S+ q3 |4 t' r& n
  192.   {1 C  K3 L0 c) z7 O
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);4 d# S7 l* \  s) V6 Y5 f8 a& X0 n
  194.     if(!SetFileAttributes(FileName,attrib))  ?0 C. F0 R! F6 s% w2 T
  195.     {
    6 ]; Z5 }6 [" L$ }7 ]: h
  196.       return FALSE;2 t; Y$ d( H/ s, |. @
  197.     }
    # J8 z/ D: B+ ?7 t, _/ X# c) |5 k4 c
  198.   }6 R. D" Y7 K0 S# z3 t7 g
  199.   fp=fopen(FileName,"wb");
    , y6 E# v8 V$ _% J: P; b& N
  200.   if(fp)1 b7 P# }# p! m5 e
  201.   {
    " b; d2 y: l, k" a- i4 U- n( E
  202.     fclose(fp);' F5 \, B: F9 ^5 ~( G3 ^0 u( H' W
  203.   }
    ( }! g1 W: F& J4 H/ L
  204.   return TRUE;
    - v4 X9 V, i2 C# Y) W. o
  205. }& K9 q8 O+ r) D' i0 ^
  206. ; j- Y9 [. K; j5 e5 [4 N  P
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ' Q# [8 N$ z' E4 b) Z, n4 }
  208. {; E$ A+ E3 _& Q9 k/ U' Y
  209.   char filename[MAX_PATH];
    7 w2 h4 M+ v, C( L+ Q
  210.   LPUPDATEFILE file,olds;
    ) }" n5 {. G% |& Y; Z5 M; [8 y
  211.   std::map<int,CString>::iterator i;0 i- a8 U9 f0 R
  212.   std::map<CString,LPUPDATEFILE>::iterator p;5 o. S' \  s- K4 k! k# U
  213.   std::list<CString>::iterator l;
    + ~6 r/ v4 ~  s6 z

  214. + _" O6 p. {, O0 p
  215.   if(bFirstUpdate)
    ) e& I# a) j3 @  H+ B. _
  216.   {2 S1 V+ m/ V9 N1 g
  217.     dwCurrFile=0;
    + Q  m( [# O9 h% N* W
  218.     bFirstUpdate=FALSE;
    ! ?' u* U8 @8 Q6 w9 x/ p4 M4 @
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# l4 C4 t( [& x5 A3 m
  220.     {
      d5 J- p; T7 t. c
  221.       dwTotalFiles=UpdateLocal.size();: k- s, m* V7 q6 g, z) C
  222.       dwDownLoaded=0;' n1 K! x6 `7 X& z3 c
  223.       bSilentStep=FALSE;
    # Z4 {7 s7 o) m4 O9 K" s+ F
  224.       bCompressed=TRUE;
    9 H5 F+ C9 d* q9 D& ~  N7 k
  225.       strExtLocal.Empty();
    * w$ h$ v$ M! A7 N) [
  226.       strFullName=(*i).second;3 w/ P6 I5 O! Q' h
  227.       dwProgramState=AP_CONNECT;
    / u- C) k6 ?- ]- D9 X; V
  228.       return TRUE;& T. F7 i/ p; U; X% z" G- K/ J
  229.     }
    ) U$ Y$ A7 X0 ], M) ^$ x  s
  230.   }8 D0 C! J- q* T0 G, F% A1 s4 @
  231.   else if(bRestartUpdater==FALSE)
    " O) d  v/ `% i7 ~+ K( E
  232.   {
    ) O9 Y  v( c7 d
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    4 h0 L; r# i- c' G) ]: Q
  234.     {9 _) T, G6 d% f
  235.       file=(*p).second;2 g: v; T! e1 b3 Y0 T& Q0 G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    % U" X& t5 Q2 O' H3 x0 g8 c3 x; I
  237.       {0 T% z1 e9 {+ a6 N5 |
  238.         olds=(*p).second;& w0 j0 J" k1 M( M
  239.         olds->vers=file->vers;5 M* n- ]% u8 h# a0 ~
  240.       }
    , n. O: U, }9 ]4 i: s5 X
  241.       else8 y- N' C8 ?3 z
  242.       {0 E: S! V+ X# _, o' j1 s
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 u' d  s. T3 c5 z' K* o
  244.         memcpy(olds,file,sizeof(UPDATEFILE));4 \; h  W$ |- \: A! ~8 |* R( H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    + x; G3 W% X& ?2 z  o* r2 i' N+ o
  246.       }
    ' A3 U8 `: [; `. v" E; s' h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    1 b  D4 W5 c4 P6 L
  248.       sprintf(filename,"(%s)",file->file);
    , W$ h, S% W& X; F6 R
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ) j; c- S% n6 S6 w4 H4 }8 A# H4 J
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }2 i$ _5 t  {  a  ?! L7 l
  251.     }
    ' u1 Y4 R: R" X( d" a0 l2 ^9 z
  252.     dwCurrFile++;' f* U# l  V" V# k" M) D
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & z! Z/ B3 I, m& A6 A
  254.     {7 e& x: ~4 e( ?# o$ M. Q
  255.       bSilentStep=FALSE;) s0 S/ A- J: j- v+ p; t
  256.       bCompressed=TRUE;* I) [5 W$ k9 J
  257.       strExtLocal.Empty();7 K$ h  Y( D4 C
  258.       strFullName=(*i).second;
    0 H1 A& |/ ~# F& s8 u/ J
  259.       dwProgramState=AP_CONNECT;
    ' \5 \; ~1 E+ Y0 Q8 g
  260.       return TRUE;# A+ t8 t6 J% ]# K, F0 L, [2 k3 U% o$ K6 }
  261.     }2 T* x1 S: ]- [  N. G" }
  262.     if(!bRestartUpdater)
    : _$ l4 `% F: d6 x
  263.     {
    % `' C8 l( r3 j' ?0 u: Q
  264.       int iCurrSize,iFileSize;5 g7 k+ }( _) s
  265.       iCurrSize=0;* Y) n( w( r( U* c* v8 Q6 N
  266.       iFileSize=UpdateList2.size();6 k# X' V+ @  p+ o" D6 z5 N
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 q$ T( _8 G# U- I! i, P
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");: O& M- h" @4 [: `% S
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    $ A) R7 a3 t7 [7 |7 r: P* G
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " P7 ~! O, N5 P5 X5 J9 s
  271.       Fclearf(".\\update.dat");# L6 S( X! y6 R+ }/ R6 e
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    & U3 [1 \2 _, h5 l5 a+ Y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* v* }' k' Y1 v! z9 k. X: D& K
  274.       {
    / k, h6 s- u: N; o
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()); |' N4 B5 d+ g2 m2 O# L% d0 f8 m
  276.         {$ d. L1 |3 S3 `: s; Q
  277.           file=(*p).second;
    3 b' x; I  [  |4 u1 c7 L9 A: w/ ]
  278.           sprintf(filename,"(%s)",file->file);: ^- e/ ^) j5 M4 [5 v! f- W/ |
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + D% H8 D6 {5 o, W. d7 p
  280.           iCurrSize++;
    " }7 ~- L4 Z. @& g' y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / m4 e$ y$ e5 y% l! g& {% Q( ]3 j
  282.         }
    8 V$ |$ S9 G7 X, X8 @
  283.       }1 R; X1 j' Z5 F1 b3 J
  284.       unlink(".\\update.txt");0 l0 n0 I* C$ D- b
  285.       unlink(".\\update.tmp");' u$ L4 a5 K9 L7 ^
  286.       Fclearf(".\\checkversion.dat");
    8 c4 t$ }, h3 j4 Y7 |  g$ }
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);) D3 A) r5 c; ~- W7 ~6 I9 p
  288.       if(UpdateLocal.size())
    ; h) ^& |- b4 e" ^
  289.       {+ L3 _) C2 l! q: b9 N
  290.         UpdateLocal.clear();
    # q) _2 o7 I: d1 U- C0 r6 [
  291.       }+ V. ~/ f! j* \" {# E
  292.       if(UpdateFile3.size())! y3 q+ m8 F9 \# B. P" g
  293.       {
    1 b' V2 i2 d& X- k9 y! p' n
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 i$ @+ u5 k; K7 V6 S, G- T; Q+ I' Q
  295.         {
    + A* l0 t/ y* s
  296.           file=(*p).second;
    5 }6 r4 Q5 b( j3 }/ F1 ^
  297.           free(file);5 |3 U0 R8 ]3 S+ M3 @
  298.         }+ k7 J/ @+ B8 T% I, u& m% h$ p
  299.         UpdateFile3.clear();  u, A9 N# ~, n% ]
  300.         UpdateList3.clear();
    ; W' i; {; Z; w2 `
  301.       }
    2 r1 e4 G% O, m( [: M/ ^
  302.       if(UpdateFile2.size()): K9 ^; ~! b2 r
  303.       {
    6 q  P7 B: ]  u/ S% Y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 C" G. H& h3 x, O$ l. N
  305.         {
      W& S, Z! s$ H3 i( F
  306.           file=(*p).second;) D$ v0 e3 D+ X5 p; X, J3 e
  307.           free(file);
    7 v! l9 O" o) E0 e
  308.         }
    & _. n$ _3 ]* g% N8 N8 A% s; G
  309.         UpdateFile2.clear();, @9 X9 h! Y$ \
  310.         UpdateList2.clear();
    1 {+ e. e+ g9 w# z# h
  311.       }
    ' i% r/ ^- j3 E. M: _4 b9 w
  312.       if(UpdateFile1.size())$ b7 a! A6 G6 Y( q; ]# t! I* x, t
  313.       {1 K+ [3 V0 P- m  L- C! `
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) S' V$ Z$ q# _4 I% i5 R5 A' ]) n
  315.         {" H. x  I6 C7 |* S: K8 l, X. ]$ p
  316.           file=(*p).second;
    7 a' @6 e$ }1 P# j
  317.           free(file);
    - T0 J. E# L* @0 D
  318.         }1 K8 [" K* n' b
  319.         UpdateFile1.clear();
    ( F  f* @) \% ~
  320.         UpdateList1.clear();. Z: @0 b% E$ p2 s7 y% o7 e4 s
  321.       }
      M0 D+ l2 ^8 q; s$ O
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    : Z* f3 e4 u" }+ [' L9 j, y6 k6 y
  323.     }% w& H: Z' p8 f, O; G) B7 R8 |% h2 j
  324.   }
    5 H- X$ j; x0 P5 V$ Y
  325.   return FALSE;( q+ B  r3 \& |6 u$ t
  326. }4 E% V+ O) ]* {# V
  327. : y- B, T" _; |6 n
  328. void CRevAppApp::ClearAll(void)  Z- B6 T* ]2 Q. g- ^5 g$ p
  329. {7 m) K3 K( J. D. T
  330.   LPUPDATEFILE file;1 ^: ]$ T) r, S. _) _5 k  ~
  331.   std::map<CString,LPUPDATEFILE>::iterator p;" F6 j; L, ]8 m% A3 ^/ W4 W
  332. % `( y3 m  G# J. v
  333.   if(UpdateLocal.size())
    2 F8 d( d# k9 l; W' J$ X  n  K
  334.   {
    ' a1 ?) D6 P1 [% q/ h. V8 }
  335.     UpdateLocal.clear();) i; W: d$ ?- a3 y9 u
  336.   }
    + T/ @5 T8 d. R0 [9 ^% i  m: y) t5 ]
  337.   if(UpdateFile3.size())
    ; D; g% M  I' l& Q% R
  338.   {7 J5 ~1 j% K$ O2 Q1 ]
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # o4 e. g* p# q( i
  340.     {; F& R- g3 K' p; S) R
  341.       file=(*p).second;
    $ @# U+ C8 E: [1 o. x7 w
  342.       free(file);
    9 F9 m% _$ A6 z  L2 O1 X. Y
  343.     }
    . |% A3 z  s& a7 }. Q1 q
  344.     UpdateFile3.clear();
    ! @' c6 N; T; L0 t/ J
  345.     UpdateList3.clear();$ K% T0 t/ f7 T
  346.   }5 x- O, \0 B& K5 W6 N) w/ y
  347.   if(UpdateFile2.size())5 s- P" n# R$ d/ N- X9 X. N" H
  348.   {
    : m7 ^- {) T* h. J" B8 P4 Z- Z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- W% E1 S3 Z6 H$ {3 d8 D* }' q% b
  350.     {
    / }; b8 K3 X$ X) i8 I5 Y0 Z3 S
  351.       file=(*p).second;! g( ]/ _+ s! k* P! m1 r- j+ ~
  352.       free(file);# A' d9 y5 a) ^0 O1 e
  353.     }9 l! `! @3 Y; i6 D/ w
  354.     UpdateFile2.clear();
    ) `) W; ]2 _6 N8 F/ e6 e- L! ]
  355.     UpdateList2.clear();$ w5 K5 R6 `3 g$ W5 h' b) ~) g
  356.   }
    3 }! n* c1 t% z
  357.   if(UpdateFile1.size())
    % U- R1 m( Q' c# ^9 y5 f
  358.   {
    , f" \7 Y9 ?- g6 x9 e1 k# M8 n
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    4 t5 ~+ Y) V" {3 w8 y, m3 F
  360.     {) q" j" H# h# i; B0 Z  L; U8 W- d3 o' ~9 T
  361.       file=(*p).second;
    " e$ f' @: I! ~8 F1 Y. J
  362.       free(file);
    - L/ v8 R- f; S- D& c
  363.     }
    0 F1 W* A9 s/ [& `7 q
  364.     UpdateFile1.clear();
    $ @2 C3 Q7 E' B& e0 K; G0 |! m4 }1 ~
  365.     UpdateList1.clear();
    , X4 G7 n% A; e# e
  366.   }! |6 W5 S) S3 F
  367. }  
    ( o$ {7 G+ {( V- O* j4 J5 X; ]6 \
  368.   
    8 m; G4 l0 D; D
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    & d% `- M6 ^+ x9 }
  370. {- B3 Q: ^7 t7 Q4 K3 E0 G. o4 L0 z: U
  371.   int c;
    , u, ]; H5 H! P
  372.   LPUPDATEFILE file1,file2;" _$ I# {- I0 C! H- I
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ( [* d8 i7 X$ w4 b( `7 j
  374.   std::list<CString>::iterator l;
    : M# B1 h( U9 H

  375. 3 [9 @- J+ C( O
  376.   UpdateLocal.clear();
    , @4 q8 x9 D% }" g: R" w
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( t% q) a+ s1 b
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    0 V7 E8 V( a2 ^# j
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);2 W9 }: A' n7 _
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);6 |8 ~, F6 D3 _
  381.   if(UpdateFile3.size())# P! d: k* @7 ^0 C* N
  382.   {5 b& S, Q. g2 S! X8 f. j. l- g
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ! g2 }/ I4 G$ z7 h
  384.     {
    7 Q7 q+ ^5 O4 a4 g1 l) _9 U
  385.       file2=(LPUPDATEFILE)(*i).second;
    + i. D8 I8 x2 h" L) m. B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : n. a! X: Y/ C' c% F- Z
  387.       {0 t3 g1 e; X0 e9 }
  388.         file1=(LPUPDATEFILE)(*p).second;
    3 G* S  W+ w- T" M
  389.         file1->vers=file2->vers;1 |$ m7 u6 e! X. o
  390.       }1 f2 k0 m& Y2 {3 a& L) J7 d
  391.       else+ q6 p7 [' B$ ~4 }- J9 [4 e9 }% X9 v
  392.       {+ F, |$ }; U, X) Z+ q2 [
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 E( R- h$ D# v5 n9 }& Y2 W
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    , k1 b7 |' q( F
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ) A' |$ s4 [$ p" q0 ^
  396.       }
    2 h$ a3 @* M/ j4 O" K  C2 o( @
  397.     }
    2 E* p0 F6 |  ~! _% K( P# \
  398.   }8 t- d1 e" y" z% D0 P8 v' O# p# B
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)! |2 L- X# W" G  U
  400.   {- b  j( M6 T* E- s+ X6 j
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())2 N7 V# N3 n  f6 r/ g/ k/ ~( F
  402.     {
    ' n+ y: V. m3 J% {: Z$ ?! V
  403.       file2=(LPUPDATEFILE)(*i).second;& T6 M, Y. k. I6 p1 J- p
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 {" }* J4 M8 Y  U) W6 K% [0 I
  405.       {# Z' C9 }2 U6 A  p
  406.         file1=(LPUPDATEFILE)(*p).second;' {( I' p" I; s% Z* n. r
  407.         if(file1->vers!=file2->vers)" x8 B: V$ F3 d6 P, L6 \
  408.         {, G) A" z! p6 G0 t/ e* ^
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . ?, D; H7 X' c8 b( q" v
  410.           c++;
    4 r4 p) x0 A6 W9 L5 A9 q1 A
  411.         }9 ?: H6 a, b- c, y+ }3 s/ |  \
  412.       }1 S9 X& j1 R7 J2 y) i5 G/ S
  413.       else( Z1 n: N, H2 T; l
  414.       {6 S3 I2 ^9 h6 z" E) J6 D: E
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 _/ o7 g, L; W% s
  416.         c++;
    7 n# G& r1 r* B/ f$ L  q7 r
  417.       }: P; H9 {% x/ _
  418.     }1 j# A. P; p' c2 E& i5 G+ Z
  419.   }
    * L" b4 G+ @: G
  420.   unlink(".\\DownLoad\\update.txt");
    4 t' x. k& Q4 M( b7 q/ y! w- b  R
  421.   if(UpdateLocal.size()) return TRUE;, j; I: L% M0 e% c3 |) _) R* G
  422.   else                   return FALSE;
    2 W5 o; G7 i( G" J" C8 ]
  423. }
    1 s- p; ]# F+ t5 @8 t

  424. 4 r' P$ y2 O) F4 k
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    0 J; C- V! w& g- F; ?5 ^* d, g! Q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' Z' E8 ~+ U7 \0 V) y: v
  427. 2 M( [7 W& E7 y/ m0 P

  428. 0 o2 b+ ~" b. r0 [# d6 q% O

  429. $ `: M4 o, i6 }7 y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    8 I7 \/ [$ W0 @" F, N; ]; l5 n
  431. {
    * k2 `5 e5 F5 R) X1 y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ' s+ l; u7 X/ B/ P
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ u- A! `+ Q; J' [/ b. L# s2 L, e
  434.   {
    ' q+ L. R- J8 n( \" C
  435.     char szLanguage[50];- C9 u8 _2 K& j0 J8 E5 c! _* b+ H) ?
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 ]6 U. k0 g1 {7 ^) M) u/ C
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + C7 z+ g8 `& C& b+ y& r. C6 K. Q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, t4 ^4 H6 k+ ^
  439.     else                                   m_iLanguage=ENGLISH;
    3 n  ]/ a7 P# Y. o& C: F- `9 N
  440.     char szRegister[100];1 M! q; M2 e2 v8 E" O2 F
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ T& U" e5 g# X, z
  442.     strRegsName=szRegister;
    7 u; ]1 B) b* Y" c
  443.     char szPatchURL[100];
    5 \/ J  w+ f9 ]2 p1 X" I
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" m% _, f) J9 W9 P1 b- U5 I9 h
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + f8 Z1 @9 ?/ D7 B
  446.   }
    & O1 {8 a& ~7 u' l+ y2 G
  447.   else
    5 G4 P& ?7 |, ?* I
  448.   {
    * t  c, ~! y+ E  `: n2 c6 |
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 P3 J7 x+ G' g% X- a0 [
  450.     strRegsName=DEFAULT_REG_URL;
    + U& n3 l0 W+ W% f1 [0 M; a
  451.   }
    & J7 b. b7 g! S0 A! m; B& q. \  D% c
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * m* I7 `' a2 E2 P/ T
  453.   {1 i. l, `5 _$ a
  454.     char szIP[50];
    / M& R; ?9 w4 F" J0 I. C# Q1 ~
  455.     char szDIR[300];6 Y; \$ k! r  l% Q+ D3 r: u
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")); @4 u8 l/ f5 j* u6 p
  457.     {* q4 i. r6 ~* a) q) }
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");4 C$ W, f6 d! d; G/ h4 A# P" S
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    : {; w' g& \2 F: T0 a' {, N
  460.       strHostName=szIP;$ k4 ?2 Z! h$ ?! d6 T2 y  k' F
  461.       strHostPath.Format("/%s",szDIR);1 H- _! z5 G% o/ Z
  462.     }3 \3 S8 g- }, o& {- b
  463.     else! J4 O8 d: Z6 T. F( D% q5 {7 D
  464.     {. B$ d  \5 P4 Z( Q' R. f& B& G
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : A3 \( \5 Z3 O* _+ _# U& k
  466.       {, d& f7 s* k* B  ]4 X- [7 s
  467.         char szLanguage[50];- k- t' s& e( M% l0 W
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / Q8 b! D7 c1 F" T! R) Q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    / g8 \  z7 ?9 M% R8 V9 Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* I# c8 F2 Z, n, l$ N, x- c, Q
  471.         else                                   m_iLanguage=ENGLISH;. J/ }5 [: _" u  X
  472.         char szRegister[100];* o5 ~4 r( N4 c; M/ Q, R
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 _2 a1 N9 y! |7 R
  474.         strRegsName=szRegister;6 g9 j( I1 r8 D$ C' W" q
  475.         char szPatchURL[100];
    3 l: t/ u( X) I- Q" a$ H
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 p2 ~% U, H5 J. m4 \" V: e
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);! J; I8 \0 Z' ?: p
  478.       }2 Y1 g/ o# x7 K) \' I  V
  479.       else' r2 s7 m4 j/ j/ t$ z$ l
  480.       {9 W8 S7 @1 T% g7 D5 p' ~) Y  u
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + d, Y7 l1 }! C- R, ]: a
  482.         strRegsName=DEFAULT_REG_URL;: H  Q$ D/ \! O3 c" \" r
  483.       }
    7 J0 S9 d* h1 O" F4 M" r( u* I6 X# G
  484.     }6 R  C; v+ F- w
  485.   }
    ' D' H# A$ S  i! l6 q6 b9 r8 x9 y
  486.   return true;. I+ ]0 A) H: t" b6 W) L& L4 F/ }
  487. }
    8 v- i! J$ g9 i4 n' `! Y
  488. 1 |1 L: _+ @" Q* P+ V
  489. #include ".\ZLib\unzip.h"
    ! c, D: P+ G7 M- u) |
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);9 h% x+ I/ G" q* n1 F
  491. /////////////////////////////////////////////////////////////////////////////+ H& \. O1 h0 _/ b" E0 N
  492. // CRevAppApp initialization  {' o4 s9 g  m# O6 W, T# @
  493. : h& k3 ^7 M, D! Y
  494. BOOL CRevAppApp::InitInstance()
    - o) T1 l$ @5 G7 P5 }4 X4 d
  495. {
    7 h6 _, R$ F$ H" E; K- z
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' M1 H4 x2 p2 a' u" `. n
  497. " |) W. {" `) f& Z. T
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    0 ?2 D& c/ t* u# k  j* q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))3 _5 z5 j5 X) U" Z. n  A
  500.   {
    * t+ x0 X( p/ g. h) }* J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");1 i7 Y& V; e& f' |. h( q* |% a6 M& O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ( N0 c* ]1 j/ m; Q9 U0 {
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    # \% J0 r7 K$ O
  504.     {
    9 z( K( {( l1 |9 m, ], e; @" h
  505.       strcpy(szPath,szPathTarget);
    * ]9 [- @$ l' u% e8 g
  506.       SetCurrentDirectory(szPath);
    + `; L1 d+ X) u5 C1 Y6 X
  507.     }$ E4 l' {$ A7 Y
  508.   }
    8 z  g' \7 @7 Y: c! z
  509. #ifdef _DEBUG# k( V4 _) T" F1 |4 m) n8 h
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" u+ Q5 M+ e7 K2 W
  511. #else
      {% n* w7 X: T6 w
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " S) ^. ^) z2 F& V! }5 S
  513. #endif
    ; P/ x+ Y/ d8 V8 r: ~/ {
  514.   {# E: e5 P! n  u, Y/ e6 l8 x$ \* J
  515.     char tempFileName[MAX_PATH];) L6 o) z; L2 `9 p4 W1 B
  516.     strcpy(tempFileName,szPathSource);
    4 v: \1 q& V1 ]. n
  517.     tempFileName[strlen(szPathSource)-12]=0;: S9 S1 f" Y8 o! s3 e+ l- O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 X9 a* i% |7 d( S( t" f
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    * }( v" k. O" Z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    . Z/ {9 ~  ~$ r& R- U* }- |% X
  521.     return TRUE;
    1 }) m% k5 K7 i, w
  522.   }( P; H  R: l4 o+ F& t
  523.   // Nuke 0118: Delete run.exe: C3 N1 [0 f3 w  ?
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ' A, l' E* C; q+ i8 m; f
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");. C- H, d; [9 \
  526.   if(!ReadCfgFile("Config.ini"))
    8 s& c( m: G' m, D1 A1 f
  527.   {8 D( i' X/ O3 J5 r/ A
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);) B3 b# U4 R; Q) g# ~
  529.     return TRUE;
    8 ^7 t" U9 K% Q3 H8 w: Q) ]! P
  530.   }# O* [0 d2 l( W( t$ N" _- u
  531.   HANDLE mutex;. N& a/ @( A# M7 H4 V
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 @6 {  g! b3 ]# M; V
  533.   {. {! w( J7 f) N; o, R
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    $ B0 A! e8 d6 @% I
  535.     {
    9 X6 v( z1 N. ]/ {! M1 y! ]8 I
  536.       CloseHandle(mutex);0 q+ ?' \- B# C* J$ i
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);) C# |' t% K  M. Y- e  n5 m
  538.       return TRUE;5 F+ M8 u* h2 ^4 m  Y3 }
  539.     }8 U7 e* _( i1 h6 a
  540.   }  
    2 c7 _6 o; Z4 b
  541.   CloseHandle(mutex);6 v* _0 ?3 x+ N4 m- {

  542. # ?5 ~% @4 W5 I' o: g
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);1 }) u$ s, C7 Z% u2 k: q

  544. : Y- C2 W$ \* C& A$ Y' {; E
  545.         AfxEnableControlContainer();; `. M# V& H: H1 w6 E4 D& H7 D

  546. ' f3 s5 b. }# w0 N" q
  547.   bCanUpdate=FALSE;# j( |5 r* E+ a) S3 m" O& m5 ]
  548.   dwStartUpSteps=1;
      B8 L  J3 R# N
  549.   dwProgramState=AP_NOTHING;' ?+ T% k$ {. ]. y7 I& O

  550. 8 j" Z" p, Q/ v6 |# C. A" y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    # R7 C2 S/ U3 Y( j: X' m
  552. 5 T1 @; |4 H+ ]6 K& L: @3 e1 J
  553.         // Standard initialization: I; ~  M& O3 i% W6 o
  554.         // If you are not using these features and wish to reduce the size/ ^8 z4 v* o+ @; n2 ^$ I! V+ @
  555.         //  of your final executable, you should remove from the following* c2 m( K2 G+ o% Q
  556.         //  the specific initialization routines you do not need.
    # M" X' m% U/ D! l2 L9 z
  557. 7 _$ r% l5 }' f" Z, U0 l
  558. #ifdef _AFXDLL
    # _) M: \/ |: K. i0 o; |# u
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL( m# b+ F& ]9 ]* I. d. v
  560. #else
    $ t2 U; Y- \# K( h4 o& R4 x
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically: j$ E& w  [; @; Z( A  W
  562. #endif
    8 Z! J' d3 _$ _+ |6 q
  563.   z' _( J2 \" u& M5 L* W
  564.   dlg=new CRevAppDlg;; _0 v8 d  W% D6 L% r% k
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    1 p! Y' r7 \5 x  f7 ~, v( X
  566.   dlg->ShowWindow(SW_SHOWNORMAL);7 d  f4 k& Z5 M, }# Y( ~2 E
  567.   m_pMainWnd=dlg;: o0 d2 L% J5 K% T. @$ x- J
  568. : `" E9 m: ^2 {* b- C! a9 Q- v4 X; L$ z
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ; p$ v3 j( z* j; U. h$ M
  570. 7 B$ B9 g) R8 D1 F
  571. //  GdiplusStartupInput gdiplusStartupInput;) S0 \) w; r' P* L0 w0 M
  572. //  ULONG_PTR gdiplusToken;
    ; k' z# K. z0 q% N9 H1 @1 b( M
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ) N+ {6 X% `# k5 v: `0 Z
  574. ) }2 |# p$ X/ K
  575. //        CRevAppDlg dlg;. w7 s( z5 K% D+ u3 G
  576. //        int nResponse = dlg.DoModal();
    4 C9 j: s+ O+ l; N* U" }
  577. //        if (nResponse == IDOK)
    7 r5 m; Z1 G4 D
  578. //        {
    $ o4 h( S5 ]1 v! D5 ?; _
  579. //                // TODO: Place code here to handle when the dialog is
    1 U: H! k4 R# x1 T; }
  580. //                //  dismissed with OK. X; l  O( z% Q3 b* I, I
  581. //        }
    % j1 u' `5 J6 n# w9 `& |" y
  582. //        else if (nResponse == IDCANCEL)3 b5 ?1 X) y. I0 H( \9 G: t
  583. //        {
    + z3 o) K# I8 P* S
  584. //                // TODO: Place code here to handle when the dialog is
    ) Y$ g9 D6 r" ^
  585. //                //  dismissed with Cancel5 |+ _; k) s+ N" ^& X' M( B4 e7 L+ \* j
  586. //        }8 u( X/ [% }  A* ]8 X
  587. ) A4 D# D6 d0 t/ Q
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    1 T. \* k3 K3 s: D" p( M% C
  589.         //  application, rather than start the application's message pump.+ @& N4 P8 E- P2 i) V- F
  590.         return TRUE;
    ; }7 T- d$ y6 b% Q2 Q" L
  591. }$ o& D7 T' R5 ]# o! Q/ T
  592. ( @$ `6 ]  H3 t7 V# x9 i) T
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    : r  h. m/ Q: U( K% l8 Y
  594. {. |& {- B+ J$ ~. G  _; q: c6 `# j
  595.   int i;
    ; Z' U$ |6 s6 _- O5 I1 {
  596.   char *szRet;) q6 y+ ]+ q, \3 }% H6 j" n3 L
  597. 5 B- H( R8 `0 |5 D; [) x
  598.   if(pSource) { itoken=0; sztoken=pSource; }# ]/ W  Z" L1 V3 u  g) Y7 V
  599.   if(sztoken)
    - ?4 m1 d' X* T* b) X6 n
  600.   {
    $ l' s- c# p  o( |
  601.     szRet=&sztoken[itoken];
    ( k+ l; E! ^' ~/ ?1 F
  602.     while(sztoken[itoken])
    ) c; T% d  H! i1 D& G) H# G
  603.     {9 J- N$ @  j4 [; G2 a1 E
  604.       for(i=0;i<(int)strlen(token);i++)
    5 B" V4 H0 l" `+ x2 k
  605.       {
    ' ~/ G6 s$ G1 p4 H$ W1 y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])3 N/ R8 N+ k8 j8 s
  607.         {
    4 `& b6 j% T0 B' y) ^
  608.           sztoken[itoken++]=0;
    ( I% G( v+ ^( W% f" S& s0 G
  609.           sztoken[itoken++]=0;
    % L4 }& S, I6 x, f: L8 Y
  610.           return szRet;. f$ }! @% O  z$ m/ @
  611.         }: p+ o$ k: {, {2 @! y
  612.       }  `( B  a$ n, Y' ]7 F
  613.       itoken++;
    ' ?! B; x$ D! R# c1 h3 E1 q- ?# f+ T
  614.     }
    " s* j1 X# d8 h7 B$ \& @
  615.   }
    # r6 ^3 t2 _( p% S( _5 m
  616.   return NULL;
    ; K* y8 p. K" ~* _5 H
  617. }
    & B1 T# r( ~) d

  618. ! r3 q+ @* x7 t$ L/ H# }
  619. void ProcessProc(long Total,long Current)
    0 v# ?. o. W5 G3 r
  620. {( v, o5 h* G9 t- a! l; C/ w* P: D- L
  621.         MSG msg;/ }$ t- @( f# q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 I' w* `9 V8 ?7 m
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 ^7 @! B7 ]  _; y$ y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    / n( P" n/ u: S; W/ ^0 n
  625.         {$ e# D& X7 g: _
  626.                 if(!GetMessage(&msg,NULL,0,0)), g+ m4 g" t3 q1 E  [5 t. B7 D# T
  627.                 {9 V0 E0 Q% p" ~% x8 ?1 C
  628.                         return;& L, [$ l' A9 ^2 g6 O9 `9 L) r9 }1 u
  629.                 }! g- v3 I2 ?( V& T
  630.                 TranslateMessage(&msg);3 S" m4 n/ G% L! f/ W# D' N9 I
  631.                 DispatchMessage(&msg);
      L' [/ m3 R; {0 I8 T, g
  632.         }       
    1 H- W8 w" o& C$ L. `3 I: c" }
  633. }9 G5 v. G/ a" x) h8 x% t) e7 \
  634. % T( b5 t3 s$ j8 A
  635. BOOL bFirstChar=TRUE;
    9 L% H  j: U, ]8 ^* \4 z& e

  636. - x. b& x. R$ z& d) n
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - Y% J* [6 r8 }7 l+ i/ i
  638. {
    - K! {9 R, H0 _* v! n
  639.         // TODO: Add your specialized code here and/or call the base class. ?. Z* T8 f' s* A0 f
  640.   switch(dwProgramState)
    ! i2 Y2 z, a, R
  641.   {; o8 _9 b! w4 S8 y
  642.   case AP_NOTHING:) U( N' ?/ l7 b
  643.     switch(dwStartUpSteps)( @4 Y! [9 Y  {0 N4 F  m9 {( D4 o
  644.     {
    : e8 v+ C8 v. e
  645.     case 1:2 C6 p% }; {$ C) Y
  646.       {
    , i+ T$ D7 P, O$ t# K% {! y% t
  647.         int i;
    8 A- X3 j) ~! {0 C) y
  648.         CDC *pCDC=dlg->GetDC();
    9 r! q& d4 H7 Z8 j( Z: f
  649.         HDC hdcwnd=pCDC->m_hDC;) u3 `4 e* }  r/ m/ P; L( u+ r- Q
  650. //        Graphics graphics(hdcwnd);
    . A% [, c- j; b! Q& `% l, Q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");/ B4 B% F6 e+ F
  652. //        INT iWidth=bitmap.GetWidth();
    ; x) A$ R: R! i- t  F
  653. //        INT iHeight=bitmap.GetHeight();
    * a1 `, C/ Y, E- S1 R( N, U5 q
  654. //        Color color,colorTemp;1 t! a, W  s4 d3 s! e9 T" o
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & R" m9 ^' n  U8 k6 X* q1 T
  656. //        {
    ' I$ c! C) N. |- X. z* g" n
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    + k- O& X7 ?8 W7 B/ ]
  658. //          {
    6 ^5 z/ a5 T) L
  659. //            bitmap.GetPixel(iColumn,iRow,&color);  `1 G* ?/ w( I8 `0 f7 r
  660. //            colorTemp.SetValue(color.MakeARGB(
    + s2 K( q; H9 O
  661. //              (BYTE)(255*iColumn/iWidth),
    $ e" v5 d2 |2 t7 s  X# S
  662. //              color.GetRed(),
    5 M$ I, i3 _! ?# j& E. l7 h5 f
  663. //              color.GetGreen(),2 k+ P$ h+ c; l/ U) ~" _9 T
  664. //              color.GetBlue()));8 R+ I. @2 P3 d4 P+ {- D. ^3 e# J# E
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);; g* j0 U+ J! o( q- T7 F; S
  666. //          }+ P0 m% n: r  ]. W7 P( I, x" f& r
  667. //        }- k, R  p9 o3 _, f$ R$ |$ K0 b: D
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ) F5 j% x0 Z2 [3 u
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ H  F( h3 e" Z8 P$ r( Q) L- \
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");0 N3 L; i' l. v+ g5 S; i* D4 y9 n
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 u) [: r% Y& ~
  672.         for(i=0;i<240;i+=8)4 e& O/ a0 H; X' v9 b+ k
  673.         {
    ; N! B  |* L* T, O; i' B  e
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      C  |. S( [. E- m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' {2 S" C: }- q$ k! z( C# D
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ l- \" k* h! @/ U" W* O% U4 k+ ?
  677.           Sleep(33);
    . F4 E$ V  a9 P& K
  678.         }
    0 w3 O0 P) b) c9 ]8 s1 F* }
  679.         Sleep(1000);
    ; Q. q: f& @% G: G  d( C; Y
  680.         for(i=240;i>0;i-=8)1 z  J+ e. @( l% U1 {; S
  681.         {" s& g- @. n9 D: ^
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( x' j/ b7 z3 s  h  T8 K9 z7 k5 L
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % F; N, K0 Y0 A& z( z6 e" F, C' c: j
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : Y: e! P, m9 g! ~4 j
  685.           Sleep(33);
    9 J1 E% f7 [0 Q" m! F' L
  686.         }  e" c  r" r( f* }
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    : o0 l+ ?8 O7 @
  688.         dlg->ReleaseDC(pCDC);- D: J% t/ `; y% i# K4 X# M0 O
  689.         DeleteDC(hdctar);
    , {8 [; X/ z5 ?2 A, z- k  o
  690.         DeleteDC(hdcsrc);
    " |6 H6 W7 F' @9 [7 o
  691.         DeleteDC(hdcorg);
    8 x# V  u( l3 e1 C! [7 F% U
  692.       }; C! ~' `% d0 l6 D/ a# d
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 I2 K0 d! H: Q7 q% Z" m
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    6 L( v. V2 H% a# C: E7 ?& I1 q$ {
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");' V* m2 c; ~6 r/ z$ C( c9 ^# N; d
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ! X  I/ m) Q# A1 M5 _. r
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ u* S8 i% Q$ w$ {- Z2 c0 C7 ^
  698.       if(!Dn.Connected())7 [' `. x5 B$ W
  699.       {
    2 U3 V5 O5 t& A1 P' N
  700.         dwTotalFiles=1;0 O6 [& Q* @# y& m2 Q
  701.         dwDownLoaded=0;7 X3 I5 E! g+ W: f% s4 P
  702.         bSilentStep=TRUE;
    + I: Y# U7 `8 L' n
  703.         bCompressed=FALSE;% [* i* p8 P: V  M6 q6 E4 Z
  704.         strExtLocal.Empty();
    / o2 j, n( [5 x  H$ q3 R0 Q
  705.         strFullName="readme.txt";9 d2 l  R/ C+ \# C
  706.         dwProgramState=AP_CONNECT;
    $ S% Q0 \4 k8 Y9 c( K( U: i# f
  707.       }4 Y  ]# \: Y! y! b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();5 B* l, V9 D* z
  709.       dwStartUpSteps=2;6 P, ]6 T- B+ m8 [5 B) c$ P
  710.       break;5 ~$ Q6 x2 a( n( N# ~' Q7 _
  711.     case 2:- X& J3 g' [6 L  o9 ]: z
  712.       {# ]. C6 u. O1 O/ l) ^; t
  713.         int iEOF;
    1 Z# A0 X" c6 K6 ^
  714.         FILE *fp;
    6 T! s- q2 G- @
  715.         char szString[512];7 w6 W5 e% u8 s9 a6 g6 ?
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    & T: p) m) M4 p( D4 I4 ^! r$ v
  717.         if(fp)  G- ~. u2 B: l9 V: c  z( x+ m
  718.         {9 B* _( f3 D6 u9 W% A  M! i  I
  719.           do3 O# V5 A' V5 l
  720.           {
    $ D  w5 i5 x' P  k- K- ~
  721.             iEOF=fscanf(fp,"%s",szString);5 W) C2 R2 c7 i; |8 }
  722.             if(strlen(szString))
    0 J) H# j' L- {+ h& h
  723.             {) m) `2 ~; e) c$ A
  724.               if(bFirstChar)8 e! _7 O* _: O' n! W% {
  725.               {
    # e7 R$ t8 m* c
  726.                 bFirstChar=FALSE;
    3 f1 p: D. ]/ r$ [2 H
  727.                 bConnectIsBig5=FALSE;- l8 `& u2 D/ `
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;1 Q% a. Q: o2 W9 I6 A6 h3 G' {
  729.               }
    , M! P2 D& r8 V1 M+ e4 A& B3 y$ u
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    $ Y5 K3 n* [3 F9 i4 O" V2 B
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));  ^" t7 P8 W) \
  732.               dlg->m_ListText.AddString(szString);1 C. p" s  M- Z* g
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ v9 f) j7 S: E. I: k' N
  734.               *szString=0;
    5 p1 j4 e$ |2 c9 Q( b
  735.             }
    5 \* w* N4 _$ v
  736.           } while(iEOF!=EOF);
    1 F5 Q% L4 n7 h2 ]- h, a
  737.           fclose(fp);
    8 ^* B: h. F( _# C2 o3 \- s7 a4 d
  738.           unlink(".\\DownLoad\\readme.txt");* j# l9 Z  C4 ?. B0 b4 W6 ~
  739.           dwStartUpSteps=3;
    8 S- ~+ F) o/ k! y0 t: R$ ?: Y
  740.         }
    1 g% B" r6 S6 V; H
  741.       }% m/ W% n: W, c( a, m6 Q# ?
  742.       break;$ P: C1 `' C7 A% s% X3 a* a
  743.     case 3:- e: l0 e0 n0 n
  744.       if(!Dn.Connected())9 `2 k* d0 |5 b2 e1 K' c7 e
  745.       {
    ! k* a7 W( t7 ~) f1 C1 q0 `" C# c
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    & N; q- @" Y3 G
  747.         dwTotalFiles=1;. e3 q* N$ f; Z3 b
  748.         dwDownLoaded=0;% x- f5 D' ^) F" k% v( l6 E
  749.         bSilentStep=TRUE;6 m  [& W! v7 r9 t
  750.         bCompressed=FALSE;
    - O8 w# ^" I* C! S. h
  751.         strExtLocal.Empty();
    % [/ K# r0 D- ^6 W
  752.         strFullName="checkversion.txt";" |) z: v. k. |' n: D
  753.         dwProgramState=AP_CONNECT;+ Z2 o7 w8 h; f5 g+ I) V
  754.       }
    $ A" k9 s+ Q' c3 _6 W0 Z9 j
  755.       dwStartUpSteps=4;
    : L8 [0 {6 K+ ]
  756.       break;# x" K  t) Q0 X. d
  757.     case 4:
    ! C% V' S9 h2 F& G
  758.       {: F6 @& k" }2 {' E% g0 b# t
  759.         FILE *fp;+ {: J1 g; b: ]8 |
  760.         char szString1[128];" {* u  P- U5 X; c2 x
  761.         char szString2[128];' `3 B( r& i$ l! @" m: m* H
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    0 |3 s" x* b, C  V! v8 k
  763.         if(fp)
    9 k5 l: A% P& ]1 L0 Z
  764.         {
    ' M% u, e% c5 k: S- {$ j+ S1 ]
  765.           fscanf(fp,"%s",szString1);
    7 X5 v- w, R2 s8 N
  766.           fclose(fp);
    4 Q' I9 _% {/ B* g" a, Q
  767.           fCheckVersion=atof(szString1);0 I5 ^- Y' J! i0 l! A6 z
  768.           fp=fopen(".\\checkversion.dat","r");+ F, C7 ^4 S; m! Y7 x# P* i
  769.           if(fp)$ n/ N; ~. }, l: r2 Q. I
  770.           {
    & C5 A4 N* D  W; p
  771.             fscanf(fp,"%s",szString2);
    6 Y0 h! g6 y% P* I7 H" J9 T( X4 _
  772.             fclose(fp);& N- P. G. f$ }$ C6 K# }! x
  773.             if(atof(szString1)!=atof(szString2))
    * p" L1 R  j- f/ R
  774.             {
    * h5 d( Y7 {$ \# K( S
  775.               if(!Dn.Connected())
    / q( N- w/ _1 k( T  H% |! m9 p
  776.               {
    8 ?7 v4 F, Y# M
  777.                 bFirstUpdate=TRUE;! w8 f# \  B: M5 X$ v
  778.                 dwTotalFiles=1;
    ' t: I+ n) l2 p% _( e* s
  779.                 dwDownLoaded=0;2 P0 D" S3 k6 b- j3 j* r
  780.                 bSilentStep=FALSE;1 i5 Z4 l, u: S) p
  781.                 bCompressed=TRUE;
    ) U( ?' @  E8 Z! m6 Q6 P
  782.                 strExtLocal=".\\DownLoad\";
    % P1 j7 H: G0 W  N
  783.                 strFullName="update.txt";) o7 _. u9 `$ ?$ W
  784.                 dwProgramState=AP_CONNECT;
    % c! r7 G- `8 \9 f
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. {: }# T6 D. K9 v' v, b5 W
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: {5 ^( T4 x* @
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");& N2 t/ D% G% Y' O& U, f6 J

  788. : E7 S6 g8 O* m' X: J
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; h0 H! k, I% v) h+ Q8 ~
  790.                 unlink(".\\DownLoad\\checkversion.txt");( g* V4 ?/ r4 I4 w
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 N+ J8 S) ~4 E/ h4 _% H
  792.                 {
    . Q" ?* ~* Z7 U- w3 t9 W+ _( Y1 }
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- }2 C# a. s0 K6 G: j/ a
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    5 O0 n, j& h* S  C* \
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    7 I. ~# Q+ \: Z6 q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 c& f9 X! U" \) G0 D8 b, O! v
  797. : j) D- G, H0 q9 t0 l' Q
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 _& ^; K) ]0 q4 R6 o
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . _' P2 ^4 z, v/ w
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 V" o. k+ f2 p
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) t  r1 K8 s9 o* ^
  802.                 }
    ) c6 B* M# U% H! G% J
  803.                 dwStartUpSteps=5;+ P1 G: w' h6 Y! x: [
  804.               }
    5 ^5 i3 P8 B; k( s
  805.             }% z3 {$ v! \# Y" P; P
  806.             else+ _, k# k5 o$ S
  807.             {
      x4 ~0 U9 F0 G  H( d
  808.               unlink(".\\DownLoad\\checkversion.txt");
      `5 f$ n  o; s/ q( C3 j
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* W% D; [2 Q: t+ a; u1 s: w2 I8 e( g
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    * J  c% S, x" w* @4 ^) S
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ N' c5 @- `- P+ Y

  812. 3 V1 ^) }$ u+ U$ L" A; o- v, P
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 \  ~, p$ \: N8 m
  814.               dwStartUpSteps=99;# P7 m$ c4 h$ Y6 X& H# _: F
  815.               bFinishUpdated=TRUE;
    - C$ \4 n$ ~% m4 J3 e' h
  816.               bCanUpdate=TRUE;  g, y6 c" l7 u% d4 u
  817.             }
    ; F. G  B2 r. a. j
  818.           }
    * ^% n; ^: G: q0 t1 [  ~
  819.           else
    & z. P) d+ L" T; T* x  G+ m
  820.           {
    $ D& K& G0 k# C% r
  821.             if(!Dn.Connected())
    , n! V/ b3 I. D' m' c
  822.             {
    6 e' g1 J& F  G8 \6 e- m6 s6 v7 N( V
  823.               bFirstUpdate=TRUE;
    1 L$ G$ U# u1 Q! P9 k1 U
  824.               dwTotalFiles=1;
    - G9 [# p& V7 v
  825.               dwDownLoaded=0;
    7 E" t# x/ I* R4 d
  826.               bSilentStep=FALSE;
    2 W" X& F7 T8 D& x, L) Y
  827.               bCompressed=TRUE;
    & @9 p1 X, B+ w5 l
  828.               strExtLocal=".\\DownLoad\";
    ; @- q# A1 G/ U+ Y$ X3 z% d$ f% o4 ?
  829.               strFullName="update.txt";
    . Y0 r. O* g0 d6 M: Z' p
  830.               dwProgramState=AP_CONNECT;
      \  j6 `$ ]0 U" f" c, Q" o, v
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ O! L6 T2 J6 O+ l+ n) N# I. m
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    + V, n' {8 [& w* I
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");8 |3 w, P2 }2 }# j( R
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - M7 {4 ^4 a2 z) c8 ]9 Q
  835.               unlink(".\\DownLoad\\checkversion.txt");
    % s  U% \6 ]& s" y: V- G
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)7 L, {; @* B/ w( g( N
  837.               {
    + W1 K8 V8 m. v
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");( t# P5 \$ z8 \9 m  p* Z) S- W
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    $ }% k: x; _( K$ U
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");3 {3 B) t* e8 y
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; y; T/ O  y. q7 y3 i3 a
  842.                 5 C5 D: v. a" l* ~% W3 o
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & i  h* c' x+ G! T' _2 Q( i
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' D1 x2 S( w0 p" B% r9 B9 d3 K
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    9 m* y9 H7 [$ I( B  y) {
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 I" \0 s7 o8 e$ h: y
  847.               }
    + X0 e) r4 \+ A2 t% M
  848.               dwStartUpSteps=5;/ h3 Q. b1 o! r; Y
  849.             }! j/ e2 ^8 ~1 c, t, f
  850.           }
    5 S& Y, _) T- q/ a- e2 L
  851.         }
      J. N6 b6 ]4 n$ w+ g
  852.         else
    $ K5 P7 N4 c  i% x% s. l
  853.         {6 a8 ]( a! s- j$ r/ D
  854.           dwStartUpSteps=3;
    8 T. X: r& ]! y( q
  855.         }
    * B7 G" Z- w; a7 g/ a  |) ?$ q( y1 u
  856.       }  S+ {% j0 m0 t! g# p
  857.       break;
    1 E# r: f2 m, W5 V
  858.     case 5:
      Z: r( b- I; ~9 V+ h% S, b
  859.       {6 O& E0 m( ^& _3 x& j3 m
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)4 R- @* X% `, {
  861.         {( P. V$ E! \+ U: A" R& K0 ?
  862.           int opt_overwrite=1;" A7 B+ J7 C) Q; w, k
  863.           int opt_do_extract_withoutpath=0;
    4 [3 D/ p* G, B1 A4 ^
  864.           unzFile uf=NULL;
    0 g: p6 `! M: H, w7 A' s
  865. 5 v6 R; Q) e# [: E9 R4 ~1 i
  866.           uf=unzOpen("Wsa.zip");5 h- J8 }4 l8 Z7 L- h
  867.           if(uf)4 m  ]5 Z! z% a" Q. o% X% |2 ]1 L
  868.           {3 Z0 f9 [, H4 z( i( L/ k9 U. `9 {+ U1 o
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    - _3 y; Y8 ~# a
  870.             unzClose(uf);9 Z& }! y1 {3 E8 Z: ^) m1 J/ n) U
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ) U* ^& z1 c$ p- z$ _% R) ?9 c0 @
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ' T$ i4 j* v; T5 I$ P, H5 Y6 h* {" C
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");; @& K, g' \; v- O
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 o: x- {% `; A$ K& H& H+ k" P
  875.           }
    + |( W- [  X7 p
  876.           DeleteFile("Wsa.zip" );
    . p& u. k- P- R+ ]. M! ~
  877.         }* p) Q& R9 t) V4 \

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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