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