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