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