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