Esempio n. 1
0
        public void BeginRetry(MessageHostSender messageHostSender, string reason, string details)
        {
            try
            {
                if (!_Run)
                    return;

                _Lock.AcquireWriterLock(10000);
                List<DateTime> fails;

                if (!_FailedAttempts.TryGetValue(messageHostSender, out fails))
                {
                    fails = new List<DateTime>();
                    _FailedAttempts.Add(messageHostSender, fails);
                }

                int retryCount = fails.Count;
                fails.Add(DateTime.Now);

                if (retryCount < _RetryAttempts.Count)
                {
                    DateTime retryTime = DateTime.Now.Add(_RetryAttempts[retryCount]);
                    _PendingSends.Add(retryTime, messageHostSender);
                    CheckRunThread();
                    throw new SendAttemptFailed(fails, messageHostSender, retryTime, reason, details);
                }
                else
                {
                    // you have failed me for the last time admiral
                    _FailedAttempts.Remove(messageHostSender);
                    throw new SendAttemptsExhaustedException(fails, messageHostSender, reason, details);
                }
            }
            finally
            {
                try { _Lock.ReleaseWriterLock(); }
                catch { }
            }
        }
Esempio n. 2
0
 public MessageHostSenderException(MessageHostSender message)
 {
     _MessageSender = message;
 }
Esempio n. 3
0
 public HostRejectedException(SmtpStatusCode statusCode, MessageHostSender message)
     : base(message)
 {
     _StatusCode = statusCode;
 }
Esempio n. 4
0
 public FailedRecipientException(string failedRecipients, MessageHostSender messageSender)
     : base(messageSender)
 {
     _FailedRecipients = failedRecipients;
 }
Esempio n. 5
0
 public SendAttemptsExhaustedException(List<DateTime> sendAttempts, MessageHostSender message, string failure, string details)
     : base(message)
 {
     _SendAttempts = sendAttempts;
     _MessageSender = message;
     _CurrentFailureMessage = failure;
     _CurrentFailureDetails = details;
 }
Esempio n. 6
0
 public SendAttemptFailed(List<DateTime> sendAttempts, MessageHostSender message, DateTime nextAttempt, string failure, string details)
     : base(sendAttempts, message, failure, details)
 {
     _NextAttempt = nextAttempt;
 }