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