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

📄 netdb.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
/*
	Cross Platform Core Code.

	Copyright(R) 2001-2002 Balang Software.
	All rights reserved.

	Using:
		class	CPackages;
		class	CNetDatabase;
*/

#include "stdafx.h"
#include "../Include/XMLDoc.h"
#include "../Include/HttpClt.h"
#include "../Include/NetDB.h"
#include "../Include/InfoZip.h"
#include "Strings.h"
#include <direct.h>
#include <io.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

const char *szMarkupStockana	=	"stockana";				//	For CMarkup Use
const char *szMarkupSetting		=	"setting";				//	For CMarkup Use
const char *szMarkupServer		=	"server";				//	For CMarkup Use
const char *szMarkupQuoteServer	=	"quoteserver";			//	For CMarkup Use
const char *szMarkupAlias		=	"alias";				//	For CMarkup Use
const char *szMarkupPackage		=	"package";				//	For CMarkup Use
const char *szMarkupElement		=	"element";				//	For CMarkup Use

const char *szSettingElement	=	"/stockana/setting/element";
	const char *szSettingType		=	"type";
	const char *szSettingValue		=	"value";
	const char *szSettingVersion	=	"version";
	const char *szSettingDataVersion=	"dataversion";
	const char *szSettingBasepath	=	"basepath";
	const char *szSettingYearfmt	=	"yearfmt";
	const char *szSettingMonthfmt	=	"monthfmt";
	const char *szSettingDayfmt		=	"dayfmt";
	const char *szSettingInfo		=	"info";
	const char *szSettingInfourl	=	"infourl";
	const char *szSettingLatestver	=	"latestver";
const char *szServerElement		=	"/stockana/server/element";
	const char *szServerAddress		=	"address";
	const char *szServerPort		=	"port";
	const char *szServerDescript	=	"discript";

const char *szQuoteServerElement	=	"/stockana/quoteserver/element";
	const char *szQuoteServerName	=	"name";
	const char *szQuoteServerAddress=	"address";
	const char *szQuoteServerPort	=	"port";
	const char *szQuoteServerUser	=	"user";
	const char *szQuoteServerPasswd	=	"passwd";
const char *szAliasElement		=	"/stockana/alias/element";
	const char *szAliasName			=	"name";
	const char *szAliasValue		=	"value";
const char *szPackageElement	=	"/stockana/package/element";
	const char *szPackageURL		=	"url";
	const char *szPackageType		=	"type";
	const char *szPackageTypeCode		=	"code";	
	const char *szPackageTypeDay		=	"day";
	const char *szPackageTypeMin5		=	"min5";
	const char *szPackageTypeDR			=	"dr";
	const char *szPackageTypeBasetext	=	"basetext";
	const char *szPackageTypeBasetable	=	"basetable";
	const char *szPackageLength		=	"length";
	const char *szPackageDescript	=	"discript";
	const char *szPackageFrom		=	"from";
	const char *szPackageTo			=	"to";
	const char *szPackageZipStatus	=	"zipstatus";
	const char *szPackageTimefmt	=	"timefmt";
	const char *szPackageAlternateURL	=	"alter";

//////////////////////////////////////////////////////////////////////////////////
//	class CPackage

CPackage::CPackage()
{
	m_nType		=	packageUnknown;
	m_nLength	=	0;
	m_tmFrom	=	CSPTime(NULL);
	m_tmTo		=	CSPTime(NULL);
	m_bIsZipped	=	FALSE;
	m_bIsTimefmt=	FALSE;

	m_bDownloadOK	=	FALSE;
	m_pExpandPackages	=	NULL;
}

CPackage::CPackage( const CPackage &src )
{
	m_pExpandPackages	=	NULL;
	*this	=	src;
}

CPackage::~CPackage( )
{
	if( m_pExpandPackages )
	{
		delete	m_pExpandPackages;
		m_pExpandPackages	=	NULL;
	}
}

