CatalystX-Restarter-GTK
view release on metacpan or search on metacpan
lib/CatalystX/Restarter/GTK.pm view on Meta::CPAN
# Handle USR1 (Restart signal) from window
my $restart_watcher = AnyEvent->signal(
signal => SIGUSR1,
cb => sub {
$self->_kill_child;
$self->_fork_and_start;
}
);
if ($self->auto_restart) {
my $timer = AnyEvent->timer(
after => 1,
interval => 1,
cb => sub {
if (my @events = $self->_watcher->new_events) {
$self->_handle_events(@events);
}
}
);
}
lib/CatalystX/Restarter/GTK.pm view on Meta::CPAN
# Use event loop of Gtk2 by loading it first.
require Gtk2;
Gtk2->init;
require AnyEvent::Socket;
my $win = WinMonitor->new($self->application_name);
$win->set_restart_handler(sub { kill SIGUSR1, getppid; });
my ($watcher, $start_timer);
# Creates event watcher for checking socket readiness of forked server.
$start_timer = sub {
$watcher = AnyEvent->timer(
after => 1,
cb => sub {
AnyEvent::Socket::tcp_connect('localhost', $self->port, sub {
if (shift) {
$watcher = undef;
$win->set_status('started');
}
else {
# Restart timer upon failure
$watcher = $start_timer->();
}
});
}
);
};
# SIGUSR1 - starting server
my $usr1_watcher = AnyEvent->signal(
signal => SIGUSR1,
cb => sub {
$win->clear_msg;
$win->set_status('starting');
$win_sock->say('1');
$start_timer->();
}
);
# SIGUSR2 - Server exited / killed
my $usr2_watcher = AnyEvent->signal(
signal => SIGUSR2,
cb => sub {
$win->set_status('stopped');
$watcher = undef;
$win_sock->say('1');
( run in 0.933 second using v1.01-cache-2.11-cpan-49f99fa48dc )