private Task HandleForwardedMessageAsync(ForwardingOutcome outcome, CancellationToken cancellationToken)
        {
            switch (outcome)
            {
            case ForwardingOutcome.Acknowledge:
                return(Message.AcknowledgeAsync(cancellationToken));

            case ForwardingOutcome.Rollback:
                return(Message.RollbackAsync(cancellationToken));

            case ForwardingOutcome.Reject:
                return(Message.RejectAsync(cancellationToken));

            default:
                throw new InvalidOperationException("Invalid ForwardingOutcome value.");
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ForwardingReceiver"/> class. This constructor
 /// uses <see cref="MessagingScenarioFactory"/> to create the main <see cref="IReceiver"/> and
 /// <see cref="ISender"/> forwarders.
 /// </summary>
 /// <param name="name">The name of the forwarding receiver.</param>
 /// <param name="receiverName">
 /// The name of the <see cref="IReceiver"/> that is the actual source of messages.
 /// </param>
 /// <param name="acknowledgeForwarderName">
 /// The name of the <see cref="ISender"/> that received messages are forwarded to when
 /// their <see cref="IReceiverMessage.AcknowledgeAsync"/> method is called.
 /// </param>
 /// <param name="acknowledgeOutcome">
 /// The outcome for received messages that have been forwarded to
 /// <see cref="AcknowledgeForwarder"/>.
 /// </param>
 /// <param name="rollbackForwarderName">
 /// The name of the <see cref="ISender"/> that received messages are forwarded to when
 /// their <see cref="IReceiverMessage.RollbackAsync"/> method is called.
 /// </param>
 /// <param name="rollbackOutcome">
 /// The outcome for received messages that have been forwarded to
 /// <see cref="RollbackForwarder"/>.
 /// </param>
 /// <param name="rejectForwarderName">
 /// The name of the <see cref="ISender"/> that received messages are forwarded to when
 /// their <see cref="IReceiverMessage.RejectAsync"/> method is called.
 /// </param>
 /// <param name="rejectOutcome">
 /// The outcome for received messages that have been forwarded to
 /// <see cref="RejectForwarder"/>.
 /// </param>
 public ForwardingReceiver(string name, string receiverName,
                           string?acknowledgeForwarderName = null, ForwardingOutcome acknowledgeOutcome = ForwardingOutcome.Acknowledge,
                           string?rollbackForwarderName    = null, ForwardingOutcome rollbackOutcome    = ForwardingOutcome.Rollback,
                           string?rejectForwarderName      = null, ForwardingOutcome rejectOutcome      = ForwardingOutcome.Reject)
     : this(name ?? throw new ArgumentNullException(nameof(name)),
            MessagingScenarioFactory.CreateReceiver(receiverName ?? throw new ArgumentNullException(nameof(receiverName))),
Exemple #3
0
        public async Task RollbackHandlesInnerMessageAccordingToRollbackOutcomeWhenRollbackForwarderIsNotNull(ForwardingOutcome outcome)
        {
            using var forwarder = new FakeSender();

            using var receiver           = new FakeReceiver();
            using var forwardingReceiver = new ForwardingReceiver("foo", receiver, rollbackForwarder: forwarder, rollbackOutcome: outcome);
            using var message            = new FakeReceiverMessage("Hello, world!");

            var forwardingMessage = new ForwardingReceiverMessage(forwardingReceiver, message);

            await forwardingMessage.RollbackAsync().ConfigureAwait(false);

            message.HandledBy.Should().Be($"{outcome}Async");
        }
        public async Task AcknowledgeHandlesInnerMessageAccordingToAcknowledgeOutcomeWhenAcknowledgeForwarderIsNotNull(ForwardingOutcome outcome)
        {
            var forwarder = new FakeSender();

            var receiver           = new FakeReceiver();
            var forwardingReceiver = new ForwardingReceiver("foo", receiver, acknowledgeForwarder: forwarder, acknowledgeOutcome: outcome);
            var message            = new FakeReceiverMessage("Hello, world!");

            var forwardingMessage = new ForwardingReceiverMessage(forwardingReceiver, message);

            await forwardingMessage.AcknowledgeAsync();

            message.HandledBy.Should().Be($"{outcome}Async");
        }