Пример #1
0
 private void DoSendTransactionCompleted(SendTxPackage aDataPackage, string aErrorMsg, string aTxId)
 {
     try
     {
         this.SynchronizingObject?.BeginInvoke(aDataPackage.CompletedEvent, new object[] { this, aErrorMsg, aTxId });
         if (aTxId != null)
         {
             this.SynchronizingObject?.Invoke(OnSentTransaction, new object[] { this, aDataPackage.TransactionData, aTxId, aDataPackage.CurrencyId, aDataPackage.StartTime, DateTime.Now });
         }
     }
     catch (Exception e)
     {
         DoErrorHandler(e);
     }
 }
Пример #2
0
        private void ThreadSendTransaction(SendTxPackage aDataPackage)
        {
            string lTxId = null;

            if (Terminated)
            {
                return;
            }
            try
            {
                if (aDataPackage.SendHandle == 0)
                {
                    Log.Write(LogLevel.Debug, "Sending transaction for {0}", aDataPackage.CurrencyId);
                    aDataPackage.SendHandle = FServerAccess.SendTransaction(aDataPackage.CurrencyId, aDataPackage.TransactionData);
                    // resend the message in the loop
                    BeginInvoke(new DelegateThreadSendTransaction(ThreadSendTransaction), aDataPackage);
                }
                else
                {
                    if (aDataPackage.NextRequestTime < DateTime.Now)
                    {
                        try
                        {
                            aDataPackage.NextRequestTime = DateTime.Now.AddMilliseconds(RandomNumber(500, 1000));
                            if (FServerAccess.IsTransactionSent(aDataPackage.SendHandle))
                            {
                                lTxId = FServerAccess.GetTransactionId(aDataPackage.SendHandle);
                            }
                        }
                        catch (Exception ex)
                        {
                            aDataPackage.ErrorCount++;
                            Log.Write(LogLevel.Critical, "Error getting send result {0} - {1}", ex.Message, ex.StackTrace);
                            if (aDataPackage.ErrorCount > 20 || ex is PandoraServerException) // retried 20 times for 20 secs so its dead.
                            {
                                throw;
                            }
                            Thread.Sleep(1000);
                        }
                    }
                    else
                    {
                        Thread.Sleep(100);
                    }
                    if (lTxId == null)
                    {
                        BeginInvoke(new DelegateThreadSendTransaction(ThreadSendTransaction), aDataPackage);
                    }
                    else
                    {
                        if (IsByteArray(lTxId))
                        {
                            DoSendTransactionCompleted(aDataPackage, "", lTxId);
                        }
                        else
                        {
                            DoSendTransactionCompleted(aDataPackage, lTxId, "");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                DoSendTransactionCompleted(aDataPackage, e.Message, "");
                DoErrorHandler(e);
            }
        }