コード例 #1
0
        public async Task SendGroupAsyncWritesToAllConnectionsInGroupOutput(bool fromManager)
        {
            var hubProxy = new HubProxy <MyHub>(_fixture.TestCluster.Client);

            using (var manager = CreateNewHubLifetimeManager <MyHub>())
                using (var client1 = new TestClient())
                    using (var client2 = new TestClient())
                    {
                        var connection1 = HubConnectionContextUtils.Create(client1.Connection);
                        var connection2 = HubConnectionContextUtils.Create(client2.Connection);

                        await manager.OnConnectedAsync(connection1).OrTimeout();

                        await manager.OnConnectedAsync(connection2).OrTimeout();

                        if (fromManager)
                        {
                            await manager.AddToGroupAsync(connection1.ConnectionId, "group").OrTimeout();

                            await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout();
                        }
                        else
                        {
                            await hubProxy.AddToGroupAsync(connection1.ConnectionId, "group").OrTimeout();

                            await hubProxy.SendGroupAsync("group", "Hello", "World").OrTimeout();
                        }

                        await AssertMessageAsync(client1);

                        Assert.Null(client2.TryRead());
                    }
        }
コード例 #2
0
        public async Task AddGroupAsyncForLocalConnectionAlreadyInGroupDoesNothing(bool fromManager)
        {
            var hubProxy = new HubProxy <MyHub>(_fixture.TestCluster.Client);

            using (var manager = CreateNewHubLifetimeManager <MyHub>())
                using (var client = new TestClient())
                {
                    var connection = HubConnectionContextUtils.Create(client.Connection);

                    await manager.OnConnectedAsync(connection).OrTimeout();

                    await manager.AddToGroupAsync(connection.ConnectionId, "group").OrTimeout();

                    await manager.AddToGroupAsync(connection.ConnectionId, "group").OrTimeout();

                    if (fromManager)
                    {
                        await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout();
                    }
                    else
                    {
                        await hubProxy.SendGroupAsync("group", "Hello", "World").OrTimeout();
                    }

                    await AssertMessageAsync(client);

                    Assert.Null(client.TryRead());

                    // ADDED: GetConnectionIdsAsync
                    //var result = await hubProxy.GetConnectionIdsFromGroupAsync("group").OrTimeout();
                    //Assert.Equal(1, result.Count);
                }
        }
コード例 #3
0
        public async Task StillSubscribedToGroupAfterOneOfMultipleConnectionsAssociatedWithGroupDisconnects(bool fromManager)
        {
            var hubProxy = new HubProxy <MyHub>(_fixture.TestCluster.Client);

            using (var manager = CreateNewHubLifetimeManager <MyHub>())
                using (var client1 = new TestClient())
                    using (var client2 = new TestClient())
                    {
                        var connection1 = HubConnectionContextUtils.Create(client1.Connection);
                        var connection2 = HubConnectionContextUtils.Create(client2.Connection);

                        await manager.OnConnectedAsync(connection1).OrTimeout();

                        await manager.OnConnectedAsync(connection2).OrTimeout();

                        if (fromManager)
                        {
                            await manager.AddToGroupAsync(connection2.ConnectionId, "group");

                            await manager.AddToGroupAsync(connection1.ConnectionId, "group");
                        }
                        else
                        {
                            await hubProxy.AddToGroupAsync(connection1.ConnectionId, "group");

                            await hubProxy.AddToGroupAsync(connection2.ConnectionId, "group");
                        }

                        // Disconnect one connection for the group
                        await manager.OnDisconnectedAsync(connection1).OrTimeout();

                        if (fromManager)
                        {
                            await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout();
                        }
                        else
                        {
                            await hubProxy.SendGroupAsync("group", "Hello", "World").OrTimeout();
                        }

                        await AssertMessageAsync(client2);
                    }
        }
コード例 #4
0
        public async Task WritingToGroupWithOneConnectionFailingSecondConnectionStillReceivesMessage(bool fromManager)
        {
            var hubProxy = new HubProxy <MyHub>(_fixture.TestCluster.Client);

            using (var manager = CreateNewHubLifetimeManager <MyHub>())
                using (var client1 = new TestClient())
                    using (var client2 = new TestClient())
                    {
                        // Force an exception when writing to connection
                        var connectionMock = HubConnectionContextUtils.CreateMock(client1.Connection);

                        var connection1 = connectionMock;
                        var connection2 = HubConnectionContextUtils.Create(client2.Connection);

                        await manager.OnConnectedAsync(connection1).OrTimeout();

                        await manager.AddToGroupAsync(connection1.ConnectionId, "group");

                        await manager.OnConnectedAsync(connection2).OrTimeout();

                        await manager.AddToGroupAsync(connection2.ConnectionId, "group");

                        if (fromManager)
                        {
                            await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout();
                        }
                        else
                        {
                            await hubProxy.SendGroupAsync("group", "Hello", "World").OrTimeout();
                        }

                        // connection1 will throw when receiving a group message, we are making sure other connections
                        // are not affected by another connection throwing
                        await AssertMessageAsync(client2);

                        // Repeat to check that group can still be sent to
                        await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout();
                        await AssertMessageAsync(client2);
                    }
        }
コード例 #5
0
        public async Task DisconnectConnectionRemovesConnectionFromGroup(bool fromManager)
        {
            var hubProxy = new HubProxy <MyHub>(_fixture.TestCluster.Client);

            using (var manager = CreateNewHubLifetimeManager <MyHub>())
                using (var client = new TestClient())
                {
                    var connection = HubConnectionContextUtils.Create(client.Connection);

                    await manager.OnConnectedAsync(connection).OrTimeout();

                    if (fromManager)
                    {
                        await manager.AddToGroupAsync(connection.ConnectionId, "group").OrTimeout();
                    }
                    else
                    {
                        await hubProxy.AddToGroupAsync(connection.ConnectionId, "group").OrTimeout();
                    }

                    await manager.OnDisconnectedAsync(connection).OrTimeout();

                    if (fromManager)
                    {
                        await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout();
                    }
                    else
                    {
                        await hubProxy.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout();
                    }

                    Assert.Null(client.TryRead());

                    // ADDED: GetConnectionIdsAsync
                    //var result = await hubProxy.GetGroupNamesAsync("group").OrTimeout();
                    //Assert.Equal(0, result.Count);
                }
        }