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