/// <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); }
/// <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); }
/// <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; }
protected override bool HasTraded(BaseUser user, GoodsData goods, int goodsNum, out double amount, out TradeErrorCode errorCode) { //检查是否可交易 }
/// <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);
/// <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; }
/// <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);