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