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