CPackage & CPackage::operator = ( const CPackage &src )
{
	if( m_pExpandPackages )
	{
		delete	m_pExpandPackages;
		m_pExpandPackages	=	NULL;
	}

	m_strURL			=	src.m_strURL;
	m_strAlternateURL	=	src.m_strAlternateURL;
	m_nType				=	src.m_nType;
	m_tmFrom			=	src.m_tmFrom;
	m_tmTo				=	src.m_tmTo;
	m_nLength			=	src.m_nLength;
	m_strDescript		=	src.m_strDescript;
	m_bIsZipped			=	src.m_bIsZipped;
	m_bIsTimefmt		=	src.m_bIsTimefmt;

	// temp data
	m_bDownloadOK		=	src.m_bDownloadOK;
	m_strLocalFilename	=	src.m_strLocalFilename;
	if( src.HasExpandPackage() )
	{
		m_pExpandPackages	=	new CPackages;
		m_pExpandPackages->AppendPackages( src.m_pExpandPackages );
	}

	return *this;
}

BOOL CPackage::SetAttribute( CMarkup & markup )
{
	m_nType	=	packageUnknown;
	CString	strType	=	CXMLNode::getAttrValue( markup, szPackageType );
	if( 0 == strType.CompareNoCase( szPackageTypeCode ) )
		m_nType	=	packageCode;
	else if( 0 == strType.CompareNoCase( szPackageTypeDay ) )
		m_nType	=	packageDay;
	else if( 0 == strType.CompareNoCase( szPackageTypeMin5 ) )
		m_nType	=	packageMin5;
	else if( 0 == strType.CompareNoCase( szPackageTypeDR ) )
		m_nType	=	packageDR;
	else if( 0 == strType.CompareNoCase( szPackageTypeBasetext ) )
		m_nType	=	packageBasetext;
	else if( 0 == strType.CompareNoCase( szPackageTypeBasetable ) )
		m_nType	=	packageBasetable;

	m_strURL	=	CXMLNode::getAttrValue( markup, szPackageURL );
	m_strAlternateURL	=	CXMLNode::getAttrValue( markup, szPackageAlternateURL );
	m_tmFrom	=	CXMLNode::getAttrValue_T( markup, szPackageFrom );
	m_tmTo		=	CXMLNode::getAttrValue_T( markup, szPackageTo );
	m_nLength	=	CXMLNode::getAttrValue_I( markup, szPackageLength );
	m_strDescript	=	CXMLNode::getAttrValue( markup, szPackageDescript );
	m_bIsZipped	=	CXMLNode::getAttrValue_I( markup, szPackageZipStatus );
	m_bIsTimefmt=	CXMLNode::getAttrValue_I( markup, szPackageTimefmt );

	if( m_tmFrom > m_tmTo )
		m_tmFrom	=	m_tmTo;
	
	if( m_tmTo.GetHour() == 0 )
		m_tmTo += CSPTimeSpan( 0, 23, 59, 59 );
	return TRUE;
}

BOOL CPackage::operator<(CPackage& p) const
{
	return (m_tmFrom < p.m_tmFrom);
}

CString CPackage::GetURL( CString strBasePath )
{
	if( !m_bIsTimefmt )
		return strBasePath + m_strURL;
	else
	{
		CSPTime	time	=	CSPTime::GetCurrentTime();
		int nWeekDay = time.GetDayOfWeek( );
		if( nWeekDay == 1 )
		{
			time	-=	CSPTimeSpan( 2, 0, 0, 0 );
		}
		else if( nWeekDay == 7 )
		{
			time	-=	CSPTimeSpan( 1, 0, 0, 0 );
		}
		return strBasePath + (LPCTSTR)time.Format( m_strURL );
	}
}

BOOL CPackage::HasAlternateURL( ) const
{
	return !m_strAlternateURL.IsEmpty();
}

CString	CPackage::GetAlternateURL( CString strBasePath )
{
	return strBasePath + m_strAlternateURL;
}

BOOL CPackage::HasExpandPackage( ) const
{
	return ( m_pExpandPackages && m_pExpandPackages->GetSize() > 0 );
}

