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