NAME
AnyEvent::Debounce - condense multiple temporally-nearby events into one
VERSION
version 0.01
SYNOPSIS
Create a debouncer:
my $damper = AnyEvent::Debounce->new( cb => sub {
my (@events) = @_;
say "Got ", scalar @events, " event(s) in the batch";
say "Got event with args: ", join ',', @$_ for @events;
});
Send it events in rapid succession:
$damper->send(1,2,3);
$damper->send(2,3,4);
Watch the output:
Got 2 events in the batch
Got event with args: 1,2,3
Got event with args: 2,3,4
Send it more evnts:
$damper->send(1);
sleep 5;
$damper->send(2);
And notice that there was no need to "debounce" this time:
Got 1 event in the batch
Got event with args: 1
Got 1 event in the batch
Got event with args: 2
INITARGS
cb
The callback to be called when some events are ready to be handled. Each "event" is an arrayref of the args passed to send
.
delay
The time to wait after receiving an event before sending it, in case more events happen in the interim.
always_reset_timer
Normally, when an event is received and it's the first of a series, a timer is started, and when that timer expires, all events are sent. If you set this initarg to a true value, then the timer is reset after each event is received.
For example, if you set the delay to 1, and ten events arrive at 0.5 second intervals, then with this flag set to true, you will get one event after 5 seconds. With this flag set to false, you will get an event once a second for 5 seconds.
By default, this is false, because setting it to true can lead to events never being sent. (Imagine you set delay to 10 seconds, and someone sends an event ever 9.9 seconds. You'll never get any events.)
front_triggered
This flag, when set to true, causes an event to be sent immediately upon receiving the first event. Then, you won't get any events for delay
seconds, even if they occur. These events are lost, you will never see them.
By default, this is false.
If you also set always_reset_timer
to true, the same timer-reset logic as described above occurs.
METHODS
send
Send an event; the handler callback will get everything you pass in.
REPOSITORY
http://github.com/jrockway/anyevent-debounce
AUTHOR
Jonathan Rockway <jrockway@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2011 by Jonathan Rockway.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.