public async Task <CommandHandlingResult> Handle(BroadcastTransactionCommand command, IEventPublisher publisher)
        {
            var broadcastingResult = await _client.BroadcastTransactionAsync(command.TransactionId, command.SignedTransactionContext);

            _chaosKitty.Meow(command.TransactionId);

            switch (broadcastingResult)
            {
            case TransactionBroadcastingResult.Success:

                publisher.PublishEvent(new TransactionBroadcastedEvent
                {
                    TransactionId = command.TransactionId
                });

                return(CommandHandlingResult.Ok());

            case TransactionBroadcastingResult.AlreadyBroadcasted:

                _log.Info("API said that the transaction already was broadcasted", command);

                publisher.PublishEvent(new TransactionBroadcastedEvent
                {
                    TransactionId = command.TransactionId
                });

                return(CommandHandlingResult.Ok());

            default:
                throw new ArgumentOutOfRangeException
                      (
                          nameof(broadcastingResult),
                          $"Transaction broadcastring result [{broadcastingResult}] is not supported."
                      );
            }
        }
예제 #2
0
 public async Task SendBroadcastTransactionCommand([FromBody] BroadcastTransactionCommand command)
 {
     _cqrsEngine.SendCommand(command, $"{CqrsModule.TransactionExecutor}.saga", CqrsModule.TransactionExecutor);
 }