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