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