Esempio n. 1
0
        protected virtual void UpdateStatusOfTransaction(NodeTransaction transaction, ITransactionManager transactionManager,
                                                         INodeEndpointClientFactory nodeEndpointClientFactory)
        {
            try
            {
                AppendAuditLogEvent("Attempting to update status of local transaction id \"{0}\" that has endpoint transaction id \"{1}\" and current endpoint transaction status of \"{2}\" at url \"{3}\" and endpoint version \"{4}\" ...",
                                    transaction.Id, transaction.NetworkId, transaction.NetworkEndpointStatus,
                                    transaction.NetworkEndpointUrl, transaction.NetworkEndpointVersion);

                CommonTransactionStatusCode statusCode;
                using (INodeEndpointClient endpointClient =
                           nodeEndpointClientFactory.Make(transaction.NetworkEndpointUrl, transaction.NetworkEndpointVersion))
                {
                    statusCode = endpointClient.GetStatus(transaction.NetworkId);
                    AppendAuditLogEvent("Successfully got an endpoint transaction status of \"{0}\"", statusCode.ToString());
                    if (statusCode != transaction.NetworkEndpointStatus)
                    {
                        if (OnTransactionStatusChanged(transaction, endpointClient, statusCode))
                        {
                            AppendAuditLogEvent("Updating status of local transaction id \"{0}\" from \"{1}\" to \"{2}\"",
                                                transaction.Id, transaction.NetworkEndpointStatus, statusCode);
                            transactionManager.SetNetworkIdStatus(transaction.Id, statusCode);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                AppendAuditLogEvent("Failed to get status of transaction: {0}", ExceptionUtils.GetDeepExceptionMessage(e));
            }
        }