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