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