AnyEvent-Subprocess
view release on metacpan or search on metacpan
lib/AnyEvent/Subprocess/Job/Delegate/MonitorHandle.pm view on Meta::CPAN
package AnyEvent::Subprocess::Job::Delegate::MonitorHandle;
BEGIN {
$AnyEvent::Subprocess::Job::Delegate::MonitorHandle::VERSION = '1.102912';
}
# ABSTRACT: monitor a handle for input and invoke callbacks with that input
use AnyEvent::Subprocess::Running::Delegate::MonitorHandle;
use AnyEvent::Subprocess::Types qw(CodeList WhenToCallBack);
use MooseX::Types::Moose qw(Str);
use Moose;
use namespace::autoclean;
with 'AnyEvent::Subprocess::Job::Delegate';
has 'handle' => (
is => 'ro',
isa => Str,
required => 1,
);
has 'callbacks' => (
traits => ['Array'],
is => 'ro',
isa => CodeList,
required => 1,
coerce => 1,
auto_deref => 1,
handles => {
add_callback => 'push',
},
);
has 'when' => (
is => 'ro',
isa => WhenToCallBack,
required => 1,
default => sub { 'Line' },
);
sub parent_setup_hook {
my ($self, $job, $run) = @_;
my $handle = $run->delegate($self->handle)->handle;
if($self->when eq 'Line'){
my $reader; $reader = sub {
my ($h, $l, $eol) = @_;
$self->_run_callbacks($l, $eol);
$h->push_read(line => $reader);
};
$handle->push_read(line => $reader);
}
else {
$handle->on_read( sub {
my $h = shift;
$self->_run_callbacks( delete $h->{rbuf} );
return;
});
}
return;
}
sub _run_callbacks {
my $self = shift;
for my $cb ($self->callbacks){
$cb->(@_);
}
return;
( run in 1.093 second using v1.01-cache-2.11-cpan-39bf76dae61 )