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