private void HandleClientComm(object client) { //Console.WriteLine("Client connected"); var tcpClient = (TcpClient)client; lock (this) { m_clients.Add(tcpClient); } m_clientListener.onClientConnect(); try { var clientStream = tcpClient.GetStream(); var bufferedStream = new BufferedStream(clientStream); var streamReader = new StreamReader(bufferedStream); while (tcpClient.Connected) { string message; try { //blocks until a client sends a message //bytesRead = clientStream.Read(message, 0, 4096); message = streamReader.ReadLine(); } catch { //a socket error has occured break; } // End of message if (message != null) { //Console.WriteLine("Message received"); m_clientListener?.onClientMessage(message, tcpClient); //else //{ //Console.WriteLine("Message missed, no listener"); //} } else { //Console.WriteLine("No message from client, close socket."); break; } } } catch (InvalidOperationException) { } finally { lock (this) { m_clients.Remove(tcpClient); } //tcpClient.Close(); tcpClient.Dispose(); //Console.WriteLine("Client disconnected"); } }