@@ -21,7 +21,7 @@ using namespace DFITC_L2;
2121void * __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
130131int 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
165166int 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
211212void 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
230231void 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
0 commit comments