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