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