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