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