/// <inheritdoc /> protected override async void HandleClient(object obj) { var client = (TcpClient)obj; var networkStream = client.GetStream(); while (client.Connected) { if (networkStream.DataAvailable) { byte[] messageByteArray; await using (var memStream = new MemoryStream()) { // Read message size var dataSize = new byte[4]; networkStream.Read(dataSize, 0, 4); var messageSize = BitConverter.ToInt32(dataSize); // Read message var numBytesRead = 0; while (numBytesRead != messageSize) { var data = new byte[messageSize]; numBytesRead = networkStream.Read(data, 0, messageSize - numBytesRead); memStream.Write(data, 0, numBytesRead); } messageByteArray = memStream.ToArray(); } // Parse message var jsonString = Encoding.UTF8.GetString(messageByteArray); var message = (Message)JsonConvert.DeserializeObject(jsonString, typeof(Message)); var incomingMessage = new IncomingMessage(message); var returnData = incomingMessage.ExecuteMessage(client); if (returnData != null) { SendMessage(client, returnData); } } Thread.Sleep(500); } }