Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 private void RunMboxReader()
 {
     Status         = MessageProcessorStatus.Started;
     _messageBuffer = new StringBuilder();
     char[] buffer = new char[1024 * 1024];
     foreach (var folderMap in _folderMap)
     {
         StreamReader filestream = null;
         String       mboxPath   = folderMap.Key;
         String       folderPath = folderMap.Value;
         try
         {
             filestream = new StreamReader(mboxPath);
             // drop the first From line.
             filestream.ReadLine();
             int read = filestream.Read(buffer, 0, buffer.Length);
             while (read > 0)
             {
                 _messageBuffer.Append(buffer, 0, read);
                 //Logger.Debug(buffer);
                 var eml = GetNextMessage(filestream);
                 while (!String.IsNullOrEmpty(eml))
                 {
                     try
                     {
                         var messageDescriptor = buildMessage(eml, folderPath);
                         _nextReader.Process(messageDescriptor);
                         SucceededMessageCount++;
                     }
                     catch (Exception ex)
                     {
                         Logger.Error("Failed to get and enqueue Imap message [" + _nextUid + "]", ex);
                         FailedMessageCount++;
                     }
                     ProcessedMessageCount++;
                     eml = GetNextMessage(filestream);
                 }
                 read = filestream.Read(buffer, 0, buffer.Length);
                 if (TestOnly && ProcessedMessageCount > 20)
                 {
                     break;
                 }
             }
         }
         catch (Exception ex)
         {
             Logger.Error("Opening mbox file [" + mboxPath + "] failed : " + ex.Message, ex);
             throw ex;
         }
         finally
         {
             Logger.Info("Completed folder " + folderPath + ", " + ProcessedMessageCount + " processed, " +
                         SucceededMessageCount + " succeeded, " + IgnoredMessageCount + " ignored, " +
                         FailedMessageCount + " failed.");
             try
             {
                 if (filestream != null)
                 {
                     filestream.Close();
                 }
             }
             catch (Exception e)
             {
                 Logger.Warn("Failed to close file " + mboxPath, e);
             }
         }
     }
     Close();
 }