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 =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 =head1 LICENSE Copyright Tom Molesworth 2016-2017. Licensed under the same terms as Perl itself.