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