package Job::Async::Worker;
use strict;
use warnings;
use parent qw(IO::Async::Notifier);
our $VERSION = '0.004'; # VERSION
=head1 NAME
Job::Async::Worker - worker API for L<Job::Async>
=head1 DESCRIPTION
This is the thing that receives jobs, does the work, and sends
back a result.
=cut
use Ryu::Async;
use Job::Async::Job;
=head1 METHODS
=cut
sub jobs {
my ($self) = @_;
$self->{jobs} ||= do {
$self->ryu->source(
label => 'jobs'
)
};
}
sub id { shift->{id} //= Job::Async::Utils::uuid() }
sub timeout { shift->{timeout} }
sub configure {
my ($self, %args) = @_;
for my $k (qw(id timeout)) {
$self->{$k} = delete $args{$k} if exists $args{$k};
}
return $self->next::method(%args);
}
sub stop {
my ($self) = @_;
my $f = $self->jobs->completed;
$f->done unless $f->is_ready;
}
sub ryu {
my ($self) = @_;
$self->{ryu} ||= do {
$self->add_child(
my $ryu = Ryu::Async->new
);
$ryu;
};
}
1;
=head1 AUTHOR
Tom Molesworth <TEAM@cpan.org>
=head1 LICENSE
Copyright Tom Molesworth 2016-2017. Licensed under the same terms as Perl itself.