Exemple #1
0
        public async Task TestServerAbort()
        {
            //arrange
            var server = new WebListenerWebSocketServer();
            var port   = _FreeTcpPort();

            Guid _cid = Guid.Empty;
            bool _serverDisconnected = false;
            bool _clientDisconnected = false;
            var  connectedTCS        = new TaskCompletionSource <bool>();
            var  serverDisconnectTCS = new TaskCompletionSource <bool>();
            var  beh = new testBeh()
            {
                ClosedHandler = (h) =>
                {
                    if (h.ConnectionId == _cid)
                    {
                        serverDisconnectTCS.TrySetResult(true);
                        _serverDisconnected = true;
                    }
                },
                ConnectionEstablished = (id, ctx) => { _cid = id; connectedTCS.TrySetResult(true); }
            };

            beh.StringMessageHandler = (e) => { e.WebSocket.SendStringAsync(e.Data + e.Data, CancellationToken.None); };
            var u = $"://localhost:{port}/";

            server.AddRouteBehavior("/aaa", () => beh);
            await server.StartAsync("http" + u);

            var clientDisconnectTCS = new TaskCompletionSource <bool>();

            var client = new WebSocketClient()
            {
                CloseHandler = (c) => { clientDisconnectTCS.TrySetResult(true); _clientDisconnected = true; }
            };
            await client.ConnectAsync("ws" + u + "aaa");

            //act
            await connectedTCS.Task;

            server.AbortConnection(_cid);

            //Assert;
            await Task.WhenAny(Task.Delay(200), serverDisconnectTCS.Task);

            Assert.True(_serverDisconnected);


            await Task.WhenAny(Task.Delay(200), clientDisconnectTCS.Task);

            Assert.True(_clientDisconnected);

            var clients = server.GetActiveConnectionIds();

            Assert.Empty(clients);

            server.Dispose();
        }