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);
     }
 }