⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netdb.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
	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 + -