コード例 #1
0
ファイル: Server.cs プロジェクト: ichbineinNerd/EventBasedTcp
        /// <summary>
        /// This is the event handler attached to every client that is connected's MessageReceive event.
        /// This is where it checks if a client has sent the disconnetion code, and if so, disposes of them.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ConnectedClient_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            if (e.Message == TcpOptions.EndConnectionCode.ToString())
            {
                ConnectedClients.Remove(sender as Client);
                var eventargs = new ClientToggleEventArgs
                {
                    ConnectedClient = sender as Client,
                    Time            = DateTime.Now
                };
                ClientDisconnected?.Invoke(this, eventargs);
            }
            else
            {
                foreach (var response in Responses)
                {
                    var willTrigger = false;

                    switch (response.Mode)
                    {
                    case ContentMode.Contains:
                        if (e.Message.Contains(response.Content))
                        {
                            willTrigger = true;
                        }
                        break;

                    case ContentMode.EndsWish:
                        if (e.Message.EndsWith(response.Content))
                        {
                            willTrigger = true;
                        }
                        break;

                    case ContentMode.StartsWith:
                        if (e.Message.StartsWith(response.Content))
                        {
                            willTrigger = true;
                        }
                        break;

                    case ContentMode.Equals:
                        if (e.Message == response.Content)
                        {
                            willTrigger = true;
                        }
                        break;
                    }

                    if (willTrigger)
                    {
                        response.Event?.Invoke(e);
                    }
                    else
                    {
                        MessageReceived?.Invoke(sender, e);
                    }
                }
            }
        }
コード例 #2
0
ファイル: Server.cs プロジェクト: ichbineinNerd/EventBasedTcp
        /// <summary>
        /// The threaded method where the server listens for client connections. Only called from <see cref="StartClientListening"/>
        /// </summary>
        private void ListenForClients()
        {
            while (!IsDisposed)
            {
                try
                {
                    var connectedTCPClient = _listener.AcceptTcpClient();
                    var connectedClient    = new Client(connectedTCPClient);

                    connectedClient.MessageReceived += ConnectedClient_MessageReceived;

                    ConnectedClients.Add(connectedClient);
                    var eventargs = new ClientToggleEventArgs
                    {
                        ConnectedClient = connectedClient,
                        Time            = DateTime.Now
                    };
                    ClientConnected?.Invoke(this, eventargs);
                }
                catch (SocketException e)
                {
                    if (e.SocketErrorCode == SocketError.Interrupted)
                    {
                        break;
                    }
                    else
                    {
                        throw e;
                    }
                }
            }
        }