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