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