示例#1
0
        /// <summary>
        /// Trades the goods.
        /// </summary>
        /// <returns><c>true</c>, if goods was traded, <c>false</c> otherwise.</returns>
        /// <param name="user">User.</param>
        /// <param name="goods">Goods.</param>
        /// <param name="goodsNum">Goods number.</param>
        /// <param name="errorCode">Error code.</param>
        public bool TradeGoods(BaseUser user, GoodsData goods, int goodsNum, out TradeErrorCode errorCode)
        {
            bool result = false;

            if (_tradeStrategy.TryEnterTraded(goods))
            {
                try
                {
                    double payAmount;
                    if (HasTraded(user, goods, goodsNum, out payAmount, out errorCode))
                    {
                        var items = ProduceGoods(goods, goodsNum);
                        if (SendGoods(user, items) && PayAmount(user, goods.TradeType, payAmount))
                        {
                            TradeSuccess(user, goods, goodsNum, payAmount, items);
                            errorCode = TradeErrorCode.Sucess;
                            result    = true;
                        }
                        else
                        {
                            errorCode = TradeErrorCode.Fail;
                        }
                    }
                }
                finally
                {
                    _tradeStrategy.ExitTraded();
                }
            }
            else
            {
                errorCode = TradeErrorCode.TradeTimeout;
            }
            return(result);
        }
示例#2
0
        /// <summary>
        /// 购买商品
        /// </summary>
        /// <param name="user"></param>
        /// <param name="goodsId"></param>
        /// <param name="goodsNum"></param>
        /// <param name="errorCode"></param>
        /// <returns></returns>
        public bool BuyGoods(BaseUser user, int goodsId, int goodsNum, out TradeErrorCode errorCode)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }
            var goods = _goodsList.Find(m => m.Id == goodsId);

            if (goods != null)
            {
                return(_controller.TradeGoods(user, goods, goodsNum, out errorCode));
            }
            errorCode = TradeErrorCode.NoGodds;
            return(false);
        }
示例#3
0
 /// <summary>
 /// 购买商品
 /// </summary>
 /// <param name="user"></param>
 /// <param name="goodsId"></param>
 /// <param name="goodsNum"></param>
 /// <param name="errorCode"></param>
 /// <returns></returns>
 public bool BuyGoods(BaseUser user, int goodsId, int goodsNum, out TradeErrorCode errorCode)
 {
     if (user == null)
     {
         throw new ArgumentNullException("user");
     }
     errorCode = TradeErrorCode.Fail;
     var goods = _goodsList.Find(m => m.Id == goodsId);
     if (goods != null)
     {
         return _controller.TradeGoods(user, goods, goodsNum, out errorCode);
     }
     else
     {
         errorCode = TradeErrorCode.NoGodds;
     }
     return false;
 }
示例#4
0
 protected override bool HasTraded(BaseUser user, GoodsData goods, int goodsNum, out double amount, out TradeErrorCode errorCode)
 {
     //检查是否可交易
 }
示例#5
0
 /// <summary>
 /// 检查是否可交易
 /// </summary>
 /// <param name="user"></param>
 /// <param name="goods"></param>
 /// <param name="goodsNum"></param>
 /// <param name="amount"></param>
 /// <param name="errorCode"></param>
 /// <returns></returns>
 protected abstract bool HasTraded(BaseUser user, GoodsData goods, int goodsNum, out double amount, out TradeErrorCode errorCode);
示例#6
0
		/// <summary>
		/// Trades the goods.
		/// </summary>
		/// <returns><c>true</c>, if goods was traded, <c>false</c> otherwise.</returns>
		/// <param name="user">User.</param>
		/// <param name="goods">Goods.</param>
		/// <param name="goodsNum">Goods number.</param>
		/// <param name="errorCode">Error code.</param>
        public bool TradeGoods(IUser user, GoodsData goods, int goodsNum, out TradeErrorCode errorCode)
        {
            bool result = false;
            if (_tradeStrategy.TryEnterTraded(goods))
            {
                try
                {
                    double payAmount;
                    if (HasTraded(user, goods, goodsNum, out payAmount, out errorCode))
                    {
                        var items = ProduceGoods(goods, goodsNum);
                        if (SendGoods(user, items) && PayAmount(user, goods.TradeType, payAmount))
                        {
                            TradeSuccess(user, goods, goodsNum, payAmount, items);
                            errorCode = TradeErrorCode.Sucess;
                            result = true;
                        }
                        else
                        {
                            errorCode = TradeErrorCode.Fail;
                        }
                    }
                }
                finally
                {
                    _tradeStrategy.ExitTraded();
                }
            }
            else
            {
                errorCode = TradeErrorCode.TradeTimeout;
            }
            return result;
        }
示例#7
0
 /// <summary>
 /// 检查是否可交易
 /// </summary>
 /// <param name="user"></param>
 /// <param name="goods"></param>
 /// <param name="goodsNum"></param>
 /// <param name="amount"></param>
 /// <param name="errorCode"></param>
 /// <returns></returns>
 protected abstract bool HasTraded(IUser user, GoodsData goods, int goodsNum, out double amount, out TradeErrorCode errorCode);
示例#8
0
 protected override bool HasTraded(BaseUser user, GoodsData goods, int goodsNum, out double amount, out TradeErrorCode errorCode)
 {
     //检查是否可交易
 }