/// <summary>
        ///     Publishes results to listeners
        /// </summary>
        /// <param name="transactionResult"></param>
        /// <param name="mode"></param>
        /// <param name="guid"></param>
        public override void ResultHandler(ITransactionResult transactionResult, TransactionQueueMode mode, Guid guid)
        {
            var stringBuilder       = new StringBuilder();
            var receiveData         = (ReceiveData)transactionResult.Result;
            var confirmationNumber  = receiveData?.CompleteSessionResponse?.Payload?.ReferenceNumber;
            var formattedStringList = receiveData.ToFormattedString(new List <string>());
            var timeSpan            = (receiveData.BeginTimeStamp.HasValue && receiveData.EndTimeStamp.HasValue) ? receiveData.EndTimeStamp.Value - receiveData.BeginTimeStamp.Value : new TimeSpan();

            stringBuilder.AppendLine($"==========BEGIN {Display.ToUpper()}==========");
            stringBuilder.AppendLine($"{confirmationNumber}");
            stringBuilder.AppendLine($"{DateTime.Now}");
            stringBuilder.AppendLine((receiveData.Errors.Count == 0) ? "COMPLETED SUCCESSFULLY" : "COMPLETED WITH ERRORS");
            stringBuilder.AppendLine($"FINISHED IN {timeSpan.Minutes}MIN {timeSpan.Seconds}SEC {timeSpan.Milliseconds}MS");
            stringBuilder.AppendLine("==========\n");

            foreach (var formattedString in formattedStringList)
            {
                stringBuilder.Append(formattedString);
            }

            stringBuilder.AppendLine($"==========END {Display.ToUpper()}==========");

            _messageBus.Publish(new TransactionResultsReceivedMessage(mode, guid)
            {
                Result          = transactionResult,
                DetailsString   = stringBuilder.ToString(),
                ReferenceNumber = confirmationNumber
            });
        }
Beispiel #2
0
 private Task ProcessResults(Task <ITransactionResult> result, TransactionQueueMode mode, Guid guid)
 {
     if (result == null)
     {
         return(null);
     }
     return(Task.Run(() =>
     {
         try
         {
             ResultHandler(result.Result, mode, guid);
         }
         catch (Exception exception)
         {
             StaticMessageBus.MessageBus.Publish(new TransactionUnrecoverableErrorEvent(mode, guid, exception));
         }
     }));
 }
Beispiel #3
0
        /// <summary>
        ///     Run the transaction
        /// </summary>
        /// <param name="parameters"></param>
        /// <param name="mode"></param>
        /// <param name="guid"></param>
        /// <returns></returns>
        public Task <ITransactionResult> Run(object parameters, TransactionQueueMode mode, Guid guid)
        {
            StaticMessageBus.MessageBus.Publish(new TransactionStartedEvent(mode, guid));

            var task = Task.Run(() =>
            {
                try
                {
                    return(Transaction(parameters));
                }
                catch (Exception exception)
                {
                    StaticMessageBus.MessageBus.Publish(new TransactionUnrecoverableErrorEvent(mode, guid, exception));
                    return(null);
                }
            });

            task.ContinueWith(x => ProcessResults(x, mode, guid));
            return(task);
        }
        /// <summary>
        ///     Run all the transactions in FIFO order
        /// </summary>
        /// <returns></returns>
        public async Task Run(TransactionQueueMode mode)
        {
            try
            {
                foreach (var transaction in Transactions)
                {
                    var currentIndex = Transactions.IndexOf(transaction);
                    if (currentIndex == Transactions.Count - 1)
                    {
                        // We are on the last one, so disable the stop button.
                        _messageBus.Publish(new DisableStopButtonEvent());
                    }

                    if (mode == TransactionQueueMode.Import)
                    {
                        _messageBus.Publish(new TransactionBatchProgressEvent((double)(currentIndex + 1) / Transactions.Count));
                    }

                    await transaction.Run(mode);

                    if (StaticTaskCancellation.TaskCancellation.CancelTasks)
                    {
                        break;
                    }
                }
                _messageBus.Publish(new TransactionBatchProgressEvent(1.0));
            }
            catch (Exception ex)
            {
                throw new System.Exception("There was an error.");
            }
            finally
            {
                TransactionCompleted();
            }
        }
Beispiel #5
0
        /// <summary>
        ///     Run the current transaction
        /// </summary>
        /// <param name="mode"></param>
        /// <returns>Task that can be awaited for results of the transaction.</returns>
        public Task <ITransactionResult> Run(TransactionQueueMode mode)
        {
            _task = Handler.Run(_params, mode, Guid);

            return(_task);
        }
Beispiel #6
0
 /// <summary>
 /// Creates new instance of message
 /// </summary>
 /// <param name="mode"></param>
 /// <param name="guid"></param>
 public TransactionResultsReceivedMessage(TransactionQueueMode mode, Guid guid)
 {
     Mode = mode;
     Guid = guid;
 }
Beispiel #7
0
 /// <summary>
 ///     Implement this to handle the results of the transaction
 /// </summary>
 /// <param name="transactionResult"></param>
 /// <param name="mode"></param>
 /// <param name="guid"></param>
 public abstract void ResultHandler(ITransactionResult transactionResult, TransactionQueueMode mode, Guid guid);