BOOL CPackage::ExpandYearPackage( CString strMonthfmt, CString strDayfmt, int nYear )
{
	if( NULL != m_pExpandPackages )
	{
		delete	m_pExpandPackages;
		m_pExpandPackages	=	NULL;
	}

	m_pExpandPackages	=	new CPackages( );

	if( m_pExpandPackages && !strMonthfmt.IsEmpty() )
	{
		int nMonthStart	=	1;
		int	nMonthEnd	=	12;
		for( int nMonth=nMonthStart; nMonth<=nMonthEnd; nMonth ++ )
		{
			CPackage	pac;
			pac.m_bIsTimefmt	=	FALSE;
			pac.m_bIsZipped		=	TRUE;
			pac.m_nLength		=	400000;
			pac.m_nType			=	CPackage::packageDay;
			pac.m_strDescript.Format( szFmtMonthDescript, nYear, nMonth );
			
			CSPTime	tmMonth( nYear, nMonth, 1, 0, 0, 0 );
			pac.m_strURL		=	tmMonth.Format( strMonthfmt );
			pac.m_tmFrom		=	CSPTime( nYear, nMonth, 1, 0, 0, 0 );
			pac.m_tmTo			=	CSPTime( nYear, nMonth, 31, 23, 59, 59 );
			if( nMonth == nMonthEnd )
				pac.ExpandMonthPackage( strDayfmt, nYear, nMonth );

			m_pExpandPackages->Add( pac );
		}
		return TRUE;
	}
	return FALSE;
}

BOOL CPackage::ExpandMonthPackage( CString strDayfmt, int nYear, int nMonth )
{
	if( NULL != m_pExpandPackages )
	{
		delete	m_pExpandPackages;
		m_pExpandPackages	=	NULL;
	}

	m_pExpandPackages	=	new CPackages( );

	if( m_pExpandPackages && !strDayfmt.IsEmpty() )
	{
		int	nDayStart	=	1;
		CSPTime	tmDay( nYear, nMonth, nDayStart, 23, 0, 0 );
		for( ; tmDay.GetMonth() == nMonth; tmDay += CSPTimeSpan(1,0,0,0) )
		{
			CPackage	pac;
			pac.m_bIsTimefmt	=	FALSE;
			pac.m_bIsZipped		=	FALSE;
			pac.m_nLength		=	20000;
			pac.m_nType			=	CPackage::packageDay;
			pac.m_strDescript.Format( szFmtDayDescript, nYear, nMonth, tmDay.GetDay() );
			
			pac.m_strURL		=	tmDay.Format( strDayfmt );
			pac.m_tmFrom		=	CSPTime( nYear, nMonth, tmDay.GetDay(), 0, 0, 0 );
			pac.m_tmTo			=	CSPTime( nYear, nMonth, tmDay.GetDay(), 23, 59, 59 );
			
			if( tmDay.GetDayOfWeek() != 1 && tmDay.GetDayOfWeek() != 7 )
				m_pExpandPackages->Add( pac );
		}
		return TRUE;
	}
	return FALSE;
}

CPackages * CPackage::GetExpandPackages( )
{
	ASSERT( HasExpandPackage() );
	return	m_pExpandPackages;
}

void CPackage::DeleteExpandPackages( )
{
	if( m_pExpandPackages )
	{
		delete	m_pExpandPackages;
		m_pExpandPackages	=	NULL;
	}
}


//////////////////////////////////////////////////////////////////////////////////
//	class CPackages

CPackages::CPackages()
{
	Clear( );
}

CPackages::~CPackages()
{
	Clear();
}

void CPackages::Clear( )
{
	m_bIsOK	=	FALSE;
	m_xmlDocument.Release();

	m_strVersion.Empty();
	m_nDataVersion = 0;
	m_strBasePath.Empty();
	m_strYearfmt.Empty();
	m_strMonthfmt.Empty();
	m_strDayfmt.Empty();
	m_strInfo.Empty();
	m_strInfourl.Empty();
	m_strLatestver.Empty();
	SetSize( 0 );
}

BOOL CPackages::IsOK( )
{
	return m_bIsOK;
}

