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