コード例 #1
0
        /// <summary>
        /// Stop the server and disconnect any clients
        /// </summary>
        public void Stop()
        {
            disposed = true;

            disconnectAll();
            isRunning = false;
            this.listenSocket.Close();

            if (OnClientConnected != null)
            {
                foreach (var receiver in OnClientConnected.GetInvocationList())
                {
                    OnClientConnected -= (RemoteClientConnectedEventHandler)receiver;
                }
            }

            if (OnClientDisconnected != null)
            {
                foreach (var receiver in OnClientDisconnected.GetInvocationList())
                {
                    OnClientDisconnected -= (RemoteClientDisconnectedEventHandler)receiver;
                }
            }

            if (OnClientMessageReceived != null)
            {
                foreach (var receiver in OnClientMessageReceived.GetInvocationList())
                {
                    OnClientMessageReceived -= (RemoteClientMessageReceivedEventHandler)receiver;
                }
            }
        }
コード例 #2
0
 /// <summary>
 /// Emits a message to TerrariaChatRelay that a client message have been received.
 /// </summary>
 /// <param name="sender">Object that is emitting this event.</param>
 /// <param name="user">User object detailing the client source and username</param>
 /// <param name="msg">Text content of the message</param>
 /// <param name="commandPrefix">Command prefix to indicate a command is being used.</param>
 /// <param name="clientPrefix">String to insert before the main chat message.</param>
 /// <param name="sourceChannelId">Optional id for clients that require id's to send to channels. Id of the channel the message originated from.</param>
 public static void RaiseClientMessageReceived(object sender, TCRClientUser user, string clientPrefix, string msg, string commandPrefix, ulong sourceChannelId = 0)
 {
     if (CommandServ.IsCommand(msg, commandPrefix))
     {
         var payload = CommandServ.GetExecutableCommand(msg, commandPrefix, user);
         msg = payload.Execute();
         ((IChatClient)sender).HandleCommand(payload, msg, sourceChannelId);
     }
     else
     {
         _adapter.BroadcastChatMessage($"{clientPrefix}<{user.Username}> {msg}", -1);
         OnClientMessageReceived?.Invoke(sender, new ClientChatEventArgs(user, msg));
     }
 }
コード例 #3
0
 private void IncomingMessageTypeData(PeerType receiver, NetIncomingMessage message)
 {
     if (receiver == PeerType.Client)
     {
         OnServerMessageReceived?.Invoke(receiver, message);
     }
     else if (receiver == PeerType.Server)
     {
         OnClientMessageReceived?.Invoke(receiver, message);
     }
     else
     {
         throw new ArgumentOutOfRangeException(nameof(receiver), "Invalid NetPeer class.");
     }
 }
コード例 #4
0
        /// <summary>
        /// Handle an incoming message from a remote client.
        /// </summary>
        /// <param name="msg">Incoming message.</param>
        private void HandleIncomingMessage(NetIncomingMessage msg)
        {
            switch (msg.MessageType)
            {
            case NetIncomingMessageType.ConnectionApproval:
                HandleIncomingConnection(msg);
                break;

            case NetIncomingMessageType.StatusChanged:
                switch (msg.SenderConnection.Status)
                {
                case NetConnectionStatus.Disconnected:
                    if (OnClientDisconnect != null)
                    {
                        OnClientDisconnect.Invoke(
                            msg.SenderConnection, null);
                    }
                    break;

                case NetConnectionStatus.Connected:
                    if (OnClientConnect != null)
                    {
                        OnClientConnect.Invoke(
                            msg.SenderConnection, null
                            );
                    }
                    break;
                }
                break;

            case NetIncomingMessageType.Data:
                if (OnClientMessageReceived != null)
                {
                    OnClientMessageReceived.Invoke(
                        msg.SenderConnection, msg
                        );
                }
                break;
            }
        }