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