Ejemplo n.º 1
0
        // helpers ---------------------

        protected DataMessage PrepareKnowledgeExchangeMessage(KnowledgeExchangeRequestMessage messageObject)
        {
            var responseData = new DataMessage(messageObject.SenderPlayerId)
            {
                Goals = GetBoard.GetRedGoalAreaFields.Union(GetBoard.GetBlueGoalAreaFields).Select(f => new GameArea.GameObjects.GoalField(f)).ToArray(),
                Tasks = GetBoard.TaskFields.Select(q => new GameArea.GameObjects.TaskField(q)).ToArray()
            };
            var xCoord = Location.X;
            var yCoord = Location.Y;

            // do Data musi też dodać, na Field na ktorym stoi, swoj stan !!!
            if (GetBoard.GetField(xCoord, yCoord) is GameArea.GameObjects.GoalField)
            {
                var field = responseData.Goals.Where(f => f.X == xCoord && f.Y == yCoord).FirstOrDefault();
                field.Player    = new GameArea.GameObjects.Player(this.ID, this.Team, this.Role);
                field.TimeStamp = DateTime.Now;
                field.PlayerId  = (long)this.ID;
            }
            else // is TaskField
            {
                var field = responseData.Tasks.Where(f => f.X == xCoord && f.Y == yCoord).FirstOrDefault();
                field.Player = new GameArea.GameObjects.Player(this.ID, this.Team, this.Role);
                if (this.HasPiece)
                {
                    field.Piece = new GameArea.GameObjects.Piece(this.GetPiece.ID, this.GetPiece.TimeStamp, this.GetPiece.Type, this.GetPiece.PlayerId);
                }
                field.TimeStamp = DateTime.Now;
                field.PlayerId  = (long)this.ID;
            }

            return(responseData);
        }
        // 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;
        }
Ejemplo n.º 3
0
        public override DataMessage HandleKnowledgeExchangeRequest(KnowledgeExchangeRequestMessage messageObject)
        {
            // Leader zawsze odpowiada, jezeli request jest z jego druzyny
            // wiadomosci od graczy z przeciwnego zespolu zapisuje sobie w kolejce

            DataMessage responseData = null;

            if (otherTeam.Select(p => p.ID).Contains(messageObject.SenderPlayerId))
            // wiadomosc od obcego playera - do kolejki
            {
                AddOtherPlayerExhangeKnowledgeRequest(messageObject as KnowledgeExchangeRequestAgent);
            }
            else if (myTeam.Select(p => p.ID).Contains(messageObject.SenderPlayerId))
            // wiadomosc od naszego player - natychmiastowa odpoweidz
            {
                responseData = PrepareKnowledgeExchangeMessage(messageObject);
            }

            return(responseData);
        }
Ejemplo n.º 4
0
        public virtual DataMessage HandleKnowledgeExchangeRequest(KnowledgeExchangeRequestMessage messageObject)
        {
            DataMessage responseData = null;

            var leaderId = myTeam.Where(p => p.Role == PlayerRole.leader).Select(p => p.ID).FirstOrDefault();

            if (leaderId == messageObject.SenderPlayerId)
            // wiadomosc od swojego leadera - natychmiastowa odpowiedz
            {
                responseData = PrepareKnowledgeExchangeMessage(messageObject);
            }
            else if (myTeam.Select(p => p.ID).Contains(messageObject.SenderPlayerId))
            // wiadomosc od swojego playera
            {
                AddMyPlayerExhangeKnowledgeRequest(messageObject as KnowledgeExchangeRequestAgent);
            }
            else if (otherTeam.Select(p => p.ID).Contains(messageObject.SenderPlayerId))
            // wiadomosc od obcego playera
            {
                AddOtherPlayerExhangeKnowledgeRequest(messageObject as KnowledgeExchangeRequestAgent);
            }

            return(responseData);
        }