Example #1
0
        /// <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;
            }
            }
        }
Example #2
0
        /// <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;
                    }
            }
        }