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