public async Task Invoke(HttpContext context) { if (!context.WebSockets.IsWebSocketRequest) { return; } var socket = await context.WebSockets.AcceptWebSocketAsync(); await Receive(socket, async (result, buffer) => { switch (result.MessageType) { case WebSocketMessageType.Text: await webSocketRouter.ReceiveAsync(socket, result, buffer); break; case WebSocketMessageType.Close: await webSocketRouter.OnDisconnected(socket); break; case WebSocketMessageType.Binary: break; default: return; } }); // TODO: investigate the Kestrel exception thrown when this is the last middleware // TODO: remove condition if (socket == null) { await next.Invoke(context); } }