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