1 package App::Clifton::ConsoleService;
3 use Log::Contextual qw(:log);
4 use aliased 'App::Clifton::ConsoleService::Session';
5 use IO::Async::Listener;
7 use Scalar::Util qw(weaken);
10 extends 'App::Clifton::Service';
12 has socket_location => (is => 'ro', default => sub { 'clifton.sock' });
14 has $_ => (is => 'lazy') for qw(listener session socket);
18 my $location = $self->socket_location;
19 unlink($location) if -e $location;
20 IO::Socket::UNIX->new(
23 ) or die "Cannot make UNIX socket - $!\n";
28 $self->_new_child('IO::Async::Listener', {
29 on_stream => $self->_replace_weakself('_open_connection'),
30 handle => $self->socket,
36 Session->new->${\sub {
38 $session->lex_env->lexicals->{'$_SERVICE'} = \$self;
39 weaken(${$session->lex_env->{'$_SERVICE'}});
46 $self->$_ for qw(listener session);
49 sub _open_connection {
50 my ($self, $stream) = @_;
51 log_debug { "Connection opened" };
52 $self->session->configure(transport => $stream);
53 $self->add_child($self->session);