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