/// <summary> /// Tells the server to start handeling a new client. /// </summary> /// <param name="client">The client to be handeled by the server.</param> public void HandleClient(TcpClient client) { clients.Add(client, new Message(true, false, "")); Task t = new Task(() => { try { using (NetworkStream stream = client.GetStream()) using (BinaryReader reader = new BinaryReader(stream)) using (BinaryWriter writer = new BinaryWriter(stream)) { while (handler_alive) { if (clients[client].ReadMessage) { string commandLine = reader.ReadString(); clients[client].AmountWrote = 0; if (commandLine == "close") { CloseClient(client); break; } CommandRecievedEventArgs args = CommandRecievedEventArgs.CommandRecievedFromJSON(commandLine); ClientCommandRecieved?.Invoke(this, new ClientCommandEventArgs(client, args)); clients[client].ReadMessage = false; } if (clients[client].WriteMessage) { if (clients[client].AmountWrote >= 1) { clients[client].WriteMessage = false; clients[client].ReadMessage = true; continue; } writer.Write(clients[client].MessageString); clients[client].AmountWrote++; clients[client].WriteMessage = false; clients[client].ReadMessage = true; } } } } catch { //TODO: maybe delete this try-catch } clients.Remove(client); CloseClient(client); }); t.Start(); }