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