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