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