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