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