Continual-Process

 view release on metacpan or  search on metacpan

lib/Continual/Process/Loop/Mojo.pm  view on Meta::CPAN

package Continual::Process::Loop::Mojo;
use strict;
use warnings;

use parent 'Continual::Process::Loop';

use Mojo::Base 'Mojo::EventEmitter';

use Mojo::IOLoop;
use Try::Tiny;
use Class::Tiny {
    on_catch => sub {
        Mojo::IOLoop->stop();
        die @_;
    }
};

=head1 NAME

Continual::Process::Loop::Mojo - loop with Mojo::IOLoop support

=head1 SYNOPSIS

    my $loop = Continual::Process::Loop::Mojo->new(
        instances => [
            Continual::Process::Instance->new(...),
        ]
    );

    Mojo::IOLoop->recurrent(
        10 => sub { say 'Tick each 10s' }
    );

    $loop->run();

=head1 DESCRIPTION

This is implementation of L<Continual::Process::Loop> with L<Mojo::IOLoop>.

It is useful if you use other L<Mojo::IOLoop> events in loop.

This module is really EXPERIMENTAL, for example C<die> is not catched yet.

=head1 METHODS

All methods inherit from L<Continual::Process::Loop>.

=cut

sub run {
    my ($self) = @_;

    my $loop = Mojo::IOLoop->singleton();

    $loop->recurring(
        $self->interval => sub {
                $self->_check_and_run_death()
        }
    );

    $self->on(
        error => sub {
            warn "Mojo exception @_";

        }
    );

    $loop->start() if !$loop->is_running();
}



( run in 0.536 second using v1.01-cache-2.11-cpan-39bf76dae61 )