9 b& f- p; ] L$ a7 D$ c+ X& g' p- / RevApp.cpp : Defines the class behaviors for the application.7 ]! { ~: a4 U4 w3 r8 x
- //% @. {) u% y1 |4 f. n! r) G
X$ o4 T! ?- w# s! ~- #include "stdafx.h"
9 ^4 |: g) o% C- w1 ? - ; Z3 W! t/ F0 v6 ?! ?# w& R
- //#define UNICODE. }& s/ G( J, ~
- //#include <gdiplus.h>$ b' u! e) i! w0 T
- //using namespace Gdiplus;
# l# l1 W0 M. h: x5 X, P2 b
+ w g4 w' I- a6 ?3 ?) Q- #include "RevApp.h" d; i1 A: v' n, ~+ F0 ]% k7 s
- #include "RevAppDlg.h"+ i. c* [1 P& M {2 G$ Z, _$ l! |
- 7 l0 w6 B3 d2 W8 T; z
- #pragma warning(disable:4786)
- v6 ~# p* x# f4 R; Q* j/ y - #include <map>
; f! |" Z6 ?' B3 b" I0 {; y - #include <list>
2 A$ z4 h/ p" o) [. D - #include <direct.h>- V/ ~( }( R9 ~5 C- j
- 3 i- ]; T- `( I* a, ~
- #ifdef _DEBUG
: L# h# |- h* |( w - #define new DEBUG_NEW; r* t* _" ^% `7 h
- #undef THIS_FILE! B8 ?! F4 U6 Y3 G
- static char THIS_FILE[] = __FILE__;
+ l+ b8 j, B+ R. c2 s) u - #endif2 j4 K/ N% ~% @* Z4 K; p6 ~& y: o
- #include "SkinResDef.h"
5 A/ ~0 B0 h8 }- E/ V: x$ ~ - #include "ChangeBG.h"
1 k$ [8 T3 F$ P1 z8 t - #include "AFXINET.H"8 Q \1 T7 w$ i- `7 t
- ; a! q! c+ u, f
- #define TRADITIONAL_CHINESE 0& l3 d, D& v+ d, x
- #define SIMPLIFY_CHINESE 1
4 `7 H! S1 R8 z2 C! Y. [ - #define ENGLISH 2
# m7 L! c$ P6 f7 w7 k G - int m_iLanguage = ENGLISH;2 v4 t# G) ?1 n$ |# s
- /////////////////////////////////////////////////////////////////////////////
3 p3 d. C, O/ j2 d( L; Q2 ^ - // CRevAppApp: j: k! Z7 A/ q) X9 W8 y
$ n7 _* G% x8 c r$ |. |- BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" \4 @: q A Q) R
- //{{AFX_MSG_MAP(CRevAppApp)( ]$ V: ~: F$ T0 ]
- // NOTE - the ClassWizard will add and remove mapping macros here.4 G8 d% j& @ r
- // DO NOT EDIT what you see in these blocks of generated code!
o; o+ {. l* \/ R8 Y+ ]% E - //}}AFX_MSG
" P% H* C( n4 w9 b# R - //ON_COMMAND(ID_HELP, CWinApp::OnHelp)* K" U, j! i5 s7 V
- END_MESSAGE_MAP()
7 y8 T. `* u8 j: y+ x6 U0 |- G
4 T# t- k% E* s- /////////////////////////////////////////////////////////////////////////////
4 s" @ T2 Q( E3 D - // CRevAppApp construction+ s8 A M* x7 c$ D, w
1 Q) f5 g A; b1 m# A! q: D2 P# B- CRevAppApp::CRevAppApp()# y9 u7 k- ~" a* r3 E2 N
- {
$ t* }6 p; E3 k9 m - // TODO: add construction code here,& t& C7 i1 G! y$ J3 y! O
- // Place all significant initialization in InitInstance5 _/ H$ t! d3 s+ T( e
- bDisplayIsBig5=FALSE;; m/ L8 v7 O. H2 j" Z: ~! [
- bRestartUpdater=FALSE;
4 ]* I6 {' y$ W1 { z, n - bFinishUpdated=FALSE;
2 L# D3 m& p# _1 V6 `! o# e! S - if(GetACP()==950) bDisplayIsBig5=TRUE;
% Q4 |/ f$ _4 j& m2 Z: ` - InitChangeDataBig52GBKS();
3 X @4 N3 S d/ z% g. s' ~ - InitChangeDataGBKS2Big5();( L0 M0 T u2 i$ a: W
- //
9 w" Z) J1 W* a/ P, Z! g( x, u! Q g - bClickRunExe = FALSE;- Q. m2 ? H; [. J, N
- //
4 f4 k) R0 J; N6 [2 I# g% @ - }
# h2 p9 j9 _. i5 w; L7 z. x - ! y0 f. \9 N: p+ O! i, H5 W
- CRevAppApp::~CRevAppApp()# ]0 [6 m; O( x* L
- {+ @ w- {) D; }) V* r9 R9 v
- // TODO: add construction code here,* @6 V! T5 f1 S$ u4 }- e
- // Place all significant initialization in InitInstance6 Y( C0 w4 d, P6 g4 @1 H; s4 V9 u
- EndChangeData();
, T: F2 E3 U# v) y5 E - }
& M% ]* W) c+ y& F& U
4 h# i7 b- s0 q4 |/ F [7 I( x- /////////////////////////////////////////////////////////////////////////////
, p x5 w! x/ S1 t/ @+ T: o1 i - // The one and only CRevAppApp object
* U C- m' Q# V. i8 h5 x: ?6 x - 5 h3 r, a6 h" S6 C( M! h
- CRevAppApp theApp;% Y/ k1 R+ ?8 o4 @
& W6 \2 _8 }& `- `# ~( ?- char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
! _+ f& f2 N& z+ q4 H - {; N$ x! \0 |: ?5 V
- int iEOF=0;
. a5 C7 M6 q; t. B% B+ B - char szTempName[MAX_PATH];
5 w9 l# K$ V& | - *szFileName=0;1 m+ b2 b' S# c, W( e# O0 A8 }
- iEOF=fscanf(fp,"%s",szTempName);5 p+ j+ m+ @+ g
- if(strlen(szTempName)>=1&&szTempName[0]=='(')
: d6 L {) k+ T - { ]9 a$ n3 P0 J
- strcpy(szFileName,&szTempName[1]);
0 O6 J5 o! Q4 s+ [4 ?* D - while(!strchr(szTempName,')')&&iEOF!=EOF)
" G. z% R) z3 K( d$ \, Z5 i* p - {
) D* P- T, u( ?5 X& d9 x/ i - iEOF=fscanf(fp,"%s",szTempName);
7 z6 O1 G3 }6 R/ O7 s - strcat(szFileName," ");$ e' J' Q. {" W; I- T0 a7 K. J/ _
- strcat(szFileName,szTempName);
7 A+ p+ ]) r3 m) d - }
1 J1 I A6 G- j0 B% o8 K X/ S8 p' B - if(strlen(szFileName)>=1)3 L1 P' V0 A( t8 _8 c2 C1 d$ S
- {0 C4 ]% ]- \# H2 P4 a, J. |7 q
- szFileName[strlen(szFileName)-1]=0;. I0 c& i" A3 F# x) x
- }
5 P, C! m2 h* T! v @ - }2 ^( ~* @+ r- E/ D- w
- return szFileName;+ B. N! g4 y* P- l+ _2 _
- }
, ^' x1 T- z* x& L8 n6 O( F) q
) v% i$ Z" c- s' a$ ^% z- bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile). K5 Z8 h6 e" O: R
- {$ m5 _/ {, f* i& U3 v& }
- FILE *fp;
) R! ~8 d" J' t' I' a - char *key=NULL;1 ]" `- _1 F- P' `4 A
- char version[MAX_PATH];
* d! ?& S6 d7 ^. Y% W* A( f( G7 K/ t% R% }9 H - LPUPDATEFILE file,olds;
% U+ v& w9 q+ B2 M; T - std::map<CString,LPUPDATEFILE>::iterator p;2 E3 j* W# ^, q
y- |0 a! D" V1 H6 c, a3 k! f0 ?- UpdateList.clear();
; I. P1 Q0 `! i( g - UpdateFile.clear();
( O3 ]4 X. v- f# I6 m6 A - if(GetFileAttributes(filename)==-1) return false;( c. J! V6 z6 M2 X# |
- if(!(fp=fopen(filename,"r"))) return false;
- l5 _8 y- Y) N$ M( Y5 z - fscanf(fp,"%s",version);
% _8 W- ]2 z: @/ c2 V9 c3 H3 D0 r - if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }) H( M3 l9 _/ a2 v
- while(fscanf(fp,"%s",version)!=EOF)# G" w' {+ G" ^& z
- {
a X: D+ F( q: x: W y% H/ T - file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# ^) f; V& @. d A8 X5 P9 @& p' L
- fscanf(fp,"%s",file->path);0 T5 ?3 z z9 P: ?( G
- ReadFileNames(fp,file->file);
) M- C" {& S, i0 X - strcpy(file->full,".");# e8 f% _7 [5 D, z1 @
- strcat(file->full,file->path);
, V5 X4 ^) I S, s. S5 P7 g8 Z3 [ - strcat(file->full,file->file);# {4 u7 h) K" e
- if((p=UpdateFile.find(file->full))==UpdateFile.end())7 W: Q# d0 a8 Q$ e& c6 F8 U! S5 i+ v$ `- _
- {
( \6 H2 r+ @5 h( x& A5 ^3 ? - file->vers=(float)atof(version);3 n! |- q# j6 P
- UpdateList.push_back(file->full);
, a( b: ]2 B: h& \ - UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
$ ~! I' m- M( l2 t - }
2 j* d$ Z q1 T% A" h" y2 ?7 R - else
, y: ^7 }9 L1 `9 ? - {2 t/ v) ^! z i0 V
- olds=(*p).second;
7 k7 \$ @- P: v3 L - if(olds->vers<(float)atof(version))
' b9 C7 G! i5 m0 }9 v - {0 V' V% k; ^; z" S
- olds->vers=(float)atof(version);
+ j* Y$ x: I) G$ l' W - }/ t) R/ N. H& x$ f9 ^+ m
- free(file);
& d# J/ R. S; ]7 n; u7 m `( [4 W - }$ @' T3 h+ U) J+ I! G& `$ c; m( x. t
- }
; Y2 j4 m8 `5 g* ^" g - fclose(fp);2 F ~, Q2 D+ ^+ T) v& `. s
- return true;6 ~) A) w" }; Y
- }9 c# s! X/ L1 v; w
" W* b d( n. }" x9 s0 x- DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
3 I' B$ k4 v1 ?4 [1 f2 [6 [ - {
0 P, b# O7 v9 ]) P, Q. x - TCHAR szFull[MAX_PATH];
, y3 ? R1 X! ]+ T2 K) d' t - TCHAR *token,*inter;3 T6 u6 I- i7 M, C0 v$ h
- *szPath=0;
i+ u2 V q5 ?, ^5 U - strcpy(szFull,szFullPath);! z, r9 N" v0 o, j' V
- token=strtok(szFull,"\\/");
6 L) R8 P# }8 W) T - inter=token;
$ M, U6 i8 b# x* W - while(token=strtok(NULL,"\\/"))+ ]- O/ A% c4 R( @2 l
- {( T- v: V7 l# s
- strcat(szPath,inter);
1 w$ Y( q5 d' _/ u) F6 L H - strcat(szPath,"\");1 G- t6 u0 ]- V" D+ L$ a2 B5 I
- inter=token;* J0 q+ l0 ~* T* \5 u& A
- }5 l W! m* ^' N7 }0 J
- return strlen(szPath);/ s6 @, ]: P. \) m0 g1 M
- }
; O! I3 T% n* l3 ~* C6 O
% R7 [ ~- E: i4 V- void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)5 E' u$ ~5 q H* S4 p j
- {! j2 @- V! d: t- z# G! @
- DWORD attrib=GetFileAttributes(Target);8 e/ r; R, V: R% ?( s& U
- if(attrib!=-1)
4 n" e- A$ E, G/ u - {' a% v, R2 i4 ^* K4 H
- if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))8 S }5 C7 p1 V" F& g3 c
- {
# d' c- \( \( `, j& T - attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
+ y5 ^/ b4 O7 G1 g - SetFileAttributes(Target,attrib);8 r0 w/ n* o: Y4 _: b) d
- }
' q6 i9 \1 a7 l6 Z% Y0 z1 o5 F - }# H3 |; J9 ~$ o# R) N5 p
- CopyFile(Source,Target,Erase);
7 h& o! q! ?& E6 P# B9 {: | - }
+ V: M8 e% x! k2 q - 9 ?6 p4 ?: w+ `
- void CRevAppApp::Fprintf(char *FileName,char *message, ...)
% Z2 J x. u1 y- s# d0 \ - {* T$ \0 s* J! L" d C% {0 q
- FILE *fp;
, y/ N2 L1 ~1 M5 R0 A) E( M3 h - char szBuffer[8192];
% z" m$ W4 O: d" h - va_list argptr;
$ J. d3 ?6 y+ z) S& g* W - 2 v7 J1 `9 b+ V
- va_start(argptr,message);6 f4 i o3 v% @$ \% ?! k) l
- vsprintf(szBuffer,message,argptr);) Q# m0 z4 P0 }
- va_end(argptr);* P8 o1 j: J! F' g) b$ `& Q
- fp=fopen(FileName,"a");
& V1 u( b0 S5 m* i9 V0 b8 R - if(fp); _6 j. p+ V% _. p0 {) O
- {/ P3 i) I' p7 {4 D9 V
- fprintf(fp,szBuffer);
0 w3 N6 [; ^1 P' X* ~ - fclose(fp);6 V, R! o/ E* a1 }& U4 H( v$ D/ q) X
- _flushall();. B) B0 i2 I1 a3 L1 d7 U
- }4 I0 g8 r+ N7 f; L( e; r
- }6 ~ \+ v1 }# a; A: V. k: D
2 b* b% J( }1 J; j; d- BOOL CRevAppApp::Fclearf(char *FileName)
; I% u# E. Y# V - { n3 Q* n6 {8 w2 z
- FILE *fp;
4 u) d. w0 P5 N' X2 ?/ W - DWORD attrib;' h' B" Z' N" `' \
- attrib=GetFileAttributes(FileName);2 o, ~' e+ q# I) i' _* Y
- if(attrib!=-1)
: k7 q4 Z2 a6 b. V. B - {
1 O0 j& b/ x1 I- \/ R - attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);+ L& a7 ]: A, T- p: [
- if(!SetFileAttributes(FileName,attrib))8 P6 R$ t8 z8 x, B& A2 D1 D8 [* s& X
- {
4 V3 ]3 u' W" v' i' _6 Y - return FALSE;
# w0 z {- e+ s# E4 o$ ^ - }
, s$ L4 t' G3 i+ D& x - }- [; O! C+ T0 K9 ?3 v+ d
- fp=fopen(FileName,"wb");
2 {- t1 q+ W! P% N - if(fp)( W' c' _: d( ?3 Z( c8 i- A8 ?
- {
9 Y* U: U% L8 @6 i - fclose(fp);6 ?7 C) E1 _4 s0 C x. [" p
- }
8 N* V4 F/ B( W0 n5 ]7 F8 |3 e - return TRUE;" N$ Y1 x4 V, }* C4 F
- }: i k9 L2 t6 F* a3 s% k$ \1 `
8 j6 i" D% s: n; V8 A- BOOL CRevAppApp::UpdateLocalVersion(void)7 q4 L" h& i! |$ L3 U& E
- {
$ M% e8 b. |2 d; x5 O+ {0 d - char filename[MAX_PATH];
! j; r9 E8 b0 W1 E( } - LPUPDATEFILE file,olds;" }6 m( C# W9 K! L
- std::map<int,CString>::iterator i;
$ s( Q8 w2 s% f1 `3 |+ m - std::map<CString,LPUPDATEFILE>::iterator p;
$ `4 x" R0 {( a0 L - std::list<CString>::iterator l;+ a0 ?5 z. T+ ^' r- P
$ m: S0 k# X+ L8 H2 ^- if(bFirstUpdate)4 m7 P; s$ E2 G1 ~) Z
- {4 G/ y* I! z& k3 O2 a
- dwCurrFile=0;+ g; Y* U! N; F- x2 w
- bFirstUpdate=FALSE;+ h& i! q, L9 D% i
- if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
4 p8 n7 Q' V$ G' I - {7 t q! h r0 L: l; Z7 t R* ~
- dwTotalFiles=UpdateLocal.size();
. F M. ~ _0 }% @ - dwDownLoaded=0;
4 j! j8 a& G8 y - bSilentStep=FALSE;
5 ]: u. d7 F% z$ W - bCompressed=TRUE;+ G8 o5 ^$ w4 J: Z, l2 I) ]) ^" N
- strExtLocal.Empty();
6 Q: C9 S7 T2 {1 r* x0 e' B - strFullName=(*i).second;# c- h# f5 c0 G) y+ s6 f
- dwProgramState=AP_CONNECT;
, I4 {/ p6 a/ S8 U - return TRUE;$ M- m* R0 k" L" j7 m* X
- }4 p# ~9 A4 c' @0 L
- }' V8 F7 f3 a6 i, N2 l c {
- else if(bRestartUpdater==FALSE)5 J+ v& b8 P0 n' ?8 C
- {
4 r$ r, f2 ^$ {- T: Q: x. Z - if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
2 @& Z0 h: f% t! x2 r - {
* n& N2 g5 O5 E6 _; ]5 ^ - file=(*p).second;( c9 K! w: n- C" ]9 c
- if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())- n" W. X$ F# w9 P2 U
- {
( H% m* n5 d& d3 u7 l. a d - olds=(*p).second;/ d& Y( Q4 W& n: y {8 _: P
- olds->vers=file->vers;3 s: R/ @7 U7 O9 R8 E9 J
- }2 |" q' r# R A* h0 W
- else8 d1 U, M' g& T. d& a
- {
' s/ w8 x* x8 E1 N: p! Z$ @1 A9 ]6 g - olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& c! N7 _) y7 Q7 E& j+ `1 o
- memcpy(olds,file,sizeof(UPDATEFILE));
" `$ i7 ^# ~& l& h: i - UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));5 a! y! s+ `2 c4 o+ x' h
- }1 o% q: X: j7 W( X( Z
- if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
4 k+ V7 K, A! p - sprintf(filename,"(%s)",file->file);
9 s* |6 |0 \8 D - Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
! n! w+ d* L" A8 d1 l0 D - if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }' P4 s2 \# @7 ]1 O
- }+ O& H9 J+ {: r
- dwCurrFile++;) l8 i1 H! D, | U
- if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())' `' c( ~. x" C9 n/ l$ t3 ~5 _
- {0 m% u2 F0 J# Q E. U9 C! ?
- bSilentStep=FALSE;, w8 L6 U: _( f2 J
- bCompressed=TRUE;* [7 N3 o$ s/ N2 e
- strExtLocal.Empty();: ^+ R" {: J' H u0 U9 t
- strFullName=(*i).second;
, l7 [# o+ _) d. p - dwProgramState=AP_CONNECT;( }3 i+ K) M3 H" y
- return TRUE;; f4 j7 K/ j& ]" K* M k
- }& ^& g" [$ K5 y+ Z
- if(!bRestartUpdater)
7 ?! Y% m, E% g: } - {
" H8 h! g. _# L - int iCurrSize,iFileSize;& t1 P, w5 ^8 j! M1 {& S
- iCurrSize=0;" Y# |2 R0 i" [! V
- iFileSize=UpdateList2.size();
2 C/ g8 t6 y8 m% q$ u4 ]0 c+ I5 f - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝戈い.....");( x$ d; P9 r) ~0 c }
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新资料列表回存中.....");" H& T8 H, V+ n2 X$ H! c+ T* h0 o
- else dlg->m_ListText.AddString("saving updated files.....");+ Q$ y! I% Q7 @; U. E
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 d* ?/ R8 @3 }0 n& b, o
- Fclearf(".\\update.dat");
5 o* }+ {% A- F, Q* F9 a& L' s - Fprintf(".\\update.dat","Bloodyf\n");: L" M: O, |- H% I4 h& S
- for(l=UpdateList2.begin();l!=UpdateList2.end();l++)0 O8 Q. G+ p% w% R3 ?
- {2 I) e4 ~8 n* l) J4 R! h& C7 J
- if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())- m$ E" H6 }" k7 o" C* n
- {' X y4 c' i* f7 V- L
- file=(*p).second;
) E) Q0 A2 g7 R6 n4 d - sprintf(filename,"(%s)",file->file);
6 {' d. ?1 T5 Z4 g# T - Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);" k Y) D& ]$ |; H5 H7 e8 f
- iCurrSize++;; I/ [ q2 \9 `3 Y$ V$ J
- dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
6 n) u! `+ } [0 S w - }
/ T, n) G1 x6 L7 I0 L3 V - }$ f5 R$ G" p+ @0 D% t
- unlink(".\\update.txt");
) m+ R- F$ u+ t% a' p% s' v - unlink(".\\update.tmp");- T! X7 `. U9 R+ K
- Fclearf(".\\checkversion.dat");
9 P' O: C. o3 [5 C/ T" i) X - Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
2 |; ]2 [/ s4 p% i- ? - if(UpdateLocal.size())
- ]/ ^, I0 c9 b9 k - {4 ] e# J2 [. x0 J6 u
- UpdateLocal.clear();. B7 |1 S+ S+ D9 D9 U, M+ g5 ^
- }- ~. K k/ s( }1 P# h) W( Q# B
- if(UpdateFile3.size())) i; R" z5 I+ B5 K+ X& H7 U
- {
' `+ \+ F3 D5 [- T" e - for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
p. k+ u7 p; }8 A - {
, j* f2 k2 M7 P! s1 n - file=(*p).second;
# o) w) u& Z, n! I+ D - free(file);2 r9 z$ J9 I7 b8 P4 R/ v, W
- }' g) k ^7 l' A c8 u1 ~. j+ O
- UpdateFile3.clear();
* k) X- ~) n- D; { - UpdateList3.clear();( E q( V) Y: V2 w- x3 ^& j
- }
- Q0 }: R5 R( |! ^0 b - if(UpdateFile2.size())$ \1 Y" J; |4 Q
- {- ]: X4 ^9 ~/ U7 M5 O
- for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 P) a0 M+ @- C' w
- {1 S) p& f! `1 P! i# Y: U
- file=(*p).second;
3 I0 o; D) i5 @7 G \9 Z+ ]4 E* O# x* @ - free(file);1 {, `" A+ d4 R) ~" e8 e
- }
$ [% V3 g, Q% I9 I - UpdateFile2.clear();0 y5 ^( H- Y e. o
- UpdateList2.clear();
" G4 ~8 v: N' U* k2 A: K9 T4 R - }
' L% f1 s6 G2 W: {; M' |/ F - if(UpdateFile1.size()); e4 `6 k8 H& M( [2 ?. ^5 ]' j$ i
- {
" n5 u; L! i5 q" x - for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 d- I# [$ w9 E, ~
- {* t+ [, K M B) @
- file=(*p).second;
* j# t- t( M+ u, M, f/ }, E - free(file);, d' _( ?3 ]/ e7 T# A1 T
- }
- p) s; l& F2 K3 g: e - UpdateFile1.clear();
8 _3 T$ d! Y4 O; u; s7 I; M - UpdateList1.clear();5 Z6 l B: |" U4 h- G& `' s
- }5 {, r4 r6 ]4 k
- dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));6 r5 v, N0 q) Z4 O
- }
]2 Z2 ]3 i' x- L9 r7 \, ~$ p' Y - }
- T, U6 U6 e) i0 P. u1 h - return FALSE;$ c1 c8 _- R. `- y
- }% F: p* D# k: Y
- ) j; Q# y9 ^7 z
- void CRevAppApp::ClearAll(void)9 v) j- d2 P. A, W4 r; x1 v* v6 u
- {4 U$ m% @/ _/ D9 {) `
- LPUPDATEFILE file;% X/ ]* u7 z5 H0 d9 u
- std::map<CString,LPUPDATEFILE>::iterator p;' K$ f1 x5 `2 { Z* L w
' X& m$ X4 r9 c( k& K' q- if(UpdateLocal.size())+ Q' H" {4 g1 b
- {
% ~" x& m7 x2 D) s1 l - UpdateLocal.clear();
2 u& }% P4 W$ l% ~" H) ] - }
; M: M' r+ E& e! U - if(UpdateFile3.size())$ _' ^; m: w3 b, B& U( A0 V& p9 A% ~
- {$ L) _( L' b0 ~" q, y$ t' c v4 c
- for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), S5 A" _8 S- W) m/ ]7 _. u
- {$ e- B+ D+ ^& O' @/ B. K
- file=(*p).second;
& u& e: Q R- ?2 `0 o9 ^ - free(file);
9 L" N" B3 U" q s0 O( h) D/ O - }3 y3 [& G0 W; J( X% j6 g$ Z/ v
- UpdateFile3.clear();0 |1 r# A( m3 P% ]. h/ |
- UpdateList3.clear();
. Q8 W! m; ?) D1 r8 F - }
% ~9 R# ?9 O( y+ e - if(UpdateFile2.size())& P/ S( M- \/ F2 E" g* N; B; l
- {
7 f" y. c7 |2 z - for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( g( y% Q2 j+ Q3 d! c& B) Q3 E
- {7 ^& k9 }/ h2 _" E6 D
- file=(*p).second;
2 W* g- I% O' V - free(file);) u# s0 K* [3 m
- }
5 {' {- v( y8 e- q# r2 e: J/ [# P - UpdateFile2.clear();0 ~: o( z0 k/ J2 P. g
- UpdateList2.clear();
& i) {* W% `% g) J8 \$ H. C. x3 } - }
4 e9 d; k1 f" K7 t - if(UpdateFile1.size())
& q; G) A8 M j o) g - {( o* c7 m7 H; r7 b$ P
- for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ m1 y8 h5 ` R6 p8 n
- {
7 z4 H) D0 R0 y$ }9 c - file=(*p).second;
7 V5 t% p' {! W - free(file); y4 E) L& L9 |, ^7 B1 z! r( F: H; C
- }
5 y! e- S* j. {2 a - UpdateFile1.clear();
& c1 I6 {5 P1 V2 h6 j# `. C - UpdateList1.clear();
) M! x, d) G1 b; U - }
- O7 W3 K. Y5 C7 C' H1 l - } 0 g5 B' Z% i6 y$ M. _( K
- - N3 J% R- ~0 Z$ ~: ~* }
- BOOL CRevAppApp::CheckLocalVersion(void)' f7 w) |( _4 w2 r" r' F$ U
- {* e- z3 H6 I0 i: _/ c0 v9 }
- int c;
( ^# s" |& B0 J& B3 ` - LPUPDATEFILE file1,file2;
" V: `! w4 Y& ^# L/ h* g - std::map<CString,LPUPDATEFILE>::iterator i,p;
4 X7 O' ` O! L& I7 g; M5 } {3 z - std::list<CString>::iterator l;5 T7 W0 |' K( G
- " f9 P; T: f! M7 o& ^
- UpdateLocal.clear();
1 P% r( J) D: A. Z7 T' j0 p- \4 y P c - LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
# @- e7 E+ z4 H. x! I: _; E- k - LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
& }: a" j: \4 l - LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);: Q5 z3 f, S6 ^
- // if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
- ?5 ~( I- H3 v2 m9 X - if(UpdateFile3.size())3 H6 E |$ b+ Q0 }0 d F7 q
- {1 C. Z5 w9 [( G
- for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
8 \7 l" v" |3 N$ J1 F& D - {; F* w0 ?% V! z- A) z- z& v' R6 w
- file2=(LPUPDATEFILE)(*i).second;: V. }$ v1 \, Y+ T. C
- if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( ]1 B' n$ R# r" H3 Z; J, z3 e
- {
! O9 N% c8 c* p- S5 f. `! n - file1=(LPUPDATEFILE)(*p).second;0 u; M# h5 r! S1 H0 T# k! o# h
- file1->vers=file2->vers;
5 @3 ?- b4 O J* k* h- i/ D - }" i% }5 Z1 L% {7 J7 e; r
- else
$ I+ v) p. }8 Z" r8 y) ^& v - {1 [8 z f. y2 t m U; a
- file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& @6 i# x/ J3 B4 K3 ^
- memcpy(file1,file2,sizeof(UPDATEFILE));
1 F' ~0 _5 C0 Y7 @% k( C - UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));; J2 M1 p# O7 W5 ]; B5 G$ g/ V2 G
- } U# U% I7 [$ I0 r
- }
+ e2 u1 W9 H" v# M( n: k" G - }
?, n5 }5 o4 q' m, r1 n" A - for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)$ l- E& k6 Q" t3 h4 n% z: s
- {
/ X4 }( b, m/ N9 n& }6 w9 a - if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! k' L) r5 p- A, S
- {+ V- k" G: O$ {
- file2=(LPUPDATEFILE)(*i).second;8 V9 Q: _7 o$ g9 y6 N! Z/ q
- if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 V$ @7 h3 P* p" n, C' I# T% p
- {
4 F. r! }! |; p; f6 Z" a0 k% b+ L - file1=(LPUPDATEFILE)(*p).second;
& l/ i) M. f; c8 a; w, @, a0 {* W) K - if(file1->vers!=file2->vers)0 u S1 M" d" P0 @
- {! f1 M. w" N( P& q* R6 d! Y C
- UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
7 j& W) j6 K7 t# r; m2 z - c++;5 B: c/ e# O& R2 U( I
- }* p6 e d: [. V6 ]! T9 u& e$ Z
- }
! t8 z. S4 h; g+ N9 ` W - else; M% h1 U1 |1 b6 ]4 r
- {5 L/ g4 F+ T! z1 I1 _
- UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
" C) l: z% j2 x' T. Z - c++;
3 O: z5 h9 k& E0 \; n6 v - }8 O7 R. g( {0 z2 O! w3 K: g, D# G
- }6 G; u, Q: _% V( P1 b* d
- }
& j* O l2 q/ u. q) b - unlink(".\\DownLoad\\update.txt"); r# p" j7 {/ P$ ?+ V! Q* g5 I
- if(UpdateLocal.size()) return TRUE;7 l1 j( E3 f& @ o. B# ?
- else return FALSE;' _- a9 N6 O a
- }; ]4 N" ]* E" r% c
" V% Z2 m3 j/ h' ^- #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
: ?3 w6 j; p' _1 N2 l - #define DEFAULT_REG_URL "www.wgs.com.cn"& {) G+ D* i8 t5 \* T& g
- ; R" I3 Z# d3 Y4 k1 l. u
' j' S) w, _! P- G% ?! d
+ z% h3 h' f& L5 h/ s* T- BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 [" E/ T u A- q ?
- {/ k3 ] A/ j: j y
- DWORD dwType=AFX_INET_SERVICE_HTTP;: R* W' \( K& w$ w4 }! d: _0 S
- if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 U# c8 u$ |$ v* ?+ Y
- {
. T8 [, A# B H5 O$ ? - char szLanguage[50];
d( |# {6 a: o' j0 D# ^; r - GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
4 H% N6 O8 V% \+ Y7 k6 [4 i - if(!strnicmp("BIG",szLanguage,3)) m_iLanguage=TRADITIONAL_CHINESE;
# K2 {3 C1 Q$ {4 i$ s - else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
0 s9 N9 {$ o( ]; a: y9 V" z3 a - else m_iLanguage=ENGLISH;
) |" n8 p9 b: t7 N - char szRegister[100];% U# A7 u" ], r1 t& e
- GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
/ @6 e9 n( H& n. [9 @0 x - strRegsName=szRegister;
( C* z. Q$ j5 I# T5 {3 _ - char szPatchURL[100];, c9 x, y( F- e( W7 E, q
- GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
% `7 a2 j2 @ q! V/ } - AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
5 g+ f8 H8 X) C8 P- y - }
+ @, L' C+ G6 Y - else
: J. F% K8 |# m; V# | - {7 a3 M0 c2 e) Z v2 B8 h9 H
- AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
( `' u5 s' n5 n5 Z - strRegsName=DEFAULT_REG_URL;
, P1 [! Y1 d! \( p - }. A z8 z0 v0 r9 `3 @9 x4 j
- if(GetFileAttributes("hosts.ini")!=-1)
L8 b _/ I% m5 Y7 B. I - {8 K/ r: E5 V* j' M. {
- char szIP[50];( _3 A( r) U4 V: ]
- char szDIR[300];
8 C0 N8 R* p3 J3 b0 N" t% ~$ X( w - if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
0 `: y/ y; P( G9 [0 V - {/ @4 ?% G" G% _1 T4 ]
- wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
$ v: T3 }3 e Q; f: Y - GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
. F8 N6 y$ R& H6 c$ p6 q$ m( z9 L - strHostName=szIP;* |1 W2 a6 P/ y" j
- strHostPath.Format("/%s",szDIR);
I# D: K/ A( v, D v+ S - }# o& v) _1 `/ y6 ~0 y% J
- else
; g& _4 z f% E, K - {. N: ]9 G9 k" j( }, i* w( V! g
- if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# N6 r. }2 o( d1 P, V/ M! D0 I
- {
, a7 R: x+ L; c: J6 o - char szLanguage[50];2 \- \& K- [9 A/ X
- GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
& x/ b5 ~& _7 r' _, v; f - if(!strnicmp("BIG",szLanguage,3)) m_iLanguage=TRADITIONAL_CHINESE;
" C6 Q% Z3 I; r% B: t) E0 S9 X - else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. V2 s3 I1 d" y) y5 c n" I
- else m_iLanguage=ENGLISH;3 t7 C* J4 Q3 j7 e; n. t3 L" p
- char szRegister[100];& f' u) s) T A2 E
- GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
% m# S/ q0 M- u* Q; R2 ~ - strRegsName=szRegister;3 }" r$ ^" G9 q5 M
- char szPatchURL[100];
5 w& D) X, d/ x1 e/ B( f) f2 f+ D3 m# F - GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
" w; U0 @1 S% `7 g) W7 d* T - AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 w x/ U8 e# a9 ?0 v, a3 G
- }6 H* H! e; T8 Z% a; h% g
- else
/ B& w3 P; K. c4 | - {& [0 C3 |* J3 y3 o8 I. x0 ]
- AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( w2 h7 B- O7 X. e8 i# Q: Q
- strRegsName=DEFAULT_REG_URL;
N9 t7 R" f/ c, K0 j - }2 n( V8 s" @9 Y0 I& T
- }
# @7 ?9 x& K% E, F1 n( V - }
U) K! ]! y; Z$ _' y9 Z8 Q - return true;. x2 D. v& S' T7 n _3 ^# o
- }! S( W6 K0 d, ]. N
_8 F* R3 E% w7 R4 j) b- #include ".\ZLib\unzip.h"
& N' P: ^$ l: D3 S1 I - extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
1 n1 X! s2 d2 G6 e# s7 j' ~# x - /////////////////////////////////////////////////////////////////////////////! B( u, r2 Y3 T: ~1 a
- // CRevAppApp initialization- J) P' v( s: G5 a" t/ B1 j( P0 M
- - M6 P- s% C, c) S
- BOOL CRevAppApp::InitInstance()' O" M7 ~& g9 I+ R& O4 N) p
- {' d0 m2 b/ K0 `. r
- TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
- {, T# N3 C. U9 S
* n) \+ u7 `" \" Z- GetModuleFileName(NULL,szPathSource,MAX_PATH);
5 H4 y5 E/ ~* A6 s9 @ - if(GetCurrentDirectory(MAX_PATH,szPath))8 O& d x" l: G
- {2 O# M5 R B; J' p; U9 {- ]
- if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
4 N3 }+ A f# W |! V - GetPathFromFullPath(szPathTarget,szPathSource);! n+ |; o4 C; z" z
- if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
{& T' E4 q: g3 {0 f R6 o2 ] - {/ k' b/ e" Z# O: E+ R0 }
- strcpy(szPath,szPathTarget);
2 S0 M7 B$ b* P; V$ ]: R. { - SetCurrentDirectory(szPath);0 E% |- r, W( b8 F3 t
- }) P* {. M9 V* @* {1 B4 H, h
- }0 q2 C2 n4 |( g/ Z
- #ifdef _DEBUG
L" ~. W* ?& c! q4 |" g+ W - if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& t9 y! x& k& U9 V1 B1 j5 W
- #else$ h W' [, ^! b; o6 Z7 _& c& {7 ?
- if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
8 b* J. h) K* x( k5 D( v - #endif
# u0 W0 w1 K5 U; J/ ^5 M2 A - {5 S5 y# I& K9 x" H
- char tempFileName[MAX_PATH];9 O$ J4 k' a* V) k$ t
- strcpy(tempFileName,szPathSource);/ Y4 F9 _2 J6 Q0 L: r5 ]. @
- tempFileName[strlen(szPathSource)-12]=0;4 h5 Z8 M1 V" q# o
- strcat(tempFileName,"\\$CSUpdate.exe");. p) |$ Z/ [, h
- ForceCopyFile(szPathSource,tempFileName,FALSE);- L+ ~6 n: W. M, }8 k" o) l3 h' y
- ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);' y$ a! _8 W: G/ B$ j0 V
- return TRUE;
0 ]7 a7 Y4 L' l' B g - }% c: L$ K# d; V% _, k+ r) Q2 Q0 s
- // Nuke 0118: Delete run.exe9 H8 ~+ ~- D* ~' I5 ^# p1 m3 f
- if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );4 T) M* f% Z( e! u( _9 D. X
- if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");2 z: {/ i7 W5 Q- T% U, q g
- if(!ReadCfgFile("Config.ini"))
6 l1 J2 l; s) \) E/ V1 D - {
Y3 R& j) Z1 A6 e1 d2 |9 d - MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);/ q6 J/ o$ Q# A% J
- return TRUE;! p& x0 [- s3 ^2 f) C+ B
- }
3 A) ]2 C7 y8 r1 Z; B - HANDLE mutex;/ w: B& D8 O6 \& r
- if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% B% U- r* M& h: B3 M$ c
- {7 h% k( ~% M# D3 H* }
- if(GetLastError()==ERROR_ALREADY_EXISTS)2 Q. G# n: h* t
- {* Q. | c! P! Q# @- a& ~
- CloseHandle(mutex);
* u/ X/ Y y! x# i - MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);/ r5 j4 k3 T; ^! a# A
- return TRUE;
/ q- S k# K% g - }
7 j+ B: W5 [/ Q+ ~- M( f' S2 \ - }
+ K: p7 m3 ]: M1 r. ^ - CloseHandle(mutex);- [3 h E9 ?' b* K
- & E$ @7 S* x. z1 Y" X/ J( W$ V
- if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
) @% A4 ]( E9 X, S - $ ?' E- X5 r( p2 I# D- x) o
- AfxEnableControlContainer();& ^6 s" ~4 b, o0 }
- ) C# d4 C P0 K# _4 q# ]
- bCanUpdate=FALSE;
6 C5 P0 S" k2 y - dwStartUpSteps=1;( V* f& ^" D6 |: d9 k
- dwProgramState=AP_NOTHING;- Y0 [4 @1 O0 S$ k( T* n* p
- + q! S) |% ?3 }7 F* R$ r
- InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);: K5 G; [8 j! z8 D P7 @( `
& D0 }3 a" e( f7 }- // Standard initialization
9 J4 P6 C* ~# t9 D# d - // If you are not using these features and wish to reduce the size
O# B- I( w* a0 h; O+ b - // of your final executable, you should remove from the following
8 \& R( z0 G' c2 M - // the specific initialization routines you do not need.
A/ f3 h) ]/ S: O/ q; I( \+ q
8 z O" ]; z( e% b- #ifdef _AFXDLL1 u+ {7 {/ j ?: v1 ]4 p
- Enable3dControls(); // Call this when using MFC in a shared DLL6 U0 u) `: B- `' N9 S
- #else# ^4 r; ?* J0 g2 c, u6 O6 V$ R( d
- Enable3dControlsStatic(); // Call this when linking to MFC statically
* @! y& R( z( v7 K" X. u - #endif/ ~8 ?% z, j U$ F
- / p! J( b$ Z \ X, o5 {) J8 z
- dlg=new CRevAppDlg;
( g. }# w! x3 @% s - dlg->Create(IDD_REVAPP_DIALOG);
' [) r/ i1 T# I6 W& ~: U9 A9 S9 A; T - dlg->ShowWindow(SW_SHOWNORMAL);8 _6 b M) y4 A$ x/ {3 w6 b
- m_pMainWnd=dlg;2 x' E; q, t# s2 C% c
- " T' k, p- s& O
- SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 }2 F- J5 z5 W6 N* A
- " m- D# ]! l/ A; @. S+ ?/ W) x6 }
- // GdiplusStartupInput gdiplusStartupInput;' d; F) G' s3 K9 C/ m" K& W
- // ULONG_PTR gdiplusToken;5 O& D% {+ h/ v' K5 O' G
- // GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);; |) q- P. N9 h, z: E7 N9 a1 l
- 0 O3 c, [& Q- H
- // CRevAppDlg dlg;; h: `) W, @% C. s, F1 F
- // int nResponse = dlg.DoModal();8 T" X7 b! u Z6 B w" t8 z% z! |! {: H
- // if (nResponse == IDOK)
7 m; W) G$ J X# `+ s9 }) P2 r - // {$ a- a: y) g: e) s: V3 v! w
- // // TODO: Place code here to handle when the dialog is
2 `% w5 D2 L, f9 t2 x, v" c( }$ A - // // dismissed with OK3 v; n# i+ c: |2 m9 {4 l; U: x
- // }, Y6 a& @& p6 L3 Z* Q3 N
- // else if (nResponse == IDCANCEL)1 ]( M' L5 V$ ?2 F6 v& x
- // {& ~' n8 c) u- f1 c4 L
- // // TODO: Place code here to handle when the dialog is) W Z. T' _- P7 y3 p
- // // dismissed with Cancel; a# n) Z# }) @$ L7 C& P1 I) R
- // }5 n2 Z+ K: v. h/ X, E1 i
- % Z" h4 _0 u5 l1 E
- // Since the dialog has been closed, return FALSE so that we exit the
. Y* k; N6 h* `) ?& A7 [0 l - // application, rather than start the application's message pump.
% r- U+ n. V) j+ d - return TRUE;4 d, _& l1 ~( W. a0 u
- }
0 p+ e0 T% v4 W n& z
3 c4 A& o/ `! H/ Z0 y( k( ~- char *CRevAppApp::strtok3(char *pSource,char *token)
" E0 q5 n' d% F- m" O$ j0 Z$ k - {
2 o7 X; x4 L0 @7 x& l - int i;
* r. _; c, Q( e# G- U - char *szRet;
% P5 O9 e9 ~3 L
5 H4 u8 E, M8 O$ j- if(pSource) { itoken=0; sztoken=pSource; }2 R* n0 w7 Y# W5 Q: h
- if(sztoken)3 q8 S/ e# e( | h! v
- {
( y1 G+ W- O& T - szRet=&sztoken[itoken];
6 i7 n1 a0 I( D; X - while(sztoken[itoken])) g' S& {8 U9 }
- {
9 p( P- z- v& W; g" C R0 f - for(i=0;i<(int)strlen(token);i++)
' A& s- y1 ]5 T - {
, k/ ^1 ^; S2 \, }( M3 a - if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
7 e0 B0 r% b% {9 I( A# S - {! @4 V2 M% |; B9 j
- sztoken[itoken++]=0;
* A7 p$ D1 C, I( G7 a1 e - sztoken[itoken++]=0;
2 G% m+ X: i& b - return szRet;
) y# _; _8 ~1 ^ ^7 P! K - }& Z6 J! I$ H/ D) Y
- }& A: k! j W- |: b
- itoken++;' N. h& H @) G+ M u* y
- }
# ~$ t. ~: H9 s! M& m - }0 q, N( N. b W) B. q a& z
- return NULL;
8 [/ ]9 s' Y+ v. h; g - }
, Q( v/ C8 t7 y! v" D4 F
* J3 M% M7 S; _8 h+ s- void ProcessProc(long Total,long Current)1 P0 Y# Y; r5 @$ o K7 \
- {: u/ } {6 j% O* Q R
- MSG msg; U7 |# Y8 L/ }% ]# d. c3 K
- if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);7 d* W5 [9 s7 _! n' X
- theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));7 X6 e* [. B$ o7 N# j) e
- if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))6 E. X) s. q! T: V A
- {, G8 N& c" j% z$ e' [3 z- S3 |
- if(!GetMessage(&msg,NULL,0,0))4 p' o2 L9 p2 F; I
- {& {/ R# S8 a* y6 ]) u
- return;0 w6 ^3 k' w1 f e: c+ t. C/ @- U. n
- }
* A0 m$ c$ @3 j - TranslateMessage(&msg);
/ h3 B- k7 _2 l7 L+ _9 U - DispatchMessage(&msg);
0 Y" X! P" J: u - } + X9 O; S: V9 L1 D) G
- }1 ]; F ?+ ~0 [% z
- " [3 U0 v0 Z9 n( H0 r* P
- BOOL bFirstChar=TRUE;
4 x7 m# R3 K) E k" n5 \4 g - 7 }5 z5 G; ] J
- BOOL CRevAppApp::OnIdle(LONG lCount)
5 h! k- v, }( a6 }, L, U - {
/ I6 L/ {6 g W5 a- y5 H: E0 Z - // TODO: Add your specialized code here and/or call the base class2 g( ~3 P: O) u7 z$ I
- switch(dwProgramState)+ s' B) ?3 d' K, [" h$ ^% u3 }
- {7 X* w, M& D! O9 g/ l$ _' s' v
- case AP_NOTHING:. V2 T* H: W7 e3 |: V' f
- switch(dwStartUpSteps)
% C, A! P) c2 x2 ?& i - {8 s, m% Q$ R# @
- case 1:+ e2 ~! J# \/ H6 k" [) q" V
- {
# X5 b' g( k( n - int i;
7 }8 t" m% L4 a! v9 Y o- ?+ W - CDC *pCDC=dlg->GetDC();
0 n! r1 F! T' k1 e% s - HDC hdcwnd=pCDC->m_hDC;
% h; o/ [ ^6 w7 d' E3 C2 z4 f - // Graphics graphics(hdcwnd);
- d. Z0 T' [. c1 t8 w1 |1 d - // Bitmap bitmap(L".\\Elysium\\Back1.bmp");
) i% Z/ X1 V. y3 q0 u3 p) A - // INT iWidth=bitmap.GetWidth();4 y! K5 G, _: U' h ^3 C2 Q
- // INT iHeight=bitmap.GetHeight();
; t4 M8 F2 C0 ^; A - // Color color,colorTemp;9 m: H+ L# W7 b* z$ \/ G
- // for(INT iRow=0;iRow<iHeight;iRow++)# V( X6 [/ |0 r9 Y2 _7 M% p
- // {/ @- _3 H' w- k G+ x0 B" c F H
- // for(INT iColumn=0;iColumn<iWidth;iColumn++)$ ~: B" J. Z/ V# j4 g; [. p; k, O U
- // {% {! s' o2 ~1 g1 p2 v& ^; e
- // bitmap.GetPixel(iColumn,iRow,&color);1 b4 s7 v& q" \% }/ Z
- // colorTemp.SetValue(color.MakeARGB(; I& B" [- f6 [3 R
- // (BYTE)(255*iColumn/iWidth),
. b3 _1 c/ a* }# q) f - // color.GetRed(),2 `8 S0 y& ?6 ?6 A2 f
- // color.GetGreen(),
1 ~4 }2 v2 f& e( w0 S - // color.GetBlue()));
' [0 |8 B( I& K - // bitmap.SetPixel(iColumn,iRow,colorTemp);1 }7 Q) x) ~+ V
- // }. k" A8 \" R1 T) `9 j3 s v) t
- // }
- v/ x7 ^7 u8 l, D - // graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
1 a1 E% @- y% N) w0 m G1 [0 c O - HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
4 N, \+ w9 o0 h6 F - HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
9 U5 G% @: }" w* p - HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 r! v' O9 v- \8 p. h' r* s0 f% x7 m
- for(i=0;i<240;i+=8)
! Q- p5 F" S- \3 O- ^2 k - {5 o' m1 F$ H8 f9 x! ?5 P/ q) v
- BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 Y5 G, F$ ^ `/ u
- DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
' u1 R& i2 c# e% A/ H3 @1 V5 v3 G1 C - BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
+ q: L% Z( e# r9 R - Sleep(33);
1 m5 d2 x& I" s2 z - }
) E2 J8 a% q# ?* t1 f; P - Sleep(1000);2 f( X/ `6 M; U' ^' N1 B
- for(i=240;i>0;i-=8)2 H$ Q8 _+ [% M4 h& {
- {
! T; b+ K' ?, o" h2 I - BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
( d8 L: |, P( l0 i - DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& f& r6 d6 f7 s8 e! A
- BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 I: O3 j# L: n9 g9 u' y! j
- Sleep(33);
- f% r8 Y4 {" H. X | - }
# v8 {( X) j% R; E' b, U - SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);2 \2 F) k1 ?9 O; E; ?0 x" d" A
- dlg->ReleaseDC(pCDC);% u: N# z1 m2 v9 y
- DeleteDC(hdctar);$ |0 n" P3 P3 C0 c7 ~
- DeleteDC(hdcsrc);5 M9 K" ]3 V" E. I8 x. s
- DeleteDC(hdcorg);& y7 c+ L; f1 P
- }
~( }! d! V, @5 |" }! O6 D - // MessageBox(NULL,"Step 1","Elysium",MB_OK);
3 `- r/ k3 c7 d+ ]* S0 O0 m' d - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝狝竟腹 :");
8 w! y5 a% s1 p& `2 I - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新伺服器代号 :"); j. n# V( X6 ^1 M7 M
- else dlg->m_ListText.AddString("Updating the Server ID:");
1 j& @4 v7 {; j) _) k* y8 l" L - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 N* @' |" P, R" r9 ~
- if(!Dn.Connected())
9 R: ^5 \4 k: F g" {( Y# Y5 v) I- e - {
: ] A( G' B# D) K8 F( H - dwTotalFiles=1;
. e' Y+ s# ]. N& D - dwDownLoaded=0;
; d# ?7 V, H- ^& P+ K3 D - bSilentStep=TRUE;( Y$ V$ ?- E: M8 x* [+ z, t5 o0 S3 B
- bCompressed=FALSE;
- F6 C A& Y3 `1 n - strExtLocal.Empty();- F0 \/ y3 b, h6 ]/ X
- strFullName="readme.txt";2 U4 ]9 a5 P8 q6 V
- dwProgramState=AP_CONNECT;2 r0 i1 D0 w4 n! @! Q" |
- }
. H* v9 ^ {5 y- j* w, q+ N - m_pMainWnd->GetActiveWindow()->Invalidate();0 \4 Y) S; Y @' v1 l, X8 p1 g- s
- dwStartUpSteps=2;6 ~1 z+ S$ N+ R
- break;
; o) H% ~# m! }. h - case 2:
5 a9 A& @- u' Q2 {8 j6 H; f - {4 i) b5 v7 M4 Q5 e; T
- int iEOF;
9 T* \) P/ X7 u! l f+ \ ~5 y - FILE *fp;, e: P5 W5 s% d$ e% h
- char szString[512];- q$ T' ^6 M: v, ^/ Y+ ^6 z
- fp=fopen(".\\DownLoad\\readme.txt","r");* A, e# R4 M, W: ^3 ?' m1 W' I
- if(fp)
; P: j# F3 h* ]! Z1 r: M - {9 @% F4 K/ M5 p$ W
- do
5 z: h: J6 e) y - {/ k# u0 w, c+ C( j1 i% w* C
- iEOF=fscanf(fp,"%s",szString);& I# c6 R6 Q8 g: H0 [
- if(strlen(szString))
% H( x- u0 a9 [) P - {. W9 K* m+ c) z' t9 l$ s9 }
- if(bFirstChar)
& g# f& l# ~3 K' Q" L - {
" \: D0 I; x9 B( n5 E - bFirstChar=FALSE;( N N8 o6 `; A6 \
- bConnectIsBig5=FALSE;
- ~! Q$ ?# N( [3 J+ k3 ^ - if(*szString=='T') bConnectIsBig5=TRUE;0 ]9 |8 M' \ G8 x
- }. N3 Y+ H, g1 u1 W6 w
- if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
( m* h4 V' p$ S5 _* @8 ^5 t - if(!bDisplayIsBig5 && bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 K! J& G* s% b: C
- dlg->m_ListText.AddString(szString);7 C( ^/ ?/ R8 E3 |5 c# _4 H9 y
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
. G6 X! n( D2 _& ^3 S - *szString=0;
; } Y6 z- `/ Z: O, |+ \1 ]: }/ h - }
# B6 u! z% D# r9 G0 S - } while(iEOF!=EOF);
v) o) e" J% c2 s- P - fclose(fp);; A' ]9 T( M- q; _3 D; k1 @
- unlink(".\\DownLoad\\readme.txt");2 h+ N% e- J) j1 H- ?* y2 h5 `
- dwStartUpSteps=3;
8 `4 { h; x( {$ R! c# C - }+ v6 R& W8 L2 }% [+ P# P
- }
+ [$ k8 @; e! w5 I# p& F - break;$ i$ U/ [4 b& W' p5 h, f. ^, |
- case 3:
. v; R5 \: R- r% H5 ^+ ` - if(!Dn.Connected())9 z( W' Q' v2 d# X W+ R$ H
- {
# H# [( P6 A5 S9 [: W a5 y! H - // MessageBox(NULL,"Step 2","Elysium",MB_OK);& t: E/ m3 l6 [7 w% r
- dwTotalFiles=1;. I5 z( o8 ]0 I4 w# V6 l; w' q
- dwDownLoaded=0;5 u6 Z: {1 v( F! a4 F F
- bSilentStep=TRUE;
1 @( j8 s5 F; L* i/ O8 T3 d - bCompressed=FALSE;
& p& ]1 e3 j+ g) H - strExtLocal.Empty();
7 C3 J8 Y O0 a( G) |! `" M - strFullName="checkversion.txt";
+ D }6 e2 S1 j1 q9 ~( y - dwProgramState=AP_CONNECT;) T, m4 W; |8 I$ z
- }
( G- y/ Q- C( \7 C( B- U' A - dwStartUpSteps=4;
/ o; `# r* W' o- y: H' q$ u3 r - break;
* Q4 a, x+ x O: O - case 4:! E( A; j t+ f* S/ H' S. g R; x
- {: j" A2 k4 _/ x0 E/ \# h& f+ \" |. }
- FILE *fp;$ P) \/ F; R/ ]5 a% z" z, i
- char szString1[128];
2 w3 V) b- ?: z* ^0 R$ { - char szString2[128];
$ s, C" @7 N6 `% ?, j' ? - fp=fopen(".\\DownLoad\\checkversion.txt","r");
" ^2 D6 t3 ]! T$ Y \' w3 E! u - if(fp)
; [# v* U4 x/ y - {; c2 J9 _5 S) l+ J& q9 J0 u
- fscanf(fp,"%s",szString1);8 Q" Y; ?6 H8 q1 m# v: }
- fclose(fp);; S7 H3 T1 Q9 V* q
- fCheckVersion=atof(szString1);
2 x8 k" `& v3 \ - fp=fopen(".\\checkversion.dat","r"); u( y) p! [' J+ n3 G
- if(fp)
$ f$ n, j* j* h1 M+ h - {1 B' _; k. J* z" g
- fscanf(fp,"%s",szString2);
: h7 k) T2 |9 A% Z( e' t: c- C - fclose(fp);
" j2 I# E& y$ \- k) _) u5 D) w$ y U% R - if(atof(szString1)!=atof(szString2))% }( x7 i- y, Y# N! j4 r- } }
- {
% F1 ?5 Y0 z W$ B; [7 ?' g - if(!Dn.Connected())
" m# i; d! ?4 W9 O0 |8 i6 P - {
7 \4 d+ O8 w4 D - bFirstUpdate=TRUE;
7 l* M3 C/ f$ ^- ~: j3 y1 P - dwTotalFiles=1;% j n. J+ u/ P$ `" X) ~1 ]7 ?
- dwDownLoaded=0;% d/ N9 F8 W) k: e m% s
- bSilentStep=FALSE;
' L/ j* j6 L0 o7 X8 \1 N1 H - bCompressed=TRUE;1 Y0 w' \5 e6 s6 y2 n
- strExtLocal=".\\DownLoad\";4 [4 D0 I) e# _
- strFullName="update.txt";
5 H% R4 Z2 C9 w* h - dwProgramState=AP_CONNECT;
4 Q; r0 K8 m. _# d# | - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝更い, 叫祔.....");
/ p: T4 z, w3 C7 D& E) v - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新列表下载中, 请稍待....."); H% l A8 k' t g
- else dlg->m_ListText.AddString("downloading update list.....");3 H: |! @2 W1 b% X2 P
- / \; L' g) c! V
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
' h+ L% k4 D1 ^! X/ J# J2 T6 r - unlink(".\\DownLoad\\checkversion.txt");& z) ]8 \ W% e; q$ \) T
- if( GetFileAttributes("Wsa.zip" )!=-1)
/ _' F* `) D- k; { - {" Y5 a7 B: T" `+ F0 f- @' k
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 E9 |: n" O5 K; j u$ v
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
( B9 H; I6 I4 x/ g8 h, { - else dlg->m_ListText.AddString("Unzip Files, Maybe cost 10 minutes");1 D- x' \' z, M0 X3 {* O/ q4 t/ f
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
2 i- O9 k# w1 ^
5 g% t m, f4 K1 E0 l# _+ C; J, g- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("叫瑻み单..........");1 d+ e- q, P) V7 R, Q w R
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("请耐心等待..........");, T0 _5 o, S( s7 I+ M, }) L
- else dlg->m_ListText.AddString("Waiting..........");" Z7 }* [% R2 o- x3 ^' V
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
! I( [4 w. m. h& R5 ` h& P3 N* V+ \ - }
% [) y1 R$ V8 ^6 p) n& f( E H; g - dwStartUpSteps=5;/ J7 x! l/ ], M4 t5 v
- }
8 p. t$ Q2 B: {. J- |9 l/ Y8 z - }
5 Z' h4 T; p9 g) t) r - else
4 ?% j0 H+ h w. [" F. m - {* o0 A# q b0 K$ X2 Z$ `
- unlink(".\\DownLoad\\checkversion.txt");4 w7 J) M9 j5 M4 }: R6 s* L( |# P
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
! p+ d/ l4 [5 d$ d! W - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("没有需要更新的资料.....");
, P$ o/ M; Z7 z+ _0 t - else dlg->m_ListText.AddString("no new file update.....");: U/ i$ c: g$ h) E/ S
1 h ]. O# w6 a/ A- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 y- K( P1 N5 g7 H$ J2 z. z3 ]
- dwStartUpSteps=99;
8 F' ` r' @" D( P" Z) N - bFinishUpdated=TRUE;* t/ p# N: ?* ?$ T2 y5 X5 }
- bCanUpdate=TRUE;- |5 A! r: P4 T8 \" t) J& ~
- }
' c$ P- t( N/ G( i# a - }
( M& x* x5 | m9 n0 G$ [ - else
( f% u8 _7 g6 {" \8 o3 f - {
( `& Y; W2 C [& N7 U3 ? - if(!Dn.Connected())) i% x; H3 C+ J
- {
3 {( b/ q: a( V) N - bFirstUpdate=TRUE;
3 L) F& u K9 m" o - dwTotalFiles=1;
4 y* Q1 A/ C u - dwDownLoaded=0;7 r) p; `9 W& r3 F
- bSilentStep=FALSE;$ @, L6 e; R; O
- bCompressed=TRUE;- n" U( g' e' Z: [0 x
- strExtLocal=".\\DownLoad\";
' r$ | }/ H9 U6 w0 r! c - strFullName="update.txt";
p! v$ E* ^: _ o - dwProgramState=AP_CONNECT;
2 s* w' U- T* x6 _9 @# J - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝更い, 叫祔.....");
* p# v6 m: J o% y1 [" x$ b - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 Q) {, d l! c0 Y
- else dlg->m_ListText.AddString("downloading update list.....");
7 O0 \# ?4 ^7 O - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
" k# i- _$ w; X& L7 @# t& y - unlink(".\\DownLoad\\checkversion.txt");( P D' g7 v, N. R* J9 o
- if(GetFileAttributes("Wsa.zip" )!=-1)
; N/ ^, [# R1 ]2 M* d - {' ~$ U/ L& T( a- s
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("郎秆溃......");
/ _ X& f$ H% L; F+ @ - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("档案解压.....");
4 [0 J( u5 J1 y4 Z9 X+ \ - else dlg->m_ListText.AddString("Unzip Files.....");
/ A! p u2 n' V4 E1 l - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
& D: C8 Y4 P! r2 ~& w -
2 v( _4 K) G$ Z/ M) R4 k/ r - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("叫瑻み单..........");
" ~1 a- F1 t( b1 w% _! N, n - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("请耐心等待..........");
3 P! T8 u0 g' X5 |2 P% C; ^ ] - else dlg->m_ListText.AddString("Waiting..........");
. w, s* [& M6 [$ Y - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
c2 d8 r0 h+ Y: @! a6 J7 w0 B - }
* V1 Q J- N+ H$ E$ d5 v3 \& ? - dwStartUpSteps=5;( u# ?; H* s1 k9 x
- }
" q2 V) o% K" f2 C - }1 }# {3 c1 D4 L
- }% h0 J7 t7 c6 j0 F0 _5 T' V: s
- else
1 [" m* O+ t6 J! @ - {9 m. s1 Z' z* I7 c4 [1 r
- dwStartUpSteps=3;
! [# V* ]; r1 U+ g5 ~, Q - }, D( t u2 y( R
- }
P! _! H' I0 a" h3 X - break;
6 B9 W( y/ z# U( w4 z3 K: f - case 5:* G7 f$ M/ I- l* f
- {( m/ p, O! i4 [+ |% ?8 C5 R L
- if(GetFileAttributes("Wsa.zip" )!=-1)
D) S9 }/ l7 J$ y7 i n7 V - {
; d! Q: G$ h3 }. \7 O - int opt_overwrite=1;8 _0 ~3 E; D' ^( ~: a1 G# D, m
- int opt_do_extract_withoutpath=0;
) v2 f1 b- z4 a, G - unzFile uf=NULL;1 ?& Q" f2 q# V! C
- ) H6 ~7 Z! e- h) x
- uf=unzOpen("Wsa.zip");" _7 G( C5 B, n8 M: z$ d
- if(uf)
) v: @. Z: t) o - {- ]; x( U% f3 k" ]- r
- do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);5 `/ e: {! H( [4 s7 i0 C) P
- unzClose(uf);
' f/ Y3 _! [) L* a# C, S2 u - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("郎秆溃ЧΘ.....");1 X$ G+ n7 v* @0 }4 l/ |- M
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("档案解压完成.....");
5 B; j+ Q* t* B# t$ K: g7 A$ r/ G - else dlg->m_ListText.AddString("Unzip OK.....");
# E* I u- T# j1 z0 N' | - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
3 |; D$ W% @% u! S, E- J. ^ - }. k/ u4 W! ?' y6 i. m5 |/ j) a4 m
- DeleteFile("Wsa.zip" );
1 N+ L3 R; P+ w. {/ y& z! z - }
& k$ E; [- U$ T; M7 F - 3 x3 ?5 u' T6 M8 Z9 k( p
- if(CheckLocalVersion())
+ e- E5 \8 j; U& z- T x1 o& }9 v - {
3 Y% F" ]1 t6 d5 R - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
1 e2 e3 g% @: s# d - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("请执行线上更新资料.....");! g9 E. K, N/ u& c9 s. U( Q- T
- else dlg->m_ListText.AddString("Please update.....");
/ M6 O3 n* c2 i - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
/ R! a7 r; r$ t& [" Q - SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);3 N1 s. J+ b7 Q( \* F
- dwStartUpSteps=99;
6 e; F; N6 e/ A; l - }
Y3 N; J( e# v6 F - else9 G. Y1 t8 q: x7 t7 f8 N5 s' s; z
- {
5 W0 ~5 A+ u( a - if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");/ M4 r0 T2 d+ I" r4 S- U
- else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("没有需要更新的资料.....");8 T& ^ [* n, ?) r1 K
- else dlg->m_ListText.AddString("no new file update.....");
( c7 {* \1 i! m - 0 h) X' g6 ]5 @
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: t/ I ?2 m4 |& W0 r! ]
- dwStartUpSteps=99;$ x; _' T. G) g7 k0 q' t0 s
- bFinishUpdated=TRUE;
0 n5 V( G6 O6 n8 h1 v) o - }
0 f+ q+ {$ f2 E* X2 v4 C3 o& | - bCanUpdate=TRUE;
# P9 D w7 l7 T) ~6 e' R - }
( A# ?/ w9 R; B$ }2 U F5 B - break;
6 v. e$ t% t6 W* [8 X5 n - case 6:1 z$ J) {- g8 @- ~; X8 ]/ v
- {
" w4 h( W" o1 W" \ - if(!UpdateLocalVersion())
0 J9 e5 I3 D- s: G% S% D" [) ?8 M - {
! O m6 t4 t" ^2 r2 Z, X% G4 K - if(bRestartUpdater)8 E5 s, Q) ? q( S: J7 \3 p
- {5 O/ x1 o, v4 ~! S8 W* y, e7 }/ B7 u
- if ( m_iLanguage == TRADITIONAL_CHINESE ) MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);
2 \2 T3 J! D& ? - else if( m_iLanguage == SIMPLIFY_CHINESE ) MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);4 N7 M- p! Q6 @% Z% ^
- else MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);, s8 `: E0 O; w8 F- ~- ^
- DestroyWindow(m_pMainWnd->GetSafeHwnd());
2 x- }3 W: f* Q8 C - dwStartUpSteps=99;
. O6 }* b5 [8 J% A, N/ _ - }
" a2 p2 g! i2 U$ H - else( p% a9 \& J0 b2 \" K5 e
- {' N/ h+ T, P, v& B! k7 t) Z
- if ( m_iLanguage == TRADITIONAL_CHINESE ) dlg->m_ListText.AddString("穝戈竒ЧΘ.....");
( t; h. G& `5 e2 Y1 { - else if( m_iLanguage == SIMPLIFY_CHINESE ) dlg->m_ListText.AddString("更新的资料已经完成.....");1 _# j3 c% ] J# C
- else dlg->m_ListText.AddString("updated file ok.....");: R$ P# `4 Q4 r+ B. V+ \
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
3 K0 x6 N" W# b% p3 c/ { - SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,0,0);: V, U# y$ k& S4 L
- dwStartUpSteps=7;# L- ^ K/ @ o2 S# n
- bFinishUpdated=TRUE;& } x# \4 u( \& T
- }
6 H; |9 R0 }& M) v - }% v% G' W: S \
- else9 d* _6 a, |- R: D' V) m
- {3 w$ R! T" e, c
- if(bRestartUpdater)$ {# Q' x, L2 x; O: E
- {
: k8 |: h6 B, V2 M Y3 \ - if ( m_iLanguage == TRADITIONAL_CHINESE ) MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);
[: v* {# U' H( o j4 Z+ ^0 y2 T - else if( m_iLanguage == SIMPLIFY_CHINESE ) MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
4 q. _. r* P2 D, ` - else MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
/ U9 M, S: d _) v# X1 D - DestroyWindow(m_pMainWnd->GetSafeHwnd());
5 y( A' {% `# A3 }7 ~1 C( w! I - dwStartUpSteps=99;
8 V7 M: q% F) P; \1 }; \- M - }' p# d" N' y! @# f0 R/ H5 v/ X% Z7 M
- }. n" s4 S6 b) y/ ]* C: T$ ?
- } ]5 d) s' S( t% O+ G! d
- break;; {5 ^$ \$ w, W# L% U& S
- case 7:
7 W! a4 j1 T4 G4 m4 W# X( t, s, a - {: J5 v# R* G1 ]# W
- char szExecuteFile[14]="Bf_Client.exe";5 M( ~3 L& b/ W% ~
- if(GetFileAttributes("Run.exe")!=-1) strcpy(szExecuteFile,"Run.exe");+ A1 J# y4 W }5 x" D3 e8 H
- if(m_iLanguage==TRADITIONAL_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);
' |, R& g/ M+ C4 P - else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated2",NULL,SW_SHOW);6 i9 s \* T; @+ s
- else ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);7 w5 C7 z. B' K* m# G
- DestroyWindow(m_pMainWnd->GetSafeHwnd()); [( C8 v3 y3 X( t/ a
- dwStartUpSteps=99;
0 G; x- n2 S9 p7 e - }* M* h0 _- ^2 h [; f8 h
- break;& O: ^/ \0 E/ A% j. l) R
- //add by cece) O7 d) }% Z, S1 G- x- j# }
- case 8:% k. j/ V8 a4 d
- {2 m, r! `2 v0 T; Q
- if(!Dn.Connected())
$ k- ]3 Y* t% c/ @, l/ s - {2 c: K. O B2 G; H
- dwTotalFiles=1;
- S5 F+ [# ^. j* [ G - dwDownLoaded=0;
2 g5 E( W" `# M: C+ ~' q - bSilentStep=TRUE;' t3 L# q! ?, r2 _4 t
- bCompressed=TRUE;# T; ~- O% n" Q- V
- strExtLocal.Empty();1 j! ]4 p' k! a- q7 d7 c* ^0 U
- strFullName="download/CRCTable.txt";
, i" q0 I8 T& ^" z$ w - dwProgramState=AP_CONNECT;6 j2 N5 H! ]/ S* t2 p5 V$ W
- }; s' c4 W. ]. Y% M% S3 W
- //5 y- y- r% n% m C0 _
- dwStartUpSteps = 9;* ]: O4 w' {$ V8 n; L: p
- }
* S( ~6 a2 y4 u% n - break;
# `" j3 b/ C& K. e. ] - case 9:$ l2 _) Y' l$ k4 b3 G
- {
1 |3 n9 H$ q' A0 c - if(!Dn.Connected())) b& Y/ b9 U& S. D, u/ j2 `
- {& k" ]3 E0 y4 R' \" E" N
- dwTotalFiles=1;
+ a# j' c. ^' C% ?+ d - dwDownLoaded=0;- y3 i/ Q: |" X9 r
- bSilentStep=TRUE;7 L; P. l8 u8 _2 K$ c* N0 y
- bCompressed=TRUE;1 K( f1 r# b6 C! F' z8 S
- strExtLocal.Empty(); i! U! E/ [; f) u7 j( I7 i) {2 v* `( @$ B
- strFullName="Run.exe";3 R& ~% P) B% v
- dwProgramState=AP_CONNECT;
% z# M7 Q$ _- Z0 ]" ~) @: s - }
4 V& v1 b# _3 d+ T, q - //
0 d# [( v1 s6 ]3 t% K - dwStartUpSteps = 10;
, x7 Z1 w9 |* x1 D1 u - }; h# X. x& m: S$ o" l3 Y' X/ X) z
- break;5 \% d" m9 L! n) f E
- case 10:( p, G7 |0 T$ E! d0 y( s4 W) z
- {
2 u& i7 g: r* r - if(m_iLanguage==TRADITIONAL_CHINESE) ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);0 N5 {/ E4 C: [7 I% p$ A" U- R
- else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open","Run.exe","updated2",NULL,SW_SHOW);
, ?9 ^% Y6 x) M3 J4 | e1 ^; w - else ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);0 v: P5 g2 a0 M6 x3 _# B
- DestroyWindow(m_pMainWnd->GetSafeHwnd());' t7 x" U* Y, m( Y# r% M' u
- theApp.bClickRunExe = FALSE;
% R9 z) s- F+ N' ~+ Z7 Q8 s! d - dwStartUpSteps = 99;
4 n6 ^! p, v2 U# K* Z - //
4 t9 }& @& k8 _ - }
* m) J* I3 G; b - break;
" [. `; \+ T' ^ - //
) y1 I9 f A5 [, l - }
2 K! L" r8 [6 H2 f$ z - break;. t) v4 G2 {; V8 F" |
- case AP_CONNECT:
' A. f; i3 p0 C6 _ - if(Dn.InitNWSSock(4096,4096))
* C4 \4 p& Z m0 l - {7 c, }* l5 g9 Y
- char szPathName[MAX_PATH];
# J0 o0 ^: k( z8 g. [7 j/ J - dwLastSize=0;) j4 N7 M8 y5 D
- GetPathFromFullPath(szPathName,(char*)(LPCTSTR)strFullName);# |$ v) j& N5 r/ Y7 g6 v
- strFilePath=strExtLocal+szPathName;* y) y9 h+ K$ ]/ S3 y6 g6 l
- strFileName=strFullName.Right(strFullName.GetLength()-strlen(szPathName));1 j f/ ~' n: z- i6 z
- dwResumeNums=0;
- D4 `) f W3 D# W, a8 ] - CString strTempName;
# C. S4 I8 {" }6 ~; d - if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);
+ m$ Z7 Z3 a' u# C/ ]" A* ?. O$ Z - CString strCountData;' e9 r$ `$ S4 t7 [
- strCountData.Format("%d/%d",dwDownLoaded+1,dwTotalFiles);
0 Z, U! r! G+ G) Z0 i, b - dlg->m_FileNumber.SetWindowText(strCountData);
: @; Q' |# r2 I b0 o - dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));8 z- X0 e: [6 j$ s. |/ f
- if(bCompressed)
8 \, M! e5 R/ }% Z4 X; A D: v - {3 W4 P- S' g: Z) X5 x
- strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);' B% z$ ]) p) v! ]" E6 Q) o% E
- }, B0 [7 o3 {2 U
- else
. d& R5 ^* Y5 W7 T- r, s8 k - {
+ s. O" ]" B$ e; B c8 a - strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);* ?! G% p% E6 C& y8 H( V" {5 L0 @, i
- }7 l' ~1 [# k2 U# w% j
- Dn.Connect((char*)(LPCTSTR)strHostName,wPort);7 w' B# x7 S8 o: q
- Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());. g# u& H9 y6 y7 ^) `" f9 h v
- LastTickCount=GetTickCount();! s2 \( U* X! H$ P0 _! Z" `
- dwProgramState=AP_SENDING;9 d9 w4 o" c5 M$ _* ~; \
- }3 ~* j) `4 q7 E5 a$ X
- else- ` B# i. P2 Z% K$ D, c
- {$ b& J/ h- S2 d: u E
- Dn.QuitNWSSock();
5 ?% U! }! ?8 S a) u' V - dwProgramState=AP_NOTHING;8 |' G1 ?, q" a3 X
- }
$ S4 n' @( l+ C: X6 k( C - break;1 x# S& ]3 D4 p9 Z6 |
- case AP_RESUMED:/ y2 f6 C% W# u; r/ g
- if(Dn.InitNWSSock(4096,4096))
1 W* H1 }) M; T! C. M5 Z8 v4 l7 h( r - {" P3 f; ]$ f! N4 ?. f- n$ \
- dwResumeNums++;( P' g' `1 g0 V' _
- CString strTempName;6 t: h- o: i- a4 n4 Q6 W& M" u s
- if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);
$ K5 W4 z+ R! {, k - CString strCountData;/ g) y5 T, @2 J0 Z2 t7 A
- strCountData.Format("%d/%d",dwDownLoaded,dwTotalFiles);9 B( ~, ~" W7 |5 `/ e
- dlg->m_FileNumber.SetWindowText(strCountData);, }% R' f |9 B( U4 P
- dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
$ u3 j( T9 L% F& w$ m: R7 Z - if(bCompressed)
. M6 k0 d* B2 ]# _! p - {9 J6 h/ j6 y# M0 d: z2 h G
- 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);! E4 C# K- v V V, \7 ~9 t
- }
: ^4 T. s P, r - else
1 A8 b8 K& o3 I2 d4 m - {
6 R9 d6 ]4 `. [ - 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);) f0 p2 [7 V+ G- N6 r6 P
- }6 y! d* k7 Y, \ C) Y1 a
- Dn.Connect((char*)(LPCTSTR)strHostName,wPort);0 S7 W5 `# h: j; W5 r
- Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());
5 B) M0 M* V( o3 U0 L - LastTickCount=GetTickCount();
) J4 j4 A W2 R( H/ B* r" r" o - dwProgramState=AP_SENDING;
8 c1 \$ t6 p9 a( S L - }4 M6 u* A: c/ H6 ~# c
- else
8 ~8 y& S" _, O% i/ o# t! R - {
4 z9 P' V- h! }1 ?$ M - Dn.QuitNWSSock();3 _7 U( r$ N( S8 I2 c6 D# q
- dwProgramState=AP_NOTHING;2 b$ O" p: ]5 b( {9 ?! u
- }* [0 u: k- J+ F: e
- break;- o1 L$ ^9 X5 c/ f- y2 d: v% f% Y/ }) D
- case AP_SENDING:* d3 _( r; F& U
- {9 R6 l& O" w. o# @
- DWORD RecvLen,SendLen;
) W% z# J1 M5 e" [: D* o - if(Dn.NetworkLoop(RecvLen,SendLen))
' I- @+ l6 B: l0 Z+ P9 E2 L, l - {
4 B! z7 Y8 x) O! O8 ^ - LastTickCount=GetTickCount();" n% f6 P; I4 I
- if(SendLen)& c" x+ v0 x9 n! M# x5 t% ?: z
- {# _1 i0 L9 [+ b, N1 M: ~. f! }
- bReadHeaders=FALSE;( j! U, l8 E+ v, f) R# x
- dwProgramState=AP_RECEIVE;) Y$ T, y6 k8 c. o! x m
- }8 ?* q* O$ v) \/ I. s. |2 p' a
- }/ a5 ?6 }" G+ l2 X, v
- else8 Z2 Z4 l! |7 ~' r" n: d" @
- {
& B$ n* E8 p! i, [/ v2 \ - if(GetTickCount()-LastTickCount>3000)
1 [. M% N6 L8 ` - {' f/ }) E% U( _, }2 Q0 {
- Dn.QuitNWSSock();! L- O/ p5 y; e- o* W! G
- dwProgramState=AP_CONNECT;
- j8 ]8 ~5 m" Q# P. Z- w - //$ m R: b& ~/ z; I: Q7 {" Z
- static DWORD s_dwCount = 0;
- ?1 @, P3 w) S5 v( O - s_dwCount++;
. A. q" b P% } O# J' x - if( s_dwCount > 10 )
3 ]8 d5 E- i% \2 x0 l- R( K - {& v! G. }+ ?. U7 i; ~
- if(m_iLanguage==TRADITIONAL_CHINESE) MessageBox(GetActiveWindow(),"硈钡穝狝竟ア毖叫浪琩眤呼蹈砞竚 ","Error",MB_OK|MB_ICONERROR);7 J. M. c3 A2 r3 b& t, j
- else if(m_iLanguage==SIMPLIFY_CHINESE) MessageBox(GetActiveWindow(),"连接更新伺服器失败,请检查您的网络设置 ","Error",MB_OK|MB_ICONERROR);
" l# V/ Y! k" A- t/ Z - else MessageBox(GetActiveWindow(),"Connected Error, Please Check Your Network Status ","Error",MB_OK|MB_ICONERROR);9 o) q' f! d, n
- DestroyWindow(m_pMainWnd->GetSafeHwnd());
3 h/ \. ?& Y! ^1 {3 m2 h5 M% A - }) A/ g L1 ]$ ?' n7 D" b
- }. B; {; [5 [! Y$ }: E5 d4 C
- }8 a ?; p R% u
- }" L( t3 O* U8 A8 i0 h3 K
- break;6 c# D. ]0 Q1 i- H! X4 A! F2 C( N
- case AP_RECEIVE:% o: k& ^! C% \4 V& ?5 m
- { W# A7 |% O+ g9 h8 x+ V1 H( `+ `' n
- int Count;
& |) g& U+ u, \' A- ` u6 u - DWORD RecvLen,SendLen;
( f$ W8 L7 m, h/ J0 e/ t - if(Dn.NetworkLoop(RecvLen,SendLen))8 {* ?8 i! F, c7 k F9 }/ p
- {& t! {) M6 G# }) N/ M+ B9 \
- LastTickCount=GetTickCount();# `1 A. ~4 o' h" h6 u5 I
- if(RecvLen)
# u( \. H2 a: ` - {
( g- Z; e' W! H2 } - if(!bReadHeaders)& ^. J0 Q) q) |% G3 F9 H2 r# B6 v
- {
: V; d: _% \6 Q9 b7 Q; K - char *token=strtok3(Dn.szRecvBuff,"\r\n");& v% Y8 m6 a# w& Y
- if(token)3 t; m" @% o% N9 R& F5 y; C
- {
3 Z# p+ I+ Q. G1 A" P! h - dwFileSize=0;: X( u! V0 e/ R! Z
- for(int i=0;i<(int)strlen(token)-3;i++)1 Z5 @1 ^. [2 L1 Z! l5 N, W
- {( y9 h- R( R# r1 D- R
- if(!strnicmp(&token[i],"206",3))% r' j2 b0 j1 p1 }$ B
- {
- D( q3 {6 M! I7 ~% w1 | - if(!bSilentStep)# G3 X6 A0 @& ^: a8 M/ u) y
- {
* o0 @/ u e$ g( u - CString strTempName;% `. c1 \: i0 z. v3 ?. I1 i
- strTempName.Format("%s.....resuming(%d)",strFileName,dwResumeNums);
) o. Z4 W9 B. o' m - if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);/ @& O2 h& W+ H y/ L' n
- dlg->m_ListText.AddString(strTempName);8 v9 p- V { r& o: F& o
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
9 o7 O+ B( h4 L. f+ P7 r2 O# \ - }" h! `& V$ G, n0 L `+ s1 |
- bReadHeaders=TRUE;) M. Q' T7 D: S
- while(token=strtok3(NULL,"\r\n"))8 t. Y( O' ?" v
- {7 ]+ J9 [# g; o1 R2 N# a
- if(!strlen(token)&&dwFileSize)% J; q# q) C2 k5 ~
- {' Z T9 L% w% Q0 O- m- [
- Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;; N) R3 K# m% o( Q' H/ y
- if((int)Dn.dwRecvLeft>0)
) z) a) }4 U. s+ H: N - { r# r s5 U! F9 M+ C# ?) X* G8 Q0 C
- if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
; p0 [3 Z3 C! {5 q1 f( ]% U - {
% R9 H: F M5 |1 v& U- G* f5 Y - dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
: U" R' _: T+ {. R9 `# D - Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);; w2 I. R1 X2 s% H
- }/ v2 ]4 v- s0 x5 [
- memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);# `4 K0 }9 U8 t- L* r0 }: h
- dwCurrSize+=Dn.dwRecvLeft;
% _2 B# C% S. E* `2 A0 z# A - Dn.dwRecvLeft-=Dn.dwRecvLeft;
. |+ h3 s7 l& x; w4 [) S - if(dwCurrSize>=dwFileSize) goto SaveFileJump;' |! o/ Q7 |2 a1 Y6 l7 M2 T
- }) A2 R \! M( Q, [# B# h
- break;$ l* q) V+ t+ i# j6 k9 y# l; {, R
- }% p8 a3 n( N9 J4 p6 Y
- else
; a! n n' T2 ?( l y$ ] - {; f9 ]% Y# |* H) j6 L# J
- if(!strnicmp(token,"Content-Length",14))! v1 `( |) f d6 a, I
- {
( x1 d; q R( a6 ?; D! ]& v6 i - if(!Dn.szCompBuff)4 R, _$ }" [' _3 X% I$ x& B: R
- {
# m/ u! M' o) a/ Q) k& w% W - dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
# P0 u; G" I' j. {6 B) P - Dn.szCompBuff=(LPSTR)malloc(dwFileSize);) a( u6 `8 e ?. E" w& C; b
- }
, G6 Z* h. I9 K+ x t9 \5 ?2 Z - else if(dwFileSize!=dwLastSize) p* @2 o9 \5 a1 G7 R. I% S
- {
# H) a& R* [1 W6 L0 Z9 ^( F6 b - dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
) W! o$ P0 S) u; H: `; m - Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);5 K$ Z# J1 o5 D% b. P' ]
- }
: I3 j2 h& O3 T$ e% s3 H( O. y4 H - }0 Y; V. h% z9 b' i
- }
' k7 Q0 }+ u5 o+ _ - }( N4 U% Y( O1 A) h) \
- break;
: ~+ F, k3 ?" d6 v - }/ J7 N9 u( ?) F N5 d3 ~
- if(!strnicmp(&token[i],"200",3))0 a8 C- _3 S' p6 q/ a
- {% i+ Q$ Q# u# L, t: e5 _7 Z$ X
- if(!bSilentStep)
* R2 I$ e3 Z' ~$ I3 q7 O. P: \* L: i - {: n: d! z% F! _8 `; P2 h3 z# |' d
- dlg->m_ListText.AddString(strFileName+".....downloading");! g5 e, V i! ^( G% E, Q
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
! _& _+ y2 E0 u! W4 W7 ]; U6 V2 ] - }
1 V6 e6 f! M% E+ X* K - dwCurrSize=0;
- B3 V$ W: {5 b4 s - bReadHeaders=TRUE;) f, t: M' R/ f4 U* _* ^: g
- while(token=strtok3(NULL,"\r\n"))
7 i2 K$ s5 F; L - {
- ]6 S% q6 y7 L N - if(!strlen(token)&&dwFileSize)
% @5 t; s" W' x" H1 f+ I# q - {
+ W9 ]2 s5 L8 ~, W/ l - Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;
& h3 N+ K6 Y# r0 C: ~1 ~# t" w - if((int)Dn.dwRecvLeft>0)
, H1 h0 \. [, t H1 u# h - { N! }' _/ Z+ |- s
- if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)' N9 B+ F& B( J
- {% ^" W; w) ^- [
- dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;& R0 o" P5 `- V
- Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);4 u* g" B" e: ^" T
- }! F) `0 b X0 W" W h4 E2 s
- memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);
5 i j: [* E3 }* [( |0 @ - dwCurrSize+=Dn.dwRecvLeft;5 ]# s8 ~' K e( F6 l- w O
- Dn.dwRecvLeft-=Dn.dwRecvLeft;
$ Y2 \4 C1 E. V" Q! e - if(dwCurrSize>=dwFileSize) goto SaveFileJump;
% m* o+ x3 I' X- j9 d9 D9 f: Y( B - }( T9 j1 W" C: E2 x
- break;7 J3 ]4 s3 b& v: a
- }
- t+ M3 x: l, d* O9 w) N - else
6 P6 `6 P4 B7 r' @4 J - {. ? B! I7 j: {6 M: O! P/ R
- if(!strnicmp(token,"Content-Length",14))
, h# e8 D' z8 c4 }, J - {
4 ^- p8 B. J5 H- {1 |0 Y, Y2 O5 h: N9 |9 l - if(Dn.szCompBuff) { free(Dn.szCompBuff); Dn.szCompBuff=NULL; }' K* d' _( y ]" r1 q R
- dwLastSize=dwFileSize=atoi(&token[16]);" [1 o4 g( E- ]) [- R! [0 N
- Dn.szCompBuff=(LPSTR)malloc(dwFileSize);8 N O4 H: e& ]0 h( I. c& q
- }; L B; K( ^- }; X( x
- }6 ?- l7 W3 g$ b$ ~/ o
- }
3 S6 T- H- T8 Y - break;
# u; N. a) r2 _' p$ V - }& @) e* _+ l$ @& [
- }' _# r4 c h9 \
- if(!bReadHeaders||!dwFileSize)+ i1 j) B4 A: K
- {. `0 Q6 h3 Z2 B; i. W; h! Q, t! L
- // Wrong Header or Reading File Size Error
& y' \" X& [2 }$ K* i" h - Dn.QuitNWSSock();5 t; M* e; `8 Q& A5 L
- dwProgramState=AP_NOTHING;
1 m4 O G5 Y- F% ?- Y: c - CString strTempName; q. P: e9 b5 t. i' [2 A! }7 A
- strTempName.Format("Navigate %s File Error !",strFullName);
- k3 A5 D& @* \# Z) O1 C6 ? - MessageBox(GetActiveWindow(),strTempName,"Error",MB_OK|MB_ICONERROR);- W. B, U% Q6 @2 { `8 \0 c
- bRestartUpdater=TRUE; j+ G/ A$ ]7 t, T
- }
* i0 U- B3 Y$ S- G U$ H9 Y - }! o. E, Y! j7 B5 r7 d% M; a6 Q
- else
( s1 e, y6 |9 X - {! J! a* H0 _6 \) Q
- // Have No Header
* A( h, X5 X" Q( ^- a3 P8 y) `6 c - Dn.QuitNWSSock();
( R- K e N: q - dwProgramState=AP_CONNECT;" k: B3 Q0 V$ b, l+ K! b
- }. g7 H- J8 K/ d9 c! \6 Z
- }7 G9 k! }$ @7 E4 ^- ]1 |6 c
- else0 b" f3 }, c6 M7 _& @. c
- {
6 t# C+ [& j2 f' p" W - // Reading File From Web6 Z. X" d( b9 A7 r
- if((int)Dn.dwRecvLeft>0)! c$ X1 n- a" @# \! [' K
- {. R, n4 X1 b7 j) h" t' s8 m
- if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)9 g' E4 v; |" O" O1 s3 E
- {/ ^9 @. {5 u- z0 r* }" W T7 s
- dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
3 b' r; X' e) X# Z: N" [ - Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
2 f! }/ N N( ^0 ~ - }. s0 a1 M* `1 D7 l4 `1 L' E
- memcpy(Dn.szCompBuff+dwCurrSize,Dn.szRecvBuff,Dn.dwRecvLeft);# Y; I- O; T2 {& V
- dwCurrSize+=RecvLen;
9 @- M5 v( n, T/ P6 X& r5 e" U1 ~ - Dn.dwRecvLeft-=RecvLen;! g- q: `5 O h+ @* [4 i: ^
- }
0 m" W v! s4 _; T - dlg->m_Process2.SetPos(100*dwCurrSize/(dwFileSize<=0?1:dwFileSize));3 _2 l, u, C, L
- // int iRate = 100*dwCurrSize/(dwFileSize<=0?1:dwFileSize);
2 h, m, i' M2 N - // dlg->m_Process2.SetPos(iRate);& f' M% h, c( \/ p0 Q; w g6 r* e
- // if(iRate < 0) iRate = 0;
( v8 L' a) d, m: u - // if(iRate > 100) iRate = 100;0 M- `" X7 q1 I n* r- H
- // char szShow[5];
. F$ c# S8 o: D& y% j+ K- g Q8 A - // sprintf(szShow,"%d%%",iRate);" x: g/ k' p! A. x
- // dlg->m_SingleRate.SetWindowText(szShow);
) W) F" C7 l: `) z/ ]& f2 L - if(dwCurrSize>=dwFileSize) goto SaveFileJump;: b. w4 Z5 Z1 X5 W
- }8 X Z* A/ d! L6 Y' I+ B0 J" \% v
- }+ X* Z& k5 T7 k4 L
- else if(dwCurrSize<dwFileSize)0 d3 n3 [0 t, n$ X: a
- {
: u% e9 D2 v7 h8 i* x - // Disconnection But Size Error
+ e o: X- L# ^) P$ y U - Dn.QuitNWSSock();
2 F1 B/ \% S4 p) ]$ N - if(dwCurrSize) dwProgramState=AP_RESUMED;
1 Q, c1 k7 ^0 ~( x' V- E2 g2 t1 P - else dwProgramState=AP_CONNECT;+ J% j _; P8 }% o' @$ R" i
- }; k) @7 E' \& j+ J9 X6 V# l$ G
- else
- g. Q9 y9 T+ z# E, c - {
6 F+ _4 i8 p* A* h - SaveFileJump:
5 A! Y; U* D C - // End of File and Disconnect
7 `+ {+ N. A( C3 K9 _. }# N - FILE *Fp;
7 T5 c5 }! U) o; c - char szTempName[MAX_PATH];3 t Z' g; B4 b `" A Z3 |
- strcpy(szTempName,".\\DownLoad\");& [, q* O/ z) a+ k" c a
- strcat(szTempName,(char*)(LPCTSTR)strFileName);
9 R& Y8 i& H6 @4 w& @/ u8 } - if(bCompressed) strcat(szTempName,".zip");& r1 m( W! H$ J$ s
- if(dwCurrSize)
+ N& x7 p0 u5 B) \ - {
" n4 w* l: F H5 \$ E - Fp=fopen(szTempName,"wb");; c* y& @. E7 f( x7 M* C% o
- if(!Fp)
6 b0 A: ~9 q$ C6 C g0 a' l - {5 q6 L% t- k/ t4 l: f& P
- _mkdir("DownLoad");
* g% g* w8 o& I; c7 \5 O - Fp=fopen(szTempName,"wb");
# ]# H3 |3 S) ?. f, |$ z9 q/ u8 Y - }' e; H* c, P& j a+ Z, S, ^5 x
- if(Fp)
3 s$ G/ `3 H C - {# H6 O- f# K3 j4 `) h* o
- fwrite(Dn.szCompBuff,1,dwCurrSize,Fp);
9 q% M0 t- g2 E - fclose(Fp);2 n& `0 _& u; |6 }0 v% ^/ U
- }
: z8 M# v& k. K" Y5 P - }. G/ z- o0 ?$ g" B, ^
- if(!bSilentStep)% |. d2 e& I# N3 I5 y3 ]# Q
- {; M( O1 S: ^( K6 ]0 k4 [
- if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
" G4 r$ Y6 a: ~- I. m - dlg->m_ListText.AddString(strFileName+".....saving");$ g6 p1 e5 A4 S2 k. u
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 ~3 O, ?4 x4 l0 K4 n& [7 O, q
- }
( h; w" H- j- z1 z% S0 w/ J - if(bCompressed)1 W5 K& X' f( r$ [+ k" z9 R" I
- {
, f. E- L. A6 {. x, }9 C - int opt_overwrite=1;" m; b' m. W; j4 y* ?
- int opt_do_extract_withoutpath=0;- j1 M u" N% R! T( }
- unzFile uf=NULL;
9 i3 i4 q( B0 W/ J$ B+ R( L - uf=unzOpen(szTempName);2 a1 l5 X; b9 E! V4 ~
- if(uf)6 M: c# i( f; @1 x8 D. z
- {. _, l$ P; ]( v4 s u
- if(!bSilentStep)( x: N' J; W' A- e+ a
- {
' i7 N7 ?) m9 ` - if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
w$ \- ?1 A- _, z4 @4 ? - dlg->m_ListText.AddString(strFileName+".....extracting");
* A9 e+ j! M/ T2 V# W - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 J/ ]5 I3 j) {) i
- }
. o' y# L1 B% p. j7 U) t% z0 _ - if(do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,(char*)(LPCTSTR)strFilePath,NULL)==UNZ_OK)
" L, r2 [" \4 U1 _& v - {. X6 j9 y& Q. p* n
- if(!bSilentStep)
& j! e P7 ]( O F$ o3 U5 X4 U8 l - {
( f4 s; _+ [3 R# _& i - if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);: ?' Y* o% O8 c5 p. }) p, n7 m& }
- dlg->m_ListText.AddString(strFileName+".....done");/ S9 `# \7 C% {/ h% [
- dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, J& W9 D; y/ k
- }
& N3 H) @& n# i - dwDownLoaded++;
# R8 W7 S# n; A3 f - dwProgramState=AP_NOTHING;
4 _/ z w/ A$ z6 L- y - }
* s r5 k; W2 a - else8 q! ]! ] m/ O+ h! R
- {: U# h% s( | q. G
- dwProgramState=AP_CONNECT;
/ ~* Z, R( l6 a! v8 o+ [/ x - }; F. y; N/ W0 V) k2 F. Y
- unzClose(uf);
_# M3 T j2 V6 M9 ~! n+ w3 O - }5 }% ?9 z/ A1 p- o( H j
- else: y; j$ s# K5 |
- {( L0 d. S0 w$ [3 g( k0 ~
- dwProgramState=AP_CONNECT;8 D) ?. r+ m# ~( p
- }& m2 E3 O0 F k$ L% `& z7 V; u
- unlink(szTempName);
5 c3 _, H4 Q& `( C, @3 H - }/ p! F' {8 c3 H5 ?1 S$ L
- else& \7 E5 X- N. V
- {
* `0 j- Z$ O3 d: k) o - if(!bSilentStep)
2 i& i6 d2 u- x# ~3 z, d$ } - {. V' x8 d! u9 `8 N5 V) {# y
- if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
' P' w! T* V E |7 I ?8 s, S - dlg->m_ListText.AddString(strFileName+".....done");
: ^# H3 ^; C/ o/ x) x, ~) ^ - dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1); r- \$ q/ |1 k% C1 J1 B
- }2 n) A* J# I/ C4 [9 ?6 z7 e) {
- dwDownLoaded++;; O% c$ Q. M# h2 o" Z# h& [
- dwProgramState=AP_NOTHING;
4 X# c' N; N+ Q) T( J ` - }9 ^! H) I1 b* b% I$ S
- Dn.QuitNWSSock();" |: F7 }% } G# u
- }
& S, J4 A. Y3 O- D' a' c+ u. m2 o4 A9 l - }
/ v% @7 v" ?2 U, p/ [+ M- K - else
% S% w) k( k- w7 `: i - {
Y- i E" S3 m3 I* r - // Connect Timeout
L$ \+ H2 `8 y- R - if(GetTickCount()-LastTickCount>30000)4 b# F0 g; e# E" X
- {: J3 a+ F5 S6 k3 k4 n
- Dn.QuitNWSSock();
3 p- _/ B8 Z" L0 e - if(dwCurrSize) dwProgramState=AP_RESUMED;5 I% w2 H2 y. B8 \
- else dwProgramState=AP_CONNECT;
, o; O8 |7 t) S( J' p# A - }) b$ s- p. Y9 p/ N/ _1 Y
- }6 k4 m; p: M% z* b" \
- }; c9 x3 i. G; m8 D+ {2 f
- break;
1 Y7 X. w4 ?# w9 _( L( B - }
2 M' _; d& s' D6 T( D D7 f# x - return CWinApp::OnIdle(lCount);
4 ^; b) z1 U( n. Q1 W% h( k - }
- j; z, }7 K; c! m3 ~* \
複製代碼 其实登陆器也就是这么一回事儿……+ s+ c- u! }, L2 @) U2 n1 z+ t8 T
附件有编译教程和源码
' k# H [8 ^. y3 S- A$ _5 i$ Y' g
- n; O# M, m/ L# Y% ? |