Example #1
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);
        }
Example #2
0
        public async Task InvokeConnectionAsyncThrowsIfConnectionFailsToWrite()
        {
            using (var client = new TestClient())
            {
                // Force an exception when writing to connection
                var output = new Mock <Channel <HubMessage> >();
                output.Setup(o => o.Out.WaitToWriteAsync(It.IsAny <CancellationToken>())).Throws(new Exception("Message"));

                var manager    = new DefaultHubLifetimeManager <MyHub>();
                var connection = new HubConnectionContext(output.Object, client.Connection);

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

                var exception = await Assert.ThrowsAsync <Exception>(() => manager.InvokeConnectionAsync(connection.ConnectionId, "Hello", new object[] { "World" }).OrTimeout());

                Assert.Equal("Message", exception.Message);
            }
        }
        public async Task InvokeConnectionAsyncWritesToConnectionOutput()
        {
            using (var client = new TestClient())
            {
                var output     = Channel.CreateUnbounded <HubMessage>();
                var manager    = new DefaultHubLifetimeManager <MyHub>();
                var connection = new HubConnectionContext(output, client.Connection);

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

                await manager.InvokeConnectionAsync(connection.ConnectionId, "Hello", new object[] { "World" }).OrTimeout();

                Assert.True(output.Reader.TryRead(out var item));
                var message = Assert.IsType <InvocationMessage>(item);
                Assert.Equal("Hello", message.Target);
                Assert.Single(message.Arguments);
                Assert.Equal("World", (string)message.Arguments[0]);
            }
        }
        public async Task InvokeConnectionAsyncWritesToConnectionOutput()
        {
            using (var client = new TestClient())
            {
                var manager    = new DefaultHubLifetimeManager <MyHub>();
                var connection = HubConnectionContextUtils.Create(client.Connection);

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

                await manager.InvokeConnectionAsync(connection.ConnectionId, "Hello", new object[] { "World" }).OrTimeout();

                await connection.DisposeAsync().OrTimeout();

                var message = Assert.IsType <InvocationMessage>(client.TryRead());
                Assert.Equal("Hello", message.Target);
                Assert.Single(message.Arguments);
                Assert.Equal("World", (string)message.Arguments[0]);
            }
        }
 public async Task InvokeConnectionAsyncOnNonExistentConnectionNoops()
 {
     var manager = new DefaultHubLifetimeManager <MyHub>();
     await manager.InvokeConnectionAsync("NotARealConnectionId", "Hello", new object[] { "World" });
 }