private void OnWebSocketConnected(WebSocketConnectEventArgs e) { if (_disposed) { return; } var connection = new WebSocketConnection(e.WebSocket, e.Endpoint, _jsonSerializer, _logger, _textEncoding) { OnReceive = ProcessWebSocketMessageReceived, Url = e.Url, QueryString = e.QueryString ?? new QueryParamCollection() }; connection.Closed += Connection_Closed; lock (_webSocketConnections) { _webSocketConnections.Add(connection); } if (WebSocketConnected != null) { WebSocketConnected?.Invoke(this, new GenericEventArgs <IWebSocketConnection>(connection)); } }
private void UpgradeToWebSocketSession(UpgradedToWebSocketSessionEventArgs eventArgs) { _httpClientSession = null; _webSocketClientSession = new WebSocketClientSession(_clientSocket, _log); _webSocketClientSession.Closed += OnWebSocketClientSessionClosed; var webSocketConnectedEventArgs = new WebSocketConnectedEventArgs(eventArgs.HttpRequest, _webSocketClientSession); try { WebSocketConnected?.Invoke(this, webSocketConnectedEventArgs); } finally { if (!webSocketConnectedEventArgs.IsHandled) { _cancellationTokenSource.Cancel(); } } }
private void OnWebSocketConnected(WebSocketConnectEventArgs e) { if (_disposed) { return; } var connection = new WebSocketConnection(e.WebSocket, e.Endpoint, _jsonSerializer, _logger) { OnReceive = ProcessWebSocketMessageReceived, Url = e.Url, QueryString = e.QueryString }; connection.Closed += OnConnectionClosed; lock (_webSocketConnections) { _webSocketConnections.Add(connection); } WebSocketConnected?.Invoke(this, new GenericEventArgs <IWebSocketConnection>(connection)); }
private async Task WebSocketRequestHandler(HttpContext context) { if (_disposed) { return; } try { _logger.LogInformation("WS {IP} request", context.Connection.RemoteIpAddress); WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync().ConfigureAwait(false); var connection = new WebSocketConnection( _loggerFactory.CreateLogger <WebSocketConnection>(), webSocket, context.Connection.RemoteIpAddress, context.Request.Query) { OnReceive = ProcessWebSocketMessageReceived }; WebSocketConnected?.Invoke(this, new GenericEventArgs <IWebSocketConnection>(connection)); await connection.ProcessAsync().ConfigureAwait(false); _logger.LogInformation("WS {IP} closed", context.Connection.RemoteIpAddress); } catch (Exception ex) // Otherwise ASP.Net will ignore the exception { _logger.LogError(ex, "WS {IP} WebSocketRequestHandler error", context.Connection.RemoteIpAddress); if (!context.Response.HasStarted) { context.Response.StatusCode = 500; } } }
private void HandleWebSocketConnected(object sender, WebSocketConnectedEventArgs eventArgs) { WebSocketConnected?.Invoke(this, eventArgs); }