/// <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 }); }
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)); } })); }
/// <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(); } }
/// <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); }
/// <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; }
/// <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);