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