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