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