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