MooX-Async-Console
view release on metacpan or search on metacpan
docs/Three.pm view on Meta::CPAN
package Three;
use Modern::Perl '2017';
use strictures 2;
use Moo;
use Exporter ();
use Guard qw(scope_guard);
use IO::Async::Loop;
use MooX::Async;
use Object::Tap;
use Proc::Daemon;
use namespace::clean;
*import = \&Exporter::import;
our @EXPORT = qw( daemonise );
extends MooXAsync('Notifier');
with 'MooX::Role::Logger';
with 'MooX::Async::Console';
has _tcp_console => is => lazy => init_arg => undef,
clearer => 1,
predicate => 1,
builder => sub {
my $self = shift;
$self->_launch_console(TCP => port => 1234)
};
after _add_to_loop => sub { $_[0]->add_child($_[0]->_tcp_console) };
before _remove_from_loop => sub {
$_[0]->remove_child($_[0]->_tcp_console);
$_[0]->_clear_tcp_console;
};
has pidfn => is => ro => predicate => 1;
has _daemon => is => 'lazy', init_arg => undef, builder =>
sub { Proc::Daemon->new };
has fork => is => ro => default => 0;
sub daemonise {
my $self = shift || __PACKAGE__;
$self = __PACKAGE__->new(@_) if not ref $self and $self eq __PACKAGE__;
if ($self->fork) {
my $pid = $self->_daemon->Init; # Propagate its die() on error.
if ($pid < 0) {
# Fuckup
# Unreachable?
$self->_logger->errorf('Failed to daemonise: ?');
die;
} elsif ($pid) {
# Parent
$self->_logger->informf('Spawned daemon with process ID: %s', $pid);
if ($self->has_pidfn) {
open my $pidfd, '>', $self->pidfile or do {
# kill child? log?
( run in 0.756 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )