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