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