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