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