using System.Timers;
namespace MtApi.Monitors.Triggers
{
public class TimeElapsedTrigger : IMonitorTrigger
{
#region Fields
readonly System.Timers.Timer _timer;
#endregion
#region Properties
///
/// Interval for raising the trigger
///
public TimeSpan Interval
{
get => TimeSpan.FromMilliseconds(_timer.Interval);
set => _timer.Interval = value.TotalMilliseconds;
}
///
/// Returns true if the trigger is started, otherwise false
///
public bool IsStarted => _timer.Enabled;
///
/// If true, the trigger will raise continuosly after elapsed , otherwise the trigger will raise only once after elapsed .
///
public bool AutoReset { get => _timer.AutoReset; set => _timer.AutoReset = value; }
#endregion
#region Events
///
/// Returns true if the trigger is started, otherwise false
///
public event EventHandler? Raised;
#endregion
#region ctor
///
/// Constructor for initializing TimeElapsedTrigger
///
/// Defines the interval for raising the event.
/// If true, the trigger will raise continuosly after elapsed , otherwise the trigger will raise only once after elapsed .
public TimeElapsedTrigger(TimeSpan time, bool autoReset = true)
{
_timer = new System.Timers.Timer(time.TotalMilliseconds);
_timer.Elapsed += _timer_Elapsed;
AutoReset = autoReset;
}
#endregion
#region Public methods
///
/// Starts the trigger
///
public void Start() => _timer.Start();
///
/// Stops the trigger
///
public void Stop() => _timer.Stop();
#endregion
#region private methods
private void _timer_Elapsed(object? sender, ElapsedEventArgs e)
{
_timer.Elapsed -= _timer_Elapsed;
Raised?.Invoke(this, EventArgs.Empty);
_timer.Elapsed += _timer_Elapsed;
}
#endregion
}
}