Skip to content

Commit 0873d2a

Browse files
committed
完成CTP后,继续将其它版本的库全部改成支持C++回调
1 parent 9f7f153 commit 0873d2a

50 files changed

Lines changed: 651 additions & 614 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

QuantBox_CTP_Quote/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ void* __stdcall XRequest(char type, void* pApi1, void* pApi2, double double1, do
1717
case GetApiType:
1818
return (void*)(ApiType::MarketData | ApiType::QuoteRequest);
1919
case GetApiVersion:
20-
return (void*)"0.2.0.20150226";
20+
return (void*)"0.3.0.20150407";
2121
case GetApiName:
2222
return (void*)"CTP";
2323
case Create:

QuantBox_CTP_Trade/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ void* __stdcall XRequest(char type, void* pApi1, void* pApi2, double double1, do
1616
case GetApiType:
1717
return (void*)(ApiType::Trade | ApiType::Instrument);
1818
case GetApiVersion:
19-
return (void*)"0.2.0.20150309";
19+
return (void*)"0.3.0.20150407";
2020
case GetApiName:
2121
return (void*)"CTP";
2222
case Create:

QuantBox_DFITC_Level2/Level2UserApi.cpp

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ using namespace DFITC_L2;
2121
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)
2222
{
2323
// 由内部调用,不用检查是否为空
24-
CLevel2UserApi* pApi = (CLevel2UserApi*)pApi1;
24+
CLevel2UserApi* pApi = (CLevel2UserApi*)pApi2;
2525
pApi->QueryInThread(type, pApi1, pApi2, double1, double2, ptr1, size1, ptr2, size2, ptr3, size3);
2626
return nullptr;
2727
}
@@ -65,7 +65,7 @@ CLevel2UserApi::CLevel2UserApi(void)
6565
m_msgQueue = new CMsgQueue();
6666
m_msgQueue_Query = new CMsgQueue();
6767

68-
m_msgQueue_Query->Register((void*)Query);
68+
m_msgQueue_Query->Register((void*)Query,this);
6969
m_msgQueue_Query->StartThread();
7070
}
7171

@@ -74,13 +74,14 @@ CLevel2UserApi::~CLevel2UserApi(void)
7474
Disconnect();
7575
}
7676

77-
void CLevel2UserApi::Register(void* pCallback)
77+
void CLevel2UserApi::Register(void* pCallback, void* pClass)
7878
{
79+
m_pClass = pClass;
7980
if (m_msgQueue == nullptr)
8081
return;
8182

82-
m_msgQueue_Query->Register((void*)Query);
83-
m_msgQueue->Register(pCallback);
83+
m_msgQueue_Query->Register((void*)Query,this);
84+
m_msgQueue->Register(pCallback,this);
8485
if (pCallback)
8586
{
8687
m_msgQueue_Query->StartThread();
@@ -103,7 +104,7 @@ bool CLevel2UserApi::IsErrorRspInfo_Output(struct ErrorRtnField * pErrorField)
103104
pField->ErrorID = pErrorField->ErrorID;
104105
strcpy(pField->ErrorMsg, pErrorField->ErrorMsg);
105106

106-
m_msgQueue->Input_NoCopy(ResponeType::OnRtnError, m_msgQueue, this, true, 0, pField, sizeof(ErrorField), nullptr, 0, nullptr, 0);
107+
m_msgQueue->Input_NoCopy(ResponeType::OnRtnError, m_msgQueue, m_pClass, true, 0, pField, sizeof(ErrorField), nullptr, 0, nullptr, 0);
107108
}
108109
return bRet;
109110
}
@@ -123,17 +124,17 @@ void CLevel2UserApi::Connect(const string& szPath,
123124
memcpy(&m_ServerInfo, pServerInfo, sizeof(ServerInfoField));
124125
memcpy(&m_UserInfo, pUserInfo, sizeof(UserInfoField));
125126

126-
m_msgQueue_Query->Input_NoCopy(RequestType::E_Init, this, nullptr, 0, 0,
127+
m_msgQueue_Query->Input_NoCopy(RequestType::E_Init, m_msgQueue_Query, this, 0, 0,
127128
nullptr, 0, nullptr, 0, nullptr, 0);
128129
}
129130

130131
int CLevel2UserApi::_Init()
131132
{
132133
m_pApi = NEW_CONNECTOR();
133134

134-
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Initialized, 0, nullptr, 0, nullptr, 0, nullptr, 0);
135+
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Initialized, 0, nullptr, 0, nullptr, 0, nullptr, 0);
135136

136-
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Connecting, 0, nullptr, 0, nullptr, 0, nullptr, 0);
137+
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Connecting, 0, nullptr, 0, nullptr, 0, nullptr, 0);
137138
//初始化连接
138139
int iRet = m_pApi->Connect(m_ServerInfo.Address, this, m_ServerInfo.IsUsingUdp);
139140
if (0 == iRet)
@@ -146,7 +147,7 @@ int CLevel2UserApi::_Init()
146147
pField->ErrorID = iRet;
147148
strcpy(pField->ErrorMsg, "连接超时");
148149

149-
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Disconnected, 0, pField, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0);
150+
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Disconnected, 0, pField, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0);
150151
}
151152
return iRet;
152153
}
@@ -158,13 +159,13 @@ void CLevel2UserApi::ReqUserLogin()
158159
strcpy(pBody->accountID, m_UserInfo.UserID);
159160
strcpy(pBody->passwd, m_UserInfo.Password);
160161

