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