找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式

' N* |% Q2 T8 G& P% j2 A* ?+ d
  1. / RevApp.cpp : Defines the class behaviors for the application.! U" W. g" U1 Z
  2. //
    ' [9 i% n& m) o, u3 T$ k7 ~5 V# a

  3. 5 m% u4 k: I3 Z% O7 O( D& @3 U
  4. #include "stdafx.h"- A- P9 R- w- L0 K3 q0 K+ J

  5. ! K: P3 u. ~4 [
  6. //#define UNICODE
    5 f5 \1 H. [! r: s! i4 I$ G
  7. //#include <gdiplus.h>) ]$ ?2 w/ p$ F) X6 f6 s$ C9 |
  8. //using namespace Gdiplus;8 ~  Q1 h" [4 b9 H! e& f5 h- F

  9. 0 R- P& V: q, d$ i5 I
  10. #include "RevApp.h"( U& h/ C5 U8 Z
  11. #include "RevAppDlg.h"& i- D  c  g) i; G
  12. 2 C+ _1 q1 ?, M
  13. #pragma warning(disable:4786)8 f9 G- Q7 B7 N9 }
  14. #include <map>
    ) d% v' k" m# t$ }. K, C
  15. #include <list>
    9 T. @  l7 r, n* q5 ]7 {
  16. #include <direct.h>
    & H0 p+ b, q/ _* b! ?8 j5 b9 E4 q

  17. " ]5 R7 h0 H, ?0 j
  18. #ifdef _DEBUG+ N# X4 B  Q0 Y/ z5 O" Y
  19. #define new DEBUG_NEW
    6 \9 U; w1 k5 F6 C; T
  20. #undef THIS_FILE
    . ^, s2 w- s8 V* }' C
  21. static char THIS_FILE[] = __FILE__;& [0 V* K5 H. N+ V- a1 s
  22. #endif- ~, x2 p6 C/ X% q1 u4 j" R
  23. #include "SkinResDef.h"
    & z1 s) p. p7 Q. h
  24. #include "ChangeBG.h"
    & A! o/ k' B+ N
  25. #include "AFXINET.H"
    + ^7 K: ~9 L, |5 i8 X/ F

  26. , `1 |& |! R/ O
  27. #define TRADITIONAL_CHINESE 02 `' Y5 O% x  S
  28. #define SIMPLIFY_CHINESE 1
    ) P7 }8 a$ ^' K: K' V3 x
  29. #define ENGLISH 2# ~# v- L( m- ^' p# L0 ]
  30. int m_iLanguage = ENGLISH;9 E0 I( [- x3 V7 y# J* c/ N) K  j
  31. /////////////////////////////////////////////////////////////////////////////
    $ B. Z% l& I+ e0 S- j
  32. // CRevAppApp
    / p/ g5 {  y" D# n; b) K2 N7 i0 F7 P
  33.   }7 @% H: p. S! }2 @( a
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)+ r) S, d( _+ P# q* x  f  |8 a
  35.         //{{AFX_MSG_MAP(CRevAppApp)& w4 @+ f! k9 m) R( ], p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.- u; A# }3 L  o' u, t4 u! ?9 X
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& l4 A/ ?5 v6 Z( R* T, C. [; |( l  T4 K
  38.         //}}AFX_MSG) H% w1 }. {5 {7 Z/ n. U
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)5 {( m8 e- H5 H2 P% D, n  o0 s+ \
  40. END_MESSAGE_MAP()9 I& f5 W) z$ ~

  41. & ]* P- l3 K4 F6 o7 u4 R
  42. /////////////////////////////////////////////////////////////////////////////5 e; b3 W& Z5 i" ?
  43. // CRevAppApp construction
    - [5 m# p2 U* q2 V% a& Z

  44. / f; S$ y2 @6 Y, C+ N
  45. CRevAppApp::CRevAppApp()0 B$ d% ~( R1 n* F
  46. {
    ( T- ^& Y+ u- e- o8 w+ y7 O
  47.         // TODO: add construction code here,
    : P; j% e2 k* {5 O1 w8 \, p9 w1 s
  48.         // Place all significant initialization in InitInstance
    - S' I1 R0 z9 }1 p  v3 c1 s$ b
  49.   bDisplayIsBig5=FALSE;& V3 X; l5 X& _- V: f
  50.   bRestartUpdater=FALSE;3 p: s: K) r" B* v2 M
  51.   bFinishUpdated=FALSE;# R4 S* Y; z+ X' N3 G, D5 Y
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;3 q: A3 \2 S2 Z( B
  53.   InitChangeDataBig52GBKS();! d- C4 [3 D) V" [
  54.   InitChangeDataGBKS2Big5();* |' _( s, {: b; M( a: q
  55.         //
    " t' \8 D/ q) s( T( g
  56.         bClickRunExe = FALSE;
    / o7 C/ Z- Q' c
  57.         //
    5 q5 t. S$ T5 e
  58. }2 W  _0 d3 f) f/ ^: ]+ G0 s
  59. : O2 o( h5 r2 y, a
  60. CRevAppApp::~CRevAppApp()
    2 m# P) U# C) Z
  61. {" W$ M0 q7 d- ?7 G. `, J! y
  62.         // TODO: add construction code here,/ W2 T1 l' _9 Z6 G% m
  63.         // Place all significant initialization in InitInstance/ J! u2 t- d, @3 c
  64.   EndChangeData();7 C% k; M7 x" Z2 X7 D8 [
  65. }, C8 a7 n5 F: o& Z# Y2 j% y

  66. ) V: Y1 W  }+ q% s! N. a
  67. /////////////////////////////////////////////////////////////////////////////0 ~3 r. R3 L6 Z& w
  68. // The one and only CRevAppApp object
    + Z0 }& U  R, ^$ _1 f8 |0 R
  69. , m+ j4 `/ x8 U* B6 Q
  70. CRevAppApp theApp;3 q- `4 @' ?2 ^) V8 c
  71. 2 u5 ^( P& [$ j$ n1 H- V
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 v/ v; Q' ], z" p7 W1 Z
  73. {" l6 _# \% N) {
  74.   int iEOF=0;
    : j& b* {# d5 d& c  ^+ I. s& U
  75.   char szTempName[MAX_PATH];
    - H/ G/ F4 r" O
  76.   *szFileName=0;
    6 W4 D/ U! G  ?! s5 v/ Y2 \
  77.   iEOF=fscanf(fp,"%s",szTempName);
      ]$ C6 ]4 v  H5 j" ~: F. s+ g
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ) t9 a# k0 t. {8 q
  79.   {( i2 E' w$ ^  K' T
  80.     strcpy(szFileName,&szTempName[1]);
    , Y- z3 z1 {: y; j) O
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    * r* Q  x4 A- [
  82.     {# {% |4 `! S" Y
  83.       iEOF=fscanf(fp,"%s",szTempName);; ]; F* o7 r! d9 H" Z3 A
  84.       strcat(szFileName," ");% n( K5 J  W' L
  85.       strcat(szFileName,szTempName);
    0 }; @# L2 q( w+ M* x6 b3 M
  86.     }
    ' l6 n: H7 w# y3 q6 F- p
  87.     if(strlen(szFileName)>=1)
    ' R9 d3 g- f, i* h+ T/ B$ E' f
  88.     {" |) X# c& ?) L. G8 D
  89.       szFileName[strlen(szFileName)-1]=0;
      P6 L/ }( b: P3 N0 G
  90.     }1 B( z0 h$ A# i' Q; O
  91.   }' k; w" r" E& w& p' ?
  92.   return szFileName;
    5 f- ?5 X& U/ u* a. J; ]  N/ H& c
  93. }1 u2 f( p4 u& b

  94.   a, L" v0 F" q4 \. g/ u' B* E$ l7 R
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    . a' W) }& W3 ?6 c/ f) E9 m% U
  96. {
    + F& J7 M8 _8 m, H1 o
  97.   FILE *fp;
    ! F- N9 H  ]: m1 [5 A
  98.   char *key=NULL;# h0 r" {0 x+ E# z  d
  99.   char version[MAX_PATH];
    9 m( q( d9 x: J
  100.   LPUPDATEFILE file,olds;0 _; `3 ?, ?2 F& h5 ], Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 Y( P; x7 p$ R" `( m  o

  102. : u1 m  K# V4 B, L% O1 f! `
  103.   UpdateList.clear();( i3 C+ e, c# f* `+ R0 J( b
  104.   UpdateFile.clear();! c* e: e5 P( Q7 {; [' [
  105.   if(GetFileAttributes(filename)==-1) return false;9 _7 B/ y4 d1 W) C' ], T
  106.   if(!(fp=fopen(filename,"r"))) return false;
    + ~8 ]9 D' n! l. n
  107.   fscanf(fp,"%s",version);
    - ^9 d! F% C" k+ U# ?( Q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
      r0 y9 Z* l& P
  109.   while(fscanf(fp,"%s",version)!=EOF)
    5 ?! y0 a* z5 [/ w# l) ~
  110.   {2 ~0 t7 {; f" n( k& L
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( B" M/ X0 a5 Z5 ^* W. @
  112.     fscanf(fp,"%s",file->path);6 x, h2 f4 Z, T+ l3 v2 N. P* r# A$ T- l- z) S
  113.     ReadFileNames(fp,file->file);
    5 z7 S9 J* U2 p, ]) v
  114.     strcpy(file->full,".");
    % i2 }' G) |% W. E
  115.     strcat(file->full,file->path);  H5 x. z' y. u) d+ [; t
  116.     strcat(file->full,file->file);
    % H$ L, u  Y0 {7 M: e) c. {
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())/ {/ s4 I  y* Y2 Z
  118.     {
    , u; U5 x8 {: O3 @6 b  c" \
  119.       file->vers=(float)atof(version);# }) @% s" l3 a( f
  120.       UpdateList.push_back(file->full);
    ; x  `  q+ H* E6 A& I
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; W/ |/ ^; h7 a1 U' Y- m
  122.     }
    - K+ t0 ^. [# \+ B; g% j0 y! }: e
  123.     else
    6 v* N: Q- S# Q1 j9 c9 i1 ^
  124.     {0 i$ P. f  s: [
  125.       olds=(*p).second;# q. Q" ~. M! R* }$ Q  D
  126.       if(olds->vers<(float)atof(version))& M+ u% D3 F) s% p9 W, X2 ^
  127.       {. z/ d1 S  Q# C  Y+ z  C- l
  128.         olds->vers=(float)atof(version);
    ' E5 ~$ g5 Q' e, e
  129.       }
    7 K! \3 W0 d0 t7 ?2 ^5 q
  130.       free(file);
    0 S6 q/ X: H5 X$ o
  131.     }
    ; w  x: J8 F. B: K2 [! [& f4 h
  132.   }
      m! f. ^% V) u. l- P
  133.   fclose(fp);
    0 m/ w# `9 Q$ T; V6 Q, b4 `5 [
  134.   return true;
    . ^3 P* e9 d; n8 R
  135. }
    ( y% \) f, O" Y1 q( `2 [' V
  136. " f! D; S- R5 d* B. a% F
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)1 j" b' l( q9 n: h7 x
  138. {* E$ `+ y8 U( O' F
  139.   TCHAR  szFull[MAX_PATH];
    : ~4 i, F5 D1 R+ _
  140.   TCHAR *token,*inter;) U4 C* ~  c# P4 x; R
  141.   *szPath=0;
    ) j" e" m* y4 d) K& O( g; o6 h
  142.   strcpy(szFull,szFullPath);) k1 Q+ Q7 l4 V( \* \  r0 B
  143.   token=strtok(szFull,"\\/");
    5 z$ y0 e* h# }3 K; s  t
  144.   inter=token;1 |3 i( Z. q7 h+ F; @
  145.   while(token=strtok(NULL,"\\/")). `; p* g! S% z- @  @, `
  146.   {
    . t! |" `; m1 a3 J8 i
  147.     strcat(szPath,inter);. u. Z$ M. G. {" m/ |2 w
  148.     strcat(szPath,"\");
    + V& g' N; U$ T) r  T" a  \2 t
  149.     inter=token;
    # e$ M$ t; ~* T, V: m1 g. p
  150.   }  H4 }7 N: y( V" x# \1 G# `
  151.   return strlen(szPath);1 {) x( S) K2 O  ], p, B3 {$ s. ^
  152. }
    0 J% ~- O7 W4 [$ T
  153. ! ]! l' \& H  ?9 R9 m$ T* b
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)$ o1 r% h. z3 [. J! [  I) ?
  155. {2 ?8 \. J, T+ [6 [
  156.   DWORD attrib=GetFileAttributes(Target);7 o8 I' U2 A# B& d/ \( v
  157.   if(attrib!=-1), L0 C6 g- w3 Y' j! Z. ]9 }2 s0 ^" Y
  158.   {; {: i7 ~1 j/ k- e4 v) f0 v9 ?
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ! g; U! a4 \/ h4 ]6 Y1 R
  160.     {
    ) ]( O; r) P6 ?: w3 J
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    - [: l+ ]0 `1 D6 e
  162.       SetFileAttributes(Target,attrib);
    : Q* q/ E# U* @, n
  163.     }
    ) l  Q# t$ j& _* O2 R& v' N
  164.   }2 w* \/ _; I1 g2 ]
  165.   CopyFile(Source,Target,Erase);2 s$ h2 \5 O# b9 y2 _. }1 e
  166. }' T) f# ^/ L$ }5 O! z3 \5 ?

  167. 2 `5 }- x& z. J2 K
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! }# A; C* \) A* m" ^- g0 b
  169. {
    7 Y; D: C% D, O+ X. U! j7 T6 a
  170.      FILE *fp;3 `$ M) m6 a1 I
  171.      char  szBuffer[8192];
    # z3 q' o# ]7 c7 O) B, A- E* W
  172.   va_list  argptr;
    + K5 n1 c8 Y7 F( V8 m- [
  173. 1 U, F: q; i  g: b  D
  174.         va_start(argptr,message);
    . @% X' b- |( K) Y0 Z+ [
  175.         vsprintf(szBuffer,message,argptr);3 c7 p( d8 @% r: Q; w
  176.         va_end(argptr);) P% k: r+ `- x5 f+ i. A4 n! _' y, L
  177.   fp=fopen(FileName,"a");, D; v! c. {$ X) E7 M- ]8 Q* g% _3 Z
  178.   if(fp)' w& c* p" Z" ?& d6 `( u3 Y$ s
  179.   {9 L/ `+ N( c2 l) \
  180.     fprintf(fp,szBuffer);
      k) v$ X  W2 L7 f6 _( q4 s
  181.     fclose(fp);' f" O9 \2 D3 E$ A7 f
  182.           _flushall();
    5 |# G3 }$ J( i
  183.   }
    9 k; G8 Q# Y) F& j* f
  184. }1 j' N7 D0 h3 l8 P% `

  185. , d8 j3 v. ^9 ?% W- V5 {" x
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    2 F. d  y5 j3 ~3 p' I% k
  187. {3 A. T* l+ _2 M% J7 k
  188.      FILE *fp;
    % E* p$ Z2 B0 n# y+ l/ F9 S* |
  189.     DWORD  attrib;1 z5 K$ d+ B. ^0 R  l- m. }  u$ B
  190.   attrib=GetFileAttributes(FileName);
    ; ]- A) q/ O, z, C3 H3 C& w
  191.   if(attrib!=-1)' h" g, }5 Y) V9 _  D  o( @
  192.   {: R4 e- \, j6 l- {5 P
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);% k3 z/ O# g! ^/ P; K, C9 M
  194.     if(!SetFileAttributes(FileName,attrib)); p, @/ a' `! |
  195.     {
    6 ~( |1 \/ m9 H; q2 r1 S- @9 N2 o
  196.       return FALSE;3 u( I! l& \! X/ x) W8 h. y
  197.     }
    ! K- t. y' y4 H+ O5 I' S( x
  198.   }
      B; {9 {! h4 c; n' [
  199.   fp=fopen(FileName,"wb");4 P9 P7 w) q0 s* `: C8 c4 p
  200.   if(fp)
    : i! B( J; G/ n9 E+ z+ g' Z! x
  201.   {0 x4 f8 s, `7 U1 t2 U  X/ e$ K
  202.     fclose(fp);2 b0 N. j* r, }8 |9 G+ {7 M
  203.   }
    % c! d/ f3 A5 x) ]/ S
  204.   return TRUE;
    6 I& K1 G5 ?3 Y3 O+ \5 K
  205. }
    3 O5 K5 @8 b8 S, E7 ?' n; Q. U2 ~
  206. * `+ K% X$ @0 i# n8 U
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    9 O) |) B, I# B, y# l
  208. {
      {! w/ G. O& g# t" E  a% K* M: q
  209.   char filename[MAX_PATH];
    % W# {4 [/ P8 S; Z
  210.   LPUPDATEFILE file,olds;4 n2 F/ i; U5 Y  U; Q5 T" |
  211.   std::map<int,CString>::iterator i;* `" F# E7 c2 I- m" {/ S
  212.   std::map<CString,LPUPDATEFILE>::iterator p;9 L, u6 q/ a6 L" }
  213.   std::list<CString>::iterator l;: k# ]$ x3 }( p3 M* f6 [# X. y
  214. # @+ d8 ~) C0 {1 n
  215.   if(bFirstUpdate)
    ! b, Y3 V! x" q+ P: z: h- Q2 {
  216.   {) d0 v* |5 p$ u+ l
  217.     dwCurrFile=0;! |" n7 l# q8 F2 N, ]6 H9 N
  218.     bFirstUpdate=FALSE;
    ! ^" l! p2 _6 B8 y
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), H; u' l9 {/ {: b$ r
  220.     {: ^( Q" ^+ e$ J3 _  X9 R
  221.       dwTotalFiles=UpdateLocal.size();
    3 }3 E4 f' t7 K4 I
  222.       dwDownLoaded=0;0 @8 h) K$ n8 f, j- ?9 S5 Z5 K
  223.       bSilentStep=FALSE;+ h" v8 K9 m* \- @; G. O
  224.       bCompressed=TRUE;# h6 I" T+ V5 O$ c
  225.       strExtLocal.Empty();$ x/ u8 Y( j/ Q* {+ p- o
  226.       strFullName=(*i).second;  L: r$ `$ G$ U5 M# x) {& J6 S
  227.       dwProgramState=AP_CONNECT;
    ; @7 @% g" U: W" i2 j% |  Q$ _: V
  228.       return TRUE;
    . l5 _0 ?+ O) A0 G
  229.     }  {9 W1 ]2 V. E  f$ `
  230.   }" I3 J$ j5 G* e  y
  231.   else if(bRestartUpdater==FALSE)
    " Y# y5 ]8 z5 h3 K
  232.   {
    . t! P9 z) ~* Q% L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ' A  C; u, w; a* i; e% O
  234.     {
    $ i' u3 Z( l# X/ c
  235.       file=(*p).second;4 r* T1 D$ ]" q1 o
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    % r% E! c0 l  @: t6 b5 M' k
  237.       {% L  R7 d" Z- x
  238.         olds=(*p).second;$ x( A, F/ ^0 n
  239.         olds->vers=file->vers;
    . ^# h/ Y9 J+ i; r% T
  240.       }& n6 j6 h, W5 d
  241.       else
    * D  e; Y4 z1 K$ E
  242.       {$ a3 @  ~# x9 @" x/ [+ o6 Q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + Z1 o- c* a9 f; ^+ C5 m
  244.         memcpy(olds,file,sizeof(UPDATEFILE));  Y4 {$ Y' a& F. T7 k3 E
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) |! E( ~+ L, m$ v4 \8 ]
  246.       }
    : b! W  \3 U" u
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    8 o' ]! p/ S+ H, K4 ^3 b* ?
  248.       sprintf(filename,"(%s)",file->file);! B3 m( z6 S" ?- ]9 |& L8 G/ v
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 k/ @/ z& _" S. [: z' L5 ^
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
      c. t4 i. n! Y: w. T
  251.     }
    8 k5 w0 X9 ?/ S: K! r
  252.     dwCurrFile++;4 I6 p, l+ N$ X1 v
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 z& g4 ^% h7 h) X
  254.     {: u$ ?# g5 o6 Q5 U. U$ }6 k% h
  255.       bSilentStep=FALSE;
    + E$ O! z# @9 [
  256.       bCompressed=TRUE;* M* H9 Z% w( i4 @% F) n
  257.       strExtLocal.Empty();
    : H1 w+ h( Z) k8 P4 s: j/ f% c8 z
  258.       strFullName=(*i).second;6 q, h1 w' b* J$ Y' G/ ]$ X- c
  259.       dwProgramState=AP_CONNECT;5 W$ \& H. E) G* j" x
  260.       return TRUE;1 l5 f$ ?4 g" L# R. d$ F- ?
  261.     }! @; p! E! W+ W, y/ B
  262.     if(!bRestartUpdater): T; l! j7 a$ k3 Y# ^
  263.     {3 `0 k! \( f+ b4 X
  264.       int iCurrSize,iFileSize;; j# {& ~1 Q( J; s% l0 F2 J6 n- x
  265.       iCurrSize=0;7 |8 u. N0 ]: l3 u; Z3 G) K/ O
  266.       iFileSize=UpdateList2.size();
    3 {9 J6 H+ |1 j3 R" e
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");9 {# h; L+ M  K3 z, c; T7 Q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    4 T& d7 U+ p9 J! m7 Z$ C" Y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    3 m+ @: {) ^- B% n/ B* f; E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * e$ [# [  {5 E! C! r
  271.       Fclearf(".\\update.dat");
    , o- V( n/ c5 D7 Y
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    7 H, W: }! d1 o/ y/ L# {2 {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)2 h6 {/ g* }8 P* h# c9 Y
  274.       {
    + I% R1 i* H( {5 W
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())# ]$ G( I! l9 E. S! y) e
  276.         {
    " u' ^) f. Y. K8 g# [: d4 k
  277.           file=(*p).second;9 h5 ?# D" d0 Y2 f, i
  278.           sprintf(filename,"(%s)",file->file);4 p* O6 z+ |  ?5 H: q% x* s
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : |; {+ @8 C2 `/ q& }
  280.           iCurrSize++;1 d: U1 s2 O# m
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));6 J5 v& M0 h, Y+ a8 ~0 d- b
  282.         }
    9 L* R5 T- H1 `+ o0 n2 i* G7 ~
  283.       }
    6 i$ j; d! U7 v. \5 ~* @( n3 y
  284.       unlink(".\\update.txt");7 `! |" [( i- F, b+ C1 y
  285.       unlink(".\\update.tmp");+ C2 [) t' a, @0 C0 u: ]2 @; k
  286.       Fclearf(".\\checkversion.dat");
    9 X) Y9 m& O4 M0 Z+ q/ t3 x: S
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);) d% n# ^% ^0 T* C" U
  288.       if(UpdateLocal.size())0 r5 Z! ^5 R+ {8 b& O  V9 C
  289.       {- [: O( N! `& i% {" ]
  290.         UpdateLocal.clear();
    / s5 V$ B% X" Z, f5 h
  291.       }
    8 Z/ b' d9 \1 m) R, `  ?( x
  292.       if(UpdateFile3.size())
    0 r- @- p( q4 ~4 E3 O$ j; B" c( A
  293.       {
    8 h+ q6 P8 Y% C: U
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 }; R/ s) |' Z  a+ W
  295.         {2 F' g- Y  ]: a% I$ ^/ Z! @
  296.           file=(*p).second;
    8 |0 p( \& y9 C: W: w7 E4 {; E+ v" H
  297.           free(file);, o  @3 \2 K- i$ R+ t$ x
  298.         }/ X6 j+ `1 q7 @. C
  299.         UpdateFile3.clear();
    . Y7 K$ p  e6 \% f& L. P3 D
  300.         UpdateList3.clear();/ G6 x4 q7 V# B" S0 z4 ]  R( Q. l$ T
  301.       }
    . L9 r% V4 o- B! e. t4 w9 t- o6 A
  302.       if(UpdateFile2.size()): ~% Y1 k/ A/ `
  303.       {
    $ ~) D: `7 ]: E
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  a7 |0 t4 G& _* w8 P+ V
  305.         {
    0 l# l) \3 F; @) `
  306.           file=(*p).second;. u/ i8 k7 c5 J- j
  307.           free(file);# K3 n" J/ w3 f; I, I
  308.         }9 O8 I. x  r1 B' @3 M  R' b
  309.         UpdateFile2.clear();
    . g, h" q8 G& f3 A2 }3 F
  310.         UpdateList2.clear();% S* s+ @* O% o- Y
  311.       }% c$ Q  @1 f. [6 L9 E5 q8 J' r
  312.       if(UpdateFile1.size())8 [7 h" K7 s. k) g: B- x4 @4 m8 Q  _
  313.       {! ]  K  @2 c% q( [/ s; N
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* [* t) T4 c+ Z' s4 _& C+ F6 _
  315.         {% Y9 b3 e+ M& i' |  b+ u
  316.           file=(*p).second;
    2 L7 o. C2 w4 Y! z' P- c. F) F
  317.           free(file);
    : p" X* R7 q' n* _; H+ A
  318.         }! {6 S# e+ M2 m3 _
  319.         UpdateFile1.clear();
    ' Z8 o% r8 H/ l8 }
  320.         UpdateList1.clear();0 |/ \  K3 p% G! D: y4 @: H
  321.       }5 J% i* V7 o* v2 Q: C' k
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 Z' o7 w% T7 J6 o) B6 f- W! i' }5 r
  323.     }
      C* ?( Z* c8 k6 N
  324.   }4 R! O, X$ G: {6 w
  325.   return FALSE;
    ) W6 u) }. ?9 Q
  326. }
    % q: q4 f! i3 i; |. b

  327. 4 P1 n% p+ j- L, P- J4 h1 c* }
  328. void CRevAppApp::ClearAll(void)
    % _! q( j+ \, n5 G6 {7 Q# Z
  329. {9 E! _1 T' ~4 c" L6 m4 c& X; [
  330.   LPUPDATEFILE file;
    0 y$ p  @$ N8 a  s
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 U) M/ U7 h, `* E( p6 z9 E% f
  332. : W3 q' k- p0 J! O
  333.   if(UpdateLocal.size())  @5 y& ^9 h: G4 l7 T# `6 X
  334.   {0 n2 H0 l6 ~' l. B. x
  335.     UpdateLocal.clear();9 S; V1 p/ ^7 s% t5 ]4 u4 @! X
  336.   }% ]6 R; N: j. q+ a0 n
  337.   if(UpdateFile3.size())1 l  p" r8 ]( s( h: v# m( T8 ], y  M
  338.   {
    " b8 _+ h- {7 y- {$ A; L
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), u/ p! \9 `1 V7 ?
  340.     {" X8 y7 E6 `( y1 Q) c
  341.       file=(*p).second;. K8 b7 i" G8 o: x1 R! X
  342.       free(file);* F* v9 {% h4 I* P/ i' O" N
  343.     }: {1 n- i) T9 O' _1 j( u/ z
  344.     UpdateFile3.clear();
    ; A9 z# P$ J. }9 C* H3 q$ @
  345.     UpdateList3.clear();- \) o  E1 e/ n4 u" v: d
  346.   }9 h/ p/ q9 v+ ~) t7 r4 p4 b
  347.   if(UpdateFile2.size())6 H! D$ y7 `* o! E3 Z* W
  348.   {$ U! \) f8 `$ [* H  \: g
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , |) z1 f: _0 _1 n
  350.     {( V! S4 V: s# ]7 H' z
  351.       file=(*p).second;( f. V! I+ V& j  w+ w
  352.       free(file);4 _. b0 m3 u5 e% x
  353.     }
    & E# V" g% f6 t+ d
  354.     UpdateFile2.clear();" D/ w7 \1 O) z
  355.     UpdateList2.clear();5 W" T+ F, T; F$ S, o
  356.   }
    5 m/ h: D* p+ f, |& R
  357.   if(UpdateFile1.size())
    ; G9 {+ G& \+ T& o2 u
  358.   {4 k/ M8 R6 c1 A8 P# E
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    5 I' V, d! k' M  ~3 O3 X5 B
  360.     {2 }) x/ a& u4 ^1 x8 n" g
  361.       file=(*p).second;3 c0 |" h0 Q5 v/ q% ~9 p3 b
  362.       free(file);
    . c% c( ]" }- u' ]- k  o% N
  363.     }
    . W1 j# O6 _: m6 n( U* J8 E
  364.     UpdateFile1.clear();2 ^+ c3 ~" K$ ~1 Q& r6 `3 W
  365.     UpdateList1.clear();
    ! t( @! B+ p& v4 b  @5 o
  366.   }
    + b$ s  O! I/ b3 C' h+ ~. h
  367. }  
    / _$ n9 ^1 [, w2 U& T
  368.   6 l# c$ `% D- f0 L& x) q
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ' W3 \7 M/ ~% Y+ h; P) z
  370. {
    6 h! Y8 q3 v# E5 u4 B
  371.   int c;
    " Z: {! c, H; A& o8 G7 j
  372.   LPUPDATEFILE file1,file2;$ ^. u: S$ W; r1 r& h
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;) w# ^- d4 _1 U5 ?* r9 ?! ~
  374.   std::list<CString>::iterator l;( [4 \2 E. W- a7 \, O$ ^3 z' p& q
  375. ! S0 G6 {  ?  Z- E* f
  376.   UpdateLocal.clear();3 ]9 v' c. q% p3 e! x3 r
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ' L- I5 j7 s( j( W5 V0 K: W
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    4 s& |1 b" @; ]3 t+ K. H5 q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);9 d; V! t( O8 l. A- U# C& o% k$ Z0 N
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);$ u. j; Y1 x8 X; g1 I3 `
  381.   if(UpdateFile3.size())
    8 `3 t* ], O% u0 H( M
  382.   {
    ! H6 D# f6 r( \
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)' `7 P0 h+ t. E; N/ w" y9 v  }4 O
  384.     {
    ; _! M, k4 f  p- j
  385.       file2=(LPUPDATEFILE)(*i).second;
    ) ?6 ^' t" N4 \" i! ]  z% _
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), B6 Y8 M- ?/ k- c" I8 [4 }
  387.       {
    ) L3 c  b, e. o
  388.         file1=(LPUPDATEFILE)(*p).second;. s- Z% X+ l8 R, o
  389.         file1->vers=file2->vers;
    " M6 J- d" \) w9 u! o( H* V8 F
  390.       }
    6 n; ?) d3 q) b1 v
  391.       else) G5 Y0 g3 Z9 ^( Q8 s
  392.       {
    6 X, V6 P! A2 b; F3 e0 Z! l1 Y
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 T" K# _$ j  T3 w* `
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" u+ @' P) @" |5 ?
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    4 N9 S- W) ^8 B2 h# ?6 B
  396.       }5 B. o2 e! \4 Z' V" `) b; K
  397.     }
    & J/ M, M/ {7 r2 f; t
  398.   }/ g1 z; a  M5 _% L4 \- U0 h8 I
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! A2 S8 x; O$ `  Y4 W
  400.   {
    9 U! F) [7 Y# Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' w% X: {; D& e9 p" L
  402.     {
    2 H% G' `2 t# W& |9 g. @; |
  403.       file2=(LPUPDATEFILE)(*i).second;
    4 ?5 \/ Q. y% E* F2 D
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 m  ^  R6 i9 D8 `
  405.       {
    ! b# ~( t+ |* s% A, I4 N* \& g
  406.         file1=(LPUPDATEFILE)(*p).second;
    5 a& D, g; }' Z0 p# `& @
  407.         if(file1->vers!=file2->vers)
    : j. k! r7 ?: I4 O  |
  408.         {
    3 y# P% k6 a8 @$ T: R, R
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( U5 D5 q( @2 [3 P9 R
  410.           c++;$ z) m. z! ]- f0 E0 {0 D+ {$ n! R
  411.         }" m  W: e0 R2 q# W3 \
  412.       }
    7 U/ b6 g* e5 L6 B7 }
  413.       else
    4 N' m9 F6 r7 o+ k' t
  414.       {
    $ Y( _0 i  d: E! Z& T3 T
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 |: s4 }2 `! U0 m+ K+ ^3 c' i
  416.         c++;
    . ~; t8 f! ^4 m& e& w6 {
  417.       }# z4 L# F% w& ^, Z
  418.     }
    9 D& J3 j1 `$ `2 U) S, n
  419.   }) G( N* ~8 a# D6 X3 u
  420.   unlink(".\\DownLoad\\update.txt");! y, u2 C+ E$ C; e5 U$ [/ ~
  421.   if(UpdateLocal.size()) return TRUE;
    , F! o: o9 U! s. B+ C6 i
  422.   else                   return FALSE;
    ! J* \  N! n5 n* B' l% |7 m
  423. }. f" r6 {* H" h& o2 n  v
  424. - i5 W8 `; m' [- o- F
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/") `& o% x: {* V1 e2 T
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    3 G& d' }7 p0 g* V7 t3 j# f4 e

  427. : W$ T+ I: L' C6 G: Y8 d

  428. 6 s; i* d4 `+ o% j( v9 G! U& B

  429. 4 I4 m4 t) T- F3 B/ W
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)* t& b- W* m1 N# q4 Y* [% S
  431. {
    ! n$ R7 g8 ]) i- C2 G7 x! u
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 _. @$ d# i5 m# M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : V: b/ |0 z9 \
  434.   {
    . f/ l- \9 R3 [' G5 i% D6 i, }
  435.     char szLanguage[50];
    - i1 k! o( v. A. C* ~5 b* @7 `3 ~! o4 V
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: T9 h+ x) O' q9 k
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ c0 o* |( D2 \
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' |0 n# i$ [: R" L
  439.     else                                   m_iLanguage=ENGLISH;
    & C9 a0 x( z+ N6 _5 r
  440.     char szRegister[100];) e5 |2 D' [/ J8 y8 i0 e/ O9 [, v
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ; b9 }: a( D8 W9 ]& C0 x
  442.     strRegsName=szRegister;% O5 Y0 g+ A" j1 t
  443.     char szPatchURL[100];: c. V: ~) M6 {! c* \
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    & x' d+ I* {2 X% `! c
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);7 x* |8 i( a% \: }- h
  446.   }( p: g0 B# E) v
  447.   else
    7 h: I9 J( k6 m2 `
  448.   {
    8 a' q6 G9 q+ Q, Q" q
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . f1 N  j0 |3 q
  450.     strRegsName=DEFAULT_REG_URL;
    # P( ~) z, z2 J& D" L, h* K/ [
  451.   }" D3 V. H9 q/ z, C* s" \4 N
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    , F! P2 ^* H" H6 ?+ {( M. o
  453.   {0 S6 k+ G; `( e. _% C9 Z
  454.     char szIP[50];
    9 F* U" X9 k( `4 ?) `8 |' h
  455.     char szDIR[300];: C5 N# g/ {3 b8 p0 i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% R$ ~4 ?, E) O' k  ~
  457.     {8 B( l' r* p! D3 X1 c; `
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    2 K1 c# c  ~! b7 O
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");- u* i" F: D( A) M6 [
  460.       strHostName=szIP;
    / g) G& Y6 R5 A/ t  W( j
  461.       strHostPath.Format("/%s",szDIR);
    0 ?( B7 X  F9 ^
  462.     }
      M+ T9 w* M! p9 B9 Q9 c  ]! N
  463.     else
    8 m' M  A' i' F) s& e# V2 ~; Z' x1 }
  464.     {
    1 w7 k& f# p6 A/ u
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 f' o: o0 {; Q/ x; n& I
  466.       {
    * c' x/ N1 Y6 H6 ~
  467.         char szLanguage[50];$ `9 K6 V5 H5 ]) S- i
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ N0 y- E6 ^4 G/ A4 A; l" e2 o4 _
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % f( g$ r% H, o, J
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / [& |! Q* g) M8 X3 M! T- B9 e5 y& z
  471.         else                                   m_iLanguage=ENGLISH;
    . l) _/ M! Z: k7 Z# d; s% L2 i
  472.         char szRegister[100];
    & p* S: H$ g: N& P" a% ^  {
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! ^6 g8 l5 s% V1 |- a
  474.         strRegsName=szRegister;
    1 n+ @0 V: F1 R) \- {
  475.         char szPatchURL[100];1 {5 Y: p/ F; s4 y, C8 r
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * t" d0 W9 ~8 I  G; S' ^
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 p5 U5 W6 E, B5 m, C/ V
  478.       }) G- f1 r+ H8 \
  479.       else4 N  C* R" ~' d! z+ q, k
  480.       {  `* V# E+ ?7 \! L2 D
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # R/ e8 J& C: `9 @, J! F9 ?
  482.         strRegsName=DEFAULT_REG_URL;
    + ~3 w; P- B4 h4 I' D
  483.       }
    6 ^* w( s- G. \& S& k% {+ y) B) A
  484.     }* b8 p5 j9 e( @" \7 n  ]4 F8 X$ R3 f
  485.   }
    ! ]" r' {: [* E3 e: T; E$ J
  486.   return true;" w3 H6 ]% @" Y2 t( I- ^
  487. }
    ; w  K. {, ]4 O8 Q# N5 y' i

  488. % d1 b* n3 L1 {: m
  489. #include ".\ZLib\unzip.h"
    2 ^  [- a. X' U, X. S2 W( r. B% }
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);+ Q1 s6 J, L0 M0 b( a
  491. /////////////////////////////////////////////////////////////////////////////9 f( G% P7 _3 o$ v
  492. // CRevAppApp initialization
    7 T0 i0 g% \9 I, u9 x" Y3 B/ M
  493. , d% A. ^. `6 n- l- k& s( d3 f8 ]/ Z& P- _
  494. BOOL CRevAppApp::InitInstance()
    & ~; ?% }  k$ K, z8 z& s$ l
  495. {5 Q, m  _6 O- D+ U' t6 D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];% E) C6 W8 E6 r! H& n* X7 X
  497. ; l2 D: j8 }( q, q6 ^" F, g6 L
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);- y" d8 O! M* x$ \) l
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" D# d) B3 O9 o& @) J
  500.   {
    / g. Y2 s# |( w3 C
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    7 }8 |, j: y0 R/ [+ X" W6 e: N
  502.     GetPathFromFullPath(szPathTarget,szPathSource);, Y( p, j1 F2 ^$ e
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 z7 m/ @: U. X" g7 R; B5 F
  504.     {
    : u5 U2 G1 X0 e) w  B3 G5 S
  505.       strcpy(szPath,szPathTarget);
    ; F, B6 u$ w+ Q3 e8 f1 [
  506.       SetCurrentDirectory(szPath);: a$ I( n. h/ _* R
  507.     }: Q8 H: K# u7 i; j
  508.   }' N/ C% P+ ~" t# z* r
  509. #ifdef _DEBUG
    + p6 y5 o; l1 e* n
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; U: n0 ?: F& z
  511. #else
    # r1 y8 s( y# n/ {9 @5 H. n. b
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 T* X0 v! ?* F0 k5 F
  513. #endif
    : B9 c$ |4 \4 v  r. _9 Y5 _
  514.   {3 b; x# b- ~8 D& d
  515.     char tempFileName[MAX_PATH];
    ! A% r4 C( D5 E4 _
  516.     strcpy(tempFileName,szPathSource);1 {$ B( P, V0 c/ v1 `; \
  517.     tempFileName[strlen(szPathSource)-12]=0;/ E3 Q" H5 x) r4 x2 O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");% g- H4 X$ M9 y  Q4 C1 t0 m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    + L; z. U" k, E3 t
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);5 G3 I6 ~; o  Y9 E* W
  521.     return TRUE;
    " [6 |6 @- }5 V& O- L) V! P0 ~0 ^9 s
  522.   }8 i: S9 [. U" `
  523.   // Nuke 0118: Delete run.exe; `! s! H" H: |
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    1 U  T) G; Z! |: J3 N% G4 E: b7 Y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");9 o7 m4 g0 H* t/ I
  526.   if(!ReadCfgFile("Config.ini"))# _( Z4 I+ _3 c9 T
  527.   {
    / H& E8 ^5 v, O, g* y2 W) Q
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    4 b' K, `3 }$ ?0 _4 I7 a! r9 p
  529.     return TRUE;
    $ I7 A+ Y: C4 v$ ^: K, ~
  530.   }
    7 z8 ^  X9 n/ Y0 ]
  531.   HANDLE mutex;* Q3 J' d, l  ?* W& B( f( e* F* ]
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    : |& F3 A. C% X- J, L
  533.   {+ ?/ t1 t1 C3 w. i7 c+ u7 x
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS): Z2 ^! ~. B% K# k: S
  535.     {
    * V( c8 _5 K* p" Y% z7 ]
  536.       CloseHandle(mutex);, s5 S- f3 E; Q- [% ?
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    1 c/ @$ X0 g4 ~$ l6 w1 e
  538.       return TRUE;/ K$ P  f$ _1 n, U
  539.     }
    ( |6 g% y( p  x# U
  540.   }  
    , D- N1 Q- @1 A; l7 h
  541.   CloseHandle(mutex);
    0 a$ N, _' I" {9 }% i- a9 e' Z  `( r

  542. 1 Q( T& f# e- u, C3 H
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 r% U$ `: j* Y) T

  544. 6 C7 R: q8 b# U8 p
  545.         AfxEnableControlContainer();
    % D$ [: ?5 z/ x- j6 f" i
  546. $ e' c# v; j7 W# F5 D- ]( R
  547.   bCanUpdate=FALSE;
    2 \# J: w$ r3 G. _0 r' _
  548.   dwStartUpSteps=1;* d/ ]' u1 E+ B, B" {; y' C
  549.   dwProgramState=AP_NOTHING;7 j$ I( C8 W  I7 Z+ Q
  550. # ~! d; p( b  R* \. u' v- L
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ p6 V* N4 y; Q$ T
  552. & E4 \5 Z: m/ Z1 c1 v( L
  553.         // Standard initialization* P* z2 @' N1 B0 [  H" d% A
  554.         // If you are not using these features and wish to reduce the size% s  u% e$ @; G1 |; C/ h
  555.         //  of your final executable, you should remove from the following2 v. n* M% G# ]
  556.         //  the specific initialization routines you do not need.
    + H9 e2 n# e" v- W7 F: O0 y! e
  557. + U* j" G% Q9 H& I" ~8 p2 F1 y: p
  558. #ifdef _AFXDLL
    6 f) g9 N& z! n. F0 i2 E
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL: {: q4 B" e4 j% B' z9 M( w
  560. #else) D8 ?2 B. Q  B; r5 s4 d
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically: z% G7 H3 t4 x# e% R5 ~
  562. #endif
    2 s1 a2 d9 w1 L
  563. 8 d" _2 F  }. a& P8 E
  564.   dlg=new CRevAppDlg;' Y( ?3 k" N7 E
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    . x9 Y. P* @+ m9 q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    1 c" H' ^3 Y/ H! k0 ~" S1 a# {9 S
  567.   m_pMainWnd=dlg;$ R5 w4 u7 u7 ~' B: r* i
  568. ) e; K' a" Q7 c. C" j4 [  m8 P
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 [: D# p8 s7 i8 \

  570. 1 E8 r8 Q  @8 b# x' W0 q
  571. //  GdiplusStartupInput gdiplusStartupInput;9 Z* X% }/ \  c6 e
  572. //  ULONG_PTR gdiplusToken;2 c* A, C5 |. A% U8 g1 b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);5 j! Q9 P0 P1 [

  574. 9 }5 u0 u3 t4 S9 R
  575. //        CRevAppDlg dlg;' T+ B# O: I5 E! A
  576. //        int nResponse = dlg.DoModal();
    5 U# F9 `3 U+ t' a* k, k
  577. //        if (nResponse == IDOK)( r% s( P- X7 S: \2 Y2 E
  578. //        {
    9 L. r3 W& U7 z
  579. //                // TODO: Place code here to handle when the dialog is
    . C+ h/ N$ [, l3 e
  580. //                //  dismissed with OK
    / E% u: z4 z% j1 a
  581. //        }4 R5 c7 g: i3 G. P( ^/ E0 V
  582. //        else if (nResponse == IDCANCEL)
    $ T. H: N! h' b4 o! b7 n$ h& ~" u
  583. //        {0 \% \& I2 f8 T5 l
  584. //                // TODO: Place code here to handle when the dialog is+ k' G  F9 a+ H3 E. R, B- G
  585. //                //  dismissed with Cancel' N5 B, b" W4 D
  586. //        }0 u4 n! g$ t- p0 y& m! W1 P2 l4 ?- {

  587. ; C( i% L8 ]( X- v0 K8 O( I
  588.         // Since the dialog has been closed, return FALSE so that we exit the, l4 p/ w4 [+ I
  589.         //  application, rather than start the application's message pump.% c8 L2 P6 ?3 Q: }' \) j" c4 V# t
  590.         return TRUE;
    # Z+ V- Y5 _9 s8 z, v3 J
  591. }
    % u  w/ R- h$ D1 K, c
  592. 9 c1 h7 o, c! z5 L9 z
  593. char *CRevAppApp::strtok3(char *pSource,char *token)& O. b$ |, a) N/ t* F
  594. {2 I$ A: l5 c# g8 ?* r) y
  595.   int i;- Z8 s; ]; u8 A5 j$ w' B
  596.   char *szRet;
      K8 M, |& [3 v/ T& b+ o7 n( N
  597. : A- F( E* U( W, R
  598.   if(pSource) { itoken=0; sztoken=pSource; }# D. I0 b! t1 G
  599.   if(sztoken)4 Y' q; @* }8 \5 \5 M
  600.   {
    2 }. S* D' g4 f7 |6 e. I6 K
  601.     szRet=&sztoken[itoken];* \9 n: Y+ G4 N0 J/ h
  602.     while(sztoken[itoken])) ~( S* `1 k) v5 @, |
  603.     {. E8 T6 t) W! s7 a! B/ t
  604.       for(i=0;i<(int)strlen(token);i++)' e0 ^& d8 g8 j/ `+ f
  605.       {! r5 [' i0 e" r9 d7 @8 f
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    4 L9 u+ T& _, K9 D5 Q2 M$ N
  607.         {2 K4 @" f% Y+ M" m4 }# K
  608.           sztoken[itoken++]=0;
    ! O* p: u# S7 s, P7 V$ \4 a9 c
  609.           sztoken[itoken++]=0;
    ; P- D. i. T9 S# F" j/ Z
  610.           return szRet;# x6 ]% q, g7 l& o  I$ }. r
  611.         }
    6 i0 Q( U- q1 A1 U2 A: H. A2 v
  612.       }8 a2 ?9 D- Q( ~5 Y& R5 B( i
  613.       itoken++;% z1 V  P- \/ s1 Y1 M  X, z9 }: B
  614.     }. g: M0 m" f* W5 S
  615.   }
    ( ?2 Z  T$ Z6 L" h. W( E6 j2 ]+ E
  616.   return NULL;
    9 C! C5 i) q( T- A" ?
  617. }
    ' ], [2 {# B2 W
  618. 7 Q) |  V& z7 ?/ H( w& v$ J
  619. void ProcessProc(long Total,long Current)! X7 ?: w4 Y! M
  620. {
    5 a" J+ y5 v3 `" p9 X2 E8 W4 m
  621.         MSG msg;2 {! u$ l% E! G' Q/ r
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    3 M  r# J# O7 |2 t
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  U8 u/ k; {9 [0 h3 G7 O
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))' c& ^2 H- v& o1 s) h. P# B  o
  625.         {; j; H- }  B4 W: Z8 `- Q3 q
  626.                 if(!GetMessage(&msg,NULL,0,0))" c0 F$ Y& `/ I7 M7 C* V+ `$ O
  627.                 {; L4 ^) y6 k! {& y
  628.                         return;/ m2 h+ M$ x* g9 v) \; h
  629.                 }/ u6 h2 d+ I3 @( g6 F, Y
  630.                 TranslateMessage(&msg);2 _9 ^* ]2 s+ B
  631.                 DispatchMessage(&msg);
    ; T2 i- v6 j6 Y. V8 N. Z# T: z% L
  632.         }       
    : M; U( O) i4 i  J- ]! g% L
  633. }
    , h1 \' g$ S6 J4 m; |" R; m, Q

  634.   m* f& r' e; T- N* ]! Z( s
  635. BOOL bFirstChar=TRUE;; c8 E" \1 B! @- ^" L* F
  636. 7 g% ?- m+ m- b* q. ^
  637. BOOL CRevAppApp::OnIdle(LONG lCount)  q& s4 D) n- S
  638. {& D% u- e1 C) {3 W% l
  639.         // TODO: Add your specialized code here and/or call the base class/ z) R% E+ S: V& k6 L8 X
  640.   switch(dwProgramState)
    . G5 Y5 h9 @, t  H+ c9 A
  641.   {/ X6 k% \  @6 F) j- L8 X% @
  642.   case AP_NOTHING:
    6 O) `! \( O% L# f$ O$ {
  643.     switch(dwStartUpSteps)- l/ H9 `3 U, a$ f6 c8 `* d4 v+ h
  644.     {
    - E! C4 f* |& J9 y% O
  645.     case 1:
    ) Y+ J$ l7 C( }) q4 e
  646.       {
    " e- y3 Z4 {  f. o* j2 o$ {
  647.         int i;
    ( V. \3 O; r+ a2 q9 w0 ]7 B
  648.         CDC *pCDC=dlg->GetDC();% V4 L) d4 }. V! s
  649.         HDC hdcwnd=pCDC->m_hDC;% d, s5 E, E8 d
  650. //        Graphics graphics(hdcwnd);
    / Z, o! G0 w* j- N( ^# v
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ( ~  y. L% u; L& v" K5 d9 y  k4 l
  652. //        INT iWidth=bitmap.GetWidth();
    ) q: q( {% ^& B$ \5 ~/ y
  653. //        INT iHeight=bitmap.GetHeight();
    8 s1 A# g6 v+ T& ~8 G0 |) Y9 j
  654. //        Color color,colorTemp;8 ~9 d2 b8 Y8 z1 B4 j" r% R
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . C! x3 i" c  P" z
  656. //        {" q$ p( E( i4 j
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)2 ~9 B7 h- O, ]2 d: S: x4 o* y
  658. //          {# e  G/ P; f( l+ \% j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    5 l6 t1 t# [# w
  660. //            colorTemp.SetValue(color.MakeARGB(# ]! J+ D0 C: `1 a) i; n
  661. //              (BYTE)(255*iColumn/iWidth),
    $ U7 k0 f7 H3 }3 M4 Q
  662. //              color.GetRed(),# ?& Q; c" _1 p% m3 b0 P
  663. //              color.GetGreen(),/ c1 M8 n4 M: z) m4 ]
  664. //              color.GetBlue()));- U, q/ G2 a( {" N. j! Q
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);$ Q: u* |. q: c- ?  q" e1 F- O
  666. //          }& k- O. l( k7 ?; J
  667. //        }, t% [- x, S5 h( i" e
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    $ p0 L1 @: i* E0 q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . e7 x5 |" k: a+ U
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");& u5 R: d. }2 q' F" N; o3 T
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 P* X, e- F1 u
  672.         for(i=0;i<240;i+=8)
    5 V' \4 o3 |, @# B3 d
  673.         {* u+ d6 k# o) c  o
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& [) T8 }8 T& y( n
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! ~' g( p0 j2 @% D
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 {( F( f% P5 _
  677.           Sleep(33);
      y! M) e8 X& e! H4 C
  678.         }, a3 l# P6 Q+ d7 B0 S2 @( @
  679.         Sleep(1000);) z4 \* }( h% A6 F( u8 ?
  680.         for(i=240;i>0;i-=8)/ Z& \/ ]) M# j+ \6 o
  681.         {) }$ p3 `! g- h0 E5 A/ s
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% S/ M! v) B1 L. W2 P. K8 }  a
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# j' T3 @' E( F9 e% h9 f) s
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . a1 C4 Z$ \2 {" x
  685.           Sleep(33);6 X0 t: w9 v! E( b! o
  686.         }7 V' u' @1 y/ g5 S/ G
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ; }/ L  j5 V8 d& p- {" \
  688.         dlg->ReleaseDC(pCDC);4 N1 M* C6 R% p9 X
  689.         DeleteDC(hdctar);
    ' F) D% h. c" [: @% Y  c/ @, z0 j
  690.         DeleteDC(hdcsrc);- Q! r2 z# Z8 W0 T
  691.         DeleteDC(hdcorg);
    8 C4 D! a4 _2 Q" r$ A1 e5 t! E
  692.       }. y# M4 t5 Z; L' v$ g) w5 i! p' _/ x
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 v8 G5 q  e! g- r/ J
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    / U, s& L( s/ T) C3 z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");6 t$ _4 L7 b0 b8 d( J
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ) \" t9 {0 y; D( o4 v0 `
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 U& j$ q- c; W$ ]
  698.       if(!Dn.Connected()). G' D2 ?) w" j7 k
  699.       {
    : I: l' k; }: X' K0 o+ @5 j
  700.         dwTotalFiles=1;
    " Z1 f3 R# Y* J3 F- g1 y+ Z* I  y& |
  701.         dwDownLoaded=0;" h% A; G! C  \2 s
  702.         bSilentStep=TRUE;
    ' s9 }+ w+ F. X% U/ R
  703.         bCompressed=FALSE;8 H5 c) A- H% A  K% H5 I: `- _
  704.         strExtLocal.Empty();: Z& Q3 P! t" P1 M  L0 T4 a
  705.         strFullName="readme.txt";
    ; H" u' N- Q/ W$ r8 d+ |
  706.         dwProgramState=AP_CONNECT;
    ! _- _4 k- ]" m& p6 c( W
  707.       }
    ' Y; @  h9 N( V6 V/ u5 O
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ' Z; w" _9 z: m# i0 W: ~
  709.       dwStartUpSteps=2;8 ]5 }- G1 c2 a; C9 w
  710.       break;) b& m, v5 I, r# i6 @
  711.     case 2:
    % A' u# D9 |$ p9 j
  712.       {
    4 F5 L" ]* @5 l& N+ q0 X
  713.         int iEOF;- t- P3 P4 r0 c9 X% N0 d
  714.         FILE *fp;
    7 |* w8 X$ A& w9 ]* I9 J5 u+ ]
  715.         char szString[512];
    1 D+ G- Q( d9 C! D+ z. S
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    7 e! \( F+ k$ }& r
  717.         if(fp): A% _& |" Z) U+ W' Y0 K; N8 j
  718.         {
    : ?6 @; W+ v5 I' H5 r- d
  719.           do
      |0 K% t* |- H: @, v
  720.           {& D% L6 b: L3 H
  721.             iEOF=fscanf(fp,"%s",szString);
    , W) _: |: i+ e! Z. I2 ^
  722.             if(strlen(szString))3 z, X1 Z5 f7 Y  _$ t/ s- J7 {
  723.             {
    ( [! p7 p- U+ D( L
  724.               if(bFirstChar)4 J, M" ?+ M. B5 E; m" N
  725.               {( n. W# V; h: Z5 D6 A, c9 Y" Q
  726.                 bFirstChar=FALSE;% Q* U4 ~5 _' [$ J8 L+ Y1 m, u
  727.                 bConnectIsBig5=FALSE;
    9 t- }) ^1 ~3 H) h/ L9 f( \$ N
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;, u; m7 D" }- m% n
  729.               }
    * {1 x8 F3 l  o$ {# ?) H
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));: V1 j! [% h( o  m7 l
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));4 [! U1 p9 a; C
  732.               dlg->m_ListText.AddString(szString);
    , v" U: R% Q" N' o+ s
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 c+ T% S8 l% T7 A( X2 |
  734.               *szString=0;
    : u/ T, p5 d) m5 o# |! A7 y0 G
  735.             }. t, o+ V; e  |# G
  736.           } while(iEOF!=EOF);2 N3 I$ y! `: C5 T( O$ |! t) M/ v
  737.           fclose(fp);: R, e  x* \: I) x
  738.           unlink(".\\DownLoad\\readme.txt");
    ; P8 Q' S- v+ k# R$ ^
  739.           dwStartUpSteps=3;: {0 T  l* j0 z0 l) T
  740.         }
    8 x, Z8 K& e6 M( s0 q
  741.       }) a# Q/ |4 S6 S/ ~$ {
  742.       break;
    5 i% |6 e8 @' `3 i9 p. g
  743.     case 3:4 \  h, [0 e; t. S
  744.       if(!Dn.Connected())
    8 @9 v( ~6 s0 i7 t  _  v
  745.       {
    0 G6 c' F; o1 B  \6 `' \& U
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ! L; i: x! c0 [2 f3 C8 M  _. |
  747.         dwTotalFiles=1;
    ; H4 D3 l1 w" X( k; ?
  748.         dwDownLoaded=0;) j: C% V" t$ ~8 m
  749.         bSilentStep=TRUE;
    - I9 Q1 A0 J6 K9 @) \8 d
  750.         bCompressed=FALSE;
    * k6 p( r) i. x
  751.         strExtLocal.Empty();
    6 X. {1 d- {3 S, c. e9 V* k
  752.         strFullName="checkversion.txt";
    ' b3 r; T2 \  F$ ^8 _  u
  753.         dwProgramState=AP_CONNECT;) z+ j4 o- u: z1 `9 O1 z# o
  754.       }
    : f7 p7 L8 h" z- y9 ?8 b9 f
  755.       dwStartUpSteps=4;
    ' ^' s/ c( l+ ?- j
  756.       break;
    / J( q0 j: o9 j* i2 X: f+ }) c
  757.     case 4:) v6 n& @, G- x4 I) S
  758.       {
    * }5 ^" M# A9 J$ f1 m) v! V: ]
  759.         FILE *fp;
    $ g' a. ?$ J4 u
  760.         char szString1[128];
    ' R: l! s. d/ t3 C9 ?; M& l
  761.         char szString2[128];
    ' j& |' I8 p6 m7 x
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 Y$ l) }! ?- o4 |0 {' x/ P* d
  763.         if(fp)
    ' k) ]2 b* _6 q
  764.         {
      W* c: }) V& F8 u4 o# M
  765.           fscanf(fp,"%s",szString1);3 D6 S; f: F: k$ M9 {0 Y+ |3 }: ^
  766.           fclose(fp);6 q5 P3 K# W9 S: Q+ D: B0 R
  767.           fCheckVersion=atof(szString1);2 x- I, Y0 ]) z# f. `4 e+ s4 d
  768.           fp=fopen(".\\checkversion.dat","r");
    & H% l" F( o9 y
  769.           if(fp)
    5 j. z: e2 U. F- u- D( O/ k  |
  770.           {) u% w* `% G( d9 i5 S3 T
  771.             fscanf(fp,"%s",szString2);. r6 M2 l1 c( }# l, m
  772.             fclose(fp);& P: }5 T0 `% G6 Q
  773.             if(atof(szString1)!=atof(szString2))8 S8 c) e" J" ?+ I
  774.             {
    - l% G3 K# I; s$ W3 N% s
  775.               if(!Dn.Connected())( s" i5 t* e" _
  776.               {2 L' j* o. z4 V! Y, `) f* f
  777.                 bFirstUpdate=TRUE;$ X. e% V6 r" V, y' F
  778.                 dwTotalFiles=1;7 ?: d& i  w1 [
  779.                 dwDownLoaded=0;
    . |: X* r' B$ i% L# \6 B$ k
  780.                 bSilentStep=FALSE;
    $ o& K6 _& z9 b
  781.                 bCompressed=TRUE;8 F+ j/ }" B9 H- y8 F
  782.                 strExtLocal=".\\DownLoad\";  f' p! D+ ]) \) D0 c/ s% ?2 e
  783.                 strFullName="update.txt";0 G" y. C9 I9 v6 O8 E: A1 V0 O
  784.                 dwProgramState=AP_CONNECT;8 f, c, Y. U) D9 J1 J# U5 H$ l' U
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 G# X  L% Y' F7 z* m
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- s8 M; _9 Y' E3 E7 N$ e
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    7 A" ]( u& {- _* j" s' s

  788. $ @4 l5 i* c! Q! X8 z3 j( y" I7 ]
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 e9 d# ]/ E1 F9 k
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    2 ?. Y# q% R/ T. h( @$ D3 f0 ?  y0 ?. [
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    * @& h* v4 |# E- y, n: `; S
  792.                 {
    5 w. n' Y8 S6 s
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    6 O3 ?) H$ F# W" Z# `
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    " ]$ L- Y: J* q4 B, M& j, B
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    " s- L5 {5 E" Z% _& s6 I
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 H" T* Q5 o9 o4 m& J! x  Z
  797. : P& B2 j  b7 g5 ?; u  U
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, r8 H+ K) l) T$ n! N! v
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    9 v" y/ V! n- s
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 R  i: V6 t& K4 x" O* b; l5 _/ s1 o
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& N' s3 N' s: Z: j
  802.                 }. n8 @9 Y0 B5 P" `, I, Z
  803.                 dwStartUpSteps=5;
    4 x/ s6 ~) Z& i0 {( g9 g% s7 I9 r
  804.               }" X) D9 b4 _3 i' A7 _# ]
  805.             }
    # K7 p! c, g9 C3 ?: N5 d% X
  806.             else6 i5 O  E5 b- a' F; A7 w* h2 x
  807.             {
    ; ~+ p8 ?( o% E% O
  808.               unlink(".\\DownLoad\\checkversion.txt");
    6 b! o1 o, f1 k
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ; X0 }# L' V5 @$ B( ]/ M" K
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + _9 K+ }  Z8 w4 O. ?
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");7 `: u& @4 _5 Y4 O$ ?

  812. / c& c4 W  Z! Q* z0 L3 N
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * ^! d! h4 a6 ~- l
  814.               dwStartUpSteps=99;; C( M" _& H7 K2 H  ?6 u2 }9 ?
  815.               bFinishUpdated=TRUE;; l; G! \( C, r) J& C9 p8 Q( K
  816.               bCanUpdate=TRUE;: a1 {3 K' B% O( b' ^' D
  817.             }
    / r. ]5 ?, g: t+ W, Y+ [5 j
  818.           }
    . |2 l& A) @5 S$ V: I
  819.           else1 W/ e6 p$ O& t  c8 D
  820.           {; J0 o( {2 f* J- J+ V( O
  821.             if(!Dn.Connected())) ^2 N: W3 N. q/ N2 D; I
  822.             {) `: `  \* [* b$ h% t# B
  823.               bFirstUpdate=TRUE;1 m+ ?- w( ?3 f4 L: V& X9 x
  824.               dwTotalFiles=1;9 F/ X0 I' \% C5 E+ q+ m+ c
  825.               dwDownLoaded=0;
    " N6 R, V& a& T$ \& `! C; E9 O, O. k
  826.               bSilentStep=FALSE;/ n3 k* {3 M& g1 c) v. N6 b6 Y+ W
  827.               bCompressed=TRUE;* N0 E9 _$ R5 J$ ~7 _+ Y
  828.               strExtLocal=".\\DownLoad\";
    ( h& j2 M  Z1 u' J3 V+ }
  829.               strFullName="update.txt";' \& I, |. p% ^5 ~5 L- u* p) p
  830.               dwProgramState=AP_CONNECT;- l  b" W+ T- m: A/ a1 ^6 s
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ t% R, |( @  e2 ]# i
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    + [3 M+ n, H! ^: F
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! T; d. _8 j' c# H! o
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) Z4 R( T  f/ ~: }4 N, g9 _! o
  835.               unlink(".\\DownLoad\\checkversion.txt");
    4 c. C1 X" X* o& g
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)( D( X7 q- J( c- b2 V
  837.               {, J3 h- K2 c$ Y9 b  i: u: z; u
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");1 c$ a3 \" T! K1 D2 G1 ^
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");. b3 c. t( {( v4 P" \( A
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ; U9 W7 j( z6 j  u5 W* T
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! A: t& m9 S: O/ K5 N' `) V% w
  842.                
    . p( y. V6 i. s8 j
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % `( d: ], D' ~# u" r/ _- b0 m
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% c4 v+ S% O2 h9 E' j  p% G
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 L% v9 H7 z1 p
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 U4 G2 h7 D( p9 g9 c3 T
  847.               }
    ! A% f' L, ~$ Q5 D' x6 s# R
  848.               dwStartUpSteps=5;
    + C. G8 o, f8 B: w% q
  849.             }/ ]; Y6 |- G- Z2 K/ [7 n7 p2 N6 C
  850.           }
    ( W  {5 @# y3 |0 j
  851.         }! {0 G) E' \% e9 L2 F
  852.         else6 t2 r/ V/ ?- u) Y) @# w
  853.         {
    8 [5 I( \6 L! d0 b1 {
  854.           dwStartUpSteps=3;" c6 S# n! ?, r. M* Q' x
  855.         }3 p, s7 o- T/ C2 X9 l* w% u
  856.       }$ g( o$ ~; a" w/ t- y4 o/ o# o% {4 Y
  857.       break;
    ) M! g1 p! w/ O4 b
  858.     case 5:
    ; f- I( Q* Y: ]) e  g
  859.       {# r- m! h1 q! A8 R; }( _+ I
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)1 `; q6 G3 z5 c, G6 l5 p
  861.         {5 _# `4 {1 m1 G+ I: C" Q
  862.           int opt_overwrite=1;
    : b, s7 ]6 o! {  m: f  d, U" T
  863.           int opt_do_extract_withoutpath=0;, g, j% T0 c2 P" L% g; S
  864.           unzFile uf=NULL;
    * T; h6 }( E3 h- o
  865. / V! ?8 }) u* O+ r0 C) ?0 M+ |5 l7 S) A( m
  866.           uf=unzOpen("Wsa.zip");+ M/ ]% @6 A5 j; n' a
  867.           if(uf)  t: x( V% `1 I& ?$ |
  868.           {7 ^; T  W. [- k& N& w
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);- q! e; b/ F5 w* W5 U
  870.             unzClose(uf);
    * i( X$ O3 ], u* m% f
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");8 N$ t0 I( H/ q7 m+ m6 }
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");+ p/ A. R) w" }8 k6 p/ W1 U& U
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    % o% f, v/ g0 F: Q
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : z" S0 ?2 N  ~  e' g3 u+ ]
  875.           }
    & y" y5 k. G& l& l9 _6 B- U
  876.           DeleteFile("Wsa.zip" );1 ?! [4 U7 L1 _& L! T- `* f
  877.         }
    1 z1 g3 Q9 B8 _, \7 b1 u
  878. : `& d$ Z7 `/ ^" I3 z" ]
  879.         if(CheckLocalVersion())  n2 G# A: {1 G% H, T  N
  880.         {5 c5 V/ z0 ]2 E. Y
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");) E! W: H! Y9 o) n% a6 |1 {3 o
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");4 T3 j9 |, G& y! y  y
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");2 ^8 ~3 ?' w2 c$ H: I0 E
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 r' ]0 J5 @" ~, L
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);" Q! a0 c* ?' y7 D) i( _/ ^6 W
  886.           dwStartUpSteps=99;
    , U/ A9 W% f+ h9 C1 O
  887.         }
    ' y- |. w6 I- U1 }
  888.         else& ?+ f. C5 b$ M* p* X& c
  889.         {8 F$ C3 a; y! H( U% G8 x. A" V7 ~
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- a( z! y8 J& O  l5 a0 T* t; V1 C
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    & g6 A" z5 j+ @" i5 C
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    # f% `* f! x- U5 V' G- E' \. C7 [

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

4 W- a' |  a. ?5 c% n( \& _
1 [7 G* I2 X/ g- F% G+ X5 J* X

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-6 09:28

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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