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