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