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