private ResendMessagesChannelModule GetTarget( bool setEstablishedState = true, Mock <IChannel> channel = null, IMessageStorage messageStorage = null, IDeadMessageHandler deadMessageHandler = null, Event[] eventsToRemovePendingMessage = null) { if (channel == null) { channel = _channel; } var target = ResendMessagesChannelModule.CreateAndRegister(channel.Object, _resendMessageTryCount, _resendMessageInterval, messageStorage, deadMessageHandler: deadMessageHandler, eventsToRemovePendingMessage: eventsToRemovePendingMessage); channel .Setup(c => c.SendMessageAsync(It.IsAny <Message>(), It.IsAny <CancellationToken>())) .Returns((Message m, CancellationToken c) => ((IChannelModule <Message>)target).OnSendingAsync(m, _cancellationToken)); if (setEstablishedState) { target.OnStateChanged(SessionState.Established); } _targets.Add(target); return(target); }
public static ResendMessagesChannelModule CreateAndRegister( IChannel channel, int maxResendCount, TimeSpan resendWindow, IMessageStorage messageStorage = null, IKeyProvider keyProvider = null, IDeadMessageHandler deadMessageHandler = null, Event[] eventsToRemovePendingMessage = null) { var resendMessagesChannelModule = new ResendMessagesChannelModule( channel, messageStorage ?? new MemoryMessageStorage(), keyProvider ?? KeyProvider.Instance, deadMessageHandler ?? DiscardDeadMessageHandler.Instance, maxResendCount, resendWindow, eventsToRemovePendingMessage); resendMessagesChannelModule.RegisterTo(channel); return(resendMessagesChannelModule); }
public ResendMessagesChannelModule( IChannel channel, IMessageStorage messageStorage, IKeyProvider keyProvider, IDeadMessageHandler deadMessageHandler, int maxResendCount, TimeSpan resendWindow, Event[] eventsToRemovePendingMessage = null) { _channel = channel ?? throw new ArgumentNullException(nameof(channel)); _messageStorage = messageStorage ?? throw new ArgumentNullException(nameof(messageStorage)); _keyProvider = keyProvider ?? throw new ArgumentNullException(nameof(keyProvider)); _deadMessageHandler = deadMessageHandler ?? throw new ArgumentNullException(nameof(deadMessageHandler)); _maxResendCount = maxResendCount; _resendWindow = resendWindow; if (eventsToRemovePendingMessage != null && eventsToRemovePendingMessage.Length == 0) { throw new ArgumentException("At least one event must be provided", nameof(eventsToRemovePendingMessage)); } _eventsToRemovePendingMessage = eventsToRemovePendingMessage; }