/// <summary>
        /// Runs the http server inside a async task.
        /// </summary>
        /// <returns></returns>
        public async Task RunServer()
        {
            TcpListener tcpListener = new TcpListener(IPAddress.Any, _Port);

            tcpListener.Start();
            byte[] buffer = new byte[1024];
            _Stop = false;
            while (!_Stop)
            {
                TcpClient     client = tcpListener.AcceptTcpClient();
                NetworkStream stream = client.GetStream();

                int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);

                string received = Encoding.UTF8.GetString(buffer, 0, bytesRead);

                string baseUrlEncoded = received.Split(new string[] { "GET " }, StringSplitOptions.None)[1].Split(new string[] { " HTTP" }, StringSplitOptions.None)[0];
                string baseUrlDecoded = WebUtility.UrlDecode(baseUrlEncoded);
                string baseUrl        = CheckIfBaseUrl(baseUrlDecoded);
                string customId       = CheckIfCustomIdIsSet(baseUrl, baseUrlDecoded);

                if (received.Contains("Sec-WebSocket-Key:") && baseUrl != null)
                {
                    string webSocketKey = received.Split(new string[] { "Sec-WebSocket-Key:" }, StringSplitOptions.None)[1].Split(new string[] { "\r\n" }, StringSplitOptions.None)[0].Trim();

                    byte[] acceptMessage = GenerateAcceptResponse(webSocketKey);
                    stream.Write(acceptMessage, 0, acceptMessage.Length);

                    if (customId == null)
                    {
                        _WebsocketHandler.StartConnection(client, Guid.NewGuid().ToString("N"), baseUrlDecoded);
                    }
                    else
                    {
                        _WebsocketHandler.StartConnection(client, customId, baseUrlDecoded);
                    }
                }
                else
                {
                    string headerToSendBack = "HTTP/1.1 403 Forbidden" + "\r\n\r\n";
                    byte[] msg = Encoding.ASCII.GetBytes(headerToSendBack);
                    stream.Write(msg, 0, msg.Length);
                }
            }
        }