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