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