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