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