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