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