Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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");
        }