using System.Collections.Generic;
using System.Net.Sockets;
using ChatLib.FormEventArgs;
public event EventHandler<NewUserEventArgs> OnNewClient;
public event EventHandler<MessageEventArgs> OnNewMessage;
private TcpListener _tcpListener;
public bool Run { get; private set; }
private readonly int _port;
public List<User> Users { get; } = new List<User>();
public ChatServer(int port)
_thread = new Thread(() =>
_tcpListener = new TcpListener(IPAddress.Any, _port);
ThreadPool.QueueUserWorkItem(objectState =>
var user = new User((TcpClient)objectState);
user.OnMessage += (sender, args) => OnNewMessage?.Invoke(sender, args);
OnNewClient?.Invoke(this, new NewUserEventArgs(user));
}, _tcpListener.AcceptTcpClient());
public void BroadcastMessage(Message message)
if(message.Msg == string.Empty)
foreach (var user in Users)
user.WriteMessage(message);
public void UnicastMessage(User user, Message message)
if (message.Msg == string.Empty)
user.WriteMessage(message);