예제 #1
0
        public void RejectKnowledgeExchangeReceived()
        {
            InitGameMaster();
            var sender    = GetPlayer("testGUID-1111", 1, TeamColour.blue, ActionType.none);
            var addressee = GetPlayer("testGUID-9999", 9, TeamColour.red, ActionType.none);

            sender.SetLocation(1, 3);
            addressee.SetLocation(2, 6);

            defaultGameMaster.RegisterPlayer(sender, sender.GUID, findFreeLocationAndPlacePlayer: false);
            defaultGameMaster.RegisterPlayer(addressee, addressee.GUID, findFreeLocationAndPlacePlayer: false);

            defaultGameMaster.exchangeRequestList.Add(new ExchengeRequestContainer(1, 9));
            defaultGameMaster.exchangeRequestList[0].SenderData = new DataMessage(9);

            var msg = new RejectKnowledgeExchangeMessage(1, 9, false);

            // action
            var result = defaultGameMaster.HandleRejectKnowledgeExchange(msg);

            // assert
            Assert.AreEqual(typeof(RejectKnowledgeExchangeMessage), result.GetType());
            Assert.AreEqual(sender.ID, result.PlayerId);          // sender otrzymuje odmowe
            Assert.AreEqual(addressee.ID, result.SenderPlayerId); // addressee wysyla odmowe
            Assert.IsTrue(defaultGameMaster.exchangeRequestList.Count == 0);
        }
예제 #2
0
        protected override Transition HandleResponseMessage(IResponseMessage responseMessage)
        {
            if (responseMessage is KnowledgeExchangeRequestMessage knowledgeExchangeRequest)
            {
                var initiatorId = knowledgeExchangeRequest.SenderPlayerId;
                //Console.WriteLine($"Player #{initiatorId} requested communication in state {this}");
                IMessage knowledgeExchangeResponse =
                    new RejectKnowledgeExchangeMessage(PlayerStrategyInfo.PlayerId, initiatorId,
                                                       PlayerStrategyInfo.PlayerGuid);

                if (IsExchangeWantedWithPlayer(initiatorId))
                {
                    knowledgeExchangeResponse =
                        DataMessage.FromBoardData(
                            PlayerStrategyInfo.Board.ToBoardData(PlayerStrategyInfo.PlayerId, initiatorId), false,
                            PlayerStrategyInfo.PlayerGuid);
                }

                return(new LoopbackTransition(this, new List <IMessage> {
                    knowledgeExchangeResponse
                }));
            }

            if (responseMessage is DataMessage dataMessage && dataMessage.GoalFields.Length > 1)
            {
                HandleSuccessfulKnowledgeExchange();
                return(new LoopbackTransition(this, new List <IMessage>()));
            }

            return(base.HandleResponseMessage(responseMessage));
        }
        // obsluga wymiany wiadomoci

        public BetweenPlayersAbstractMessage HandleAuthorizeKnowledgeExchange(AuthorizeKnowledgeExchangeMessage msg)
        {
            BetweenPlayersAbstractMessage returnMsg = null;

            Monitor.Enter(lockObject);
            try
            {
                var sender = Players.Where(p => p.GUID == msg.PlayerGUID).FirstOrDefault();
                var addressee = Players.Where(p => p.ID == msg.WithPlayerId).FirstOrDefault();
                var fromId = sender.ID;

                ConsoleWriter.Show("Received Authorize Knowledge Exchange from " + fromId + " to " + msg.WithPlayerId + " ...");

                if (addressee == null) // nie ma takiego gracza w rozgrywce
                {
                    ConsoleWriter.Show("Player with ID: " + msg.WithPlayerId + " does not exist!");

                    returnMsg = new RejectKnowledgeExchangeMessage(0, sender.ID, true);
                }
                else
                {
                    ConsoleWriter.Show("Message sent from PlayerID: " + sender.ID + " to PlayerID: " + addressee.ID);
                    exchangeRequestList.Add(new ExchengeRequestContainer(sender.ID, addressee.ID)); // przechowujemy probe komunikacji - po otrzymaniu DataMessege dopiszemy do struktury

                    returnMsg = new KnowledgeExchangeRequestMessage(msg.WithPlayerId, fromId);
                }
            }
            finally
            {
                Monitor.Exit(lockObject);
            }
            Thread.Sleep((int)GetCosts.KnowledgeExchangeDelay);

            return returnMsg;
        }
        public RejectKnowledgeExchangeMessage HandleRejectKnowledgeExchange(RejectKnowledgeExchangeMessage msg)
        {
            // gracz odbierajacy taki reject message musi sobie zapisac, jezeli to bylo permanentne ?

            Monitor.Enter(lockObject);
            try
            {
                var request = exchangeRequestList.Where(r => r.SenderID == msg.PlayerId).Where(r => r.AddresseeID == msg.SenderPlayerId).FirstOrDefault();

                if (request != null)
                {
                    exchangeRequestList.Remove(request);
                }

                ConsoleWriter.Show("Player with ID: " + msg.SenderPlayerId + " rejected knowledge exchange with Player ID: " + msg.PlayerId);
            }
            finally
            {
                Monitor.Exit(lockObject);
            }
            // bez opoznien

            return new RejectKnowledgeExchangeMessage(msg.PlayerId, msg.SenderPlayerId, msg.Permanent, msg.PlayerGUID);
        }
예제 #5
0
 public virtual void HandleRejectKnowledgeExchange(RejectKnowledgeExchangeMessage messageObject)
 {
     // poki co - Player olewa
 }
예제 #6
0
 public override void HandleRejectKnowledgeExchange(RejectKnowledgeExchangeMessage messageObject)
 {
     // nic nie robi
 }