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