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