找回密碼
 立即注册

CSUpdate.exe源代码

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

  g5 b& G) j" Z( E" U
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 ]3 f  @2 B. X( Q! Q7 U# \
  2. //
    ' l) Q: U$ e: w8 ~# K
  3.   W: l# G3 L& W0 K% i, l. u
  4. #include "stdafx.h"
    5 `2 R+ z9 p3 r8 ]" r
  5. 4 b3 w3 o$ R0 j8 {7 W, g3 M) v, ^
  6. //#define UNICODE
    ( N( H  B7 r# R. W7 w4 W
  7. //#include <gdiplus.h>
    7 B. l9 s) w) t/ z/ s
  8. //using namespace Gdiplus;# O4 i8 S- l+ ]$ X! A
  9. / V, C/ m& l* W
  10. #include "RevApp.h"( o% a; B0 ?! ~8 X$ E; T0 L7 w5 H
  11. #include "RevAppDlg.h"( z; y) w7 O0 C  D, H& g

  12. 0 _5 m0 ^; f7 M# S+ R
  13. #pragma warning(disable:4786)
    9 o$ V# ~4 R* \7 J
  14. #include <map>
    # a$ r& u" q8 w! s
  15. #include <list>+ r% ^8 f/ S* M$ Y
  16. #include <direct.h>
    2 u) N0 v1 q; {0 U4 i
  17. 6 Z* E! s: d, d# H
  18. #ifdef _DEBUG
    / V5 A1 b+ [6 e: M+ _
  19. #define new DEBUG_NEW) ^. N% p% m& p0 J  {
  20. #undef THIS_FILE
    " J! `0 z" k" ]- K; ]
  21. static char THIS_FILE[] = __FILE__;
    1 i8 m; ~" j' G# m6 b- r6 {
  22. #endif1 B$ }: @7 n) @0 ?6 F
  23. #include "SkinResDef.h"
    ' F! \( J3 B: Q; l1 o) h
  24. #include "ChangeBG.h"" h+ _! ^" S5 z
  25. #include "AFXINET.H"! D! O! w2 _: S
  26. ' w; w0 F8 L3 O% P+ u" O5 U
  27. #define TRADITIONAL_CHINESE 0
    # D! K4 ^! D0 e0 x
  28. #define SIMPLIFY_CHINESE 1
    $ b0 ~# a) l8 C; t0 q$ L9 D
  29. #define ENGLISH 2  U* `9 a- T4 ?
  30. int m_iLanguage = ENGLISH;# c3 W) n6 i, g8 h# f
  31. /////////////////////////////////////////////////////////////////////////////8 a1 u0 l) p% Q! x) e- G6 G# l; q% b
  32. // CRevAppApp
    ' ^, o: p2 g# t# K1 |* C
  33. . }$ N% c# L  y6 {, l
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    * J/ W1 [% A- j  ]; w/ Z. ^
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    , e. ^) g( d. l- W- ~/ x6 @
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.' p" [. g5 Q1 f
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    & P; A# P; i6 o4 w9 S+ B+ e. d% D
  38.         //}}AFX_MSG
    ! L, H1 M4 [. p4 V) K
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)& E' W1 K& @" u/ ?7 [
  40. END_MESSAGE_MAP()
    ' O8 g5 a" a3 U% n: q* Y5 v
  41. # [* S3 X8 a- f8 o4 q
  42. /////////////////////////////////////////////////////////////////////////////! ]0 s4 n$ q4 M( ]6 D
  43. // CRevAppApp construction
    & m% H( _) X( W, f  F/ m/ X) U
  44. 5 ?# X* C4 r& T+ t+ j3 o* ]
  45. CRevAppApp::CRevAppApp()
    ' y' f9 R  F) L# v( D! H7 c
  46. {
    ) X  N7 |& \+ a8 L2 O0 v+ ?1 _
  47.         // TODO: add construction code here,
    : F) W9 X+ @* X; O& k
  48.         // Place all significant initialization in InitInstance" Z, s2 m$ ^9 |4 `5 T' |
  49.   bDisplayIsBig5=FALSE;) k5 W: u9 S& u- p- C+ P5 E8 K
  50.   bRestartUpdater=FALSE;, {/ v- M. t) g3 b( @
  51.   bFinishUpdated=FALSE;! E$ Q3 l: O* r3 ?1 \9 U1 N! q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;6 \6 c9 G; G* X1 r4 N2 b- ?: H7 F
  53.   InitChangeDataBig52GBKS();
    6 q" |9 z3 D+ s
  54.   InitChangeDataGBKS2Big5();5 g0 ?) S5 M2 R& }  g* x
  55.         //
    - p# B. `6 c, v* @! k5 p
  56.         bClickRunExe = FALSE;
    ( J0 z* `/ ^9 g* A. q% m
  57.         //
    ! T% L1 G9 ~6 F* R
  58. }
    # A1 O$ I9 m" [0 N: @: D/ Y9 U7 `3 F

  59. 5 c: _" t3 M/ s, o  G/ K2 q
  60. CRevAppApp::~CRevAppApp()* l, O& n; I& k: Q0 F2 _
  61. {9 F7 T! r; S' r( I5 ~1 @( Z
  62.         // TODO: add construction code here,7 b# d+ g7 J  q/ V  @% w
  63.         // Place all significant initialization in InitInstance. F& K7 M  P0 }, O+ _2 h4 U
  64.   EndChangeData();" e9 x( p+ G. n( u  S8 I# O! K* {$ e
  65. }! m8 y# ^0 u& l7 u3 d! J
  66. ; r8 w+ v( |- F, D5 M$ Z4 G0 [
  67. /////////////////////////////////////////////////////////////////////////////; i( p. C9 u, l; W& _* P
  68. // The one and only CRevAppApp object
    9 S8 o# ^/ e) m6 w6 [$ f

  69. 5 a0 C  u% ?$ i, N2 J' A
  70. CRevAppApp theApp;
    1 Z* B- T7 t! l) F! h" Q) a

  71. $ {7 d; I' V. K. `% o% H; f. L
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)' U, ~, {7 I5 Q
  73. {
    $ g8 i5 F" c2 g2 a/ P, k# f, H7 w
  74.   int iEOF=0;  g  a8 W: x9 ~+ D3 S0 e1 |4 t( [
  75.   char szTempName[MAX_PATH];
    3 g. N" P( I. S  I
  76.   *szFileName=0;/ o) r, t- i0 p2 T+ Y& S* \
  77.   iEOF=fscanf(fp,"%s",szTempName);& r+ ~7 N, \; j
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    * X& b& e: d8 c
  79.   {
    . |" E8 Y( U$ `3 M, O
  80.     strcpy(szFileName,&szTempName[1]);
    4 |3 t1 i' }4 z" ?+ C! V/ r- r3 u
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    2 I; a: m) c2 g
  82.     {
    % S5 C2 N/ C1 \; H; S4 r: S3 x
  83.       iEOF=fscanf(fp,"%s",szTempName);2 `+ Y1 M  v9 x9 e& _% ~* z0 e
  84.       strcat(szFileName," ");8 ?* \: V) I: X6 j' z' t
  85.       strcat(szFileName,szTempName);6 ^2 g$ _  i, g) c; m9 s  |, k
  86.     }1 K4 J6 x; i. w) \; e! V) Y
  87.     if(strlen(szFileName)>=1)3 z( V. ^9 m9 ?* ?. K
  88.     {
    , e6 B# w, ~3 V( S% K! @' b
  89.       szFileName[strlen(szFileName)-1]=0;, w0 U# q) ^- I  |% w2 c2 q6 l
  90.     }
    2 O) S8 I" K0 c  ~
  91.   }! k- v/ {& }5 Q! a$ ]+ `1 v! q, c
  92.   return szFileName;# n7 j- P$ {* \8 Z1 m) m& v+ Q
  93. }
    . r. M& q: j; F) k* k8 U
  94. * B8 q0 g4 }2 c  N
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile); |3 B" j6 i0 j' E
  96. {
    0 {1 q) ~2 n! U9 J0 n! X1 c
  97.   FILE *fp;
    % L  {# F, x8 H' \) L
  98.   char *key=NULL;
    ' q' ?- I3 e8 r# p
  99.   char version[MAX_PATH];4 b, F8 K  T3 ~" d
  100.   LPUPDATEFILE file,olds;% o1 G: L  O; k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) V: m$ p) o6 ]( @6 ^) A& K
  102. 4 Q& q0 ^/ D3 }5 f/ E
  103.   UpdateList.clear();. L: B# w  f1 J
  104.   UpdateFile.clear();4 r5 A3 A7 h4 O+ ?% G5 {/ f
  105.   if(GetFileAttributes(filename)==-1) return false;
    9 T* W" g! o* l6 f$ h2 ^
  106.   if(!(fp=fopen(filename,"r"))) return false;9 o; E) Q% e9 E0 b
  107.   fscanf(fp,"%s",version);# C/ F' C" `. c
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }. k) }  J  ^% j+ u* l7 K1 V5 l
  109.   while(fscanf(fp,"%s",version)!=EOF)* q+ A6 J3 A* B/ W* C$ V* z
  110.   {1 v; p. v3 t5 z) J! U  W+ d
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 J% }# ]) h) ]
  112.     fscanf(fp,"%s",file->path);, _+ Z+ x, G6 q3 o: G, h
  113.     ReadFileNames(fp,file->file);. i3 C) {0 y5 N$ g% ?1 f
  114.     strcpy(file->full,".");* c0 h( q2 X1 @& l
  115.     strcat(file->full,file->path);9 \0 W- w8 q. @5 R7 N, Q  F
  116.     strcat(file->full,file->file);( H. @2 J. w+ q( _; `- |
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())5 y2 D# j1 ]$ z" Q9 D, V8 H2 m
  118.     {
    2 R' E0 e) F" c. H7 g5 r- W+ n3 }
  119.       file->vers=(float)atof(version);7 a0 y' T7 q! d$ j. V
  120.       UpdateList.push_back(file->full);
    ) Y  \1 i  w/ K! ?" Q4 ^( `1 H
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));4 i2 m, E& q' N* \& l9 d" C: `
  122.     }
    ; j: \0 B; m& X6 a( V; u& `, \
  123.     else  l5 ~* c9 `: j- j4 }
  124.     {: l! p% c7 `! Q6 Z+ R  w" u
  125.       olds=(*p).second;0 R7 L$ m  L* p8 K
  126.       if(olds->vers<(float)atof(version))  C/ [4 d7 [% r' w3 r: I* E) @7 E5 `
  127.       {
    ) J) [. I, R; [" K1 x
  128.         olds->vers=(float)atof(version);) X, @3 m, T+ V4 h' C8 h2 V
  129.       }7 ]: U  D( R6 ?2 a# ^+ v1 w9 p2 K
  130.       free(file);' J. ]9 B/ x) X5 Q" F! c. G
  131.     }
    - R$ ~* j7 j# T5 ~, h& @2 G: C0 _
  132.   }! G6 K5 v, G4 j8 \. k
  133.   fclose(fp);
    5 p! |7 g" D. b* H' e( D- o
  134.   return true;
    5 L( @0 I  F% ]7 d2 t
  135. }) ]5 Q) R( v% ^, ?0 d' G3 o1 P5 j

  136. ; r, y4 e7 L" k* r3 {8 _
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    $ g7 A5 G, l9 ^9 q( }. _) e% c
  138. {! P1 H7 j! E& ]* i0 S
  139.   TCHAR  szFull[MAX_PATH];& I& \: x( W8 K" s7 h+ Y
  140.   TCHAR *token,*inter;4 R( z, d+ C- @8 d) j
  141.   *szPath=0;
    ; e! ~# p/ U: w# O# V  R
  142.   strcpy(szFull,szFullPath);) Z' ]) s& {$ v2 Y0 y
  143.   token=strtok(szFull,"\\/");/ Z$ `' v& f. p* ^( }' p
  144.   inter=token;
    ) ~; N6 \! a& W+ V% ]1 G9 [7 r% ?
  145.   while(token=strtok(NULL,"\\/"))& d2 o# h4 I9 y0 z
  146.   {$ ~, I& ]5 s  M1 y/ b2 l+ j  s
  147.     strcat(szPath,inter);
    / @- y" i' G) J" y
  148.     strcat(szPath,"\");
    ' W1 v+ t! ?: }( z$ |
  149.     inter=token;
    0 U( E4 T) s1 X
  150.   }
    : S7 q2 l% B2 Y+ w
  151.   return strlen(szPath);- d. x+ X# B0 F' k2 H
  152. }
    ; O! H! k: ~9 M2 d2 w7 L: _0 t

  153. / H. `$ j4 k1 n& x# x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' M9 j% d3 ?$ g, Q
  155. {0 B8 d4 k: K1 w7 X; S( A
  156.   DWORD attrib=GetFileAttributes(Target);1 V/ q$ v# S$ ]7 N: b8 w* z; R
  157.   if(attrib!=-1). ]( D9 Z# @* B6 w( M; o) e
  158.   {8 p- F# `& W7 e/ H& `
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ W- ~" W) J% A$ i+ b/ s- [5 Z
  160.     {; j7 a1 i6 |7 q: l( G
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);* c2 {) C6 C* `
  162.       SetFileAttributes(Target,attrib);  l; l( B$ y3 H2 D
  163.     }; p2 K7 B, x* S0 N  e  n
  164.   }, s/ f+ |2 {; Q9 H( V2 Z  _' i
  165.   CopyFile(Source,Target,Erase);
    2 m# |. B/ g7 {* b) M* U5 ^% u
  166. }
    ! g& T( |7 N. w, V2 E" E

  167. ( U8 I2 U% K3 Q& f5 p/ ]# o' w1 E! X; q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ( d/ V1 E/ I' j: }; ~9 g
  169. {
    , L6 L% t, L4 }) e
  170.      FILE *fp;
    4 Q3 Z7 ]- y- W/ d
  171.      char  szBuffer[8192];
    ( X0 l- |, Z$ J6 n9 N. u
  172.   va_list  argptr;
    / H2 s& U$ K4 z
  173. 0 s: f2 c; S9 T* [- C  U7 g: G
  174.         va_start(argptr,message);9 z. q. F. |; S
  175.         vsprintf(szBuffer,message,argptr);. |0 `; q7 F+ h3 }6 T
  176.         va_end(argptr);
    ; A# u% ^, e7 p7 M' B, h* y
  177.   fp=fopen(FileName,"a");
    ( A7 ?9 X% P+ u% ~; t( f
  178.   if(fp)
    , ^' S' V/ D$ e/ S- j. O
  179.   {* A" I% f* p5 D. e
  180.     fprintf(fp,szBuffer);8 m- m/ H( h6 y
  181.     fclose(fp);/ Q+ e3 a; M! u
  182.           _flushall();
    1 D2 O0 H. R4 X, g9 ?1 J
  183.   }
    ( ^: L) {" x: \! {* r
  184. }* ^" G; B# g) H2 H. @
  185. * H% z1 B' U' A& J
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    2 R- h9 J- U  M" ?( ^5 e
  187. {1 X' q4 m" W) K2 O/ A! |
  188.      FILE *fp;6 x  r% E+ N1 \/ k$ F% i5 p
  189.     DWORD  attrib;
    " i( C( G. V. c9 B
  190.   attrib=GetFileAttributes(FileName);
    + P' F4 H6 p. \0 Y: c% s9 {8 M! X3 [
  191.   if(attrib!=-1). r- \! S: ^7 ^1 j
  192.   {
    ! {. R( E5 ~: _! r: H8 r
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);' K) m( m. M! o; E' h( g+ J
  194.     if(!SetFileAttributes(FileName,attrib))
    . @8 O$ e7 e$ {# U& f
  195.     {
    6 `  P9 H. _: a: u# |
  196.       return FALSE;
    : C; r# _9 ~6 ?7 T. C
  197.     }3 G2 e3 t# _* [" [) u! j9 d
  198.   }5 i4 G1 N, O4 [+ F# ~
  199.   fp=fopen(FileName,"wb");# N3 t1 K# d1 _
  200.   if(fp)
    ) k* T/ x7 R' W+ d# x* Y' f/ J6 p
  201.   {
    + ?+ _( D' E3 M1 ~  \6 o
  202.     fclose(fp);
    - L: R* z/ I* i; K
  203.   }
    $ r6 [0 _- @- {' e/ n2 @( h8 ^
  204.   return TRUE;
    ' b4 X0 F, w+ D
  205. }
    * d% r$ p1 V/ g1 z

  206. 5 o" P+ n" l; _" W( _8 w9 ?6 V
  207. BOOL CRevAppApp::UpdateLocalVersion(void)1 m. A8 v0 F- U+ j. B& P
  208. {
    % x; `1 G. A- [- b: i$ d! ^
  209.   char filename[MAX_PATH];
    0 U! ]& j6 Z! ]+ o+ w) A
  210.   LPUPDATEFILE file,olds;- c' ^9 k6 {! L9 K" Y9 i
  211.   std::map<int,CString>::iterator i;
    # s) s. b- u' V2 @
  212.   std::map<CString,LPUPDATEFILE>::iterator p;; M/ V* J9 l7 `% X
  213.   std::list<CString>::iterator l;
    - P1 t, @0 ?1 R  C9 K

  214. 6 m6 T/ z, h: n7 C5 w% j
  215.   if(bFirstUpdate)& O2 l# q7 h% o1 D# O- X: D+ D
  216.   {
    # G& ]& j0 `9 Z4 g: E8 v1 G
  217.     dwCurrFile=0;, R  d6 v6 B! ~+ u. o
  218.     bFirstUpdate=FALSE;' d. ^0 \: W1 V2 I# Y" \: f
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% _% h4 v" E8 @/ ]4 l
  220.     {
    8 z" I$ P& b; n7 ~2 g+ B/ G+ o% @. g% c
  221.       dwTotalFiles=UpdateLocal.size();
    $ i9 Y+ ~' f0 w/ Q0 a, _
  222.       dwDownLoaded=0;" b6 M4 g% r' _; \: U2 z8 c
  223.       bSilentStep=FALSE;
    ) j+ O! |0 n' C2 R
  224.       bCompressed=TRUE;
    ( K* I5 C9 A% h3 M
  225.       strExtLocal.Empty();
    ; f" y1 P6 y( n" }' q4 W
  226.       strFullName=(*i).second;
    3 ~1 ^+ J2 b6 j  }1 H0 Q0 z! c; x
  227.       dwProgramState=AP_CONNECT;3 Q. K9 O9 y( G* F! \/ A, @, ^
  228.       return TRUE;
    5 f5 p' K* t) J
  229.     }7 R' u7 G& G  U5 z" Z# j  j
  230.   }
    ' H4 S& Z9 X+ m
  231.   else if(bRestartUpdater==FALSE)
    . O0 N# U4 `/ X; Q. e' C
  232.   {
    3 |* I2 C" r1 X' J8 A! y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())) N$ r9 W1 O7 G8 `# O
  234.     {
    ; ^0 Q  a4 S3 c/ G$ `. U- E5 S% M
  235.       file=(*p).second;; @7 X5 S  ?# A) p2 A6 F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    4 F7 |5 o9 e9 L" B6 A/ Q( `0 R
  237.       {
    4 }- Y, t4 s8 Z9 r$ k
  238.         olds=(*p).second;
    + T2 |7 _$ K" S* i6 m) P6 z
  239.         olds->vers=file->vers;1 W3 i: V$ n, |# X: g  h
  240.       }; ~9 F, N2 S2 j5 y1 w
  241.       else
    * c* w+ r( q6 P4 y: {
  242.       {
    " j2 ~# R% h$ V. G2 Z: _+ p
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ J7 M6 }% k8 U! R$ C$ y' S& ]7 ]
  244.         memcpy(olds,file,sizeof(UPDATEFILE));; ?5 e0 W4 V; g( c5 Q% k7 k: t0 C
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));- d2 e" v9 G8 ~( c, Z4 n
  246.       }
    , v3 t- n. |2 {6 V5 G
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    9 d! v4 |) e3 H* f
  248.       sprintf(filename,"(%s)",file->file);
    : T1 V* @0 V# g4 z5 g! {
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) Y9 |: U7 O: P* [
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }2 t+ `4 f  n3 v" K3 i- Z3 _
  251.     }
    * ~8 ?0 t2 g, d
  252.     dwCurrFile++;
    9 M+ p: ?- q8 y) u3 u
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 d- h, [" t. w+ k  {7 I! f
  254.     {
    , u4 _6 V$ n# `( G
  255.       bSilentStep=FALSE;
    ; X. Z" Y5 W0 G% v! b4 j8 I9 p# j
  256.       bCompressed=TRUE;
    3 \; d$ S/ l' Y
  257.       strExtLocal.Empty();: I- }# h9 B7 K* R4 ?: J
  258.       strFullName=(*i).second;0 y! Z5 ^7 @* u
  259.       dwProgramState=AP_CONNECT;
    % w3 Z, a, _; h* H$ X0 C* V
  260.       return TRUE;+ X; w  W2 {8 Y
  261.     }; l1 i2 ^& R8 ]& a  w! K
  262.     if(!bRestartUpdater)
    $ \1 u- k4 {% X; Z5 A
  263.     {
    . Z+ e  u* o, P6 m
  264.       int iCurrSize,iFileSize;
    " s3 v! u5 d* C2 X8 l
  265.       iCurrSize=0;
    0 S& M+ w: N1 B+ G# S- S
  266.       iFileSize=UpdateList2.size();
    8 f4 O! n  K5 w# a3 L2 Q% X
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");5 p3 n8 \# ^7 z2 K% t+ S; Q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");; ]; @& B4 o1 J. P. B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 i6 F: r( F# I+ f, b5 D  J- G
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 ^6 L+ Q7 z8 B7 G8 J( t
  271.       Fclearf(".\\update.dat");
    # S3 T% e$ J+ p) u4 g
  272.       Fprintf(".\\update.dat","Bloodyf\n");7 I% L( B1 i0 C7 d4 U: l
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)& L7 o) @* g& T
  274.       {
    $ g5 |9 y9 T7 {2 X( i
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    : L3 i" A/ y. |4 J
  276.         {" P' J+ N" j4 G
  277.           file=(*p).second;
    , R+ w8 U9 F6 Z- g0 s" {7 \7 \; q  S2 }* y
  278.           sprintf(filename,"(%s)",file->file);
    6 J# M* i. ]; _$ B- B8 G. O
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    4 s5 g5 r0 c8 s, Z/ F. Y& b
  280.           iCurrSize++;# {* H9 ~: b% T8 ^0 ~0 Z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));6 M$ k2 [' P- v5 n8 w  R( n
  282.         }
    ! ^* ]+ o1 Q6 j2 [6 K  B
  283.       }$ a1 C# Y. X- y- ?0 I# A
  284.       unlink(".\\update.txt");
    9 f& v6 l5 Q# ^* A0 u/ F- k) K  ^! y* D
  285.       unlink(".\\update.tmp");+ _1 A3 h+ \/ }: |# G  g* b, R9 v9 R
  286.       Fclearf(".\\checkversion.dat");
    0 z% j" V# @1 S  C" l* a
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 t; O# V" a' h8 Q3 O& Y9 o
  288.       if(UpdateLocal.size())
    ; o( o% ~# p3 x; Y2 [! p7 Y
  289.       {- y4 T; ]9 g) q" w/ F# H5 V
  290.         UpdateLocal.clear();) I! r2 b& u6 ^
  291.       }+ e: Q( S% G# _% w8 M
  292.       if(UpdateFile3.size())
    3 ], m' [; L8 Y
  293.       {0 ?% [# S1 s0 \$ e4 U% i* s
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# l! D% }$ V6 V* J3 G% x0 J/ \
  295.         {
    2 X6 R6 K3 t4 i* \2 D
  296.           file=(*p).second;
    : I) c# H% u4 |
  297.           free(file);
    * [- u5 M1 K9 W. T
  298.         }
    $ ~9 [+ R  \/ R1 I& y* I) n
  299.         UpdateFile3.clear();5 T. V2 X4 b5 ]  D
  300.         UpdateList3.clear();
    4 y+ ]6 J: u/ `, t+ f+ C/ S
  301.       }4 O# b' }% v$ [$ J( ]& Z
  302.       if(UpdateFile2.size())
    + p! H, X; ]6 {& A' c3 @
  303.       {
    4 Z5 e; d4 f- S: ?5 d* e9 P
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 {3 \! ?9 K( ?* w! y2 w
  305.         {
    8 A0 j. p% w( L. F- F3 Z
  306.           file=(*p).second;
    $ x, X8 e; N# O- N! ~7 I
  307.           free(file);" q! o9 z- Y. M9 h- j/ V
  308.         }- h' H# F2 U0 ~/ G) r1 g- u; Y% Z
  309.         UpdateFile2.clear();
    8 {* t/ v$ U( x# }
  310.         UpdateList2.clear();
    1 {) b. y# |, Z+ K: i" w0 K, I1 J" J
  311.       }
    ) c+ a! H7 ?9 w  V4 @
  312.       if(UpdateFile1.size())
      ?% C: D& `0 A( w. ?$ m8 {
  313.       {) U$ a* _1 {7 K+ {' ]
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) w8 ]+ p- j% R; M9 b4 D5 l) l, Y
  315.         {' Q  d" u! [) t. v
  316.           file=(*p).second;
    . |# o/ I" e8 m' A# }4 a
  317.           free(file);. ]" r# x$ p6 G1 G5 Q3 O
  318.         }. e$ x7 j$ O/ C9 n' r2 `8 V
  319.         UpdateFile1.clear();8 ~! `' ~3 }; W4 w8 [& p
  320.         UpdateList1.clear();' h9 ~0 I  |8 I
  321.       }0 N* T. \, ~  f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    8 ]6 C8 q6 t' I% N
  323.     }
    * c$ n$ p$ L7 [% m; x0 }+ {
  324.   }
    # M! ?% n$ H% S+ ^% X! J
  325.   return FALSE;
    & v, y$ H# T5 R$ i$ W+ N
  326. }6 ^/ m. C+ e; `! R
  327. 0 Q7 m1 d9 }7 c0 T0 g9 Y+ _
  328. void CRevAppApp::ClearAll(void)
    6 k7 v; F0 ~. H! c
  329. {
    ) ?; x2 W9 q' v& K5 R
  330.   LPUPDATEFILE file;1 r+ b. x* `# \
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! U4 U( y* H1 d. i
  332. . M+ |+ F: J; ]2 N
  333.   if(UpdateLocal.size())
    , P, s& t% B% r( @. M/ u# `: A7 m
  334.   {2 J+ @/ ]( r! b5 X* y2 l
  335.     UpdateLocal.clear();
    ( T; h/ w$ j7 c' z# y% x, U4 D8 ~% B
  336.   }
    5 Z; \2 s) Q! A( v1 f* _3 V
  337.   if(UpdateFile3.size())! r( W* f& P; P) a
  338.   {4 M" Z' |& o4 L+ C4 A2 Y* s
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( P% f: s; P9 }! N* C4 M6 u
  340.     {
    ( ^. u" W5 z! d* S. o! y3 ^. h
  341.       file=(*p).second;
    9 a, `/ c# Z! d2 j  }
  342.       free(file);& Z' {. T! i& x6 x* H! S: I3 {
  343.     }! B- a. Z0 I8 q* V
  344.     UpdateFile3.clear();
      Q" R3 \0 o7 `4 h5 Q& f+ K& g
  345.     UpdateList3.clear();
    ; R' L$ F# v" ?; [/ l3 f! E# S
  346.   }% F4 N  S' i. t' t
  347.   if(UpdateFile2.size())
    & W4 _& \! ?5 Y) F
  348.   {
    ! b5 t' S  i, a* x( @& E* F) I$ R
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + _2 V  [. X- C: v& ~( Z4 A1 V- V
  350.     {& L! t; H7 n. e1 u$ f$ Q/ _- R
  351.       file=(*p).second;! t* ?" Y" `$ Y: I7 s
  352.       free(file);* V9 r1 e6 D" S: D  P6 |" g; W
  353.     }8 m" J! U0 f( O: b' ~5 l. P7 Z* T
  354.     UpdateFile2.clear();) x: q3 [9 g7 J+ r' R
  355.     UpdateList2.clear();
    ) ?" {4 K  d: m# s
  356.   }
    ! K0 p4 ^3 V' `- N. `
  357.   if(UpdateFile1.size())5 h" a( ?7 F, ^& w- J) Z
  358.   {3 y: h3 b/ Q1 {# S4 V7 F% N
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) N4 i2 P" {( [7 L: A( E0 n
  360.     {# D7 C% k2 J* v3 S
  361.       file=(*p).second;
    5 u# O" S$ T  }
  362.       free(file);: m5 s/ [* j4 b% F. I9 ^: Q. F1 o
  363.     }* r5 x1 t) f2 K* {
  364.     UpdateFile1.clear();( k9 _! P, u9 V# S! j5 e/ B( z
  365.     UpdateList1.clear();/ i3 b1 N( i# D% h7 F: ?
  366.   }; V) F4 [( Q4 D4 r1 l/ B
  367. }  $ A. z8 [) @/ n; |
  368.   + j0 Y2 I6 G; [' x
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    : r% Y* g. {% ]9 ^6 m2 P* I
  370. {/ T+ i9 U5 Z% w4 F, c- S% c
  371.   int c;
    2 k) H9 b. M" f$ e
  372.   LPUPDATEFILE file1,file2;
    - C% }6 G2 U4 d3 `3 A# ]
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    / ~  M2 N+ q6 q* O" w
  374.   std::list<CString>::iterator l;
    # H# [) b2 b: x! e

  375. ( `: u. D- }% h, T! v
  376.   UpdateLocal.clear();
    # m- n6 T" L1 U3 |9 z5 K
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    1 a. A9 {4 b( n3 B3 x" g4 a8 ]. M
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    1 G  k, G! H0 X- Z" W. W( [1 m
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + O0 x7 P# ^8 y1 X* r2 q5 y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    3 a5 m& W$ a1 F5 D/ F  C7 ^
  381.   if(UpdateFile3.size())7 g9 r4 y' E) q2 |$ s
  382.   {8 r$ S2 K- k- B! Y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)! s  f; L9 o3 h+ v0 I7 @
  384.     {
    + g! o/ o' z% ?
  385.       file2=(LPUPDATEFILE)(*i).second;
    7 a5 V, Z6 e- O3 U6 P
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ( i% @' k( J9 X: L# R
  387.       {: T* Y3 m2 Z8 E" q* P
  388.         file1=(LPUPDATEFILE)(*p).second;) n' q9 O" ]' u" _2 q& \
  389.         file1->vers=file2->vers;
    ( U  {4 d7 Y8 T3 r3 E6 Q' \
  390.       }
    ; d  s- |$ _2 h7 f0 j& ?; A
  391.       else
    . @, T# R1 r; x* w/ y2 ]
  392.       {
    / G/ U: `5 Q$ t) g
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# a6 U' E9 v, y; o- b1 l) t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));1 i% L; r3 }' R! y/ P& W5 K
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ x, }8 _! p3 X
  396.       }0 Y# b# Y/ [; F( q' n$ u
  397.     }
    7 Y1 B5 M* q. Z5 M
  398.   }- A% n; m0 {$ U- P) m8 m
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++); J' A7 ?1 A3 ], `$ Y- Y/ m: Y
  400.   {) J8 l$ @" A7 O  N9 w6 F
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    % D  Q9 Z0 l. S/ O1 v
  402.     {! A2 x. o4 c$ ~$ J" m' r
  403.       file2=(LPUPDATEFILE)(*i).second;) B# s* G# e& Q( w( ~9 O# Q7 e8 \: s
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' w4 _) C7 O  O( W( b6 l9 @; i
  405.       {/ S" g% Q5 D# ~5 F! ]/ }" ~6 o9 g  ~
  406.         file1=(LPUPDATEFILE)(*p).second;
    . {. O2 r) m6 E7 V7 A" H
  407.         if(file1->vers!=file2->vers). [: `1 L! Z; N" o+ }/ C
  408.         {
    * o) Z5 ?4 e& g& [  w9 J" D
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : A5 `: W  A! K: ]; Y0 i& T
  410.           c++;( j% R7 I+ \" Z9 b, }$ n7 I( X5 _
  411.         }
      X: h$ z$ e/ T" H" i
  412.       }3 X- K/ s5 k- X' s
  413.       else
    ; V9 n8 u4 ?5 S  k2 S
  414.       {
    $ S" E% b) M* X% T' E0 D
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * P+ [$ U3 ?6 U6 {. k
  416.         c++;! g, w0 u) Q3 m/ k2 E9 V( y. `  S. k
  417.       }
    & r3 e! i  W' D
  418.     }
    8 f& [! L) U( C7 s+ N
  419.   }  [/ `$ V/ d) H& ]
  420.   unlink(".\\DownLoad\\update.txt");
    + K6 n% z/ l, J( S) w
  421.   if(UpdateLocal.size()) return TRUE;8 s9 d) b: P# O9 e5 S/ c  v
  422.   else                   return FALSE;. P8 o9 a4 d. O9 _" ], J
  423. }
    % p1 L% J' y9 X" u' S6 F

  424. : u" _9 x' t/ [
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"# [3 t& a% q: C: v  }; [( \
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' K1 V* R& q0 C& O

  427. 7 B$ B1 e3 w% Q/ o. i% L2 J( y

  428. 9 ^0 d5 t# q/ l9 q. G

  429. , p2 C5 d* E9 ~% R
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)% o* V: Y3 L1 v. ?/ a! ?
  431. {; _4 r# a/ y. x, v  ]
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;5 Z) [! {  d+ S. p- d$ O* l- B
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 g1 k: R! B8 B: d6 T
  434.   {' O" {# V4 N: ]$ \4 T
  435.     char szLanguage[50];1 Q& U) a9 o! G: N  M  [/ P, w
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ U! s9 R2 f* j8 N5 N
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , c3 ?% k" k2 t4 |0 Z+ Z3 Z# q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ y  k4 H9 O  d1 t+ g  k( W
  439.     else                                   m_iLanguage=ENGLISH;
    0 F! q  b/ G0 ?( |+ }
  440.     char szRegister[100];6 }, x) F' M# h+ m+ g, D
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & W# c9 o4 l8 x. y( x
  442.     strRegsName=szRegister;4 o9 t( i# s" Z" [
  443.     char szPatchURL[100];4 a4 Q4 B! j2 M9 g) V* R
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! Q. L/ K. G$ l  n2 {9 q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% z, z$ T) k# L8 e' l$ ]( h
  446.   }
    # P, B. R& r$ f+ U" i7 S. `& S
  447.   else
    " l4 s) K3 X$ H0 t' s. [3 \
  448.   {
    0 D8 s( M% G3 }# c) u- C- \
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 c, K6 o" P/ N; d
  450.     strRegsName=DEFAULT_REG_URL;
    / m& B; }7 X. M) d
  451.   }
    7 k; s6 W) s8 |4 T8 d% [7 `
  452.   if(GetFileAttributes("hosts.ini")!=-1)/ S: H2 ^$ x, R, p7 g: y
  453.   {( f7 Q/ a( P% ~& G4 O
  454.     char szIP[50];
    ; m2 j2 b2 n! H0 N' b. ~
  455.     char szDIR[300];& G) R. F  C% d4 W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))1 k6 V$ H2 @2 Q/ W9 v0 a9 k
  457.     {# f# l3 ?: e2 t
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    + X- L9 h- P' B6 v
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# ?% H) i7 x- s
  460.       strHostName=szIP;
    3 a- i' a# G2 i- g
  461.       strHostPath.Format("/%s",szDIR);$ r2 x4 N2 T5 h# N
  462.     }
    - W) T& z7 U$ W. ]
  463.     else" F5 r) A; d, w2 \: @/ n5 p
  464.     {: a  J* S9 \7 G1 [. N
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , ?1 Q6 q, o9 m$ k3 s1 @  a
  466.       {! i0 C( G/ B+ W. D" Z  E
  467.         char szLanguage[50];/ a; ]7 d: F& C+ W0 s
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' L9 j% _" \9 U  A4 Z9 {6 z+ `, X
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; e3 j2 }7 D" V( b8 _
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 E+ m: Q& @. ~) A. E7 x$ d0 f2 |, G
  471.         else                                   m_iLanguage=ENGLISH;! f7 m. K4 K2 ?
  472.         char szRegister[100];2 P! z1 w. S1 `1 w- W
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# v5 d) Q+ w. w. c' @
  474.         strRegsName=szRegister;( ?% Y+ C  \! R# l- U) m
  475.         char szPatchURL[100];
    1 v. r% `' E8 x! j3 j# ^, E9 I( w
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" n% G1 a; `% u5 ^" {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: r' p! A$ X) q& l
  478.       }$ p  U( d2 M6 J1 g  X  |
  479.       else7 V" r* l. K+ c& A
  480.       {- c9 b* j* w4 S: a+ ?
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 j# i, ?' y7 e3 G& F" O; F
  482.         strRegsName=DEFAULT_REG_URL;. z  ]  |$ d7 P1 Z3 S, X
  483.       }* `0 s- _* e# L" E6 }
  484.     }. U0 F+ t! N  l7 O( w
  485.   }
    5 n9 P0 R; K$ k3 G& h
  486.   return true;" s0 \; ~7 d" n( a  G) X7 [" ?8 E
  487. }
    0 m% }2 d/ j5 O  n- ?" ?

  488. , T3 ?  N) i  K% l
  489. #include ".\ZLib\unzip.h"& r3 S  e% W$ g' d+ B: U# l
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);' d) V0 _- }5 A+ k  L* ^5 O, E
  491. /////////////////////////////////////////////////////////////////////////////
    ) g7 X8 `0 A1 l+ G
  492. // CRevAppApp initialization
    1 F7 e! Y2 e0 k: ]/ T
  493. ( u* y; {! x# O' |
  494. BOOL CRevAppApp::InitInstance()
    0 \" p5 j4 P" y+ h5 s/ G
  495. {
    $ U/ Y0 o' D1 v: S$ l) d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ! y$ R! I& o; k2 O1 W
  497. 1 _9 }& z2 z# `  N& J) t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);! ~; ]+ k8 m4 [4 L0 o4 [
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)): \5 Y# _# }  v4 x( o7 k/ M* W: x4 b
  500.   {9 _- ^/ `+ D4 U1 U4 k' l
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    0 i7 y; U5 i* z' f
  502.     GetPathFromFullPath(szPathTarget,szPathSource);( e9 J3 g: {8 |( r* t/ ^" d
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    / n$ X; r& r; n' ^5 j* x" w0 L' p
  504.     {7 w/ y% x2 N% N- K8 C
  505.       strcpy(szPath,szPathTarget);: T# Q. J# d+ B2 K- ]
  506.       SetCurrentDirectory(szPath);1 l" ~+ r& H! U7 A
  507.     }# s, q+ ^2 L+ N2 a5 u
  508.   }( Y: f9 V: h" `1 {
  509. #ifdef _DEBUG* C2 c3 N: U. I; i
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , o) G2 r% I2 N0 D( b
  511. #else
    9 Z1 \$ v: \) @! t
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) t0 |2 C# w8 K7 ~# L
  513. #endif  ]+ L2 t- g4 |# W2 \
  514.   {
    9 ]. f! x' \# f  e& O$ Y
  515.     char tempFileName[MAX_PATH];
    : T: _, j/ {2 w- O" g; Z
  516.     strcpy(tempFileName,szPathSource);
    * p6 g8 E. l7 w9 f2 v
  517.     tempFileName[strlen(szPathSource)-12]=0;, B; t& _9 L+ M" M4 Z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    0 }' J; I2 X  L. g8 r) T; p4 Y+ {
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    8 P2 O: y$ ~  K; W& M' l& w
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);& }6 t: V9 U" o! D/ `- @3 x  g
  521.     return TRUE;
    4 K4 \' M) t  c) W; i
  522.   }. T4 ]+ j4 `$ i. a6 t4 z% h2 [
  523.   // Nuke 0118: Delete run.exe3 [$ y& {9 O! b+ s3 N( }/ {% D- g
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    0 s% T% K  j! z! t
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");: h, G3 A# L- Y& j
  526.   if(!ReadCfgFile("Config.ini"))
    4 g3 M6 ~) {/ }8 J; k6 b$ Z
  527.   {
      l8 t! P3 F: r+ u
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    1 `0 y4 X- [2 {' t: U6 \
  529.     return TRUE;' C0 F% O6 U, l. `! s& L
  530.   }/ ]6 s3 X2 a# Z. U% d, {
  531.   HANDLE mutex;; T# R) E: Q/ a* x
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    7 v% \4 p! Q; r- m- k$ E
  533.   {$ p$ |) i* E6 h9 ~! w+ S$ H
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    " \4 O4 J% m$ @
  535.     {/ H5 g/ Q/ W7 Y: D1 c
  536.       CloseHandle(mutex);
    ( G0 i: o) Q3 l+ ?+ v1 Z+ h: C
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. ]4 q* M' s9 n" A/ X1 F5 n
  538.       return TRUE;) l2 X5 a$ x/ Z/ b& z
  539.     }5 ^* _% u, M0 N# f8 o8 T$ F
  540.   }  ; T  e$ m1 ^) Q0 w; k( d3 S- G
  541.   CloseHandle(mutex);
    5 V) L* K, d9 l/ P# L9 _) @3 E

  542. 2 M1 t" ]& E' ^8 S6 z. D7 ?
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; P- G/ ~. z* Y; e- A

  544. ! a) Q* T3 u) n" V
  545.         AfxEnableControlContainer();5 [9 g' ~; _/ z
  546. 7 C$ l" ?: [; x) y6 o; b2 G5 [
  547.   bCanUpdate=FALSE;
    ; s: i6 Z/ Z; D- \4 U' t
  548.   dwStartUpSteps=1;
    + i- G9 y7 y2 m/ F
  549.   dwProgramState=AP_NOTHING;4 d/ D4 P1 a6 _. E3 u
  550. 1 K* H" J/ h. n
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
      `; l- u/ B) ?+ n2 a% }
  552. * y: C+ }/ G5 @0 {& Q2 ^
  553.         // Standard initialization  u; A" `% `3 q' S) a9 L
  554.         // If you are not using these features and wish to reduce the size& l  K( X! s! Y; P+ Y: Q9 a3 }
  555.         //  of your final executable, you should remove from the following% Z# d, Q0 P/ i; P
  556.         //  the specific initialization routines you do not need.
    6 I- |; l( A& x2 _4 l, p% @1 `
  557. + g: ~. b# d9 Z
  558. #ifdef _AFXDLL
    . m; W$ |& ?) ]! F" C
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    4 N, d4 L& J' H( `' Y7 y
  560. #else* _3 ~% P  F) P2 P- b( M
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    + |) F' _, l7 m* |* |
  562. #endif
    " [7 Q! P' j: }6 w' b8 D7 c3 Z
  563. , m: C5 M! ^( f7 R4 c
  564.   dlg=new CRevAppDlg;+ O. D9 u7 b0 o
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 k3 k" }4 i# k& k8 z, V! \7 w/ o
  566.   dlg->ShowWindow(SW_SHOWNORMAL);' f2 {7 k# F& B) X( U: V, h
  567.   m_pMainWnd=dlg;
    9 S, F+ A/ |8 F3 X+ t2 I7 V
  568. ; F; Z6 P& [6 F$ l$ f: I) @
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);. O/ x# M) b! @" V. }3 n/ \

  570. 7 P# B: }: x; e# b/ v0 C( z) e: F
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( P. U) Z/ x' ^* b" X; n. P
  572. //  ULONG_PTR gdiplusToken;
    9 a+ H$ ~. _& z0 c/ z/ S5 R
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ( J+ A) a  D2 p$ ?' q3 L8 d1 B4 T

  574. ( c- z9 B. T4 J8 y# y2 _* F' R
  575. //        CRevAppDlg dlg;
    9 E0 k! C& A3 O7 [6 Y
  576. //        int nResponse = dlg.DoModal();
    7 G  g" B- {1 b2 H2 C4 ?
  577. //        if (nResponse == IDOK): ^5 N: n  _! G) k3 q. X
  578. //        {
    4 T1 W* w5 d% O6 \4 @% L6 m! W
  579. //                // TODO: Place code here to handle when the dialog is
    3 L6 f* Q5 X0 q" z5 [7 s  q& ?/ k
  580. //                //  dismissed with OK
    . _; V- M; h* e- z0 ~( c  u- |- k
  581. //        }8 b( H. r3 p: |" E, F( P: n" u. `) o; }
  582. //        else if (nResponse == IDCANCEL)
    ( m; @! V7 D4 k3 n# W1 @7 o) |
  583. //        {
    + v  V6 s2 l! y9 t
  584. //                // TODO: Place code here to handle when the dialog is
    + M. S4 D# ~1 b/ s! I2 V! {
  585. //                //  dismissed with Cancel3 d* |! }. M; `3 e0 N$ ]! n
  586. //        }7 j2 H  ~% _( }- Y& ?/ C% s

  587. & ~4 ^( `+ ?8 G  w+ m. x6 f
  588.         // Since the dialog has been closed, return FALSE so that we exit the! C* u7 s7 q, e
  589.         //  application, rather than start the application's message pump.
    0 M. ^. ^: ~5 q9 L% }; B
  590.         return TRUE;8 v) I3 h* M$ q5 z) X/ M6 D
  591. }
    ' c% u- ^6 z! R. C6 T

  592. 8 Z4 i5 x: E6 j& p# g! c
  593. char *CRevAppApp::strtok3(char *pSource,char *token)- b2 j/ T. I* s( A3 I
  594. {
    8 c6 Y) K  W& i! R6 B7 o
  595.   int i;* }& `& ^4 I$ w% z- r
  596.   char *szRet;
    - l: F1 T+ D8 V% g

  597. 2 n) Y1 O7 z6 ^- u
  598.   if(pSource) { itoken=0; sztoken=pSource; }
      {3 E4 T. |5 ~) @
  599.   if(sztoken)
    . e: X5 [# B, B& t4 U0 Q1 V
  600.   {
    8 g2 v, V  Q: t; y3 V3 R
  601.     szRet=&sztoken[itoken];
    ! N/ P  K+ H. r/ A6 k
  602.     while(sztoken[itoken]). H& U! o% j0 N. k9 p7 x3 K0 P
  603.     {. n) w4 V+ o5 A
  604.       for(i=0;i<(int)strlen(token);i++)
    2 B3 I+ l* _$ u/ W
  605.       {' M8 r( B2 B$ S( D2 M
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    4 H( f5 B$ O/ s6 }3 }' P4 F
  607.         {
    - m. b, t/ f3 P, m  Y. G; g: ~' C
  608.           sztoken[itoken++]=0;' z! g3 v- I4 r$ \
  609.           sztoken[itoken++]=0;; }1 X- z) R& O* j1 I" W
  610.           return szRet;  H* C' Q- \4 u! W$ M
  611.         }
    / A* I, c: a+ n8 _) A
  612.       }
    % J$ t' @# [* I6 O
  613.       itoken++;# b. u. {# r% b* j! Q
  614.     }4 W$ M8 }- R$ w1 R1 ]- u, r* }
  615.   }
    : J9 r0 J; t, q0 p* a+ Z. [; r
  616.   return NULL;8 ?0 \0 ]6 {; D. o5 e2 V
  617. }# H7 z# v) d- v6 b, \

  618. 0 S* J$ A" p7 C7 w4 p# F
  619. void ProcessProc(long Total,long Current)) P* B% w, Y7 ]( m: k
  620. {
    ) i/ U; u! A$ x0 y- v6 f
  621.         MSG msg;! g) N: e* [: u5 s6 V8 Y' \* w- f' b6 C
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);. K! E& R. g0 [+ f  T
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    $ G8 H$ C, y! I0 K% H
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    2 O; y% t7 N7 C5 Z/ J; I
  625.         {
    : J6 A* \% o" ]: {3 r) j
  626.                 if(!GetMessage(&msg,NULL,0,0))
    / k, g4 H/ K- e1 G  \6 ]# V
  627.                 {
    9 c4 y# J5 `& n( q2 @. ^7 v
  628.                         return;
    # M9 q! n4 R( F
  629.                 }
    % t& i! N; y/ e- E7 M$ Q* P7 f
  630.                 TranslateMessage(&msg);! o) P8 `- H* b6 o6 Q" j
  631.                 DispatchMessage(&msg);
    ( |9 E0 b# r& u2 w# F
  632.         }        : k0 P1 i4 L  t' {
  633. }2 @4 n7 Z/ p% @! k6 C% d7 E
  634. ( m6 |$ x3 G+ T% f$ ^( _
  635. BOOL bFirstChar=TRUE;
    7 k+ F- Q) ^7 X& c3 K* ?
  636. ' L" n4 Z( x- {) S2 F; ~0 m
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 ]+ A4 S0 X9 d3 V( O0 H
  638. {
    ! s5 g1 O' Y8 d/ J' a
  639.         // TODO: Add your specialized code here and/or call the base class1 _/ `! C" ^1 q( }0 A
  640.   switch(dwProgramState)/ V" X6 r+ D3 ]& O4 k/ Z5 n% l& L3 e$ A
  641.   {. [* M3 V3 U8 o5 }
  642.   case AP_NOTHING:3 U- }  J3 G# P: x$ G/ U# c/ t
  643.     switch(dwStartUpSteps)7 N3 W; ^5 e# A0 O2 B
  644.     {, N& p, J! }, Y" g4 U) Q2 [
  645.     case 1:
    ' n5 d; @: W4 \8 ^0 @# _: x
  646.       {+ N, z2 a6 Z. n1 o$ N4 ]1 g; ]0 e: M
  647.         int i;7 i9 h) C' u3 f5 y
  648.         CDC *pCDC=dlg->GetDC();
    " C0 Z1 Q5 l$ E* ]! j' E9 u
  649.         HDC hdcwnd=pCDC->m_hDC;
    ( d4 c, P) B8 i" o
  650. //        Graphics graphics(hdcwnd);* I* ?5 z2 O' F$ o- h) V9 G
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");3 B& H" h: G3 o3 U
  652. //        INT iWidth=bitmap.GetWidth();# Y5 z. u3 x- c' a7 G0 P* ^9 k
  653. //        INT iHeight=bitmap.GetHeight();% Y' j9 i; |2 m7 E
  654. //        Color color,colorTemp;9 }3 |/ c/ {2 K+ Q4 P
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    0 E  q  Y0 |5 Q# l6 v0 v$ C
  656. //        {
    % x9 L' e+ B! B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    # L6 i* u5 \3 E& ~, b6 B0 f: c) T/ ~
  658. //          {
    : W7 `$ K9 m3 d' ?) h9 `
  659. //            bitmap.GetPixel(iColumn,iRow,&color);( g" ]5 V1 X' J# g# J
  660. //            colorTemp.SetValue(color.MakeARGB(
    ( o8 e6 r1 K, Q* R4 T  n6 A8 I
  661. //              (BYTE)(255*iColumn/iWidth),
    5 D! {4 a4 _0 y  H
  662. //              color.GetRed(),- F3 H! \9 w/ d
  663. //              color.GetGreen(),1 X" k/ R2 g! H9 J& X
  664. //              color.GetBlue()));
    6 G( F0 q) [# i3 [$ ]  q
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ! W+ ]. P+ B( {! \
  666. //          }
    : q8 _$ `) T' [4 z# P. [6 i& B
  667. //        }
    5 ?3 a. A' Y* U' z% R% ]8 r5 ^
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);" j) ]5 [" E1 ~% D+ w1 V
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; h8 S5 n7 t1 b- E. I; N7 O& c) B. T+ g
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 g' A6 Q- B1 H+ O" j. u3 k' k
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) {2 [8 S: _" [1 o
  672.         for(i=0;i<240;i+=8)
    ' w% u* ~9 x  |
  673.         {
    - O/ X1 Q/ z( ~0 n  P9 @
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ( s  }4 [: P/ K. J
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 d" U4 z0 R3 t# J0 h
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 _3 x4 _, K0 i. w4 e8 ^, t
  677.           Sleep(33);7 R9 t4 V- N# B! G4 r
  678.         }
    2 Y& \% W) m, y
  679.         Sleep(1000);
    : g* o9 ]! }/ `
  680.         for(i=240;i>0;i-=8)
    " O" l5 Y3 L" j2 F8 U
  681.         {. U; H3 M8 W& T0 `; {* u5 e- j; e" O
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & K& R9 w  O8 B! c
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 g" T' H, M: G, l$ T1 I8 x
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* T2 B. {6 E& S  [! \/ B4 s* `
  685.           Sleep(33);; E- k; {0 ~0 u
  686.         }
    ( A  s4 D. l6 `
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 m% ?1 c+ u' e# e) z- b" _# j. v
  688.         dlg->ReleaseDC(pCDC);
    & n) r) ~' a( D7 q7 R- Y
  689.         DeleteDC(hdctar);
    6 z$ |" x3 x  r- {  _: @5 R
  690.         DeleteDC(hdcsrc);
    4 z" {" m) h( T4 O
  691.         DeleteDC(hdcorg);6 }0 q1 }- s# c+ k( }7 ~& @. W; m. r$ @
  692.       }) M+ u+ W' }% j- z& M
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 x. z$ L, c* Z$ g, \( x
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    / n' h* M1 g' F! i6 n/ H9 f7 i
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    % \( a4 }3 u" ?/ c% F
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");. f# P6 y: V( J3 m& L5 B1 g2 `$ Q' V
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ d- R$ b7 N; N7 x* t
  698.       if(!Dn.Connected())- A) o. R; W& c# m  f# |
  699.       {
    ! V' n3 C: a: b' T% u
  700.         dwTotalFiles=1;0 f+ B7 d; H  Y7 P/ U
  701.         dwDownLoaded=0;" t* O- h% t# w1 C: o
  702.         bSilentStep=TRUE;
      [9 o0 |9 d6 U. }$ v
  703.         bCompressed=FALSE;/ @: w8 z4 s9 Y; X# y0 G$ T7 ^
  704.         strExtLocal.Empty();
    $ Z, j. E% Y4 W/ g) I9 T
  705.         strFullName="readme.txt";& e) k: u5 P! H- g% f, B* H) _
  706.         dwProgramState=AP_CONNECT;' @4 K! C: X" n! M! `/ }
  707.       }
    / p9 o# Y; I1 F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ) m6 d9 k5 S. L# a2 F$ L
  709.       dwStartUpSteps=2;" n$ @  ]" J! {3 t
  710.       break;
    * @& I" _' G- T2 K
  711.     case 2:- L2 Q" j  L, e
  712.       {
    2 \+ @' q+ n. f8 A% x* E* l
  713.         int iEOF;
    ' i8 {' m! K% h$ e
  714.         FILE *fp;
    5 V3 i$ i# ^3 \
  715.         char szString[512];
    $ B7 h3 f- `) M1 \, G
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 T. z8 |' T  T
  717.         if(fp)
    & _8 o' B9 R' U% @2 N9 f5 o
  718.         {
    , h* p/ k3 u% h) O% I# O' a
  719.           do
    9 E6 h  f" w! G3 G
  720.           {
      i* {2 P( ]1 W% s/ _$ {
  721.             iEOF=fscanf(fp,"%s",szString);
    ( j* ?3 P  b. T6 o0 t  d
  722.             if(strlen(szString))
    2 M1 H$ j/ v* `' x! }. v, _$ ?
  723.             {
    4 M- l, Y3 P2 D5 O
  724.               if(bFirstChar)6 @* y: C9 l6 d
  725.               {& t4 U3 |1 O2 Z- p* A- u
  726.                 bFirstChar=FALSE;
    / K% O& Q( R: A; y7 B$ u
  727.                 bConnectIsBig5=FALSE;- C4 @# f9 a2 X& F
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    2 |5 S) |  F* |* ~6 ^
  729.               }3 w) q1 _6 z! ]9 ]# o0 O
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    / V( `4 l1 L4 j) t* ?( ?/ E: r
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    6 V4 G8 `: N' `1 z8 ^
  732.               dlg->m_ListText.AddString(szString);
    ! r5 X) `" d' L. N' r
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 z/ d  N1 S5 L- |6 V8 ^
  734.               *szString=0;! t# A) g* t  u% u7 l; q* R& k
  735.             }6 j9 h& Q+ k" T4 @( l
  736.           } while(iEOF!=EOF);' k' e" k* C3 X  `6 g# F! `
  737.           fclose(fp);
    7 d/ E% s' m5 i- f
  738.           unlink(".\\DownLoad\\readme.txt");5 m0 ^: @# g$ f" L9 N' |
  739.           dwStartUpSteps=3;3 ~- V+ I4 V2 B, ^
  740.         }
    % Z9 \5 m" e( Q+ V5 p
  741.       }
    5 X2 z  X; W9 D5 B0 B3 ]& {
  742.       break;* A. u7 [( E# g0 v" h" c4 e
  743.     case 3:
    1 B* N8 \" c4 Y0 H) @9 ]7 o9 S, r4 Y
  744.       if(!Dn.Connected())
    * ?1 s2 T$ b& @" f5 s3 N( ?# H
  745.       {
    ! l3 J: I5 i+ z0 e, O% v2 l
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);9 d7 g+ |( O/ E/ t4 ^! b
  747.         dwTotalFiles=1;) `. I) U/ k* I1 o5 c
  748.         dwDownLoaded=0;
    ( O3 H" {' }! o0 |
  749.         bSilentStep=TRUE;
    . l: J2 x' k( h" _' U, p5 M
  750.         bCompressed=FALSE;! |- \% _0 J- G2 [8 a' d
  751.         strExtLocal.Empty();+ ^7 T* K; ~+ d9 C
  752.         strFullName="checkversion.txt";
    0 e# t1 C3 k2 g( u3 u
  753.         dwProgramState=AP_CONNECT;5 r- ~. ^8 l! z! {
  754.       }( [$ i1 d9 z9 J4 v8 Q- x9 F+ d
  755.       dwStartUpSteps=4;
    ; W! C; f0 @! X( i# F6 c
  756.       break;, Z2 J: j9 l# ~2 A6 X
  757.     case 4:4 A- _0 Z/ H. o* a5 a4 w( W  R. J2 J
  758.       {0 F% T+ p5 @. B( r0 b
  759.         FILE *fp;$ R6 h' U9 l+ A  |" ?" u7 l( y
  760.         char szString1[128];( C, {+ n5 J+ U3 f
  761.         char szString2[128];
    4 z7 D- o! U! H$ U  w: e; g+ S/ r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
      l: X( ?' y& I; q) c
  763.         if(fp)
    ( m; D2 p9 ^* c: J# [( P& D1 h
  764.         {! Y5 o: T# Q  j) ~; x' X5 L. p
  765.           fscanf(fp,"%s",szString1);3 Y/ f9 a0 o+ n7 {  q) ^
  766.           fclose(fp);$ [" k% h( T- y# Q
  767.           fCheckVersion=atof(szString1);
    8 ^/ T9 k& X+ m4 y0 \* o
  768.           fp=fopen(".\\checkversion.dat","r");' a4 j0 P+ |/ w2 R/ e& ]
  769.           if(fp)
    0 l' l/ g8 J! P. S! L
  770.           {: _& o7 j1 ?* h8 z  r/ u
  771.             fscanf(fp,"%s",szString2);4 ^% \2 ~$ K& {+ G
  772.             fclose(fp);/ @! [  A8 r6 e, f& T; C
  773.             if(atof(szString1)!=atof(szString2))4 `( C" s# e, Q+ Z
  774.             {* o3 V( d. _0 |) ^, R% B' c
  775.               if(!Dn.Connected())
    3 w/ ?. L8 u% o4 Y& H8 I
  776.               {
    - j2 W: A0 @9 H; W
  777.                 bFirstUpdate=TRUE;
    3 u' [. ]: d4 }* H1 Y! \5 F
  778.                 dwTotalFiles=1;
    % I$ |6 X! Z* l
  779.                 dwDownLoaded=0;
    2 Q8 w3 ]% A1 Z
  780.                 bSilentStep=FALSE;
    3 m  |+ ~% i4 X6 V+ ]# u
  781.                 bCompressed=TRUE;3 A& X  n! j8 v: k& x# ]
  782.                 strExtLocal=".\\DownLoad\";
    : w  P, F: z2 g1 M) ]2 `) L
  783.                 strFullName="update.txt";- Q3 K! k2 Y! X
  784.                 dwProgramState=AP_CONNECT;0 {/ a7 c' j& [9 Q" A% |' C  }! P
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & f3 P3 x; x2 @
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / |5 d/ I9 n9 J. V0 o& n
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");4 j: t" z3 s* L$ r, ?" Q

  788. * y: x! w( F3 O" _$ ?
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( X( j3 P3 c; E2 c
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ! h. D: z; B5 r2 G; _1 i( ~
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1), H6 u- _4 N9 a8 d4 A
  792.                 {
    7 d; }; r* @+ y' j" W. u; z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    * |/ W, q! K  v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");- R( o: Z; P$ j. ]. p0 E6 r  i5 F
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");# a7 f" }% ~0 t: }& |
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( d/ [3 D7 U  O) w% R- G

  797. " R$ z& T7 t) k; b# j/ [
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      F% R6 ]3 }4 K9 p2 t
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' y- a. a. J2 j# J3 y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");: o" y2 G4 a: `! a3 i) O+ d% M
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 s* y* w1 U" c7 [& Z4 J: `
  802.                 }7 h' @0 I) o: ~, O6 H
  803.                 dwStartUpSteps=5;& l/ u* j4 n/ {: P$ }6 z/ S
  804.               }
    7 Y* i' F, ]: I; ?
  805.             }# R( \" R0 Y+ J2 S  d- R5 }/ J
  806.             else) w) {! A6 @/ l
  807.             {
    ! ]5 a0 }* ?& j% ?
  808.               unlink(".\\DownLoad\\checkversion.txt");
    - _# U9 [' @  [+ p
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");/ L) y6 z' a/ x: y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
      H5 k$ V/ O2 X7 E% @' X: q9 H
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 f* Y' y, c1 {
  812. " ^; m% J( _, u( N' ~) H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ ^9 F3 E' \2 I. u3 N! L: {: u
  814.               dwStartUpSteps=99;2 k/ `' `4 L3 O; z& _+ Q; z" X
  815.               bFinishUpdated=TRUE;
    8 T% U/ ^# a: i2 k/ S
  816.               bCanUpdate=TRUE;
    : D- q/ G; J2 v9 S" |
  817.             }
    ; R5 k, s  H$ `' t; O. m. ^
  818.           }( ?0 m) S  n4 r1 M% F5 Z" V
  819.           else
    7 a7 D( V8 l. Z( E: \0 C
  820.           {
    " _, M' n8 `& l1 e2 e$ m
  821.             if(!Dn.Connected())
    : G0 \- D  c$ k7 s3 O/ u8 e3 I
  822.             {2 ^5 ^8 s; H/ B% [
  823.               bFirstUpdate=TRUE;
    & W1 O, t+ ?) x0 x
  824.               dwTotalFiles=1;
    6 w' i* u* j0 D, U
  825.               dwDownLoaded=0;
    $ ?0 F. g- e$ _; P) M  v" ]
  826.               bSilentStep=FALSE;. O( x2 y9 ~  G( m7 [  d
  827.               bCompressed=TRUE;. f- _% X. W# p+ |1 P5 h; g
  828.               strExtLocal=".\\DownLoad\";& w4 l' X' z6 s7 M$ i  e
  829.               strFullName="update.txt";
    ; d, D" n; n3 L) c3 H( h* n
  830.               dwProgramState=AP_CONNECT;8 p& j7 M, q" m- b4 F
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");& M. B' N) ?* R+ V. N% V
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( h5 c$ d3 v! V. Z9 P
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");: p2 E& l2 w) c! b/ Y1 m9 {
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 f: f- i; z7 l+ J- `' b
  835.               unlink(".\\DownLoad\\checkversion.txt");' [7 R- f) a- g
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
      L" S( n2 v' r( o  r
  837.               {
    1 v1 U( ?% {8 V4 B1 y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    $ f) J/ U9 |6 h- S- N! |
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    9 s% g& H, I& Z* Q* B" K1 U# r
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");( N  u; o6 r, ^' r+ U
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; C: o4 x2 v$ n1 m
  842.                
    ; l" x' w) U/ U: A2 T( y+ U+ v
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    5 C' A1 k8 G" f
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 \2 b! ?9 }: S& W% b
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 }) R2 `& a/ e9 h
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) I5 [2 h# A4 p( Y: B4 R4 u
  847.               }; [# g$ W' S, ?. g3 {& C5 j/ D+ B+ z
  848.               dwStartUpSteps=5;& p# n1 L5 z& c9 ?7 g  v. j
  849.             }6 k3 P# V+ R1 M! V9 v5 m, E9 p
  850.           }
    . a! [$ q* V  ~
  851.         }
    ! e% q& x7 f  e! _
  852.         else
    $ ^- {& K1 j) ?* J+ k
  853.         {( i1 q. ]+ F% V  a+ a
  854.           dwStartUpSteps=3;5 @, Q" z0 n, a9 G4 x0 H4 K
  855.         }$ I: S) X# \9 F; ]$ Y' K
  856.       }  i( `. S7 K3 d4 U
  857.       break;
    , B( q8 [$ |% o% q; F) h
  858.     case 5:9 D* q9 @$ g/ S$ k/ c/ q% J
  859.       {# C7 f9 \+ W/ o) D
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    8 \2 I8 r5 n! Y( R( l( F( Y5 R
  861.         {; X6 p0 C7 Q: }6 d2 y
  862.           int opt_overwrite=1;
    & Q4 L9 F3 q* ]' L+ H. L" o
  863.           int opt_do_extract_withoutpath=0;. g4 L& [) }; C1 D: u
  864.           unzFile uf=NULL;
    4 @* J7 T# [$ N# |- D9 h

  865. + i/ p* k( g# M$ B& y5 Q' P  p/ ~
  866.           uf=unzOpen("Wsa.zip");
    7 f2 E: `/ f+ }5 b' q5 @
  867.           if(uf)+ |; a3 p$ O/ t( B
  868.           {% B9 G; I" a  o- N9 m
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 j# p4 g5 i9 P6 S5 H% t3 E
  870.             unzClose(uf);1 O/ p$ z: R, x) B; q. B
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");& j' Z& `0 a! A8 H/ x$ r
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");* _" z7 Y2 R" m5 G% n- h2 }# a
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");! g: D4 L+ J" c5 B3 \9 ^
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & w9 m% @$ X8 t+ p- j3 n; x
  875.           }
    ; o- P& c3 {- @% |$ Y" e0 \! U
  876.           DeleteFile("Wsa.zip" );2 k7 k7 c" Y* a; _2 N' s  T2 o) B, {
  877.         }
    & h! D. f8 E4 I2 C$ A5 x

  878. 6 u/ {- M! I/ ^" n
  879.         if(CheckLocalVersion())
    1 x9 y+ W0 v2 s; q1 Z
  880.         {
    2 M6 S  l9 g0 T- n7 F
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    6 T& ?$ A: {0 [( W) Y( |6 x
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");% f$ u& n: r5 b" |6 r, k- d$ H- Q
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    8 a* Y& z, l; w' d4 s
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . h# }; J# P2 G; ?: J) U1 P
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ' k; d& a; X; v; e2 D3 R' Q
  886.           dwStartUpSteps=99;
    3 }4 f) f& |; K* ~5 e7 l; ^
  887.         }0 b, x7 @1 {! T5 k; U. j+ ?) a
  888.         else
    , P+ Q9 G, r: r, k' T" p/ x* c0 V
  889.         {
    " _2 E% r; y( P1 V2 {1 ~, x3 k- f
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! t, {& l8 L, n! ?
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");* S; r/ c" `  b* E7 E
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");' b3 d! \0 B4 y3 M

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

5 ?: r& W" e0 r' P5 i$ N% t! _2 N. U( B. \- Z! q7 D) h7 V

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-26 18:45

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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