17#include <condition_variable>
21#include "ThostFtdcTraderApi.h"
26class InstrumentManager;
27class CtpTraderAdapter;
32enum class CtpTraderState {
46struct CtpTraderConfig {
47 std::string traderFront;
59class CtpTraderSpi final :
public CThostFtdcTraderSpi {
61 explicit CtpTraderSpi(CtpTraderAdapter* adapter) : adapter_(adapter) {}
62 ~CtpTraderSpi() =
default;
64 void OnFrontConnected()
override;
65 void OnFrontDisconnected(
int nReason)
override;
66 void OnRspAuthenticate(CThostFtdcRspAuthenticateField* pRspAuthenticateField,
67 CThostFtdcRspInfoField* pRspInfo,
68 int nRequestID,
bool bIsLast)
override;
69 void OnRspUserLogin(CThostFtdcRspUserLoginField* pRspUserLogin,
70 CThostFtdcRspInfoField* pRspInfo,
71 int nRequestID,
bool bIsLast)
override;
72 void OnRspQryInstrument(CThostFtdcInstrumentField* pInstrument,
73 CThostFtdcRspInfoField* pRspInfo,
74 int nRequestID,
bool bIsLast)
override;
75 void OnRspError(CThostFtdcRspInfoField* pRspInfo,
int nRequestID,
bool bIsLast)
override;
76 void OnHeartBeatWarning(
int nTimeLapse)
override;
79 CtpTraderAdapter* adapter_;
112class CtpTraderAdapter {
113 friend class CtpTraderSpi;
117 using StateCallback = std::function<void(CtpTraderState state,
const std::string& message)>;
120 using QueryCompleteCallback = std::function<void(
int count)>;
126 explicit CtpTraderAdapter(
const CtpTraderConfig& config);
131 CtpTraderAdapter(
const CtpTraderAdapter&) =
delete;
132 CtpTraderAdapter& operator=(
const CtpTraderAdapter&) =
delete;
148 bool isRunning()
const {
return running_.load(); }
153 CtpTraderState getState()
const {
return state_.load(); }
160 bool waitForReady(
int timeoutSeconds);
166 bool queryInstruments();
173 bool queryInstruments(
const std::string& exchangeId);
180 bool waitForQueryComplete(
int timeoutSeconds);
186 void setInstrumentManager(InstrumentManager* manager) { instrumentManager_ = manager; }
191 void setStateCallback(StateCallback callback) { stateCallback_ = std::move(callback); }
196 void setQueryCompleteCallback(QueryCompleteCallback callback) { queryCompleteCallback_ = std::move(callback); }
201 std::string getTradingDay()
const;
206 int getQueriedInstrumentCount()
const {
return queriedCount_.load(); }
212 void doAuthenticate();
222 void notifyState(CtpTraderState state,
const std::string& message);
224 CtpTraderConfig config_;
225 CThostFtdcTraderApi* api_ =
nullptr;
226 std::unique_ptr<CtpTraderSpi> spi_;
228 std::atomic<bool> running_{
false};
229 std::atomic<CtpTraderState> state_{CtpTraderState::DISCONNECTED};
230 std::atomic<int> requestId_{0};
231 std::atomic<int> queriedCount_{0};
232 std::atomic<bool> queryComplete_{
false};
234 mutable std::mutex mutex_;
235 std::condition_variable readyCv_;
236 std::condition_variable queryCv_;
237 std::string tradingDay_;
239 InstrumentManager* instrumentManager_ =
nullptr;
241 QueryCompleteCallback queryCompleteCallback_;
249CtpTraderConfig loadCtpTraderConfig(
const std::string& filename);
Definition matching_engine.hpp:23
std::function< void(MdAdapterState state, const std::string &message)> StateCallback
状态变更回调类型
Definition md_adapter.hpp:38