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