diff --git a/src/Artemis.Core/Services/ProcessMonitor/Events/ProcessEventArgs.cs b/src/Artemis.Core/Services/ProcessMonitor/Events/ProcessEventArgs.cs index 65482023b..dca403a13 100644 --- a/src/Artemis.Core/Services/ProcessMonitor/Events/ProcessEventArgs.cs +++ b/src/Artemis.Core/Services/ProcessMonitor/Events/ProcessEventArgs.cs @@ -3,11 +3,17 @@ using System.Diagnostics; namespace Artemis.Core.Services { + /// + /// Contains data for the ProcessMonitor process events + /// public class ProcessEventArgs : EventArgs { + /// + /// Gets the process related to the event + /// public Process Process { get; } - public ProcessEventArgs(Process process) + internal ProcessEventArgs(Process process) { Process = process; } diff --git a/src/Artemis.Core/Services/ProcessMonitor/Interfaces/IProcessMonitorService.cs b/src/Artemis.Core/Services/ProcessMonitor/Interfaces/IProcessMonitorService.cs index 37ae223ae..b26376b37 100644 --- a/src/Artemis.Core/Services/ProcessMonitor/Interfaces/IProcessMonitorService.cs +++ b/src/Artemis.Core/Services/ProcessMonitor/Interfaces/IProcessMonitorService.cs @@ -7,12 +7,24 @@ using System.Threading.Tasks; namespace Artemis.Core.Services { + /// + /// A service that provides events for started and stopped processes and a list of all running processes. + /// public interface IProcessMonitorService : IArtemisService { + /// + /// Occurs when a process starts. + /// event EventHandler ProcessStarted; + /// + /// Occurs when a process stops. + /// event EventHandler ProcessStopped; + /// + /// Returns an enumerable with the processes running on the system. + /// IEnumerable GetRunningProcesses(); } } diff --git a/src/Artemis.Core/Services/ProcessMonitor/ProcessMonitorService.cs b/src/Artemis.Core/Services/ProcessMonitor/ProcessMonitorService.cs index a487fc626..86f38e0a1 100644 --- a/src/Artemis.Core/Services/ProcessMonitor/ProcessMonitorService.cs +++ b/src/Artemis.Core/Services/ProcessMonitor/ProcessMonitorService.cs @@ -7,24 +7,26 @@ using System.Timers; namespace Artemis.Core.Services { - public class ProcessMonitorService : IProcessMonitorService + internal class ProcessMonitorService : IProcessMonitorService { private readonly ILogger _logger; private readonly Timer _processScanTimer; + private readonly ProcessComparer _comparer; private Process[] _lastScannedProcesses; public ProcessMonitorService(ILogger logger) { _logger = logger; - _lastScannedProcesses = Process.GetProcesses().DistinctBy(p => p.ProcessName).ToArray(); + _lastScannedProcesses = Process.GetProcesses(); _processScanTimer = new Timer(1000); _processScanTimer.Elapsed += OnTimerElapsed; _processScanTimer.Start(); + _comparer = new ProcessComparer(); } - public event EventHandler ProcessStarted; + public event EventHandler? ProcessStarted; - public event EventHandler ProcessStopped; + public event EventHandler? ProcessStopped; public IEnumerable GetRunningProcesses() { @@ -33,14 +35,14 @@ namespace Artemis.Core.Services private void OnTimerElapsed(object sender, ElapsedEventArgs e) { - var newProcesses = Process.GetProcesses().DistinctBy(p => p.ProcessName).ToArray(); - foreach (var startedProcess in newProcesses.Except(_lastScannedProcesses, new ProcessComparer())) + Process[] newProcesses = Process.GetProcesses(); + foreach (Process startedProcess in newProcesses.Except(_lastScannedProcesses, _comparer)) { ProcessStarted?.Invoke(this, new ProcessEventArgs(startedProcess)); _logger.Debug("Started Process: {startedProcess}", startedProcess.ProcessName); } - foreach (var stoppedProcess in _lastScannedProcesses.Except(newProcesses, new ProcessComparer())) + foreach (Process stoppedProcess in _lastScannedProcesses.Except(newProcesses, _comparer)) { ProcessStopped?.Invoke(this, new ProcessEventArgs(stoppedProcess)); _logger.Debug("Stopped Process: {stoppedProcess}", stoppedProcess.ProcessName);