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