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