/// <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();
        }