public async Task SendGroupExceptAsyncDoesNotWriteToExcludedConnections()
        {
            using (var client1 = new TestClient())
                using (var client2 = new TestClient())
                {
                    var manager     = new DefaultHubLifetimeManager <MyHub>(new Logger <DefaultHubLifetimeManager <MyHub> >(NullLoggerFactory.Instance));
                    var connection1 = HubConnectionContextUtils.Create(client1.Connection);
                    var connection2 = HubConnectionContextUtils.Create(client2.Connection);

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

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

                    await manager.AddGroupAsync(connection1.ConnectionId, "gunit").OrTimeout();

                    await manager.AddGroupAsync(connection2.ConnectionId, "gunit").OrTimeout();

                    await manager.SendGroupExceptAsync("gunit", "Hello", new object[] { "World" }, new [] { connection2.ConnectionId }).OrTimeout();

                    var message = Assert.IsType <InvocationMessage>(client1.TryRead());
                    Assert.Equal("Hello", message.Target);
                    Assert.Single(message.Arguments);
                    Assert.Equal("World", (string)message.Arguments[0]);

                    Assert.Null(client2.TryRead());
                }
        }
        public async Task InvokeGroupAsyncWritesToAllConnectionsInGroupOutput()
        {
            using (var client1 = new TestClient())
                using (var client2 = new TestClient())
                {
                    var output1 = Channel.CreateUnbounded <HubMessage>();
                    var output2 = Channel.CreateUnbounded <HubMessage>();

                    var manager     = new DefaultHubLifetimeManager <MyHub>();
                    var connection1 = new HubConnectionContext(output1, client1.Connection);
                    var connection2 = new HubConnectionContext(output2, client2.Connection);

                    await manager.OnConnectedAsync(connection1);

                    await manager.OnConnectedAsync(connection2);

                    await manager.AddGroupAsync(connection1.ConnectionId, "gunit");

                    await manager.InvokeGroupAsync("gunit", "Hello", new object[] { "World" });

                    Assert.True(output1.In.TryRead(out var item));
                    var message = item as InvocationMessage;
                    Assert.NotNull(message);
                    Assert.Equal("Hello", message.Target);
                    Assert.Single(message.Arguments);
                    Assert.Equal("World", (string)message.Arguments[0]);

                    Assert.False(output2.In.TryRead(out item));
                }
        }
Esempio n. 3
0
        public void GlobalSetup()
        {
            _hubLifetimeManager = new DefaultHubLifetimeManager <Hub>(NullLogger <DefaultHubLifetimeManager <Hub> > .Instance);

            IHubProtocol protocol;

            if (Protocol == "json")
            {
                protocol = new JsonHubProtocol();
            }
            else
            {
                protocol = new MessagePackHubProtocol();
            }

            var options = new PipeOptions();

            for (var i = 0; i < Connections; ++i)
            {
                var pair          = DuplexPipe.CreateConnectionPair(options, options);
                var connection    = new DefaultConnectionContext(Guid.NewGuid().ToString(), pair.Application, pair.Transport);
                var hubConnection = new HubConnectionContext(connection, Timeout.InfiniteTimeSpan, NullLoggerFactory.Instance);
                hubConnection.Protocol = protocol;
                _hubLifetimeManager.OnConnectedAsync(hubConnection).GetAwaiter().GetResult();
                _hubLifetimeManager.AddGroupAsync(connection.ConnectionId, TestGroupName).GetAwaiter().GetResult();

                _ = ConsumeAsync(connection.Application);
            }

            _hubContext = new HubContext <Hub>(_hubLifetimeManager);
        }
        public async Task InvokeGroupAsyncWritesToAllConnectionsInGroupOutput()
        {
            using (var client1 = new TestClient())
                using (var client2 = new TestClient())
                {
                    var manager     = new DefaultHubLifetimeManager <MyHub>();
                    var connection1 = HubConnectionContextUtils.Create(client1.Connection);
                    var connection2 = HubConnectionContextUtils.Create(client2.Connection);

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

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

                    await manager.AddGroupAsync(connection1.ConnectionId, "gunit").OrTimeout();

                    await manager.SendGroupAsync("gunit", "Hello", new object[] { "World" }).OrTimeout();

                    var message = Assert.IsType <InvocationMessage>(client1.TryRead());
                    Assert.Equal("Hello", message.Target);
                    Assert.Single(message.Arguments);
                    Assert.Equal("World", (string)message.Arguments[0]);

                    Assert.Null(client2.TryRead());
                }
        }
