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