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