AnyEvent-Blackboard
view release on metacpan or search on metacpan
lib/AnyEvent/Blackboard.pm view on Meta::CPAN
sub new {
my ($class, @arguments) = @_;
if (@arguments % 2) {
croak "AnyEvent::Blackboard->new() requires a balanced list";
}
my %options = @arguments;
my $self = $class->SUPER::new();
@$self{qw( -default_timeout -condvar )} =
@options{qw( default_timeout condvar )};
$self->{-condvar} //= AnyEvent->condvar;
return $self;
}
=back
lib/AnyEvent/Blackboard.pm view on Meta::CPAN
my $timeout = $self->{-default_timeout};
if ($timeout) {
my $i = 0;
for my $key (grep $i++ % 2 == 0, @args) {
$self->timeout($timeout, $key);
}
}
$self->SUPER::watch(@args);
}
=item found KEY
Wrap calls to ``found'' in condvar transaction counting, if a condvar is
supplied. The side-effect is that dispatching is wrapped in conditional
variable counting.
=cut
sub found {
my ($self, @args) = @_;
if ($self->has_condvar) {
my $condvar = $self->condvar;
$condvar->begin;
$self->SUPER::found(@args);
$condvar->end;
}
else {
$self->SUPER::found(@args);
}
}
=item clone
Create a clone of this blackboard. This will not dispatch any events, even if
the blackboard is prepopulated.
=cut
sub clone {
my ($self) = @_;
my $class = ref $self || __PACKAGE__;
my $default_timeout = $self->{-default_timeout};
my $clone = $self->SUPER::clone;
# This is a little on the side of evil...we're not supposed to know where
# this value is stored.
$clone->{-default_timeout} = $default_timeout;
# Add timeouts for all current watcher interests. The timeout method
# ignores keys that are already defined.
if ($default_timeout) {
for my $key ($clone->watched) {
$clone->timeout($default_timeout, $key);
( run in 1.156 second using v1.01-cache-2.11-cpan-49f99fa48dc )