1 package App::Clifton::ConsoleService;
3 use Log::Contextual qw(:log);
4 use aliased 'App::Clifton::ConsoleService::Session';
5 use IO::Async::Listener;
9 extends 'App::Clifton::Service';
11 has socket_location => (is => 'ro', default => sub { 'clifton.sock' });
13 has $_ => (is => 'lazy') for qw(listener session socket);
15 has server => (is => 'ro', required => 1, weak_ref => 1);
19 my $location = $self->socket_location;
20 unlink($location) if -e $location;
21 IO::Socket::UNIX->new(
24 ) or die "Cannot make UNIX socket - $!\n";
29 $self->_new_child('IO::Async::Listener', {
30 on_stream => $self->_replace_weakself('_open_connection'),
31 handle => $self->socket,
37 Session->new->${\sub {
39 # no need to weaken this since server is already weak
40 $session->lex_env->lexicals->{'$_SERVER'} = \$self->server;
47 $self->$_ for qw(listener session);
50 sub _open_connection {
51 my ($self, $stream) = @_;
52 log_debug { "Connection opened" };
53 $self->session->configure(transport => $stream);
54 $self->add_child($self->session);