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