Beispiel #1
0
        public async Task Get()
        {
            var context         = ControllerContext.HttpContext;
            var isSocketRequest = context.WebSockets.IsWebSocketRequest;

            if (!isSocketRequest)
            {
                context.Response.StatusCode = 401;
            }
            else
            {
                WebSocket socket = await context.WebSockets.AcceptWebSocketAsync();

                _webSocketHandler.OnConnected(socket);
                var buffer = new byte[_BUFFER_SIZE];
                WebSocketReceiveResult result = await socket.ReceiveAsync(new ArraySegment <byte>(buffer),
                                                                          CancellationToken.None);

                while (!result.CloseStatus.HasValue)
                {
                    await _webSocketHandler.OnMessage(socket, result, buffer);

                    result = await socket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);
                }
                _webSocketHandler.OnDisconnected(socket);
            }
        }