X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Ftimer.cpp;h=9157c152187b6ba0994854cf9f0fac7ed237bddc;hb=dc7927e17cffb2ee3c50ef9f037ed873d378f679;hp=c172f2fa5bac2f2c35b38ce6a00c880f8ca79810;hpb=ee49c1a3a246510c1b3668712c3a2859e2850fd7;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/timer.cpp b/src/timer.cpp index c172f2fa5..9157c1521 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -14,36 +14,10 @@ * --------------------------------------------------- */ -using namespace std; - -#include "inspircd_config.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "inspircd.h" -#include "inspircd_io.h" -#include "inspstring.h" -#include "helperfuncs.h" - -extern InspIRCd* ServerInstance; -extern ServerConfig* Config; -extern time_t TIME; - -typedef std::vector timergroup; -typedef std::map timerlist; -timerlist Timers; +#include "timer.h" -void TickTimers(time_t TIME) +void TimerManager::TickTimers(time_t TIME) { timerlist::iterator found = Timers.find(TIME); @@ -55,17 +29,25 @@ void TickTimers(time_t TIME) */ for (timergroup::iterator y = x->begin(); y != x->end(); y++) { - InspTimer* n = (InspTimer*)*y; + InspTimer* n = *y; n->Tick(TIME); - delete n; + DELETE(n); } Timers.erase(found); - delete x; + DELETE(x); } } -void TickMissedTimers(time_t TIME) +/* + * Because some muppets may do odd things, and their ircd may lock up due + * to crappy 3rd party modules, or they may change their system time a bit, + * this accounts for shifts of up to 120 secs by looking behind for missed + * timers and executing them. This is only executed once every 5 secs. + * If you move your clock BACK, and your timers move further ahead as a result, + * then tough titty you'll just have to wait. + */ +void TimerManager::TickMissedTimers(time_t TIME) { for (time_t n = TIME-1; n > TIME-120; n--) { @@ -75,18 +57,18 @@ void TickMissedTimers(time_t TIME) timergroup* x = found->second; for (timergroup::iterator y = x->begin(); y != x->end(); y++) { - InspTimer* z = (InspTimer*)*y; + InspTimer* z = *y; z->Tick(TIME); - delete z; + DELETE(z); } Timers.erase(found); - delete x; + DELETE(x); } } } -void AddTimer(InspTimer* T) +void TimerManager::AddTimer(InspTimer* T) { timergroup* x = NULL; @@ -104,3 +86,4 @@ void AddTimer(InspTimer* T) x->push_back(T); } +