public static AppFunc AdaptWebSockets(AppFunc next) { return(async environment => { object accept; if (environment.TryGetValue(OwinConstants.WebSocket.AcceptAlt, out accept) && accept is WebSocketAcceptAlt) { var adapter = new WebSocketAcceptAdapter(environment, (WebSocketAcceptAlt)accept); environment[OwinConstants.WebSocket.Accept] = new WebSocketAccept(adapter.AcceptWebSocket); await next(environment); if ((int)environment[OwinConstants.ResponseStatusCode] == 101 && adapter._callback != null) { WebSocketAcceptContext acceptContext = null; object obj; if (adapter._options != null && adapter._options.TryGetValue(typeof(WebSocketAcceptContext).FullName, out obj)) { acceptContext = obj as WebSocketAcceptContext; } else if (adapter._options != null) { acceptContext = new OwinWebSocketAcceptContext(adapter._options); } var webSocket = await adapter._accept(acceptContext); var webSocketAdapter = new WebSocketAdapter(webSocket, (CancellationToken)environment[OwinConstants.CallCancelled]); await adapter._callback(webSocketAdapter.Environment); await webSocketAdapter.CleanupAsync(); } } else { await next(environment); } }); }
public static AppFunc AdaptWebSockets(AppFunc next) { return async environment => { object accept; if (environment.TryGetValue(OwinConstants.WebSocket.AcceptAlt, out accept) && accept is WebSocketAcceptAlt) { var adapter = new WebSocketAcceptAdapter(environment, (WebSocketAcceptAlt)accept); environment[OwinConstants.WebSocket.Accept] = new WebSocketAccept(adapter.AcceptWebSocket); await next(environment); if ((int)environment[OwinConstants.ResponseStatusCode] == 101 && adapter._callback != null) { IWebSocketAcceptContext acceptContext = null; object obj; if (adapter._options != null && adapter._options.TryGetValue(typeof(IWebSocketAcceptContext).FullName, out obj)) { acceptContext = obj as IWebSocketAcceptContext; } else if (adapter._options != null) { acceptContext = new OwinWebSocketAcceptContext(adapter._options); } var webSocket = await adapter._accept(acceptContext); var webSocketAdapter = new WebSocketAdapter(webSocket, (CancellationToken)environment[OwinConstants.CallCancelled]); await adapter._callback(webSocketAdapter.Environment); await webSocketAdapter.CleanupAsync(); } } else { await next(environment); } }; }