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