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