private void SendPlayerMessageToRemoteSpectator(PlayerMessage message, Player player) { if (!player.IsRemote) return; try { var messageMessage = new PlayerMessageMessage { PlayerID = player.ID, Message = message }; NetworkEngine.GetGameClientConnection(player.ConnectionID).Send(messageMessage); } catch (InvalidOperationException) { // The connection of the player doesn't exist any more. Just don't send the message then. } }
private void HandlePlayerMessageMessageOnClient(PlayerMessageMessage mess) { if (mess.AllPlayers) throw new NotImplementedException("Client cannot broadcast player text messages"); var player = Game.DataEngine.Players.First(plr => plr.ID == mess.PlayerID); if (player != null) player.Messages.Add(mess.Message); }
private void HandlePlayerMessageMessageOnServer(PlayerMessageMessage mess) { if (mess.AllPlayers) { var otherPlayers = Game.DataEngine.Players.Where(plr => plr.ConnectionID != mess.ConnectionID); foreach (var player in otherPlayers) player.Messages.Add(mess.Message); } else { var player = Game.DataEngine.Players.FirstOrDefault(plr => plr.ID == mess.PlayerID); if (player != null) { if (player.IsRemote) Game.NetworkEngine.GetGameClientConnection(player.ConnectionID).Send(mess); else HandlePlayerMessageMessageOnClient(mess); } } }
private void SendMessages() { if (_nextEventType == EventType.ARENA_FINISH && _arenaTimeoutMessages.Any() && Now + _arenaTimeoutMessages[0] >= _nextEvent) { var text = "Arena will change in " + _arenaTimeoutMessages[0].ToDurationString("day", "hour", "minute", "second", usePlurals: true); foreach (var plr in Game.DataEngine.Players) { if (!plr.IsRemote) continue; var message = new PlayerMessageMessage { Message = new PlayerMessage(text, PlayerMessage.DEFAULT_COLOR), }; message.PlayerID = plr.ID; Game.NetworkEngine.GetGameClientConnection(plr.ConnectionID).Send(message); } _arenaTimeoutMessages.RemoveAt(0); } }