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