Esempio n. 5
0
        private void Setup()
        {
            _publishSubscribe
            .Observe <(string connectionId, string groupName)>(_addGroupAsyncTopic)
            .Subscribe(tuple => _defaultHubLifetimeManager.AddGroupAsync(tuple.Data.connectionId, tuple.Data.connectionId).GetAwaiter().GetResult(), _cancellationTokenSource.Token);

            _publishSubscribe
            .Observe <(string methodName, object[] args)>(_invokeAllAsyncTopic)
            .Subscribe(tuple => _defaultHubLifetimeManager.InvokeAllAsync(tuple.Data.methodName, tuple.Data.args).GetAwaiter().GetResult(), _cancellationTokenSource.Token);

            _publishSubscribe
            .Observe <(string methodName, object[] args, IReadOnlyList <string> excludedIds)>(_invokeAllExceptAsyncTopic)
            .Subscribe(tuple => _defaultHubLifetimeManager.InvokeAllExceptAsync(tuple.Data.methodName, tuple.Data.args, tuple.Data.excludedIds).GetAwaiter().GetResult(), _cancellationTokenSource.Token);

            _publishSubscribe
            .Observe <(string connectionId, string methodName, object[] args)>(_invokeConnectionAsyncTopic)
            .Subscribe(tuple => _defaultHubLifetimeManager.InvokeConnectionAsync(tuple.Data.connectionId, tuple.Data.methodName, tuple.Data.args).GetAwaiter().GetResult(), _cancellationTokenSource.Token);

            _publishSubscribe
            .Observe <(string groupName, string methodName, object[] args)>(_invokeGroupAsyncTopic)
            .Subscribe(tuple => _defaultHubLifetimeManager.InvokeGroupAsync(tuple.Data.groupName, tuple.Data.methodName, tuple.Data.args).GetAwaiter().GetResult(), _cancellationTokenSource.Token);

            _publishSubscribe
            .Observe <(string userId, string methodName, object[] args)>(_invokeUserAsyncTopic)
            .Subscribe(tuple => _defaultHubLifetimeManager.InvokeUserAsync(tuple.Data.userId, tuple.Data.methodName, tuple.Data.args).GetAwaiter().GetResult(), _cancellationTokenSource.Token);

            _publishSubscribe
            .Observe <(string connectionId, string groupName)>(_removeGroupAsyncTopic)
            .Subscribe(tuple => _defaultHubLifetimeManager.RemoveGroupAsync(tuple.Data.connectionId, tuple.Data.groupName).GetAwaiter().GetResult(), _cancellationTokenSource.Token);
        }
        public void GlobalSetup()
        {
            _hubLifetimeManager  = new DefaultHubLifetimeManager <Hub>(NullLogger <DefaultHubLifetimeManager <Hub> > .Instance);
            _connectionIds       = new List <string>();
            _subsetConnectionIds = new List <string>();
            _groupNames          = new List <string>();
            _userIdentifiers     = new List <string>();

            var jsonHubProtocol = new JsonHubProtocol();

            for (int i = 0; i < 100; i++)
            {
                string connectionId   = "connection-" + i;
                string groupName      = "group-" + i % 10;
                string userIdentifier = "user-" + i % 20;
                AddUnique(_connectionIds, connectionId);
                AddUnique(_groupNames, groupName);
                AddUnique(_userIdentifiers, userIdentifier);
                if (i % 3 == 0)
                {
                    _subsetConnectionIds.Add(connectionId);
                }

                var connectionContext = new TestConnectionContext
                {
                    ConnectionId = connectionId,
                    Transport    = new TestDuplexPipe(ForceAsync)
                };
                var hubConnectionContext = new HubConnectionContext(connectionContext, TimeSpan.Zero, NullLoggerFactory.Instance);
                hubConnectionContext.UserIdentifier = userIdentifier;
                hubConnectionContext.Protocol       = jsonHubProtocol;

                _hubLifetimeManager.OnConnectedAsync(hubConnectionContext).GetAwaiter().GetResult();
                _hubLifetimeManager.AddGroupAsync(connectionId, groupName);
            }
        }
 public async Task AddGroupOnNonExistentConnectionNoops()
 {
     var manager = new DefaultHubLifetimeManager <MyHub>();
     await manager.AddGroupAsync("NotARealConnectionId", "MyGroup");
 }
Esempio n. 8
0
 public async Task AddGroupOnNonExistentConnectionNoops()
 {
     var manager = new DefaultHubLifetimeManager <MyHub>(new Logger <DefaultHubLifetimeManager <MyHub> >(NullLoggerFactory.Instance));
     await manager.AddGroupAsync("NotARealConnectionId", "MyGroup").OrTimeout();
 }