Exemplo n.º 1
0
        public async Task CanCloseTheChannel()
        {
            var webSocket = Mock.Of <WebSocket>(ws => ws.State == WebSocketState.Open);
            var channel   = new ServerWebSocketChannel(webSocket, Mock.Of <EndPoint>());
            var loop      = new SingleThreadEventLoop();
            await loop.RegisterAsync(channel);

            await channel.CloseAsync();

            Assert.False(channel.Active);
            Mock.Get(webSocket).Verify(
                ws => ws.CloseAsync(WebSocketCloseStatus.NormalClosure, It.IsAny <string>(), It.IsAny <CancellationToken>()));
        }
Exemplo n.º 2
0
        public async Task DoesNotCloseAnAlreadyClosedWebSocket()
        {
            var webSocket = Mock.Of <WebSocket>(ws => ws.State == WebSocketState.Open);
            var channel   = new ServerWebSocketChannel(webSocket, Mock.Of <EndPoint>());
            var loop      = new SingleThreadEventLoop();
            await loop.RegisterAsync(channel);

            Mock <WebSocket> wsMock = Mock.Get(webSocket);

            wsMock.Setup(ws => ws.State).Returns(WebSocketState.Closed);
            wsMock.Setup(ws => ws.CloseAsync(It.IsAny <WebSocketCloseStatus>(), It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .Throws(new Exception("WebSocket.CloseAsync should not be called"));

            await channel.CloseAsync();
        }
        static async Task RunWebSocketServer()
        {
            HttpListenerContext context = await listener.GetContextAsync();

            if (!context.Request.IsWebSocketRequest)
            {
                context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                context.Response.Close();
            }

            HttpListenerWebSocketContext webSocketContext = await context.AcceptWebSocketAsync(WebSocketConstants.SubProtocols.Mqtt, 8 * 1024, TimeSpan.FromMinutes(5));

            serverListener         = new ReadListeningHandler();
            serverWebSocketChannel = new ServerWebSocketChannel(null, webSocketContext.WebSocket, context.Request.RemoteEndPoint);
            serverWebSocketChannel
            .Option(ChannelOption.Allocator, UnpooledByteBufferAllocator.Default)
            .Option(ChannelOption.AutoRead, true)
            .Option(ChannelOption.RcvbufAllocator, new AdaptiveRecvByteBufAllocator())
            .Option(ChannelOption.MessageSizeEstimator, DefaultMessageSizeEstimator.Default);
            serverWebSocketChannel.Pipeline.AddLast("server logger", new LoggingHandler("SERVER"));
            serverWebSocketChannel.Pipeline.AddLast(
                MqttEncoder.Instance,
                new MqttDecoder(true, 256 * 1024),
                serverListener);
            var workerGroup = new MultithreadEventLoopGroup();
            await workerGroup.GetNext().RegisterAsync(serverWebSocketChannel);

            while (true)
            {
                if (done)
                {
                    break;
                }

                await Task.Delay(TimeSpan.FromSeconds(2));
            }
        }
       static async Task RunWebSocketServer()
        {
            HttpListenerContext context = await listener.GetContextAsync();
            if (!context.Request.IsWebSocketRequest)
            {
                context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                context.Response.Close();
            }

            HttpListenerWebSocketContext webSocketContext = await context.AcceptWebSocketAsync(WebSocketConstants.SubProtocols.Mqtt, 8 * 1024, TimeSpan.FromMinutes(5));

            serverListener = new ReadListeningHandler();
            serverWebSocketChannel = new ServerWebSocketChannel(null, webSocketContext.WebSocket, context.Request.RemoteEndPoint);
            serverWebSocketChannel
                .Option(ChannelOption.Allocator, UnpooledByteBufferAllocator.Default)
                .Option(ChannelOption.AutoRead, true)
                .Option(ChannelOption.RcvbufAllocator, new AdaptiveRecvByteBufAllocator())
                .Option(ChannelOption.MessageSizeEstimator, DefaultMessageSizeEstimator.Default);
            serverWebSocketChannel.Pipeline.AddLast("server logger", new LoggingHandler("SERVER"));
            serverWebSocketChannel.Pipeline.AddLast(
                MqttEncoder.Instance,
                new MqttDecoder(true, 256 * 1024),
                serverListener);
            var workerGroup = new MultithreadEventLoopGroup();
            await workerGroup.GetNext().RegisterAsync(serverWebSocketChannel);

           while (true)
           {
               if (done)
               {
                   break;
               }

               await Task.Delay(TimeSpan.FromSeconds(2));
           }
        }