Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 3
0
        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();
            }
        }
Exemplo n.º 4
0
        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;
            }
        }