forked from QuantBox/QuantBox_XAPI
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMdUserApi.h
116 lines (85 loc) · 3.92 KB
/
MdUserApi.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#pragma once
#include "../include/XSpeed/DFITCMdApi.h"
#include "../include/ApiStruct.h"
#ifdef _WIN64
#pragma comment(lib, "../include/XSpeed/win64/DFITCMdApi.lib")
#pragma comment(lib, "../lib/QuantBox_Queue_x64.lib")
#else
#pragma comment(lib, "../include/XSpeed/win32/DFITCMdApi.lib")
#pragma comment(lib, "../lib/QuantBox_Queue_x86.lib")
#endif
#include <set>
#include <list>
#include <map>
#include <hash_map>
#include <string>
#include <mutex>
#include <thread>
#include <atomic>
using namespace std;
using namespace DFITCXSPEEDMDAPI;
class CMsgQueue;
class CMdUserApi :
public DFITCMdSpi
{
//请求数据包类型
enum RequestType
{
E_Init,
E_UserLoginField,
E_TradingDayField,
};
public:
CMdUserApi(void);
virtual ~CMdUserApi(void);
void Register(void* pCallback, void* pClass);
ConfigInfoField* Config(ConfigInfoField* pConfigInfo);
void Connect(const string& szPath,
ServerInfoField* pServerInfo,
UserInfoField* pUserInfo);
void Disconnect();
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);
private:
friend void* __stdcall Query(char type, void* pApi1, void* pApi2, double double1, double double2, void* ptr1, int size1, void* ptr2, int size2, void* ptr3, int size3);
void QueryInThread(char type, void* pApi1, void* pApi2, double double1, double double2, void* ptr1, int size1, void* ptr2, int size2, void* ptr3, int size3);
int _Init();
void ReqUserLogin();
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 ReqTradingDay();
int _ReqTradingDay(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<string>& instrumentIDs, const string& szExchageID);
void SubscribeQuote(const set<string>& instrumentIDs, const string& szExchageID);
virtual void OnFrontConnected();
virtual void OnFrontDisconnected(int nReason);
virtual void OnRspUserLogin(struct DFITCUserLoginInfoRtnField * pRspUserLogin, struct DFITCErrorRtnField * pRspInfo);
virtual void OnRspError(struct DFITCErrorRtnField *pRspInfo);
virtual void OnRspSubMarketData(struct DFITCSpecificInstrumentField * pSpecificInstrument, struct DFITCErrorRtnField * pRspInfo);
virtual void OnRspUnSubMarketData(struct DFITCSpecificInstrumentField * pSpecificInstrument, struct DFITCErrorRtnField * pRspInfo);
virtual void OnMarketData(struct DFITCDepthMarketDataField *pMarketDataField);
//virtual void OnRspSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
//virtual void OnRspUnSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
//virtual void OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp);
virtual void OnRspTradingDay(struct DFITCTradingDayRtnField * pTradingDayRtnData);
//检查是否出错
bool IsErrorRspInfo_Output(struct DFITCErrorRtnField *pRspInfo);//将出错消息送到消息队列
bool IsErrorRspInfo(struct DFITCErrorRtnField *pRspInfo);//不送出错消息
private:
mutex m_csMapInstrumentIDs;
mutex m_csMapQuoteInstrumentIDs;
atomic<long> m_lRequestID; //请求ID,每次请求前自增
set<string> m_setInstrumentIDs; //正在订阅的合约
set<string> m_setQuoteInstrumentIDs; //正在订阅的合约
DFITCMdApi* m_pApi; //行情API
string m_szPath; //生成配置文件的路径
ServerInfoField m_ServerInfo;
UserInfoField m_UserInfo;
int m_nSleep;
CMsgQueue* m_msgQueue; //消息队列指针
CMsgQueue* m_msgQueue_Query;
void* m_pClass;
int m_TradingDay;
};