示例#1
0
        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);
            }
        }