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