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