public async Task RemoveFromGroupHandlerHandle_WhenConnectionExists_RemovesConnectionFromGroupStoreAndRepliesToBus() { using var client = new TestClient(); var connection = HubConnectionContextUtils.Create(connection: client.Connection); var fakeBus = new FakeBus(); var hubLifetimeManager = ArrangeRebusLifetimeManager(fakeBus); await hubLifetimeManager.OnConnectedAsync(connection).OrTimeout(); var removeFromGroupCommand = new RemoveFromGroup <TestHub>("localhost", "group", connection.ConnectionId); hubLifetimeManager.AddToGroupLocal(connection, removeFromGroupCommand.GroupName); var removeFromGroupHandler = new RemoveFromGroupHandler <TestHub>(hubLifetimeManager, fakeBus); await removeFromGroupHandler.Handle(removeFromGroupCommand); Assert.True(hubLifetimeManager.GroupConnections.TryGetValue(removeFromGroupCommand.GroupName, out var groupStore)); Assert.False(groupStore.GetEnumerator().ToEnumerable().Contains(connection)); var ackReply = fakeBus.Events.OfType <ReplyMessageSent>().Select(m => m.ReplyMessage).OfType <Ack <TestHub> >().FirstOrDefault(); Assert.NotNull(ackReply); Assert.AreEqual(hubLifetimeManager.ServerName, ackReply.ServerName); }
/// <summary> /// <inheritdoc/> /// </summary> public override async Task RemoveFromGroupAsync(string connectionId, string groupName, CancellationToken cancellationToken = default) { if (connectionId == null) { throw new ArgumentNullException(nameof(connectionId)); } if (groupName == null) { throw new ArgumentNullException(nameof(groupName)); } var connection = Connections[connectionId]; if (connection != null) { RemoveFromGroupLocal(connection, groupName); return; } try { _logger.LogInformation("Publishing RemoveGroup<THub> {GroupName} message to Rebus for {ConnectionId}.", groupName, connectionId); var command = new RemoveFromGroup <THub>(serverName: ServerName, groupName: groupName, connectionId: connectionId); var ack = await _bus.PublishRequest <Ack <THub> >(command, externalCancellationToken : cancellationToken).ConfigureAwait(false); _logger.LogInformation("Received response to RemoveFromToGroup<THub> {GroupName} message for {ConnectionId} from {ServerName}.", groupName, connectionId, ack.ServerName); } catch (TaskCanceledException e) { _logger.LogWarning(e, "RemoveFromGroup<THub> {GroupName} for {ConnectionId} ack timed out.", groupName, connectionId); } }
public async Task <ActionResult> RemoveMemberAsync([FromRoute] Guid groupId, [FromRoute] Guid userId) { var sub = User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value; var command = new RemoveFromGroup(sub, groupId, userId); var result = await _mediator.Send(command); if (result.IsFailure) { return(BadRequest()); } return(NoContent()); }
/// <summary> /// <inheritdoc/> /// </summary> public Task Handle(RemoveFromGroup <THub> message) { var connection = _hubLifetimeManager.Connections[message.ConnectionId]; // Connection doesn't exist on this server if (connection == null) { return(Task.CompletedTask); } _hubLifetimeManager.RemoveFromGroupLocal(connection, message.GroupName); return(_bus.Reply(new Ack <THub>(serverName: _hubLifetimeManager.ServerName))); }
public async Task RemoveFromGroupHandlerHandle_WhenConnectionDoesntExist_LeavesGroupStoreUntouched() { using var client = new TestClient(); var connection = HubConnectionContextUtils.Create(connection: client.Connection); var fakeBus = new FakeBus(); var hubLifetimeManager = ArrangeRebusLifetimeManager(fakeBus); var removeFromGroupCommand = new RemoveFromGroup <TestHub>("localhost", "group", connection.ConnectionId); var removeFromGroupHandler = new RemoveFromGroupHandler <TestHub>(hubLifetimeManager, fakeBus); await removeFromGroupHandler.Handle(removeFromGroupCommand); Assert.False(hubLifetimeManager.GroupConnections.TryGetValue(removeFromGroupCommand.GroupName, out _)); }
public void TestRemoveFromGroup() { RemoveFromGroup req; Request req2; RecombeeBinding resp; // it 'does not fail when removing item that is contained in the set' req = new RemoveFromGroup("entity_id", "item", "entity_id"); resp = client.Send(req); // it 'fails when removing item that is not contained in the set' req = new RemoveFromGroup("entity_id", "item", "not_contained"); try { client.Send(req); Assert.True(false, "No exception thrown"); } catch (ResponseException ex) { Assert.Equal(404, (int)ex.StatusCode); } }
//移除组成员 public Task RemoveFromGroup(RemoveFromGroup args) { return(_hubEventBus.Raise(new RemoveFromGroupEvent(this, args))); }