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