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