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