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