Task <WebSocket> IHttpWebSocketFeature.AcceptAsync(WebSocketAcceptContext context) { Context.HttpContext.Response.StatusCode = 101; // Switching Protocols var websockets = TestWebSocket.CreatePair(context.SubProtocol); _clientWebSocketTcs.SetResult(websockets.Item1); _serverWebSocket = websockets.Item2; return(Task.FromResult <WebSocket>(_serverWebSocket)); }
async Task <WebSocket> IHttpWebSocketFeature.AcceptAsync(WebSocketAcceptContext context) { var websockets = TestWebSocket.CreatePair(context.SubProtocol); if (_httpContext.Response.HasStarted) { throw new InvalidOperationException("The response has already started"); } _httpContext.Response.StatusCode = StatusCodes.Status101SwitchingProtocols; ClientWebSocket = websockets.Item1; ServerWebSocket = websockets.Item2; await _httpContext.Response.Body.FlushAsync(_httpContext.RequestAborted); // Send headers to the client return(ServerWebSocket); }
Task <WebSocket> IHttpWebSocketFeature.AcceptAsync(WebSocketAcceptContext context) { var websockets = TestWebSocket.CreatePair(context.SubProtocol); if (_clientWebSocketTcs.TrySetResult(websockets.Item1)) { Context.HttpContext.Response.StatusCode = StatusCodes.Status101SwitchingProtocols; _serverWebSocket = websockets.Item2; return(Task.FromResult(_serverWebSocket)); } else { Context.HttpContext.Response.StatusCode = StatusCodes.Status500InternalServerError; websockets.Item1.Dispose(); websockets.Item2.Dispose(); return(_clientWebSocketTcs.Task); // Canceled or Faulted - no result } }