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