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