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