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