private void RetryPublish(ICommand command)
        {
            var attribute = Attribute.GetCustomAttributes(command.GetType())
                            .FirstOrDefault(a => a is CommandRetryAttribute) as CommandRetryAttribute;

            if (attribute == null)
            {
                TryPublish(command);
            }
            else
            {
                var publishAction = new Action(() => TryPublish(command));
                Retry.Action(publishAction, attribute.RetryCount, attribute.RetryMilliseconds);
            }
        }
        //public override string GetLastVpnEmailCode(EmailConfig emailConfig, bool markAsRead, int maxRetries = 3, int millisecondsBetweenRetries = 3000)
        public override string GetLastVpnEmailCode(EmailConfig emailConfig, bool markAsRead)
        {
            var client = GetClient(emailConfig);

            if (client == null)
            {
                Console.WriteLine("Not able to log into the email!");
                return(null);
            }

            EmailMessage mostRecentVpnEmailMessage = null;

            Retry.Action((r) => {
                mostRecentVpnEmailMessage = GetVpnEmail(client, emailConfig?.EmailSubjectPrefix, emailConfig?.InboxSubFolderNameWithVpnEmails);
            }
                         , whileIs: (r) => mostRecentVpnEmailMessage == null
                         , maxRetries: emailConfig?.GetEmailMaxRetries ?? EmailConfig.DEFAULT_GetEmailMaxRetries
                         , every: TimeSpan.FromMilliseconds(emailConfig?.GetEmailRetryEveryMilliseconds ?? EmailConfig.DEFAULT_GetEmailRetryEveryMilliseconds)
                         );

            if (mostRecentVpnEmailMessage == null)
            {
                return(null);
            }

            if (markAsRead)
            {
                mostRecentVpnEmailMessage.IsRead = true;
                mostRecentVpnEmailMessage.Update(ConflictResolutionMode.AutoResolve);
                // https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-process-email-messages-in-batches-by-using-ews-in-exchange
                // client.UpdateItems(new List<EmailMessage> { mostRecentVpnEmailMessage }, folderIdVpn, ConflictResolutionMode.AutoResolve, MessageDisposition.SaveOnly, SendInvitationsOrCancellationsMode.SendToNone);
            }

            var vpnCode = ExtractVpnCodeFromEmailSubject(mostRecentVpnEmailMessage?.Subject, emailConfig?.EmailSubjectPrefix);

            return(vpnCode);
        }
Esempio n. 3
0
 public void WhenActionSucceedsEventuallyThenActionIsPerformed()
 {
     Assert.DoesNotThrow(() => Retry.Action(EventualSuccess, NumberOfRetries, TimeBetweenRetries));
     Assert.That(_didActionSucceed, Is.True);
 }
Esempio n. 4
0
 public void WhenActionAttemptsExceedsNumberOfRetriesThenExceptionIsThrown()
 {
     Assert.Throws <TestException>(() => Retry.Action(AlwaysFails, NumberOfRetries, TimeBetweenRetries));
 }