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