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