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