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