-
Notifications
You must be signed in to change notification settings - Fork 239
Expand file tree
/
Copy pathMdUserApi.h
More file actions
135 lines (98 loc) · 5.36 KB
/
MdUserApi.h
File metadata and controls
135 lines (98 loc) · 5.36 KB
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#pragma once
#include "../include/XSpeed_Stock/DFITCSECMdApi.h"
#include "../include/ApiStruct.h"
#ifdef _WIN64
#pragma comment(lib, "../include/XSpeed_Stock/win64/DFITCSECMdApi.lib")
#pragma comment(lib, "../lib/QuantBox_Queue_x64.lib")
#else
#pragma comment(lib, "../include/XSpeed_Stock/win32/DFITCSECMdApi.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;
class CMsgQueue;
class CMdUserApi :
public DFITCSECMdSpi
{
//请求数据包类型
enum RequestType
{
E_Init,
E_StockUserLoginField,
E_SOPUserLoginField,
E_FASLUserLoginField,
E_ReqStockQuotQryField,
E_ReqSOPQuotQryField,
};
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);
void ReqQryInstrument(const string& szInstrumentId, const string& szExchange);
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 ReqStockUserLogin();
int _ReqStockUserLogin(char type, void* pApi1, void* pApi2, double double1, double double2, void* ptr1, int size1, void* ptr2, int size2, void* ptr3, int size3);
void ReqStockAvailableQuotQry(const string& szInstrumentId, const string& szExchange);
int _ReqStockAvailableQuotQry(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);
//登录请求
//void ReqSOPUserLogin();
//void ReqFASLUserLogin();
virtual void OnFrontConnected();
virtual void OnFrontDisconnected(int nReason);
virtual void OnRspError(struct DFITCSECRspInfoField *pRspInfo);
virtual void OnRspStockUserLogin(struct DFITCSECRspUserLoginField * pRspUserLogin, struct DFITCSECRspInfoField * pRspInfo);
//virtual void OnRspSOPUserLogin(struct DFITCSECRspUserLoginField * pRspUserLogin, struct DFITCSECRspInfoField * pRspInfo);
//virtual void OnRspFASLUserLogin(struct DFITCSECRspUserLoginField * pRspUserLogin, struct DFITCSECRspInfoField * pRspInfo);
virtual void OnRspStockSubMarketData(struct DFITCSECSpecificInstrumentField * pSpecificInstrument, struct DFITCSECRspInfoField * pRspInfo);
virtual void OnRspStockUnSubMarketData(struct DFITCSECSpecificInstrumentField * pSpecificInstrument, struct DFITCSECRspInfoField * pRspInfo);
virtual void OnStockMarketData(struct DFITCStockDepthMarketDataField *pMarketDataField);
//virtual void OnRspSOPSubMarketData(struct DFITCSECSpecificInstrumentField * pSpecificInstrument, struct DFITCSECRspInfoField * pRspInfo);
//virtual void OnRspSOPUnSubMarketData(struct DFITCSECSpecificInstrumentField * pSpecificInstrument, struct DFITCSECRspInfoField * pRspInfo);
//virtual void OnSOPMarketData(struct DFITCSOPDepthMarketDataField *pMarketDataField);
//virtual void OnRspFASLSubMarketData(struct DFITCSpecificInstrumentField * pSpecificInstrument, struct DFITCErrorRtnField * pRspInfo);
//virtual void OnRspFASLUnSubMarketData(struct DFITCSpecificInstrumentField * pSpecificInstrument, struct DFITCErrorRtnField * pRspInfo);
//virtual void OnFASLMarketData(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 OnRspStockAvailableQuot(struct DFITCRspQuotQryField * pAvailableQuotInfo, struct DFITCSECRspInfoField * pRspInfo, bool flag);
//virtual void OnRspSopAvailableQuot(struct DFITCRspQuotQryField * pAvailableQuotInfo, struct DFITCSECRspInfoField * pRspInfo, bool flag);
//检查是否出错
bool IsErrorRspInfo_Output(struct DFITCSECRspInfoField *pRspInfo);//将出错消息送到消息队列
bool IsErrorRspInfo(struct DFITCSECRspInfoField *pRspInfo);//不送出错消息
private:
mutex m_csMapInstrumentIDs;
mutex m_csMapQuoteInstrumentIDs;
atomic<long> m_lRequestID; //请求ID,每次请求前自增
map<string, set<string> > m_mapInstrumentIDs; //正在订阅的合约
DFITCSECMdApi* 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;
};