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