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