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