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