BOOL CPackages::AddSmartAdditional( )
{
	CSPTime	tmLatest;
	GetLatestTime( tmLatest, CPackage::packageDay );
	CSPTime	tmNow	=	CSPTime::GetCurrentTime();

	CSPTime	tmBegin	=	tmLatest + CSPTimeSpan( 1, 0, 0, 0 );

	if( !m_strYearfmt.IsEmpty() )
	{
		int nYearStart	=	tmBegin.GetYear();
		int	nYearEnd	=	tmNow.GetYear()-1;
		for( int nYear=nYearStart; nYear<=nYearEnd; nYear ++ )
		{
			CPackage	pac;
			pac.m_bIsTimefmt	=	FALSE;
			pac.m_bIsZipped		=	TRUE;
			pac.m_nLength		=	5000000;
			pac.m_nType			=	CPackage::packageDay;
			pac.m_strDescript.Format( szFmtYearDescript, nYear );
			
			CSPTime	tmYear( nYear, tmBegin.GetMonth(), 1, 0, 0, 0 );
			pac.m_strURL		=	tmYear.Format( m_strYearfmt );
			pac.m_tmFrom		=	CSPTime( nYear, 1, 1, 0, 0, 0 );
			pac.m_tmTo			=	CSPTime( nYear, 12, 31, 23, 59, 59 );
			if( nYear == nYearEnd )
				pac.ExpandYearPackage( m_strMonthfmt, m_strDayfmt, nYear );

			Add( pac );
		}
	}
	
	if( !m_strMonthfmt.IsEmpty() )
	{
		int nMonthStart	=	1;
		if( tmBegin.GetYear() == tmNow.GetYear() )
			nMonthStart	=	tmBegin.GetMonth();
		int	nMonthEnd	=	tmNow.GetMonth()-1;
		for( int nMonth=nMonthStart; nMonth<=nMonthEnd; nMonth ++ )
		{
			CPackage	pac;
			pac.m_bIsTimefmt	=	FALSE;
			pac.m_bIsZipped		=	TRUE;
			pac.m_nLength		=	400000;
			pac.m_nType			=	CPackage::packageDay;
			pac.m_strDescript.Format( szFmtMonthDescript, tmNow.GetYear(), nMonth );
			
			CSPTime	tmMonth( tmNow.GetYear(), nMonth, 1, 0, 0, 0 );
			pac.m_strURL		=	tmMonth.Format( m_strMonthfmt );
			pac.m_tmFrom		=	CSPTime( tmNow.GetYear(), nMonth, 1, 0, 0, 0 );
			pac.m_tmTo			=	CSPTime( tmNow.GetYear(), nMonth, 31, 23, 59, 59 );
			if( nMonth == nMonthEnd )
				pac.ExpandMonthPackage( m_strDayfmt, tmNow.GetYear(), nMonth );

			Add( pac );
		}
	}

	if( !m_strDayfmt.IsEmpty() )
	{
		int	nDayStart	=	1;
		if( tmBegin.GetYear() == tmNow.GetYear() && tmBegin.GetMonth() == tmNow.GetMonth() )
			nDayStart	=	tmBegin.GetDay();
		int nDayEnd	=	tmNow.GetDay();
		for( int nDay=nDayStart; nDay<=nDayEnd; nDay ++ )
		{
			CPackage	pac;
			pac.m_bIsTimefmt	=	FALSE;
			pac.m_bIsZipped		=	FALSE;
			pac.m_nLength		=	20000;
			pac.m_nType			=	CPackage::packageDay;
			pac.m_strDescript.Format( szFmtDayDescript, tmNow.GetYear(), tmNow.GetMonth(), nDay );
			
			CSPTime	tmDay( tmNow.GetYear(), tmNow.GetMonth(), nDay, 23, 0, 0 );
			pac.m_strURL		=	tmDay.Format( m_strDayfmt );
			pac.m_tmFrom		=	CSPTime( tmNow.GetYear(), tmNow.GetMonth(), nDay, 0, 0, 0 );
			pac.m_tmTo			=	CSPTime( tmNow.GetYear(), tmNow.GetMonth(), nDay, 23, 59, 59 );
			
			if( tmDay.GetDayOfWeek() != 1 && tmDay.GetDayOfWeek() != 7 )
				Add( pac );
		}
	}

	return TRUE;
}

BOOL CPackages::SetRawXMLDocument( CString &strDoc )
{
	Clear( );

	m_bIsOK	=	FALSE;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -