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