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