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