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