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