Пример #1
0
        public ConnectionCode WithdrawBasket(UFXBasketWithdrawRequest request, Callbacker callbacker)
        {
            List <UFXBasketWithdrawRequest> requests = new List <UFXBasketWithdrawRequest> {
                request
            };

            return(SubmitAsync <UFXBasketWithdrawRequest>(UFXFunctionCode.WithdrawBasket, requests, callbacker));
        }
Пример #2
0
        //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);
        }
Пример #3
0
 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);
     }
 }
Пример #4
0
 public ConnectionCode QueryFuturesDeal(List <UFXQueryFuturesDealRequest> requests, Callbacker callbacker)
 {
     return(SubmitAsync <UFXQueryFuturesDealRequest>(UFXFunctionCode.QueryFuturesDeal, requests, callbacker));
 }
Пример #5
0
 public ConnectionCode QueryFuturesEntrustHistory(List <UFXQueryFuturesHistEntrustRequest> requests, Callbacker callbacker)
 {
     return(SubmitAsync <UFXQueryFuturesHistEntrustRequest>(UFXFunctionCode.QueryFuturesEntrustHistorical, requests, callbacker));
 }
Пример #6
0
 public ConnectionCode QueryDealHistory(List <UFXQueryHistDealRequest> requests, Callbacker callbacker)
 {
     return(SubmitAsync <UFXQueryHistDealRequest>(UFXFunctionCode.QuerySecurityDealHistorical, requests, callbacker));
 }
Пример #7
0
 public ConnectionCode QueryEntrust(List <UFXQueryEntrustRequest> requests, Callbacker callbacker)
 {
     return(SubmitAsync <UFXQueryEntrustRequest>(UFXFunctionCode.QuerySecurityEntrust, requests, callbacker));
 }
Пример #8
0
 public ConnectionCode EntrustBasket(List <UFXBasketEntrustRequest> requests, Callbacker callbacker)
 {
     return(SubmitAsync <UFXBasketEntrustRequest>(UFXFunctionCode.EntrustBasket, requests, callbacker));
 }
Пример #9
0
 public ConnectionCode Withdraw(List <UFXWithdrawRequest> requests, Callbacker callbacker)
 {
     return(SubmitAsync <UFXWithdrawRequest>(UFXFunctionCode.Withdraw, requests, callbacker));
 }
Пример #10
0
 public ConnectionCode QueryMultipleHolding(List <UFXHoldingRequest> requests, Callbacker callbacker)
 {
     return(SubmitAsync <UFXHoldingRequest>(UFXFunctionCode.QueryMultipleHolding, requests, callbacker));
 }
Пример #11
0
        /// <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);
        }