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