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