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