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