AnyEvent
view release on metacpan or search on metacpan
lib/AnyEvent/Impl/UV.pm view on Meta::CPAN
my $rc = UV::poll_start $master->{w}, $master->{mode}, sub {
io_watcher_cb $master->{slaves}, @_;
};
warnlog $rc if $rc;
}
}
sub io {
my ($class, %arg) = @_;
my $fd = fileno $arg{fh};
defined $fd or $fd = $arg{fh};
my $master = $io_watchers{$fd} ||= { fd => $fd };
unless (defined $master->{w}) {
$master->{w} = UV::poll_init $fd;
return warnlog $master->{w} unless defined $master->{w};
$master->{slaves} = {};
}
my $slave = AnyEvent::Impl::UV::io_slave->new ($master);
weaken ($master->{slaves}->{$slave} = $slave);
$slave->{mode} = $arg{poll} eq "r" ? UV::READABLE : UV::WRITABLE;
$master->{mode} = 0 unless defined $master->{mode};
$slave->{cb} = $arg{cb};
unless ($master->{mode} & $slave->{mode}) {
$master->{mode} |= $slave->{mode};
my $rc = UV::poll_start $master->{w}, $master->{mode}, sub {
io_watcher_cb $master->{slaves}, @_;
};
warnlog $rc if $rc;
}
$slave
}
sub AnyEvent::Impl::UV::handle::new {
my ($class, $w, $start, $stop, @args) = @_;
return warnlog $w unless defined $w;
my $rc = $start->($w, @args);
warnlog $rc if $rc;
bless { w => $w, stop => $stop }, $class
}
sub AnyEvent::Impl::UV::handle::DESTROY {
my $h = $_[0];
return unless $h->{w};
my $rc = $h->{stop}($h->{w});
warnlog $rc if $rc;
UV::close $h->{w};
}
sub idle {
my ($class, %arg) = @_;
AnyEvent::Impl::UV::handle->new (
UV::timer_init,
\&UV::idle_start,
\&UV::idle_stop,
$arg{cb}
);
}
sub timer {
my ($class, %arg) = @_;
AnyEvent::Impl::UV::handle->new (
UV::timer_init,
\&UV::timer_start,
\&UV::timer_stop,
$arg{after} * 1000, $arg{interval} * 1000, $arg{cb}
);
}
sub now { UV::now }
sub _poll {
UV::run UV::RUN_ONCE;
}
sub AnyEvent::CondVar::Base::_wait {
UV::run UV::RUN_NOWAIT until exists $_[0]{_ae_sent};
}
=head1 SEE ALSO
L<AnyEvent>, L<UV>.
=head1 AUTHOR
Mike Lowell <mikedotlowell@gmail.com>
=cut
1
( run in 0.357 second using v1.01-cache-2.11-cpan-39bf76dae61 )