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