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