public override void HandleRequest(IRequest request) { var character = request.Session.Character; _tradeService.ClearTrade(character); Message.Builder.FromRequest(request).WithOk().Send(); }
public override void HandleRequest(IRequest request) { var character = request.Session.Character; var credit = request.Data.GetOrDefault <long>(k.credit); var items = request.Data.GetOrDefault <long[]>(k.items); try { var myTrade = _tradeService.GetTrade(character).ThrowIfNull(ErrorCodes.TradeNotFound); CheckTradersAndThrowIfFailed(character, myTrade.trader); var hisTrade = _tradeService.GetTrade(myTrade.trader).ThrowIfNull(ErrorCodes.TradeNotFound); lock (myTrade.commonSync) { myTrade.SetOffer(credit, items); hisTrade.State = TradeState.Offer; } Message.Builder.FromRequest(request).WithOk().Send(); } catch (Exception) { _tradeService.ClearTrade(character); throw; } }
public override void HandleRequest(IRequest request) { using (var scope = Db.CreateTransaction()) { var character = request.Session.Character; try { var myTrade = _tradeService.GetTrade(character).ThrowIfNull(ErrorCodes.TradeNotFound); CheckTradersAndThrowIfFailed(character, myTrade.trader); lock (myTrade.commonSync) { myTrade.State = TradeState.Accept; var hisTrade = _tradeService.GetTrade(myTrade.trader).ThrowIfNull(ErrorCodes.TradeNotFound); if (hisTrade.State == TradeState.Accept) { try { var myContainer = character.GetPublicContainerWithItems(); var hisContainer = hisTrade.owner.GetPublicContainerWithItems(); myTrade.TransferItems(hisTrade, myContainer, hisContainer); hisTrade.TransferItems(myTrade, hisContainer, myContainer); myContainer.Save(); hisContainer.Save(); myTrade.SendFinishCommand(myContainer); hisTrade.SendFinishCommand(hisContainer); } catch (Exception) { myTrade.State = TradeState.Offer; hisTrade.State = TradeState.Offer; throw; } } } Message.Builder.FromRequest(request).WithOk().Send(); } catch (Exception) { _tradeService.ClearTrade(character); throw; } scope.Complete(); } }
public override void HandleRequest(IRequest request) { var character = request.Session.Character; var trader = Character.Get(request.Data.GetOrDefault <int>(k.traderID)).ThrowIfNull(ErrorCodes.CharacterNotFound); try { _tradeService.ClearTrade(character); if (character == trader) { return; } CheckTradersAndThrowIfFailed(character, trader); _tradeService.GetTrade(trader).ThrowIfNotNull(ErrorCodes.TraderIsBusy); var commonSync = new object(); var myTrade = _tradeFactory(character, trader, commonSync); _tradeService.AddTrade(character, myTrade); var hisTrade = _tradeFactory(trader, character, commonSync); _tradeService.AddTrade(trader, hisTrade); myTrade.State = TradeState.Begin; hisTrade.State = TradeState.Begin; Message.Builder.FromRequest(request).WithOk().Send(); } catch (Exception) { _tradeService.ClearTrade(character); throw; } }