/// <summary> /// Send the given message to the given recipients. /// </summary> /// <param name="recipient">The computers that should receive the message.</param> /// <param name="message">The message to send.</param> public void SendMessage(NetworkMessageRecipient recipient, INetworkMessage message) { switch (recipient) { case NetworkMessageRecipient.All: if (IsClient) { var msg = CreateMessage(LocalPlayer, message, broadcast: true); _client.SendMessage(msg, NetDeliveryMethod.ReliableOrdered); } else { var msg = CreateMessage(LocalPlayer, message, broadcast: false); Log <NetworkContext> .Info("Sending message {0} to all connections ({1})", SerializationHelpers.Serialize(message), string.Join(", ", _server.Connections.Select(c => ((Player)c.Tag).Name).ToArray())); _server.SendToAll(msg, NetDeliveryMethod.ReliableOrdered); _dispatcher.InvokeHandlers(LocalPlayer, message); } break; case NetworkMessageRecipient.Clients: { if (IsServer == false) { throw new InvalidOperationException("Only the server can send messages to clients"); } var msg = CreateMessage(LocalPlayer, message, broadcast: false); NetPeer peer = Peer; // only send the message if we have someone to send it to if (peer.ConnectionsCount > 0) { peer.SendMessage(msg, peer.Connections, NetDeliveryMethod.ReliableOrdered, 0); } break; } case NetworkMessageRecipient.Server: { if (IsServer) { _dispatcher.InvokeHandlers(LocalPlayer, message); } else { var msg = CreateMessage(LocalPlayer, message, broadcast: false); _client.ServerConnection.SendMessage(msg, NetDeliveryMethod.ReliableOrdered, 0); } break; } } }
/// <summary> /// Send the given message to the given recipients. /// </summary> /// <param name="recipient">The computers that should receive the message.</param> /// <param name="message">The message to send.</param> public void SendMessage(NetworkMessageRecipient recipient, INetworkMessage message) { switch (recipient) { case NetworkMessageRecipient.All: if (IsClient) { var msg = CreateMessage(LocalPlayer, message, broadcast: true); _client.SendMessage(msg, NetDeliveryMethod.ReliableOrdered); } else { var msg = CreateMessage(LocalPlayer, message, broadcast: false); Log<NetworkContext>.Info("Sending message {0} to all connections ({1})", SerializationHelpers.Serialize(message), string.Join(", ", _server.Connections.Select(c => ((Player)c.Tag).Name).ToArray())); _server.SendToAll(msg, NetDeliveryMethod.ReliableOrdered); _dispatcher.InvokeHandlers(LocalPlayer, message); } break; case NetworkMessageRecipient.Clients: { if (IsServer == false) { throw new InvalidOperationException("Only the server can send messages to clients"); } var msg = CreateMessage(LocalPlayer, message, broadcast: false); NetPeer peer = Peer; // only send the message if we have someone to send it to if (peer.ConnectionsCount > 0) { peer.SendMessage(msg, peer.Connections, NetDeliveryMethod.ReliableOrdered, 0); } break; } case NetworkMessageRecipient.Server: { if (IsServer) { _dispatcher.InvokeHandlers(LocalPlayer, message); } else { var msg = CreateMessage(LocalPlayer, message, broadcast: false); _client.ServerConnection.SendMessage(msg, NetDeliveryMethod.ReliableOrdered, 0); } break; } } }