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