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