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