public bool Read() { bool output; try { if (!InitializeReadFileStream()) { return(false); } RaiseBeforeReadFileEvent(out bool cancelBeforeReadFile); if (cancelBeforeReadFile) { NextFile(); return(Read()); } while (true) { string sourceData = ReadSourceDataFromStream(); if (sourceData != null) { AddNewLineToSource(sourceData, true); } if (LogParserTechJournal.ItsEndOfEvent(_stream, sourceData) || sourceData == null) { _currentFileEventNumber += 1; string preparedSourceData = _eventSource.ToString(); _eventSource.Clear(); RaiseBeforeRead(new BeforeReadEventArgs(preparedSourceData, _currentFileEventNumber)); if (sourceData == null && preparedSourceData.Length == 0) { NextFile(); output = Read(); break; } try { RowData eventData = ReadRowData(preparedSourceData); _currentRow = eventData; RaiseAfterRead(new AfterReadEventArgs(_currentRow, _currentFileEventNumber)); output = true; break; } catch (Exception ex) { RaiseOnError(new OnErrorEventArgs(ex, preparedSourceData, false)); _currentRow = null; output = true; break; } } } } catch (Exception ex) { RaiseOnError(new OnErrorEventArgs(ex, null, true)); _currentRow = null; output = false; } return(output); }
public bool Read() { bool output; try { if (!InitializeReadFileStream()) { return(false); } RaiseBeforeReadFileEvent(out bool cancelBeforeReadFile); if (cancelBeforeReadFile) { NextFile(); return(Read()); } bool newLine = true; DateTime maxLogPeriod = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, _logTimeZoneInfo).AddMilliseconds((-1) * _readDelayMs); _currentStreamPosition = _stream?.GetPosition() ?? 0; while (true) { if (_firstReadForFile) { _sourceData = _stream.ReadLineWithoutNull(); _firstReadForFile = false; } if (_sourceData == null) { NextFile(); output = Read(); break; } AddNewLineToSource(_sourceData, newLine); long currentStreamPositionBeforeGoAheadRead = _stream?.GetPosition() ?? 0; if (LogParserTechJournal.ItsEndOfEvent(_stream, CurrentFile, out _sourceData)) { _currentFileEventNumber += 1; _currentStreamPosition = currentStreamPositionBeforeGoAheadRead; string preparedSourceData = _eventSource.ToString(); _eventSource.Clear(); if (_sourceData == null) { _firstReadForFile = true; } RaiseBeforeRead(new BeforeReadEventArgs(preparedSourceData, _currentFileEventNumber)); try { EventData eventData = ReadRowData(preparedSourceData); if (eventData.Period >= maxLogPeriod) { _currentRow = null; output = false; break; } else { _currentRow = eventData; RaiseAfterRead(new AfterReadEventArgs(_currentRow, _currentFileEventNumber)); output = true; break; } } catch (Exception ex) { RaiseOnError(new OnErrorEventArgs(ex, preparedSourceData, false)); _currentRow = null; output = true; break; } } newLine = false; } } catch (FileNotFoundException) { _currentRow = null; output = false; } catch (Exception ex) { RaiseOnError(new OnErrorEventArgs(ex, null, true)); _currentRow = null; output = false; } return(output); }