Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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);
            }
        }
Beispiel #3
0
        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)));
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #7
0
 //移除组成员
 public Task RemoveFromGroup(RemoveFromGroup args)
 {
     return(_hubEventBus.Raise(new RemoveFromGroupEvent(this, args)));
 }