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