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