📄 netdb.cpp.svn-base
字号:
/*
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 + -