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