📄 netdb.cpp.svn-base
字号:
if( m_xmlDocument.Initialize() )
m_bIsOK = m_xmlDocument.SetRawDocument( strDoc );
if( m_bIsOK )
{
m_bIsOK = ExtractFromXMLDoc( );
}
if( m_bIsOK )
{
m_bIsOK = AddSmartAdditional( );
}
return m_bIsOK;
}
BOOL CPackages::SetAttribute( CMarkup & markup )
{
CString strType = CXMLNode::getAttrValue( markup, szSettingType );
if( 0 == strType.CompareNoCase(szSettingVersion) )
m_strVersion = CXMLNode::getAttrValue( markup, szSettingValue );
else if( 0 == strType.CompareNoCase(szSettingDataVersion) )
m_nDataVersion = CXMLNode::getAttrValue_I( markup, szSettingValue );
else if( 0 == strType.CompareNoCase(szSettingBasepath) )
m_strBasePath = CXMLNode::getAttrValue( markup, szSettingValue );
else if( 0 == strType.CompareNoCase(szSettingYearfmt) )
m_strYearfmt = CXMLNode::getAttrValue( markup, szSettingValue );
else if( 0 == strType.CompareNoCase(szSettingMonthfmt) )
m_strMonthfmt = CXMLNode::getAttrValue( markup, szSettingValue );
else if( 0 == strType.CompareNoCase(szSettingDayfmt) )
m_strDayfmt = CXMLNode::getAttrValue( markup, szSettingValue );
else if( 0 == strType.CompareNoCase(szSettingInfo) )
m_strInfo = CXMLNode::getAttrValue( markup, szSettingValue );
else if( 0 == strType.CompareNoCase(szSettingInfourl) )
m_strInfourl = CXMLNode::getAttrValue( markup, szSettingValue );
else if( 0 == strType.CompareNoCase(szSettingLatestver) )
m_strLatestver = CXMLNode::getAttrValue( markup, szSettingValue );
return TRUE;
}
BOOL CPackages::ExtractFromXMLDoc( )
{
CMarkup & markup = m_xmlDocument.Markup();
// extract setting
markup.ResetPos();
if( !markup.FindElem(szMarkupStockana) )
return FALSE;
ASSERT( 0 == markup.GetTagName().Compare( szMarkupStockana ) );
if( markup.FindChildElem(szMarkupSetting) )
{
markup.IntoElem();
ASSERT( 0 == markup.GetTagName().Compare( szMarkupSetting ) );
if( markup.FindChildElem( szMarkupElement ) )
{
do {
markup.IntoElem();
ASSERT( 0 == markup.GetTagName().Compare( szMarkupElement ) );
if( !SetAttribute( markup ) )
{
m_xmlDocument.SetLastErrorMessage( szErrXMLServerSetting );
return FALSE;
}
}while( markup.FindElem( szMarkupElement ) );
}
}
// extract package
markup.ResetPos();
if( !markup.FindElem(szMarkupStockana) )
return FALSE;
ASSERT( 0 == markup.GetTagName().Compare( szMarkupStockana ) );
if( markup.FindChildElem(szMarkupPackage) )
{
markup.IntoElem();
ASSERT( 0 == markup.GetTagName().Compare( szMarkupPackage ) );
if( markup.FindChildElem( szMarkupElement ) )
{
do {
markup.IntoElem();
ASSERT( 0 == markup.GetTagName().Compare( szMarkupElement ) );
CPackage package;
if( package.SetAttribute( markup ) )
Add( package );
} while( markup.FindElem( szMarkupElement ) );
}
}
markup.ResetPos();
return TRUE;
/* OLD VERSION
m_strVersion.Empty();
m_nDataVersion = 0;
m_strBasePath.Empty();
SetSize( 0 );
MSXML::IXMLDOMNodePtr pNodeRoot = m_xmlDocument.XMLDoc();
try
{
// extract setting
MSXML::IXMLDOMNodeListPtr pNodeList = pNodeRoot->selectNodes( szSettingElement );
if( NULL != pNodeList )
{
for( int i=0; i<pNodeList->length; i++ )
{
MSXML::IXMLDOMNodePtr pNode = pNodeList->Getitem(i);
if( !SetAttribute( pNode ) )
{
m_xmlDocument.SetLastErrorMessage( szErrXMLPackageSetting );
return FALSE;
}
}
}
// extract package
pNodeList = pNodeRoot->selectNodes( szPackageElement );
if( NULL == pNodeList || 0 == pNodeList->length )
{
m_xmlDocument.SetLastErrorMessage( szErrXMLPackageData );
return FALSE;
}
for( int i=0; i<pNodeList->length; i++ )
{
MSXML::IXMLDOMNodePtr pNode = pNodeList->Getitem(i);
CPackage package;
if( package.SetAttribute( pNode ) )
Add( package );
}
}
catch( _com_error e )
{
m_xmlDocument.SetLastErrorMessage( e.ErrorMessage() );
return FALSE;
}
return TRUE;
*/
}
int SortPackage(const void *p1,const void *p2)
{
CPackage *pPackage1 = (CPackage *)p1;
CPackage *pPackage2 = (CPackage *)p2;
if( pPackage1 && pPackage2 && pPackage1->m_tmFrom < pPackage2->m_tmFrom )
return -1;
else if( pPackage1 && pPackage2 && pPackage1->m_tmFrom > pPackage2->m_tmFrom )
return 1;
return 0;
}
void CPackages::Sort( )
{
if( NULL != GetData() )
qsort( GetData(), GetSize(), sizeof(CPackage), SortPackage );
}
void CPackages::AppendPackages( CPackages * psrc )
{
if( !psrc || psrc->GetSize() == 0 )
return;
int nOldSize = GetSize();
SetSize( nOldSize + psrc->GetSize() );
for( int i=0; i<psrc->GetSize(); i++ )
{
SetAt( nOldSize+i, psrc->GetAt(i) );
}
}
BOOL CPackages::GetLatestTime( CSPTime &tm, int packagetype )
{
tm = CSPTime(NULL);
BOOL bHas = FALSE;
for( int i=0; i<GetSize(); i++ )
{
CPackage & pac = ElementAt(i);
if( pac.m_nType == packagetype
&& tm < pac.m_tmTo )
{
tm = pac.m_tmTo;
bHas = TRUE;
}
}
if( !bHas )
tm = CSPTime::GetCurrentTime();
return TRUE;
}
BOOL CPackages::GetLastErrorMessage(LPTSTR lpszError, UINT nMaxError)
{
return m_xmlDocument.GetLastErrorMessage( lpszError, nMaxError );
}
//////////////////////////////////////////////////////////////////////////////////
// class CDownloadServer
CDownloadServer::CDownloadServer( const CDownloadServer &src )
{
*this = src;
}
CDownloadServer & CDownloadServer::operator = ( const CDownloadServer & src )
{
m_strAddress = src.m_strAddress;
m_nPort = src.m_nPort;
m_strDescript = src.m_strDescript;
return *this;
}
BOOL CDownloadServer::SetAttribute( CMarkup & markup )
{
m_strAddress = CXMLNode::getAttrValue( markup, szServerAddress );
m_nPort = CXMLNode::getAttrValue_I( markup, szServerPort );
m_strDescript = CXMLNode::getAttrValue( markup, szServerDescript );
#ifdef CLKLAN_ENGLISH_US
if( !AfxIsEnglish( m_strDescript, m_strDescript.GetLength() ) )
m_strDescript.Empty();
#endif
return TRUE;
}
BOOL CDownloadServer::FromString( CString string )
{
m_strAddress.Empty();
m_nPort = INTERNET_DEFAULT_HTTP_PORT;
m_strDescript.Empty();
int nIndex = string.Find( ':' );
if( -1 == nIndex )
{
m_strAddress = string;
return m_strAddress.GetLength()>0;
}
m_strAddress = string.Left( nIndex );
string = string.Mid( nIndex+1 );
nIndex = string.Find( ':' );
if( -1 == nIndex )
{
m_nPort = (INTERNET_PORT)atol(string);
return m_strAddress.GetLength()>0;
}
m_nPort = (INTERNET_PORT)atol(string.Left(nIndex));
m_strDescript = string.Mid(nIndex+1);
return m_strAddress.GetLength()>0;
}
CString CDownloadServer::AsString( )
{
CString string;
string.Format( "%s:%d:%s", m_strAddress, m_nPort, m_strDescript );
return string;
}
BOOL AliasSetAttribute( CMarkup & markup, CAlias & alias )
{
alias.m_strName = CXMLNode::getAttrValue( markup, szAliasName );
alias.m_strValue = CXMLNode::getAttrValue( markup, szAliasValue );
return TRUE;
}
BOOL QuoteServerSetAttribute( CMarkup & markup, CQuoteServer & qs )
{
qs.m_strName = CXMLNode::getAttrValue( markup, szQuoteServerName );
qs.m_strAddress = CXMLNode::getAttrValue( markup, szQuoteServerAddress );
qs.m_nPort = CXMLNode::getAttrValue_I( markup, szQuoteServerPort );
qs.m_strUser = CXMLNode::getAttrValue( markup, szQuoteServerUser );
qs.m_strPasswd = CXMLNode::getAttrValue( markup, szQuoteServerPasswd );
qs.m_bSavePasswd = TRUE;
#ifdef CLKLAN_ENGLISH_US
if( !AfxIsEnglish( qs.m_strName, qs.m_strName.GetLength() ) )
qs.m_strName = qs.m_strAddress;
#endif
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////////
// class CServers
CServers::CServers()
{
Clear( );
}
CServers::~CServers()
{
Clear();
}
void CServers::Clear( )
{
m_bIsOK = FALSE;
m_xmlDocument.Release();
m_strVersion.Empty();
m_aDownloadServers.SetSize( 0 );
m_aQuoteServers.SetSize( 0 );
m_aAliases.SetSize( 0 );
}
BOOL CServers::IsOK( )
{
return m_bIsOK;
}
BOOL CServers::SetRawXMLDocument( CString &strDoc )
{
Clear( );
m_bIsOK = FALSE;
if( m_xmlDocument.Initialize() )
m_bIsOK = m_xmlDocument.SetRawDocument( strDoc );
if( m_bIsOK )
{
m_bIsOK = ExtractFromXMLDoc( );
}
return m_bIsOK;
}
BOOL CServers::SetAttribute( CMarkup & markup )
{
CString strType = CXMLNode::getAttrValue( markup, szSettingType );
if( 0 == strType.CompareNoCase(szSettingVersion) )
m_strVersion = CXMLNode::getAttrValue( markup, szSettingValue );
return TRUE;
}
BOOL CServers::ExtractFromXMLDoc( )
{
CMarkup & markup = m_xmlDocument.Markup();
// extract setting
markup.ResetPos();
if( !markup.FindElem(szMarkupStockana) )
return FALSE;
ASSERT( 0 == markup.GetTagName().Compare( szMarkupStockana ) );
if( markup.FindChildElem(szMarkupSetting) )
{
markup.IntoElem();
ASSERT( 0 == markup.GetTagName().Compare( szMarkupSetting ) );
if( markup.FindChildElem( szMarkupElement ) )
{
do {
markup.IntoElem();
ASSERT( 0 == markup.GetTagName().Compare( szMarkupElement ) );
if( !SetAttribute( markup ) )
{
m_xmlDocument.SetLastErrorMessage( szErrXMLServerSetting );
return FALSE;
}
}while( markup.FindElem( szMarkupElement ) );
}
}
// extract server
markup.ResetPos();
if( !markup.FindElem(szMarkupStockana) )
return FALSE;
ASSERT( 0 == markup.GetTagName().Compare( szMarkupStockana ) );
if( markup.FindChildElem(szMarkupServer) )
{
markup.IntoElem();
ASSERT( 0 == markup.GetTagName().Compare( szMarkupServer ) );
if( markup.FindChildElem( szMarkupElement ) )
{
do {
markup.IntoElem();
ASSERT( 0 == markup.GetTagName().Compare( szMarkupElement ) );
CDownloadServer server;
if( server.SetAttribute( markup ) )
m_aDownloadServers.Add( server );
} while( markup.FindElem( szMarkupElement ) );
}
}
// extract quote server
markup.ResetPos();
if( !markup.FindElem(szMarkupStockana) )
return FALSE;
ASSERT( 0 == markup.GetTagName().Compare( szMarkupStockana ) );
if( markup.FindChildElem(szMarkupQuoteServer) )
{
markup.IntoElem();
ASSERT( 0 == markup.GetTagName().Compare( szMarkupQuoteServer ) );
if( markup.FindChildElem( szMarkupElement ) )
{
do {
markup.IntoElem();
ASSERT( 0 == markup.GetTagName().Compare( szMarkupElement ) );
CQuoteServer server;
if( QuoteServerSetAttribute( markup, server ) )
m_aQuoteServers.Add( server );
} while( markup.FindElem( szMarkupElement ) );
}
}
// extract alias
markup.ResetPos();
if( !markup.FindElem(szMarkupStockana) )
return FALSE;
ASSERT( 0 == markup.GetTagName().Compare( szMarkupStockana ) );
if( markup.FindChildElem(szMarkupAlias) )
{
markup.IntoElem();
ASSERT( 0 == markup.GetTagName().Compare( szMarkupAlias ) );
if( markup.FindChildElem( szMarkupElement ) )
{
do {
markup.IntoElem();
ASSERT( 0 == markup.GetTagName().Compare( szMarkupElement ) );
CAlias alias;
if( AliasSetAttribute( markup, alias ) )
m_aAliases.Add( alias );
} while( markup.FindElem( szMarkupElement ) );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -