19#include "ThostFtdcMdApi.h"
40class CtpMdSpi final :
public CThostFtdcMdSpi {
42 explicit CtpMdSpi(CtpMdAdapter* adapter) : adapter_(adapter) {}
43 ~CtpMdSpi() =
default;
45 void OnFrontConnected()
override;
46 void OnFrontDisconnected(
int nReason)
override;
47 void OnRspUserLogin(CThostFtdcRspUserLoginField* pRspUserLogin,
48 CThostFtdcRspInfoField* pRspInfo,
49 int nRequestID,
bool bIsLast)
override;
50 void OnRspSubMarketData(CThostFtdcSpecificInstrumentField* pSpecificInstrument,
51 CThostFtdcRspInfoField* pRspInfo,
52 int nRequestID,
bool bIsLast)
override;
53 void OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField* pSpecificInstrument,
54 CThostFtdcRspInfoField* pRspInfo,
55 int nRequestID,
bool bIsLast)
override;
56 void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField* pDepthMarketData)
override;
57 void OnRspError(CThostFtdcRspInfoField* pRspInfo,
int nRequestID,
bool bIsLast)
override;
58 void OnHeartBeatWarning(
int nTimeLapse)
override;
61 CtpMdAdapter* adapter_;
70class CtpMdAdapter :
public MdAdapter {
71 friend class CtpMdSpi;
80 const CtpMdConfig& config);
82 ~CtpMdAdapter()
override;
85 CtpMdAdapter(
const CtpMdAdapter&) =
delete;
86 CtpMdAdapter& operator=(
const CtpMdAdapter&) =
delete;
89 bool start()
override;
91 bool isRunning()
const override {
return running_.load(); }
94 bool subscribe(
const std::vector<std::string>& instruments)
override;
95 bool unsubscribe(
const std::vector<std::string>& instruments)
override;
97 void setStateCallback(StateCallback callback)
override;
99 std::string getName()
const override {
return "CTP"; }
100 std::string getTradingDay()
const override;
111 void doSubscribePending();
116 void notifyState(MdAdapterState state,
const std::string& message);
121 static MarketData convertMarketData(
const CThostFtdcDepthMarketDataField* pData);
124 CThostFtdcMdApi* api_ =
nullptr;
125 std::unique_ptr<CtpMdSpi> spi_;
127 std::atomic<bool> running_{
false};
128 std::atomic<MdAdapterState> state_{MdAdapterState::DISCONNECTED};
129 std::atomic<int> requestId_{0};
131 mutable std::mutex mutex_;
132 std::set<std::string> subscribedInstruments_;
133 std::set<std::string> pendingSubscribe_;
134 std::string tradingDay_;
144CtpMdConfig loadCtpConfig(
const std::string& filename);
Definition concurrentqueue.h:768
Definition matching_engine.hpp:23
MdAdapterState
行情适配器状态
Definition md_adapter.hpp:24
std::function< void(MdAdapterState state, const std::string &message)> StateCallback
状态变更回调类型
Definition md_adapter.hpp:38