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