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