/// <summary> /// 接收响应数据 /// </summary> /// <param name="responseType"></param> /// <param name="pData"></param> /// <param name="requestID"></param> protected void ReceiveResponseData(TResponseType responseType, IntPtr pData, int requestID) { if (requestID == 0) { return; } //建立响应数据缓存 if (this.responseDataMap.ContainsKey(requestID) == false) { this.responseDataMap[requestID] = new List <Object>(); } //保存响应数据 if (pData != IntPtr.Zero) { Object value = null; if (responseDataTypeMapping.ContainsKey(responseType)) { Type t = responseDataTypeMapping[responseType]; if (t != null) { value = PInvokeUtility.GetObjectFromIntPtr(t, pData); } } if (value != null) { this.responseDataMap[requestID].Add(value); } } }
protected override CTPResponseInfo GetResponseInfo(IntPtr pRspInfo) { CTPResponseInfo rsp = new CTPResponseInfo(); CThostFtdcRspInfoField rspInfo = PInvokeUtility.GetObjectFromIntPtr <CThostFtdcRspInfoField>(pRspInfo); rsp.ErrorID = rspInfo.ErrorID; rsp.Message = PInvokeUtility.GetUnicodeString(rspInfo.ErrorMsg); return(rsp); }
/// <summary> /// 创建事件参数 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="rspData"></param> /// <param name="rspInfo"></param> /// <returns></returns> protected CTPEventArgs <T> CreateEventArgs <T>(IntPtr rspData, CTPResponseInfo rspInfo) { //转换响应数据 T value = default(T); if (rspData != IntPtr.Zero) { value = PInvokeUtility.GetObjectFromIntPtr <T>(rspData); } //创建事件参数 CTPEventArgs <T> args = new CTPEventArgs <T>(value, rspInfo); return(args); }
/// <summary> /// 订阅行情应答 /// </summary> internal void OnSubMarketData(IntPtr pSpecificInstrument, IntPtr pRspInfo, int nRequestID, bool bIsLast) { CThostFtdcSpecificInstrumentField instrument = PInvokeUtility.GetObjectFromIntPtr <CThostFtdcSpecificInstrumentField>(pSpecificInstrument); }