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