+
+ /** Sets the trigger timeout to a new value
+ */
+ virtual void SetTimer(time_t t)
+ {
+ trigger = t;
+ }
+
+ /** Called when the timer ticks.
+ * You should override this method with some useful code to
+ * handle the tick event.
+ */
+ virtual void Tick(time_t TIME) = 0;
+
+ /** Returns true if this timer is set to repeat
+ */
+ bool GetRepeat()
+ {
+ return repeat;
+ }
+
+ /** Returns the interval (number of seconds between ticks)
+ * of this timer object.
+ */
+ long GetSecs()
+ {
+ return secs;
+ }
+
+ /** Cancels the repeat state of a repeating timer.
+ * If you call this method, then the next time your
+ * timer ticks, it will be removed immediately after.
+ * You should use this method call to remove a recurring
+ * timer if you wish to do so within the timer's Tick
+ * event, as calling TimerManager::DelTimer() from within
+ * the Timer::Tick() method is dangerous and may
+ * cause a segmentation fault. Calling CancelRepeat()
+ * is safe in this case.
+ */
+ void CancelRepeat()
+ {
+ repeat = false;
+ }
+};
+
+
+/** This class manages sets of Timers, and triggers them at their defined times.
+ * This will ensure timers are not missed, as well as removing timers that have
+ * expired and allowing the addition of new ones.
+ */
+class CoreExport TimerManager
+{
+ protected:
+ /** A list of all pending timers
+ */
+ std::vector<Timer *> Timers;
+
+ public:
+ /** Constructor
+ */
+ TimerManager();
+ ~TimerManager();
+
+ /** Tick all pending Timers
+ * @param TIME the current system time
+ */
+ void TickTimers(time_t TIME);
+
+ /** Add an Timer
+ * @param T an Timer derived class to add
+ */
+ void AddTimer(Timer *T);
+
+ /** Delete an Timer
+ * @param T an Timer derived class to delete
+ */
+ void DelTimer(Timer* T);
+
+ /** Compares two timers
+ */
+ static bool TimerComparison( Timer *one, Timer*two);