Example #1
0
        private void HandleHttpConnection()
        {
            for (var i = 0; i < _connectingClients.Count; i++)
            {
                var connection = _connectingClients[i];

                var httpRequest = GetHttpRequest(connection);

                if (connection.IsTimeout() || !connection.TcpClient.Connected || httpRequest == null)
                {
                    _connectingClients.RemoveAt(i);
                    i--;
                    continue;
                }

                var httpHeaders = GetHttpHeaders(httpRequest);

                if (httpHeaders.ContainsKey("Sec-WebSocket-Key"))
                {
                    var responseBytes = CreateConnectionResponse(httpHeaders);

                    try
                    {
                        connection.Stream.WriteAsync(responseBytes, 0, responseBytes.Length);
                    }
                    catch (IOException)
                    {
                        // ignore
                    }

                    var clientConnection = new ClientConnection()
                    {
                        Id          = Guid.NewGuid(),
                        TcpClient   = connection.TcpClient,
                        Stream      = connection.Stream,
                        LastMessage = DateTime.Now
                    };

                    _socketRepository.AddUnauthorizedConnection(clientConnection);

                    if (i <= _connectingClients.Count - 1)
                    {
                        _connectingClients.RemoveAt(i);
                        i--;
                    }
                }
            }
        }