using log4net; namespace TBF.BenchControl.Operations { /// /// Implements timer function /// /// Constructors: /// Timer(timerTimeMs) ................ use Event.TimerExpired as eventExpired /// Timer(timerTimeMs, eventExpired) .. use constructor argument as eventExpired /// /// Start argument: /// /// Events: /// Event.None ........ operation is in progress /// eventExpired ...... timer expired /// public class TimerOp : IOperation { private static readonly ILog log = LogManager.GetLogger(typeof(TimerOp)); public override string ToString() { return string.Format("TimerOp({0}s, Event.{1})", timerTime, eventExpired); } /// Private fields bool timerStarted = false; bool timeExpired = false; int expireTime; /// Set by constructors int timerTime; Event eventExpired; /// /// Constructors, optional argument is a timer name (you can create more then one timer) /// public TimerOp(int timerTime, Event eventExpired) { this.timerTime = timerTime; this.eventExpired = eventExpired; } public TimerOp(int timerTime) : this(timerTime, Event.TimerExpired) { } /// Time period (TimeSpan) public void Start() { timeExpired = false; timerStarted = true; expireTime = StateMachine.CurrentTime + timerTime; } public Event Run() { if (timerStarted && !timeExpired && StateMachine.CurrentTime >= expireTime) { timeExpired = true; return eventExpired; } else { return Event.None; } } public void Stop() { timerStarted = false; timeExpired = false; } } }