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