public override void Initialise(List <MailFolder> folderList) { Status = MessageProcessorStatus.Initialising; NextReader.Initialise(folderList); _lastState = new MessageProcessState(); _queue = new PCQueue <RawMessageDescriptor, MessageProcessState>(Name) { ProduceMethod = ProcessMessage, InitialiseProducer = () => _lastState, ShutdownProducer = ShutdownQueue }; _queue.Start(); Status = MessageProcessorStatus.Initialised; Logger.Info("RawToMessageProcessor Initialised"); }
private void ShutdownQueue(MessageProcessState state, Exception ex) { try { if (ex != null) { throw ex; } Status = MessageProcessorStatus.Completed; } catch (Exception e) { Logger.Error("Message Reader failed : " + e.Message, e); Status = MessageProcessorStatus.UnknownError; } Close(); }
private MessageProcessState ProcessMessage(RawMessageDescriptor message, MessageProcessState state) { if (!message.SourceFolder.Equals(state.CurrentFolder)) { if (!String.IsNullOrWhiteSpace(state.CurrentFolder)) { Logger.Debug("Processed folder " + state.CurrentFolder + ", read=" + state.CurrentFolderConsumed + ", queued=" + state.CurrentFolderProcessed); } state.CurrentFolder = message.SourceFolder; state.CurrentFolderProcessed = 0; state.CurrentFolderConsumed = 0; } state.CurrentFolderConsumed++; try { /* This is now initialised in the initialise method * if (_nextReader.Status == MessageProcessorStatus.Idle) * { * _nextReader.Initialise(); * } */ _nextReader.Process(ConvertRawToMsg(message)); state.CurrentFolderProcessed++; SucceededMessageCount++; } catch (Exception ex) { Logger.Error("Failed to process raw [" + message.SourceId + "] into msg : " + ex.Message, ex); FailedMessageCount++; } finally { ProcessedMessageCount++; } return(state); }