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