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 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" }); }