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