public Task Invoke(IDictionary<string, object> env) { var opaqueUpgrade = env.Get<OpaqueUpgrade>("opaque.Upgrade"); var webSocketAccept = env.Get<WebSocketAccept>(Constants.WebSocketAcceptKey); if (opaqueUpgrade != null && webSocketAccept == null && IsWebSocketRequest(env)) { // Add websocket support env[Constants.WebSocketAcceptKey] = new WebSocketAccept( (options, callback) => { if (callback == null) { throw new ArgumentNullException("callback"); } env[Constants.ResponseStatusCodeKey] = 101; SetWebSocketResponseHeaders(env, options); opaqueUpgrade(options, opaqueEnv => { var webSocket = new WebSocketLayer(opaqueEnv); return callback(webSocket.Environment) .Then(() => webSocket.CleanupAsync()); }); }); } return _next(env); }
public Task Invoke(IDictionary <string, object> env) { var opaqueUpgrade = env.Get <OpaqueUpgrade>("opaque.Upgrade"); var webSocketAccept = env.Get <WebSocketAccept>(Constants.WebSocketAcceptKey); if (opaqueUpgrade != null && webSocketAccept == null && IsWebSocketRequest(env)) { // Add websocket support env[Constants.WebSocketAcceptKey] = new WebSocketAccept( (options, callback) => { if (callback == null) { throw new ArgumentNullException("callback"); } env[Constants.ResponseStatusCodeKey] = 101; SetWebSocketResponseHeaders(env, options); opaqueUpgrade(options, opaqueEnv => { var webSocket = new WebSocketLayer(opaqueEnv); return(callback(webSocket.Environment) .Then(() => webSocket.CleanupAsync())); }); }); } return(_next(env)); }