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