161-
m_msgQueue_Query->Input_NoCopy(RequestType::E_UserLoginField, this, nullptr, 0, 0,
162+
m_msgQueue_Query->Input_NoCopy(RequestType::E_UserLoginField, m_msgQueue_Query, this, 0, 0,
162163
pBody, sizeof(DFITCUserLoginField), nullptr, 0, nullptr, 0);
163164
}
164165

165166
int CLevel2UserApi::_ReqUserLogin(char type, void* pApi1, void* pApi2, double double1, double double2, void* ptr1, int size1, void* ptr2, int size2, void* ptr3, int size3)
166167
{
167-
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Logining, 0, nullptr, 0, nullptr, 0, nullptr, 0);
168+
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Logining, 0, nullptr, 0, nullptr, 0, nullptr, 0);
168169

169170
DFITCUserLoginField* pBody = (DFITCUserLoginField*)ptr1;
170171
pBody->lRequestID = ++m_lRequestID;
@@ -177,7 +178,7 @@ void CLevel2UserApi::Disconnect()
177178
if (m_msgQueue_Query)
178179
{
179180
m_msgQueue_Query->StopThread();
180-
m_msgQueue_Query->Register(nullptr);
181+
m_msgQueue_Query->Register(nullptr,nullptr);
181182
m_msgQueue_Query->Clear();
182183
delete m_msgQueue_Query;
183184
m_msgQueue_Query = nullptr;
@@ -190,7 +191,7 @@ void CLevel2UserApi::Disconnect()
190191

191192
// 全清理,只留最后一个
192193
m_msgQueue->Clear();
193-
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Disconnected, 0, nullptr, 0, nullptr, 0, nullptr, 0);
194+
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Disconnected, 0, nullptr, 0, nullptr, 0, nullptr, 0);
194195
// 主动触发
195196
m_msgQueue->Process();
196197
}
@@ -199,7 +200,7 @@ void CLevel2UserApi::Disconnect()
199200
if (m_msgQueue)
200201
{
201202
m_msgQueue->StopThread();
202-
m_msgQueue->Register(nullptr);
203+
m_msgQueue->Register(nullptr,nullptr);
203204
m_msgQueue->Clear();
204205
delete m_msgQueue;
205206
m_msgQueue = nullptr;
@@ -210,7 +211,7 @@ void CLevel2UserApi::Disconnect()
210211

211212
void CLevel2UserApi::OnConnected()
212213
{
213-
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Connected, 0, nullptr, 0, nullptr, 0, nullptr, 0);
214+
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Connected, 0, nullptr, 0, nullptr, 0, nullptr, 0);
214215

215216
//连接成功后自动请求登录
216217
ReqUserLogin();
@@ -224,7 +225,7 @@ void CLevel2UserApi::OnDisconnected(int nReason)
224225
pField->ErrorID = nReason;
225226
GetOnFrontDisconnectedMsg(nReason, pField->ErrorMsg);
226227

227-
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Disconnected, 0, pField, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0);
228+
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Disconnected, 0, pField, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0);
228229
}
229230

230231
void CLevel2UserApi::OnRspUserLogin(struct ErrorRtnField * pErrorField)
@@ -233,8 +234,8 @@ void CLevel2UserApi::OnRspUserLogin(struct ErrorRtnField * pErrorField)
233234

234235
if (!IsErrorRspInfo(pErrorField))
235236
{
236-
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Logined, 0, pField, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0);
237-
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Done, 0, nullptr, 0, nullptr, 0, nullptr, 0);
237+
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Logined, 0, pField, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0);
238+
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Done, 0, nullptr, 0, nullptr, 0, nullptr, 0);
238239

239240
//有可能断线了,本处是断线重连后重新订阅
240241
set<string> mapOld = m_setInstrumentIDs;//记下上次订阅的合约
@@ -246,7 +247,7 @@ void CLevel2UserApi::OnRspUserLogin(struct ErrorRtnField * pErrorField)
246247
pField->ErrorID = pErrorField->ErrorID;
247248
strcpy(pField->ErrorMsg, pErrorField->ErrorMsg);
248249

249-
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Disconnected, 0, pField, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0);
250+
m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Disconnected, 0, pField, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0);
250251
}
251252
}
252253

QuantBox_DFITC_Level2/Level2UserApi.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class CLevel2UserApi :public DFITCL2Spi
3737
CLevel2UserApi(void);
3838
virtual ~CLevel2UserApi(void);
3939

40-
void Register(void* pCallback);
40+
void Register(void* pCallback, void* pClass);
4141

4242
void Connect(const string& szPath,
4343
ServerInfoField* pServerInfo,
@@ -102,5 +102,6 @@ class CLevel2UserApi :public DFITCL2Spi
102102

103103
CMsgQueue* m_msgQueue; //消息队列指针
104104
CMsgQueue* m_msgQueue_Query;
105+
void* m_pClass;
105106
};
106107

QuantBox_DFITC_Level2/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ void* __stdcall XRequest(char type, void* pApi1, void* pApi2, double double1, do
1717
case GetApiType:
1818
return (void*)(ApiType::MarketData | ApiType::Level2);
1919
case GetApiVersion:
20-
return (void*)"0.2.0.20150226";
20+
return (void*)"0.3.0.20150407";
2121
case GetApiName:
2222
return (void*)"DFITC_Level2";
2323
case Create:
@@ -39,7 +39,7 @@ void* __stdcall XRequest(char type, void* pApi1, void* pApi2, double double1, do
3939
delete pApi;
4040
return nullptr;
4141
case Register:
42-
pApi->Register(ptr1);
42+
pApi->Register(ptr1, ptr2);
4343
break;
4444
case Connect:
4545
pApi->Connect((const char*)ptr3, (ServerInfoField*)ptr1, (UserInfoField*)ptr2);

0 commit comments

Comments
 (0)