public async Task Invoke(HttpContext context) { if (!context.WebSockets.IsWebSocketRequest) { await _next(context); return; } var socket = await context.WebSockets.AcceptWebSocketAsync(); _manager.Add(socket); await _handler.OnConnected(socket); await receive(socket, async(result, message) => { if (result.MessageType == WebSocketMessageType.Text) { await _handler.RecieveAsync(socket, message); return; } else if (result.MessageType == WebSocketMessageType.Close) { await _handler.OnDisconnected(socket); await _manager.Remove(socket); return; } }); }