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