public async Task Invoke(HttpContext context) { WriteRequestParam(context); if (context.WebSockets.IsWebSocketRequest) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); Console.WriteLine("WebSocket connected"); string connId = _manager.AddSocket(webSocket); await SendConnIdAsync(webSocket, connId); await ReceiveMessageAsync(webSocket, async (result, buffer) => { if (result.MessageType == WebSocketMessageType.Text) { var message = Encoding.UTF8.GetString(buffer, 0, result.Count); Console.WriteLine($"Message received: {message}"); await RouteJSONMessageAsync(message); return; } else if (result.MessageType == WebSocketMessageType.Close) { Console.WriteLine("Received close message"); string id = _manager.GetAllSockets().FirstOrDefault(s => s.Value == webSocket).Key; _manager.GetAllSockets().TryRemove(id, out WebSocket socket); await socket.CloseAsync( result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); return; } }); } else { Console.WriteLine("Hello from the the 2nd request delegate."); await _next(context); } }