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