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