예제 #1
0
            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));
            }
예제 #2
0
            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);
            }
예제 #3
0
            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
                }
            }