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