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