TWSocket.h
上传用户:nameszq
上传日期:2014-08-12
资源大小:336k
文件大小:5k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. #if !defined(AFX_TWSOCKET_H__27C0E676_3F6B_49A7_91C2_1C3A4DC2116A__INCLUDED_)
  2. #define AFX_TWSOCKET_H__27C0E676_3F6B_49A7_91C2_1C3A4DC2116A__INCLUDED_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. // TWSocket.h : header file
  7. //
  8. #include "ProxySocket.h"
  9. #include "TW.h"
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CTWSocket command target
  12. class CSimpTWCommand
  13. {
  14. public:
  15. int m_nDataType; // Data Type, such as FILE_HISTORY_EX, FILE_MINUTE_EX
  16. int m_nType; // Stock Type
  17. char m_szCode[32]; // Stock Code
  18. long m_time; // The time of appending this command, return from time(NULL).
  19. CSimpTWCommand( )
  20. {
  21. m_nDataType = 0;
  22. m_nType = 0;
  23. memset(m_szCode,0,sizeof(m_szCode));
  24. m_time = 0;
  25. }
  26. CSimpTWCommand( int nDataType, int nStockType, char * szCode, long time )
  27. : m_nDataType(nDataType), m_nType(nStockType), m_time(time)
  28. {
  29. memset(m_szCode,0,sizeof(m_szCode));
  30. strncpy( m_szCode, szCode, min(sizeof(m_szCode)-1,strlen(szCode)) );
  31. }
  32. CSimpTWCommand( const CSimpTWCommand & src )
  33. {
  34. *this = src;
  35. }
  36. CSimpTWCommand & operator = ( const CSimpTWCommand & src )
  37. {
  38. m_nDataType = src.m_nDataType;
  39. m_nType = src.m_nType;
  40. memcpy( m_szCode, src.m_szCode, sizeof(m_szCode) );
  41. m_time = src.m_time;
  42. return *this;
  43. }
  44. };
  45. typedef CArray< CSimpTWCommand, CSimpTWCommand &> CSimpTWCommandArray;
  46. #define TWCMD_DATATYPE_COUNT 12
  47. class CTWCommand
  48. {
  49. public:
  50. int m_nDataType;
  51. CTWStockArray m_stocks;
  52. int m_nKType;
  53. int m_nDataCount;
  54. CTWCommand( )
  55. {
  56. m_nDataType = 0;
  57. m_nKType = 0;
  58. m_nDataCount = 0;
  59. }
  60. CTWCommand( int nDataType, TW_STOCK * pStocks, int nSize, int nKType, int nDataCount )
  61. : m_nDataType(nDataType), m_nKType(nKType), m_nDataCount(nDataCount)
  62. {
  63. m_stocks.SetSize( 0, nSize+1 );
  64. for( int i=0; i<nSize; i++ )
  65. m_stocks.Add( pStocks[i] );
  66. }
  67. CTWCommand( const CTWCommand & src )
  68. {
  69. *this = src;
  70. }
  71. CTWCommand & operator = ( const CTWCommand & src )
  72. {
  73. m_nDataType = src.m_nDataType;
  74. m_stocks.Copy( src.m_stocks );
  75. m_nKType = src.m_nKType;
  76. m_nDataCount= src.m_nDataCount;
  77. return *this;
  78. }
  79. };
  80. typedef CArray< CTWCommand, CTWCommand &> CTWCommandArray;
  81. class CTWSocket : public CProxySocket
  82. {
  83. // Attributes
  84. public:
  85. static CTWSocket & GetInstance( );
  86. static void Init( );
  87. static void Release( );
  88. BOOL IsWorking( );
  89. BOOL BeginWorking(LPCTSTR lpszHostAddress, UINT nHostPort, LPCTSTR lpszUser, LPCTSTR lpszPasswd );
  90. BOOL BeginWorking( );
  91. void EndWorking( );
  92. BOOL Login( LPCTSTR lpszUser, LPCTSTR lpszPasswd );
  93. int  SetAutoReport( int bAutoReport = FALSE );
  94. int  GetAutoReport( );
  95. BOOL OnNewCommand( int DataType, TW_STOCK *pstock,
  96. int nMinTimeGap /* the minimum time gap of two same command. */  );
  97. void PushCommand( CTWCommand & cmd );
  98. BOOL PopCommand( CTWCommand & cmd );
  99. BOOL IsReceiving() { return m_bIsReceiving; }
  100. int RequestStockData( int nDataType, TW_STOCK * pStocks, int nSize, int nKType, int nDataCount );
  101. int RequestInit( );
  102. int RequestReport( TW_STOCK * pStock, int nSize );
  103. int RequestHistory( TW_STOCK * pStock, int nSize, int nKType, int nDataCount );
  104. int RequestMinute( TW_STOCK * pStock, int nSize );
  105. int RequestPower( TW_STOCK * pStock, int nSize );
  106. int RequestMultisort( TW_STOCK * pStock, int nSize );
  107. int RequestDetail( TW_STOCK * pStock, int nSize );
  108. int RequestBase( TW_STOCK * pStock, int nSize );
  109. int RequestNews( TW_STOCK * pStock, int nSize );
  110. int RequestHtml( TW_STOCK * pStock, int nSize );
  111. int RequestSoftware( TW_STOCK * pStock, int nSize );
  112. int RequestShazqdata( TW_STOCK * pStock, int nSize );
  113. // Operations
  114. public:
  115. CTWSocket();
  116. virtual ~CTWSocket();
  117. // Overrides
  118. public:
  119. // ClassWizard generated virtual function overrides
  120. //{{AFX_VIRTUAL(CTWSocket)
  121. public:
  122. virtual void OnClose(int nErrorCode);
  123. virtual void OnConnect(int nErrorCode);
  124. virtual void OnReceive(int nErrorCode);
  125. virtual void OnSend(int nErrorCode);
  126. virtual int Receive(void* lpBuf, int nBufLen, int nFlags = 0);
  127. virtual int Send(const void* lpBuf, int nBufLen, int nFlags = 0);
  128. //}}AFX_VIRTUAL
  129. // Generated message map functions
  130. //{{AFX_MSG(CTWSocket)
  131. // NOTE - the ClassWizard will add and remove member functions here.
  132. //}}AFX_MSG
  133. // Implementation
  134. protected:
  135. CString m_strHostAddress;
  136. UINT m_nHostPort;
  137. CString m_strUser;
  138. CString m_strPasswd;
  139. BOOL m_bIsReceiving;
  140. time_t m_timeReceiveLast;
  141. CCriticalSection m_mutex;
  142. CMapStringToPtr m_mapCommands;
  143. CTWCommandArray m_queueCommands;
  144. int m_bAutoReport;
  145. BYTE m_rbuffer[0x10000]; // 64k bytes receive buffer
  146. };
  147. /////////////////////////////////////////////////////////////////////////////
  148. //{{AFX_INSERT_LOCATION}}
  149. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  150. #endif // !defined(AFX_TWSOCKET_H__27C0E676_3F6B_49A7_91C2_1C3A4DC2116A__INCLUDED_)