NetDB.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:9k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. /*
  2. Cross Platform Core Code.
  3. Copyright(R) 2001-2002 Balang Software.
  4. All rights reserved.
  5. Using:
  6. class CCodeTable;
  7. class CNetDatabase;
  8. */
  9. #ifndef __ND_STKNET_NETDB_H__
  10. #define __ND_STKNET_NETDB_H__
  11. #include "XMLDoc.h"
  12. #include "QSProfile.h"
  13. class CPackages;
  14. /***
  15. 数据包类,表示一个数据包
  16. */
  17. class STKNET_API CPackage : public CXMLNode
  18. {
  19. public:
  20. CPackage( );
  21. CPackage( const CPackage &src );
  22. virtual ~CPackage( );
  23. enum PackageTypes {
  24. packageUnknown = 0x00,
  25. packageCode = 0x01,
  26. packageDay = 0x02,
  27. packageMin5 = 0x03,
  28. packageDR = 0x04,
  29. packageBasetext = 0x05,
  30. packageBasetable= 0x06,
  31. };
  32. // virtual operation
  33. virtual BOOL SetAttribute( CMarkup & markup );
  34. CPackage & operator = ( const CPackage &src );
  35. BOOL operator<(CPackage& p) const;
  36. CString GetURL( CString strBasePath ); // 该数据包的URL
  37. BOOL HasAlternateURL( ) const; // 该数据包是否有替代URL
  38. CString GetAlternateURL( CString strBasePath ); // 该数据包的替代URL
  39. BOOL HasExpandPackage( ) const; // 该数据包是否有扩展的数据包
  40. BOOL ExpandYearPackage( CString strMonthfmt, CString strDayfmt, int nYear ); // 将年数据包扩展成12个月份分数据包
  41. BOOL ExpandMonthPackage( CString strDayfmt, int nYear, int nMonth ); // 将月数据包扩展成日分数据包
  42. CPackages * GetExpandPackages( ); // 得到扩展数据包
  43. void DeleteExpandPackages( ); // 释放扩展数据包
  44. CString m_strURL;
  45. CString m_strAlternateURL;
  46. int m_nType;
  47. CSPTime m_tmFrom;
  48. CSPTime m_tmTo;
  49. int m_nLength;
  50. CString m_strDescript;
  51. BOOL m_bIsZipped;
  52. BOOL m_bIsTimefmt;
  53. // temp data
  54. BOOL m_bDownloadOK;
  55. CString m_strLocalFilename;
  56. CPackages * m_pExpandPackages;
  57. };
  58. typedef CArray<CPackage, CPackage &> CPackageArray;
  59. /***
  60. 数据包数组
  61. */
  62. class STKNET_API CPackages : public CPackageArray
  63. {
  64. public:
  65. CPackages( );
  66. virtual ~CPackages( );
  67. void Clear( );
  68. BOOL IsOK( );
  69. BOOL SetRawXMLDocument( CString &strDoc ); // 设定原始XML文档,包含各种数据包信息
  70. virtual BOOL SetAttribute( CMarkup & markup ); // 设定数据包数组的综合信息
  71. BOOL AddSmartAdditional( ); // 为没一个数据包自动加入扩展数据包
  72. BOOL ExtractFromXMLDoc( ); // 获取数据包信息
  73. void Sort( ); // 数据包按时间排序
  74. void AppendPackages( CPackages * psrc );
  75. BOOL GetLatestTime( CSPTime &tm, int packagetype );
  76. virtual BOOL GetLastErrorMessage(LPTSTR lpszError, UINT nMaxError);
  77. public:
  78. BOOL m_bIsOK;
  79. CXMLDocument m_xmlDocument;
  80. CString m_strVersion;
  81. int m_nDataVersion;
  82. CString m_strBasePath;
  83. CString m_strYearfmt;
  84. CString m_strMonthfmt;
  85. CString m_strDayfmt;
  86. CString m_strInfo;
  87. CString m_strInfourl;
  88. CString m_strLatestver;
  89. };
  90. /***
  91. 产品服务器信息类,表示一个产品服务器
  92. */
  93. class STKNET_API CDownloadServer : public CXMLNode
  94. {
  95. public:
  96. CDownloadServer( ) { };
  97. CDownloadServer( const CDownloadServer &src );
  98. virtual ~CDownloadServer( ) { };
  99. // virtual operation
  100. CDownloadServer & operator = ( const CDownloadServer & src );
  101. virtual BOOL SetAttribute( CMarkup & markup );
  102. BOOL FromString( CString string );
  103. CString AsString( );
  104. CString m_strAddress;
  105. UINT m_nPort;
  106. CString m_strDescript;
  107. };
  108. typedef CArray<CDownloadServer, CDownloadServer &> CDownloadServerArray;
  109. BOOL AliasSetAttribute( CMarkup & markup, CAlias & alias );
  110. BOOL QuoteServerSetAttribute( CMarkup & markup, CQuoteServer & qs );
  111. /***
  112. 产品服务器数组
  113. */
  114. class STKNET_API CServers
  115. {
  116. public:
  117. CServers( );
  118. virtual ~CServers( );
  119. void Clear( );
  120. BOOL IsOK( );
  121. BOOL SetRawXMLDocument( CString &strDoc );
  122. virtual BOOL SetAttribute( CMarkup & markup );
  123. BOOL ExtractFromXMLDoc( );
  124. virtual BOOL GetLastErrorMessage(LPTSTR lpszError, UINT nMaxError);
  125. BOOL SaveToProfile( );
  126. public:
  127. BOOL m_bIsOK;
  128. CXMLDocument m_xmlDocument;
  129. CString m_strVersion;
  130. CDownloadServerArray m_aDownloadServers;
  131. CQuoteServerArray m_aQuoteServers;
  132. CAliasArray m_aAliases;
  133. };
  134. #define ERR_NETDB_HTTPCLIENT ERR_DB_MAX+1
  135. #define ERR_NETDB_PACKAGES ERR_DB_MAX+2
  136. #define ERR_NETDB_SERVERS ERR_DB_MAX+3
  137. #define ERR_NETDB_ZIPDLL ERR_DB_MAX+4
  138. #define ERR_NETDB_ZIP ERR_DB_MAX+5
  139. #define PROG_HTTPCONNECTTING PROG_PROGRESS+1
  140. #define PROG_REQUESTSENT PROG_PROGRESS+2
  141. #define PROG_REDIRECTING PROG_PROGRESS+3
  142. #define PROG_TRANSFERRING PROG_PROGRESS+4
  143. #define PROG_INSTALLPACKAGE PROG_PROGRESS+5
  144. #define PROG_EXTRACTZIPFILES PROG_PROGRESS+6
  145. #define PROG_ERRORPAC PROG_PROGRESS+7
  146. #define PROG_NEWGROUP PROG_PROGRESS+8
  147. #define PROG_NEWGROUPMSG PROG_PROGRESS+9
  148. /***
  149. 网络数据类,提供对磁盘数据的操作接口,包括股票信息,各种周期K线数据,基本
  150. 资料,权息资料的读取和安装。
  151. 使用方法如下:
  152. CStDatabase::CreateSelfDB( "./" );
  153. CNetDatabase db;
  154. db.SetRootPath( "./", IStStore::typeSelfDB );
  155. CStockContainer container;
  156. nLen = db.LoadCodetable( container );
  157. db.LoadBasetable( container );
  158. db.LoadKDataCache( container, NULL, NULL, 0, 0 );
  159. CStock stock;
  160. stock.SetDatabase( &db );
  161. stock.PrepareData( CStock::dataK, CKData::ktypeDay );
  162. stock.PrepareData( CStock::dataDR );
  163. stock.PrepareData( CStock::dataK, m_nCurKType );
  164. CStockInfo & info = stock.GetStockInfo();
  165. CKData & kday = stock.GetKDataDay();
  166. CKData & kdata = stock.GetKData(m_nCurKType);
  167. kday.SetDRData( stock.GetDRData() );
  168. kday.ChangeCurFormat( CKData::formatXDRdown, AfxGetProfile().GetAutoResumeDRBegin(), AfxGetProfile().GetAutoResumeDRLimit() );
  169. 注意:与父类CStDatabase的用法相同
  170. */
  171. class STKNET_API CNetDatabase : public CStDatabase
  172. {
  173. public:
  174. CNetDatabase();
  175. virtual ~CNetDatabase();
  176. BOOL SetServer( LPCTSTR lpszServer, INTERNET_PORT port = INTERNET_DEFAULT_HTTP_PORT ); // 设定服务器
  177. BOOL SetAccessType( int nAccessType, int nProxyType, LPCTSTR lpszProxyAddress, UINT nProxyPort,
  178. LPCSTR lpszProxyUser, LPCTSTR lpszProxyPasswd ); // 设定代理选项
  179. BOOL Login( LPCTSTR lpszRegCode, LPCTSTR lpszUserName, LPCTSTR lpszPasswd, LPCTSTR lpszVersion ); // 登陆服务器
  180. BOOL Logout( ); // 退出登陆
  181. BOOL NetloadPackageInfo( PROGRESS_CALLBACK fnCallback, void *cookie ); // 从网络下载数据包信息文件(.xml)
  182. BOOL NetloadServerInfo( PROGRESS_CALLBACK fnCallback, void *cookie ); // 从网络下载服务器信息文件(.xml)
  183. int NetloadCodetbl( PROGRESS_CALLBACK fnCallback, void *cookie ); // 从网络下载股票代码表
  184. int NetloadDayKLine( LPCTSTR lpszStockCode, CSPTime *ptmFrom, CSPTime *ptmTo, PROGRESS_CALLBACK fnCallback, void *cookie ); // 从网络下载日K线数据
  185. int Netload5MinKLine( LPCTSTR lpszStockCode, CSPTime *ptmFrom, CSPTime *ptmTo, PROGRESS_CALLBACK fnCallback, void *cookie ); // 从网络下载5分钟K线数据
  186. int NetloadDRData( LPCTSTR lpszStockCode, CSPTime *ptmFrom, CSPTime *ptmTo, PROGRESS_CALLBACK fnCallback, void *cookie ); // 从网络下载除权除息数据
  187. int NetloadBasetext( LPCTSTR lpszStockCode, CSPTime *ptmFrom, CSPTime *ptmTo, PROGRESS_CALLBACK fnCallback, void *cookie ); // 从网络下载F10基本资料文本
  188. int NetloadBasetable( LPCTSTR lpszStockCode, CSPTime *ptmFrom, CSPTime *ptmTo, PROGRESS_CALLBACK fnCallback, void *cookie ); // 从网络下载财务资料表
  189. int NetloadPackage( int nPackageType, CSPTime &tmFrom, CSPTime &tmTo, PROGRESS_CALLBACK fnCallback, void *cookie ); // 根据类型和起止日期从网络下载数据包
  190. BOOL GetLatestTimeNet( CSPTime &tm, int packagetype ); // 得到服务器上最近的数据日期
  191. CServers & GetServers( ); // 得到所有服务器列表
  192. CPackages & GetPackages( ); // 得到所有数据包列表
  193. // CStDatabase virtual functions
  194. virtual BOOL GetLastErrorMessage(LPTSTR lpszError, UINT nMaxError); // 得到最近错误信息
  195. static CString GetProgressMessage(UINT nProgressCode); // 得到进度说明
  196. virtual int GetMaxStockNumber( ); // 得到股票数量
  197. virtual int LoadCodetable( CStockContainer & container ); // 读取所有股票的信息
  198. virtual int LoadBaseText( CStock *pstock ); // 读取某一股票的基本资料文本
  199. virtual int LoadKData( CStock *pstock, int period ); // 读取某一股票的某个周期的K线数据
  200. virtual int LoadDRData( CStock *pstock ); // 读取某一股票的除权除息资料
  201. BOOL InstallPackageEx( CPackage &pac, const char *zipfilename,
  202. PROGRESS_CALLBACK fnCallback, void *cookie ); // 安装数据包
  203. BOOL InstallPackagePath( CPackage &pac, const char *path,
  204. PROGRESS_CALLBACK fnCallback, void *cookie,
  205. int nTotalCount, int nFinishCount, BOOL bDeleteAfterInstall = TRUE );
  206. BOOL InstallPackage( CPackage &pac, const char *filename,
  207. PROGRESS_CALLBACK fnCallback, void *cookie );
  208. BOOL EmptyTempDirectory( LPCTSTR lpszPath = NULL ); // 清空某个目录
  209. static int GetFileCount( const char * path, BOOL bRecurse = TRUE ); // 得到某个目录下的文件个数
  210. protected:
  211. BOOL GetTempFile( CString &rString );
  212. BOOL RemoveTempFile( CString sFileName );
  213. BOOL OpenTempFile( CFile &file );
  214. BOOL CloseAndRemoveTempFile( CFile &file );
  215. BOOL GetTempNewDirectory( CString &sTempNewDir );
  216. BOOL RemoveTempNewDirectory( CString sTempNewDir );
  217. protected:
  218. CPackages m_packages;
  219. CServers m_servers;
  220. CHttpClient m_httpClient;
  221. };
  222. #endif //__ND_STKNET_NETDB_H__