/// <summary> /// Initializes a new instance of the <see cref="JournalMonitor"/> class. /// /// </summary> /// <param name="logDirectoryProvider">Log directory name provider</param> /// <param name="checkInterval">Check interval in milliseconds</param> public JournalMonitor(ILogDirectoryNameProvider logDirectoryProvider, int checkIntervalMilliseconds = 10000) { checkInterval = TimeSpan.FromMilliseconds(checkIntervalMilliseconds); logDirectory = logDirectoryProvider.Directory; Directory.CreateDirectory(logDirectory); // In case Elite Dangerous was not launched yet fileWatcher = new FileSystemWatcher(logDirectory); fileWatcher.Changed += FileWatcher_Event; fileWatcher.Created += FileWatcher_Event; fileWatcher.NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.Size; logFlushTimer.AutoReset = true; logFlushTimer.Interval = checkInterval.TotalMilliseconds; // sometimes the filesystem event does not trigger logFlushTimer.Elapsed += LogFlushTimer_Event; logFlushTimer.Enabled = true; currentFile = JournalFileEnumerator.GetLogFiles(logDirectory).FirstOrDefault(); filePosition = string.IsNullOrEmpty(currentFile) ? 0 : new FileInfo(currentFile).Length; SendEventsFromJournal(false); fileWatcher.EnableRaisingEvents = true; Log.Info("Started monitoring {directory}", logDirectory); }
/// <summary> /// Initializes a new instance of the <see cref="JournalMonitor"/> class. /// /// </summary> /// <param name="logDirectoryProvider">Log directory name provider</param> /// <param name="checkInterval">Check interval in milliseconds</param> public JournalMonitor(ILogDirectoryNameProvider logDirectoryProvider, int checkInterval = 10000) { logDirectory = logDirectoryProvider.Directory; fileWatcher = new FileSystemWatcher(logDirectory); fileWatcher.Changed += FileWatcher_Event; fileWatcher.Created += FileWatcher_Event; fileWatcher.NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.Size; logFlushTimer.AutoReset = true; logFlushTimer.Interval = checkInterval; // sometimes the filesystem event does not trigger logFlushTimer.Elapsed += (o, e) => Task.Factory.StartNew(() => SendEventsFromJournal(false)); logFlushTimer.Enabled = true; currentFile = LogEnumerator.GetLogFiles(logDirectory).FirstOrDefault(); filePosition = String.IsNullOrEmpty(currentFile) ? 0 : new FileInfo(currentFile).Length; SendEventsFromJournal(false); fileWatcher.EnableRaisingEvents = true; Log.Info("Started monitoring"); }