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 now The time now
54 * @param repeating Repeat this timer every secs_from_now seconds if set to true
56 Timer(unsigned int secs_from_now, time_t now, bool repeating = false)
58 trigger = now + secs_from_now;
63 /** Default destructor, removes the timer from the timer manager
67 /** Retrieve the current triggering time
69 time_t GetTrigger() const
74 /** Sets the trigger timeout to a new value
75 * This does not update the bookkeeping in TimerManager, use SetInterval()
76 * to change the interval between ticks while keeping TimerManager updated
78 void SetTrigger(time_t nexttrigger)
80 trigger = nexttrigger;
83 /** Sets the interval between two ticks.
85 void SetInterval(time_t interval);
87 /** Called when the timer ticks.
88 * You should override this method with some useful code to
89 * handle the tick event.
90 * @param TIME The current time.
91 * @return True if the Timer object is still valid, false if it was destructed.
93 virtual bool Tick(time_t TIME) = 0;
95 /** Returns true if this timer is set to repeat
97 bool GetRepeat() const
102 /** Returns the interval (number of seconds between ticks)
103 * of this timer object.
105 unsigned int GetInterval() const
110 /** Cancels the repeat state of a repeating timer.
111 * If you call this method, then the next time your
112 * timer ticks, it will be removed immediately after.
120 typedef std::multimap<time_t, Timer*> TimerMap;
122 /** This class manages sets of Timers, and triggers them at their defined times.
123 * This will ensure timers are not missed, as well as removing timers that have
124 * expired and allowing the addition of new ones.
126 class CoreExport TimerManager
128 /** A list of all pending timers
133 /** Tick all pending Timers
134 * @param TIME the current system time
136 void TickTimers(time_t TIME);
139 * @param T an Timer derived class to add
141 void AddTimer(Timer *T);
144 * @param T an Timer derived class to remove
146 void DelTimer(Timer* T);