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