internal static Task Close(this ITransportConnection connection, string connectionId) { var command = new Command { CommandType = CommandType.Disconnect }; return connection.Send(new ConnectionMessage(connectionId, command)); }
private static Task SendCommand(ITransportConnection connection, string connectionId, CommandType commandType) { var command = new Command { CommandType = commandType }; var message = new ConnectionMessage(PrefixHelper.GetConnectionId(connectionId), command); return connection.Send(message); }
private void ProcessCommand(Command command) { switch (command.CommandType) { case CommandType.AddToGroup: { var name = command.Value; if (EventKeyAdded != null) { _groups.Add(name); EventKeyAdded(this, name); } } break; case CommandType.RemoveFromGroup: { var name = command.Value; if (EventKeyRemoved != null) { _groups.Remove(name); EventKeyRemoved(this, name); } } break; case CommandType.Disconnect: _disconnected = true; break; case CommandType.Abort: _aborted = true; break; } }
public void AcksAreSentToAckSubscriber() { // Arrange var waitCommand = new Command { WaitForAck = true }; var ackerId = "acker"; var waiterId = "waiter"; var messageId = "messageId"; var maxMessages = 1; var ackHandler = new Mock<IAckHandler>(); ackHandler.Setup(m => m.TriggerAck(waitCommand.Id)).Returns(false); var messageBus = new Mock<IMessageBus>(); Message waitMessage = null; Message ackMessage = null; messageBus.Setup(m => m.Publish(It.IsAny<Message>())).Returns<Message>(m => { if (m.WaitForAck) { waitMessage = m; } else if (m.IsAck) { ackMessage = m; } return TaskAsyncHelper.Empty; }); var loggerFactory = new Mock<ILoggerFactory>(); var counters = new PerformanceCounterManager(loggerFactory.Object); var serializer = JsonUtility.CreateDefaultSerializer(); var waiterConnection = new Connection(messageBus.Object, serializer, "signal", waiterId, new string[] { }, new string[] { }, loggerFactory.Object, ackHandler.Object, counters, new Mock<IProtectedData>().Object, new MemoryPool()); // Act waiterConnection.Send(ackerId, waitCommand); // Assert Assert.NotNull(waitMessage); Assert.Equal(waiterId, waitMessage.Source); Assert.Equal(PrefixHelper.GetConnectionId(ackerId), waitMessage.Key); // Arrange some more now that we have a waitMessage var messages = new List<ArraySegment<Message>>() { new ArraySegment<Message>(new[] { waitMessage }) }; var messageResult = new MessageResult(messages, 1); var ackerConnection = new Connection(messageBus.Object, serializer, "signal", ackerId, new string[] { }, new string[] { }, loggerFactory.Object, ackHandler.Object, counters, new Mock<IProtectedData>().Object, new Mock<IMemoryPool>().Object); ackerConnection.WriteCursor = _ => { }; messageBus.Setup(m => m.Subscribe(ackerConnection, messageId, It.IsAny<Func<MessageResult, object, Task<bool>>>(), maxMessages, It.IsAny<object>())) .Callback<ISubscriber, string, Func<MessageResult, object, Task<bool>>, int, object>((subsciber, cursor, callback, max, state) => { callback(messageResult, state); }); // Act ackerConnection.Receive(messageId, (_, __) => TaskAsyncHelper.False, maxMessages, null); // Assert Assert.NotNull(ackMessage); Assert.Equal(ackerId, ackMessage.Source); Assert.Equal(AckSubscriber.Signal, ackMessage.Key); }