コード例 #1
0
        private async Task ProcessBroadcastInProgress(Guid operationId)
        {
            try
            {
                var broadcast = await _broadcastRepository.GetAsync(operationId);

                if (broadcast == null)
                {
                    throw new BusinessException($"Broadcast for observed operation not found. operationId={operationId})");
                }

                var tx = await _horizonService.GetTransactionDetails(broadcast.Hash);

                if (tx == null)
                {
                    // transaction still in progress
                    return;
                }

                var paymentOp = _horizonService.GetFirstPaymentFromTransaction(tx);
                broadcast.State     = TxBroadcastState.Completed;
                broadcast.Amount    = paymentOp.Amount.InnerValue;
                broadcast.Fee       = tx.FeePaid;
                broadcast.CreatedAt = tx.CreatedAt;
                broadcast.Ledger    = tx.Ledger;
                await _broadcastRepository.MergeAsync(broadcast);

                await _observationRepository.DeleteIfExistAsync(operationId.ToString());
            }
            catch (Exception ex)
            {
                var broadcast = new TxBroadcast
                {
                    State     = TxBroadcastState.Failed,
                    Error     = ex.Message,
                    ErrorCode = TxExecutionError.Unknown
                };
                await _broadcastRepository.MergeAsync(broadcast);

                await _observationRepository.DeleteIfExistAsync(operationId.ToString());

                await _log.WriteErrorAsync(nameof(TransactionService), nameof(ProcessBroadcastInProgress),
                                           $"Failed to process in progress broadcast. operationId={operationId})", ex);
            }
        }