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