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