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