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