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