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