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);
        }
Ejemplo n.º 2
0
        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;
 }