forked from QuantBox/QuantBox_XAPI
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMdUserApi.h
100 lines (76 loc) · 3.71 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
#pragma once
#include "../include/ApiStruct.h"
#include "../include/LTS/SecurityFtdcMdApi.h"
#ifdef _WIN64
#pragma comment(lib, "../include/LTS/win64/securitymduserapi.lib")
#pragma comment(lib, "../lib/QuantBox_Queue_x64.lib")
#else
#pragma comment(lib, "../include/LTS/win32/securitymduserapi.lib")
#pragma comment(lib, "../lib/QuantBox_Queue_x86.lib")
#endif
#include <set>
#include <string>
#include <atomic>
#include <mutex>
#include <map>
using namespace std;
class CMsgQueue;
class CMdUserApi :
public CSecurityFtdcMdSpi
{
enum RequestType
{
E_Init,
E_ReqUserLoginField,
};
public:
CMdUserApi(void);
virtual ~CMdUserApi(void);
void Register(void* pCallback, void* pClass);
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 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(CSecurityFtdcRspUserLoginField *pRspUserLogin, CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
virtual void OnRspError(CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
virtual void OnRspSubMarketData(CSecurityFtdcSpecificInstrumentField *pSpecificInstrument, CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
virtual void OnRspUnSubMarketData(CSecurityFtdcSpecificInstrumentField *pSpecificInstrument, CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
virtual void OnRtnDepthMarketData(CSecurityFtdcDepthMarketDataField *pDepthMarketData);
//virtual void OnRspSubForQuoteRsp(CSecurityFtdcSpecificInstrumentField *pSpecificInstrument, CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
//virtual void OnRspUnSubForQuoteRsp(CSecurityFtdcSpecificInstrumentField *pSpecificInstrument, CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
//virtual void OnRtnForQuoteRsp(CSecurityFtdcForQuoteRspField *pForQuoteRsp);
//检查是否出错
bool IsErrorRspInfo(CSecurityFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);//将出错消息送到消息队列
bool IsErrorRspInfo(CSecurityFtdcRspInfoField *pRspInfo);//不送出错消息
private:
mutex m_csMapInstrumentIDs;
mutex m_csMapQuoteInstrumentIDs;
atomic<int> m_lRequestID; //请求ID,每次请求前自增
map<string, set<string> > m_mapInstrumentIDs; //正在订阅的合约
map<string, set<string> > m_mapQuoteInstrumentIDs; //正在订阅的合约
CSecurityFtdcMdApi* 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;
CMsgQueue* m_remoteQueue;
};