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