// 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; }
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); }
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); }