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