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