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