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