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); }
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); } } }
public MessageHandlerResponse( int code, string message, MessageHandlerStatus newStatus) { Message = message; NewStatus = newStatus; Code = code; }
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); }); }
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"); }
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)); }