* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
- * E-mail:
- * <brain@chatspike.net>
- * <Craig@chatspike.net>
+ * InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ * See: http://www.inspircd.org/wiki/index.php/Credits
*
- * Written by Craig Edwards, Craig McLure, and others.
* This program is free but copyrighted software; see
* the file COPYING for details.
*
* ---------------------------------------------------
*/
+#ifndef INSPIRCD_TIMER_H
+#define INSPIRCD_TIMER_H
+
/** Timer class for one-second resolution timers
* InspTimer provides a facility which allows module
* developers to create one-shot timers. The timer
* your object (which you should override) will be called
* at the given time.
*/
-class InspTimer
+class InspTimer : public Extensible
{
private:
/** The triggering time
virtual void Tick(time_t TIME) = 0;
};
-void TickTimers(time_t TIME);
-void AddTimer(InspTimer* T);
-void TickMissedTimers(time_t TIME);
+/** This class manages sets of InspTimers, 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 TimerManager : public Extensible
+{
+ protected:
+ /** A group of timers all set to trigger at the same time
+ */
+ typedef std::vector<InspTimer*> timergroup;
+ /** A map of timergroups, each group has a specific trigger time
+ */
+ typedef std::map<time_t, timergroup*> timerlist;
+
+ private:
+
+ /** The current timer set, a map of timergroups
+ */
+ timerlist Timers;
+
+ public:
+ /** Tick all pending InspTimers
+ * @param TIME the current system time
+ */
+ void TickTimers(time_t TIME);
+ /** Add an InspTimer
+ * @param T an InspTimer derived class to add
+ */
+ void AddTimer(InspTimer* T);
+ /** Delete an InspTimer
+ * @param T an InspTimer derived class to delete
+ */
+ void DelTimer(InspTimer* T);
+ /** Tick any timers that have been missed due to lag
+ * @param TIME the current system time
+ */
+ void TickMissedTimers(time_t TIME);
+};
+
+#endif