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