diff --git a/QuantBox_TongShi_Quote/MdUserApi.cpp b/QuantBox_TongShi_Quote/MdUserApi.cpp index f7d8a96..0721873 100644 --- a/QuantBox_TongShi_Quote/MdUserApi.cpp +++ b/QuantBox_TongShi_Quote/MdUserApi.cpp @@ -21,6 +21,7 @@ #include #include +#include #include "resource.h" #include "DialogStockDrv.h" @@ -47,14 +48,10 @@ LRESULT CMdUserApi::_OnMsg(WPARAM wParam, LPARAM lParam) RCV_REPORT_STRUCTEx* pFirst = &pHeader->m_pReport[0]; RCV_REPORT_STRUCTEx* pLast = &pHeader->m_pReport[pHeader->m_nPacketNum - 1]; - // 前后都不合要求才跳过 - if (FilterExchangeInstrument(pFirst->m_wMarket, 0) || FilterExchangeInstrument(pLast->m_wMarket, 0)) + for (i = 0; i < pHeader->m_nPacketNum; i++) { - for (i = 0; i < pHeader->m_nPacketNum; i++) - { - // 数据处理 - OnRtnDepthMarketData(&pHeader->m_pReport[i], i, pHeader->m_nPacketNum); - } + // 数据处理 + OnRtnDepthMarketData(&pHeader->m_pReport[i], i, pHeader->m_nPacketNum); } } break; @@ -289,6 +286,23 @@ void CMdUserApi::Disconnect() } } +void CMdUserApi::Subscribe(const string& szInstrumentIDs, const string& szExchangeID) +{ + if (nullptr == m_hThread) + return; + + set& instruments = m_DictSet[szExchangeID]; + instruments.insert(szInstrumentIDs); +} + +void CMdUserApi::Unsubscribe(const string& szInstrumentIDs, const string& szExchangeID) +{ + if (nullptr == m_hThread) + return; + set& instruments = m_DictSet[szExchangeID]; + instruments.erase(szInstrumentIDs); +} + void CMdUserApi::OnRspQryInstrument(DepthMarketDataNField* _pField,RCV_REPORT_STRUCTEx *pDepthMarketData, int index, int Count) { InstrumentField* pField = (InstrumentField*)m_msgQueue->new_block(sizeof(InstrumentField)); @@ -324,20 +338,20 @@ void CMdUserApi::OnRspQryInstrument(DepthMarketDataNField* _pField,RCV_REPORT_ST } -bool CMdUserApi::FilterExchangeInstrument(WORD wMarket, int instrument) +bool CMdUserApi::FilterExchangeInstrument(WORD wMarket, string instrument) { - // 行情太多,需要过滤 - return (bool)m_msgQueue->Input_Output(ResponeType::OnFilterSubscribe, m_msgQueue, m_pClass, Market_2_ExchangeType(wMarket), 0, nullptr, instrument, nullptr, 0, nullptr, 0); + // 这里我乱写一个,暂时不知道通视对市场的定义 + string szExchangeID = wMarket == 0 ? "SS" : "SZ"; + set& instruments = m_DictSet[szExchangeID]; + set::iterator it = instruments.find(instrument); + return it != instruments.end(); } //行情回调,得保证此函数尽快返回 void CMdUserApi::OnRtnDepthMarketData(RCV_REPORT_STRUCTEx *pDepthMarketData, int index, int Count) { // 把不想要的过滤了,加快速度 - if (!FilterExchangeInstrument( - pDepthMarketData->m_wMarket, - atoi(pDepthMarketData->m_szLabel)) - ) + if (!FilterExchangeInstrument(pDepthMarketData->m_wMarket, pDepthMarketData->m_szLabel)) return; DepthMarketDataNField* pField = (DepthMarketDataNField*)m_msgQueue->new_block(sizeof(DepthMarketDataNField)+sizeof(DepthField)* 10); diff --git a/QuantBox_TongShi_Quote/MdUserApi.h b/QuantBox_TongShi_Quote/MdUserApi.h index 9555c92..598e76f 100644 --- a/QuantBox_TongShi_Quote/MdUserApi.h +++ b/QuantBox_TongShi_Quote/MdUserApi.h @@ -19,6 +19,7 @@ #include #include #include +#include using namespace std; @@ -56,13 +57,22 @@ class CMdUserApi void InitDriver(HWND hWnd, UINT Msg); void QuitDriver(); - //void Subscribe(const string& szInstrumentIDs, const string& szExchageID); - //void Unsubscribe(const string& szInstrumentIDs, const string& szExchageID); - //void SubscribeQuote(const string& szInstrumentIDs, const string& szExchageID); - //void UnsubscribeQuote(const string& szInstrumentIDs, const string& szExchageID); + // ¶Ľӿ +#define Subscibe_Regex = 0x00000001, // ַʽ +#define Subscibe_Last = 0x00000002, // һʱײӦðǰеĶ()ۺһ𷢳 +#define Subscibe_All = 0x00000004, // ȫģ ʱInstrumentIDָ + + void Subscribe(const string& InstrumentID, int Flags); + void Unsubscribe(const string& InstrumentID, int Flags); + + void Subscribe(const string& szInstrumentIDs, const string& szExchangeID); + void Unsubscribe(const string& szInstrumentIDs, const string& szExchangeID); + + //void SubscribeQuote(const string& szInstrumentIDs, const string& szExchangeID); + //void UnsubscribeQuote(const string& szInstrumentIDs, const string& szExchangeID); private: - bool FilterExchangeInstrument(WORD wMarket, int instrument); + bool FilterExchangeInstrument(WORD wMarket, string instrument); void StartThread(); void StopThread(); @@ -84,8 +94,8 @@ class CMdUserApi //int _ReqUserLogin(char type, void* pApi1, void* pApi2, double double1, double double2, void* ptr1, int size1, void* ptr2, int size2, void* ptr3, int size3); // - void Subscribe(const set& instrumentIDs, const string& szExchageID); - void SubscribeQuote(const set& instrumentIDs, const string& szExchageID); + void Subscribe(const set& instrumentIDs, const string& szExchangeID); + void SubscribeQuote(const set& instrumentIDs, const string& szExchangeID); //virtual void OnFrontConnected(); //virtual void OnFrontDisconnected(int nReason); @@ -121,6 +131,8 @@ class CMdUserApi UserInfoField m_UserInfo; int m_nSleep; + map> m_DictSet; //Լ + CMsgQueue* m_msgQueue; //Ϣָ //CMsgQueue* m_msgQueue_Query; void* m_pClass; diff --git a/QuantBox_TongShi_Quote/suggest.txt b/QuantBox_TongShi_Quote/suggest.txt new file mode 100644 index 0000000..19003e6 --- /dev/null +++ b/QuantBox_TongShi_Quote/suggest.txt @@ -0,0 +1,7 @@ + // ¶Ľӿ +#define Subscibe_Regex = 0x00000001, // ַʽ +#define Subscibe_Last = 0x00000002, // һʱײӦðǰеĶ()ۺһ𷢳 +#define Subscibe_All = 0x00000004, // ȫģ ʱInstrumentIDָ + + void Subscribe(const string& InstrumentID, int Flags); + void Unsubscribe(const string& InstrumentID, int Flags); \ No newline at end of file