public async Task InvokeAsync(HttpContext context, RequestDelegate next) { if (context.WebSockets.IsWebSocketRequest) { var hub = context.RequestServices.GetService <WebSocketHub>(); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var client = new WebSocketConnection(webSocket); if (!hub.Accept(client)) { // unaccepted connection await client.CloseAsync(WebSocketCloseStatus.PolicyViolation, "Too many connections!"); return; } //push loop var _ = Task.Run(async() => { try { await client.PushLoop(); } catch (WebSocketException e) { Console.WriteLine(e); hub.Remove(client); } }); await ReceiveLoop(client); return; } await next(context); }