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