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