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