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