public MessageDispatcherTests() { _hooks = new Subject <MessageHook>(); _messageSenderProvider = A.Fake <IMessageSenderProvider>(); _logger = A.Fake <ILogger <MessageDispatcher> >(); _messageSender = A.Fake <IMessageSender>(); A.CallTo(() => _messageSenderProvider.GetMessageSenderForHub(A <string> ._)).Returns(_messageSender); _dispatcher = new MessageDispatcher(_messageSenderProvider, _logger, _hooks); _messageHandler = _dispatcher.OnMessageReceived; }
public MessageDispatcherTests() { _nodeIdProvider = A.Fake <INodeIdProvider>(); _messageSenderProvider = A.Fake <IMessageSenderProvider>(); _listener = A.Fake <IServiceBusListener>(); _logger = A.Fake <ILogger <MessageDispatcher> >(); _messageSender = A.Fake <IMessageSender>(); A.CallTo(() => _nodeIdProvider.NodeId).Returns(Guid.NewGuid()); A.CallTo(() => _messageSenderProvider.GetMessageSenderForHub(A <string> ._)).Returns(_messageSender); A.CallTo(() => _listener.StartListeningAsync(A <MessageHandler> ._, A <CancellationToken> ._)) .Invokes((MessageHandler mh, CancellationToken _) => _messageHandler = mh); _dispatcher = new MessageDispatcher(_nodeIdProvider, _messageSenderProvider, _listener, _logger); }
public async Task OnMessageReceived(SignalRMessage message, CancellationToken cancellationToken) { var messageSender = _messageSenderProvider.GetMessageSenderForHub(message.HubTypeName); if (messageSender == null) { _logger.LogWarning("Can't find message sender for hub '{HubTypeName}'", message.HubTypeName); return; } _hook.OnNext(new MessageHook(message.HubTypeName, message.Method, message.Args)); foreach (var recipient in message.Recipients) { _logger.LogDebug("Dispatched {MethodName} to {Hub}", message.Method, message.HubTypeName); await recipient.SendCoreAsync(messageSender, message.Method, message.Args, cancellationToken); } }
private async Task OnMessageReceived(SignalRMessage message, CancellationToken cancellationToken) { if (message.SenderId == _nodeIdProvider.NodeId) { // Ignore messages sent by self return; } var messageSender = _messageSenderProvider.GetMessageSenderForHub(message.HubTypeName); if (messageSender == null) { _logger.LogWarning("Can't find message sender for hub '{HubTypeName}'", message.HubTypeName); return; } foreach (var recipient in message.Recipients) { await recipient.SendCoreAsync(messageSender, message.Method, message.Args, cancellationToken); } }
public async Task Messages_For_Unknown_Hub_Are_Not_Dispatched() { A.CallTo(() => _messageSenderProvider.GetMessageSenderForHub(A <string> ._)).Returns(null); // Sanity check _messageHandler.Should().NotBeNull(); var recipients = A.CollectionOfFake <SignalRMessageRecipient>(3); var message = new SignalRMessage { HubTypeName = "MyHub", Method = "Foo", Args = new object[] { "Hello", 42 }, Recipients = recipients.ToArray() }; await _messageHandler(message, CancellationToken.None); foreach (var recipient in recipients) { A.CallTo(() => recipient.SendCoreAsync(default, default, default, default))