private void OnRspCancelOrder(IntPtr pTraderApi, ref DFITCOrderRspDataRtnField pOrderRtn, ref DFITCErrorRtnField pErrorInfo) { SingleOrder order; if (pErrorInfo.nErrorID != 0) { tdlog.Error("OnRspCancelOrder:请求{0},会话{1},本地{2},柜台{3},错误{4},{5}", pErrorInfo.requestID, pErrorInfo.sessionID, pErrorInfo.localOrderID, pErrorInfo.spdOrderID, pErrorInfo.nErrorID, pErrorInfo.errorMsg); string strKey = string.Format("{0}:{1}", pErrorInfo.sessionID, pErrorInfo.localOrderID); if (_OrderRef2Order.TryGetValue(strKey, out order)) { EmitCancelReject(order, order.OrdStatus, order.Text); } } else { tdlog.Info("OnRspCancelOrder:本地{0},柜台{1},状态{2}", pOrderRtn.localOrderID, pOrderRtn.spdOrderID, pOrderRtn.orderStatus); string strKey = string.Format("{0}:{1}", _RspUserLogin.sessionID, pOrderRtn.localOrderID); if (_OrderRef2Order.TryGetValue(strKey, out order)) { EmitCancelled(order); } } }
private void OnRspError(IntPtr pApi, ref DFITCErrorRtnField pRspInfo) { tdlog.Error("nRequestID:{0},ErrorID:{1},OnRspError:{2},本地{3},柜台{4}", pRspInfo.requestID, pRspInfo.nErrorID, pRspInfo.errorMsg, pRspInfo.localOrderID,pRspInfo.spdOrderID ); // 这个地方有风险,也就是我没法区分下单被取消,还是撤单被取消 SingleOrder order; string strKey = string.Format("{0}:{1}", _RspUserLogin.sessionID, pRspInfo.localOrderID); if (_OrderRef2Order.TryGetValue(strKey, out order)) { EmitCancelled(order); } //EmitError(nRequestID, pRspInfo.ErrorID, pRspInfo.ErrorMsg); }
private void OnRspInsertOrder(IntPtr pTraderApi, ref DFITCOrderRspDataRtnField pOrderRtn, ref DFITCErrorRtnField pErrorInfo) { SingleOrder order; if (pErrorInfo.nErrorID != 0) { tdlog.Error("OnRspInsertOrder:请求{0},会话{1},本地{2},柜台{3},错误{4},{5}", pErrorInfo.requestID, pErrorInfo.sessionID, pErrorInfo.localOrderID, pErrorInfo.spdOrderID, pErrorInfo.nErrorID, pErrorInfo.errorMsg); string strKey = string.Format("{0}:{1}", pErrorInfo.sessionID, pErrorInfo.localOrderID); if (_OrderRef2Order.TryGetValue(strKey, out order)) { order.Text = string.Format("{0}|{1}#{2}", order.Text.Substring(0, Math.Min(order.Text.Length, 64)), pErrorInfo.nErrorID, pErrorInfo.errorMsg); EmitCancelled(order); } } else { tdlog.Info("OnRspInsertOrder:本地{0},柜台{1},状态{2}", pOrderRtn.localOrderID, pOrderRtn.spdOrderID, pOrderRtn.orderStatus); string strKey = string.Format("{0}:{1}", _RspUserLogin.sessionID, pOrderRtn.localOrderID); if (_OrderRef2Order.TryGetValue(strKey, out order)) { _Orders4Cancel[order] = pOrderRtn; EmitAccepted(order); } //else //{ // _OrderRef2Order[strKey] = order; // _Orders4Cancel[order] = pOrderRtn; // EmitAccepted(order); //} } }
private void OnDisconnect(IntPtr pApi, ref DFITCErrorRtnField pRspInfo, ConnectionStatus step) { if (m_pMdApi == pApi)//行情 { _bMdConnected = false; if (isConnected) { mdlog.Error("Step:{0},ErrorID:{1},ErrorMsg:{2},等待定时重试连接", step, pRspInfo.nErrorID, pRspInfo.errorMsg); } else { mdlog.Info("Step:{0},ErrorID:{1},ErrorMsg:{2}", step, pRspInfo.nErrorID, pRspInfo.errorMsg); } } else if (m_pTdApi == pApi)//交易 { _bTdConnected = false; if (isConnected)//如果以前连成功,表示密码没有错,只是初始化失败,可以重试 { tdlog.Error("Step:{0},ErrorID:{1},ErrorMsg:{2},等待定时重试连接", step, pRspInfo.nErrorID, pRspInfo.errorMsg); //if (7 == pRspInfo.ErrorID//综合交易平台:还没有初始化 // || 8 == pRspInfo.ErrorID)//综合交易平台:前置不活跃 //{ // //这个地方登录重试太快了,等定时器来处理吧! // //Disconnect_TD(); // //Connect_TD(); //} } else { tdlog.Info("Step:{0},ErrorID:{1},ErrorMsg:{2}", step, pRspInfo.nErrorID, pRspInfo.errorMsg); } } if (!isConnected)//从来没有连接成功过,可能是密码错误,直接退出 { //不能在线程中停止线程,这样会导致软件关闭进程不退出 //_Disconnect(); } else { //以前连接过,现在断了次线,要等重连 ChangeStatus(ProviderStatus.Connecting); EmitDisconnectedEvent(); } }
private void OnRspQryExchangeInstrument(IntPtr pTraderApi, ref DFITCExchangeInstrumentRtnField pInstrumentData, ref DFITCErrorRtnField pErrorInfo, bool bIsLast) { if (0 == pErrorInfo.nErrorID) { if (pInstrumentData.InstrumentID.Length > 0) { _dictInstruments[pInstrumentData.InstrumentID] = pInstrumentData; if (bIsLast) { tdlog.Info("{0} {1}已经接收完成,当前总计{2}", pInstrumentData.ExchangeID, pInstrumentData.instrumentType, _dictInstruments.Count); } } } else { tdlog.Error("nRequestID:{0},ErrorID:{1},OnRspQryExchangeInstrument:{2}", pErrorInfo.requestID, pErrorInfo.nErrorID, pErrorInfo.errorMsg); EmitError(pErrorInfo.requestID, pErrorInfo.nErrorID, "OnRspQryExchangeInstrument:" + pErrorInfo.errorMsg); } }