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