public ConnectionCode WithdrawBasket(UFXBasketWithdrawRequest request, Callbacker callbacker) { List <UFXBasketWithdrawRequest> requests = new List <UFXBasketWithdrawRequest> { request }; return(SubmitAsync <UFXBasketWithdrawRequest>(UFXFunctionCode.WithdrawBasket, requests, callbacker)); }
//protected void RemoveDataHandler(FunctionCode funtionCode, Callbacker callbacker) //{ // if (_dataHandlerMap.ContainsKey(funtionCode)) // { // _dataHandlerMap[funtionCode].Dequeue(callbacker); // } //} protected Callbacker GetDataHandler(UFXFunctionCode functionCode, int hSend) { Callbacker callbacker = null; if (_dataHandlerMap.ContainsKey(functionCode)) { var sendCbMap = _dataHandlerMap[functionCode]; if (sendCbMap.ContainsKey(hSend)) { callbacker = sendCbMap[hSend]; sendCbMap.Remove(hSend); } } return(callbacker); }
protected void AddDataHandler(UFXFunctionCode functionCode, int hSend, Callbacker callbacker) { if (_dataHandlerMap.ContainsKey(functionCode)) { if (_dataHandlerMap[functionCode].ContainsKey(hSend)) { _dataHandlerMap[functionCode][hSend] = callbacker; } else { _dataHandlerMap[functionCode].Add(hSend, callbacker); } } else { _dataHandlerMap[functionCode] = new Dictionary <int, Callbacker>(); _dataHandlerMap[functionCode].Add(hSend, callbacker); } }
public ConnectionCode QueryFuturesDeal(List <UFXQueryFuturesDealRequest> requests, Callbacker callbacker) { return(SubmitAsync <UFXQueryFuturesDealRequest>(UFXFunctionCode.QueryFuturesDeal, requests, callbacker)); }
public ConnectionCode QueryFuturesEntrustHistory(List <UFXQueryFuturesHistEntrustRequest> requests, Callbacker callbacker) { return(SubmitAsync <UFXQueryFuturesHistEntrustRequest>(UFXFunctionCode.QueryFuturesEntrustHistorical, requests, callbacker)); }
public ConnectionCode QueryDealHistory(List <UFXQueryHistDealRequest> requests, Callbacker callbacker) { return(SubmitAsync <UFXQueryHistDealRequest>(UFXFunctionCode.QuerySecurityDealHistorical, requests, callbacker)); }
public ConnectionCode QueryEntrust(List <UFXQueryEntrustRequest> requests, Callbacker callbacker) { return(SubmitAsync <UFXQueryEntrustRequest>(UFXFunctionCode.QuerySecurityEntrust, requests, callbacker)); }
public ConnectionCode EntrustBasket(List <UFXBasketEntrustRequest> requests, Callbacker callbacker) { return(SubmitAsync <UFXBasketEntrustRequest>(UFXFunctionCode.EntrustBasket, requests, callbacker)); }
public ConnectionCode Withdraw(List <UFXWithdrawRequest> requests, Callbacker callbacker) { return(SubmitAsync <UFXWithdrawRequest>(UFXFunctionCode.Withdraw, requests, callbacker)); }
public ConnectionCode QueryMultipleHolding(List <UFXHoldingRequest> requests, Callbacker callbacker) { return(SubmitAsync <UFXHoldingRequest>(UFXFunctionCode.QueryMultipleHolding, requests, callbacker)); }
/// <summary> /// 异步调用UFX接口,完成调用之后,如果不出错,则注册回调信息 /// </summary> /// <typeparam name="T">A generic type defines the UFX request parameters.</typeparam> /// <param name="functionCode">An enum type defines the UFX interface number.</param> /// <param name="requests">A generic request list. NOTE: the caller MUST control the request count if the /// interface does not support many requests at a time. /// </param> /// <param name="callbacker">It is used to store the callback information.</param> /// <returns>It is used to define the call result.</returns> public ConnectionCode SubmitAsync <T>(UFXFunctionCode functionCode, List <T> requests, Callbacker callbacker) { FunctionItem functionItem = ConfigManager.Instance.GetFunctionConfig().GetFunctionItem(functionCode); if (functionItem == null || functionItem.RequestFields == null || functionItem.RequestFields.Count == 0) { string msg = string.Format("提交UFX请求号[{0}]未定义!", functionCode); logger.Error(msg); return(ConnectionCode.ErrorNoFunctionCode); } string userToken = LoginManager.Instance.LoginUser.Token; if (string.IsNullOrEmpty(userToken)) { string msg = string.Format("提交UFX请求[{0}]令牌失效!", functionCode); logger.Error(msg); return(ConnectionCode.ErrorLogin); } CT2BizMessage bizMessage = new CT2BizMessage(); //初始化 bizMessage.SetFunction((int)functionCode); bizMessage.SetPacketType(CT2tag_def.REQUEST_PACKET); //业务包 CT2Packer packer = new CT2Packer(2); packer.BeginPack(); foreach (FieldItem item in functionItem.RequestFields) { packer.AddField(item.Name, item.Type, item.Width, item.Scale); } var dataFieldMap = UFXDataBindingHelper.GetProperty <T>(); foreach (var request in requests) { foreach (FieldItem item in functionItem.RequestFields) { if (dataFieldMap.ContainsKey(item.Name)) { SetRequestField <T>(ref packer, request, item, dataFieldMap); } else { SetRequestDefaultField(ref packer, item, userToken); } } } packer.EndPack(); #if DEBUG OutputParam <T>(functionCode, requests); #endif unsafe { bizMessage.SetContent(packer.GetPackBuf(), packer.GetPackLen()); } ConnectionCode retCode = ConnectionCode.Success; int hSend = _t2SDKWrap.SendAsync(bizMessage); if (hSend < 0) { string msg = string.Format("提交UFX请求[{0}]失败, 返回值:[{1}]!", functionCode, hSend); logger.Error(msg); retCode = ConnectionCode.ErrorConn; } else { //注册UFX返回数据后,需要调用的回调 //此处存在假设,异步提交返回之前,不会触发回调 AddDataHandler(functionCode, hSend, callbacker); retCode = ConnectionCode.Success; } packer.Dispose(); bizMessage.Dispose(); return(retCode); }