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