Ejemplo n.º 1
0
        public MessageHandlerStatus Process(Message message)
        {
            MessageHandlerStatus status = MessageHandlerStatus.InvalidMessageHandler;

            foreach (IMessageHandler handler in handlers)
            {
                status = handler.Handle(message);
                if (status == MessageHandlerStatus.InvalidMessageHandler)
                {
                    continue;
                }
                else
                {
                    break;
                }
            }

            if (status == MessageHandlerStatus.FailedToAuditScore)
            {
                Logger.Current.Error("Message failed to audit." + message.ToString());
                return(status);
            }
            else if (status == MessageHandlerStatus.InvalidMessageHandler)
            {
                Logger.Current.Informational("Invalid message." + message.ToString());
                return(status);
            }
            else if (status == MessageHandlerStatus.LeadScoreAuditedSuccessfully)
            {
                indexIntoElasticSearch(message);
            }

            return(status);
        }
Ejemplo n.º 2
0
        void consumeMessages()
        {
            MessageProcessor processor = new MessageProcessor();

            foreach (Message message in blockingCollection.GetConsumingEnumerable())
            {
                Logger.Current.Informational("Processing message:" + message.MessageId);
                MessageHandlerStatus status = processor.Process(message);
                if (status == MessageHandlerStatus.LeadScoreAuditedSuccessfully)
                {
                    client.Complete(message.LockToken);
                    Logger.Current.Informational("Processed message, marked as complete:" + message.MessageId);
                }
                else if (status == MessageHandlerStatus.LeadScoreRuleNotDefined)
                {
                    client.Complete(message.LockToken);
                    Logger.Current.Informational("Rule not defined for this message, marked as complete:" + message.MessageId);
                }
                else if (status == MessageHandlerStatus.InvalidMessageHandler)
                {
                    client.Complete(message.LockToken);
                    Logger.Current.Informational("Handler not defined for this message, marked as complete:" + message.MessageId);
                }
                else if (status == MessageHandlerStatus.DuplicateLeadScoreRequest)
                {
                    client.Complete(message.LockToken);
                    Logger.Current.Informational("A duplicate lead score request, marked as complete:" + message.MessageId);
                }
                else if (status == MessageHandlerStatus.FailedToAuditScore)
                {
                    client.Abandon(message.LockToken);
                    Logger.Current.Informational("Failed to process this message, Abandoned message to fall back in the queue:" + message.MessageId);
                }
            }
        }
Ejemplo n.º 3
0
 public MessageHandlerResponse(
     int code,
     string message,
     MessageHandlerStatus newStatus)
 {
     Message   = message;
     NewStatus = newStatus;
     Code      = code;
 }
Ejemplo n.º 4
0
 public void HandlerOkaysToRecipients(MessageHandlerStatus startStatus)
 {
     _mailToMessages.ForEach(m =>
     {
         var response = _handler.Handle(startStatus, m);
         Assert.AreEqual(250, response.Code);
         Assert.AreEqual(MessageHandlerStatus.Recipient, response.NewStatus);
     });
 }
Ejemplo n.º 5
0
        public MessageHandlerResponse Handle(MessageHandlerStatus currentStatus, string message)
        {
            if (currentStatus == MessageHandlerStatus.Open)
            {
                if (message.StartsWith(HeloPrefix) || message.StartsWith(EhloPrefix))
                {
                    string prefix   = message.StartsWith(HeloPrefix) ? HeloPrefix : EhloPrefix;
                    string name     = message.Substring(prefix.Length).Trim();
                    string greeting = string.Format("Hello {0}, how very nice to meet you", name);
                    return(new MessageHandlerResponse(250, greeting, MessageHandlerStatus.Greeting));
                }
            }

            if (currentStatus == MessageHandlerStatus.Greeting)
            {
                if (message.StartsWith(MailFromPrefix))
                {
                    return(new MessageHandlerResponse(250, "OK", MessageHandlerStatus.MailFrom));
                }
            }

            if (currentStatus == MessageHandlerStatus.MailFrom || currentStatus == MessageHandlerStatus.Recipient)
            {
                if (message.StartsWith(MailToPrefix))
                {
                    return(new MessageHandlerResponse(250, "OK", MessageHandlerStatus.Recipient));
                }
            }

            if (currentStatus == MessageHandlerStatus.Recipient)
            {
                if (message.StartsWith(DataMarker))
                {
                    return(new MessageHandlerResponse(354, "End data with /r/n./r/n", MessageHandlerStatus.Data));
                }
            }

            if (currentStatus == MessageHandlerStatus.Data)
            {
                return(message == "." ? new MessageHandlerResponse(250, "OK, received", MessageHandlerStatus.EndData) : null);
            }

            if (currentStatus == MessageHandlerStatus.EndData)
            {
                if (message == QuitMarker)
                {
                    return(new MessageHandlerResponse(221, "Bye", MessageHandlerStatus.Closed));
                }
            }

            throw new InvalidOperationException("Unrecognised message");
        }
Ejemplo n.º 6
0
 private MessageHandlerResponse HandleAndCheck(
     MessageHandlerStatus status,
     string message)
 {
     _allStatuses
     .FindAll(s => s != status && s != MessageHandlerStatus.Data)
     .ForEach(s =>
     {
         try
         {
             _handler.Handle(s, message);
             Assert.Fail("Expected exception when status {0}, message '{1}'", s, message);
         }
         catch (InvalidOperationException)
         {
         }
     });
     return(_handler.Handle(status, message));
 }