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