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