Mercurial > hg > skillbot
view timers.pl @ 0:d6521d5ea884
Import of Andy Smith's twitfolk bot
author | Dominic Cleal <dominic@computerkb.co.uk> |
---|---|
date | Sat, 06 Dec 2008 13:49:48 +0000 |
parents | |
children | 2f9832b6dede |
line wrap: on
line source
#!/usr/bin/perl =pod Braindead timers thing. Copyright ©2000 Andy Smith <andy+timers.pl@strugglers.net> Artistic license as perl. $Id: timers.pl 776 2008-11-03 18:20:04Z andy $ =cut use warnings; use strict; my @timers_once; my @timers_repeat; sub add_one_shot_timer { my ($offset, $coderef) = @_; my $one_shot = {}; $one_shot->{stamp} = time(); $one_shot->{offset} = $offset; $one_shot->{coderef} = $coderef; return push(@timers_once, $one_shot) - 1; } sub del_one_shot_timer { my ($timer_id) = shift; splice(@timers_once, $timer_id, 1); } sub add_repeat_timer { my ($every, $coderef) = @_; my $repeat = {}; $repeat->{last} = time(); $repeat->{every} = $every; $repeat->{coderef} = $coderef; return push(@timers_repeat, $repeat) - 1; } sub del_repeat_timer { my ($timer_id) = shift; splice(@timers_repeat, $timer_id, 1); } sub get_one_shot_timer { my ($id) = shift; return $timers_once[$id]; } sub get_repeat_timer { my ($id) = shift; return $timers_repeat[$id]; } sub do_timers_once { my ($self) = shift; my ($timer_id, $timer); return unless @timers_once; my $now = time(); for ($timer_id = 0; $timer_id <= $#timers_once; $timer_id++) { $timer = $timers_once[$timer_id]; if ($now >= $timer->{stamp} + $timer->{offset}) { &{ $timer->{coderef} }($timer_id, $self); del_one_shot_timer($timer_id); } } } sub do_timers_repeat { my ($self) = shift; my ($timer_id, $timer); return unless @timers_repeat; my $now = time(); for ($timer_id = 0; $timer_id <= $#timers_repeat; $timer_id++) { $timer = $timers_repeat[$timer_id]; if ($now >= $timer->{last} + $timer->{every}) { &{ $timer->{coderef} }($timer_id, $self); $timer->{last} = $now; } } } 1;