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