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