2 * InspIRCd -- Internet Relay Chat Daemon
4 * Copyright (C) 2007-2008 Robin Burchell <robin+git@viroteck.net>
5 * Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
6 * Copyright (C) 2006-2007 Craig Edwards <craigedwards@brainbox.cc>
8 * This file is part of InspIRCd. InspIRCd is free software: you can
9 * redistribute it and/or modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation, version 2.
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
26 /** Timer class for one-second resolution timers
27 * Timer provides a facility which allows module
28 * developers to create one-shot timers. The timer
29 * can be made to trigger at any time up to a one-second
30 * resolution. To use Timer, inherit a class from
31 * Timer, then insert your inherited class into the
32 * queue using Server::AddTimer(). The Tick() method of
33 * your object (which you have to override) will be called
36 class CoreExport Timer
38 /** The triggering time
42 /** Number of seconds between triggers
46 /** True if this is a repeating timer
51 /** Default constructor, initializes the triggering time
52 * @param secs_from_now The number of seconds from now to trigger the timer
53 * @param repeating Repeat this timer every secs_from_now seconds if set to true
55 Timer(unsigned int secs_from_now, bool repeating = false);
57 /** Default destructor, removes the timer from the timer manager
61 /** Retrieve the current triggering time
63 time_t GetTrigger() const
68 /** Sets the trigger timeout to a new value
69 * This does not update the bookkeeping in TimerManager, use SetInterval()
70 * to change the interval between ticks while keeping TimerManager updated
72 void SetTrigger(time_t nexttrigger)
74 trigger = nexttrigger;
77 /** Sets the interval between two ticks.
79 void SetInterval(unsigned int interval);
81 /** Called when the timer ticks.
82 * You should override this method with some useful code to
83 * handle the tick event.
84 * @param TIME The current time.
85 * @return True if the Timer object is still valid, false if it was destructed.
87 virtual bool Tick(time_t TIME) = 0;
89 /** Returns true if this timer is set to repeat
91 bool GetRepeat() const
96 /** Returns the interval (number of seconds between ticks)
97 * of this timer object.
99 unsigned int GetInterval() const
104 /** Cancels the repeat state of a repeating timer.
105 * If you call this method, then the next time your
106 * timer ticks, it will be removed immediately after.
114 /** This class manages sets of Timers, and triggers them at their defined times.
115 * This will ensure timers are not missed, as well as removing timers that have
116 * expired and allowing the addition of new ones.
118 class CoreExport TimerManager
120 typedef std::multimap<time_t, Timer*> TimerMap;
122 /** A list of all pending timers
127 /** Tick all pending Timers
128 * @param TIME the current system time
130 void TickTimers(time_t TIME);
133 * @param T an Timer derived class to add
135 void AddTimer(Timer *T);
138 * @param T an Timer derived class to remove
140 void DelTimer(Timer* T);