towers are constructable
[scpubgit/Clifton.git] / lib / App / Clifton / Launcher.pm
CommitLineData
20038dd8 1package App::Clifton::Launcher;
2
3use IO::Async::Loop;
4use Log::Contextual qw(set_logger :log);
5use Log::Contextual::SimpleLogger;
6use aliased 'App::Clifton::Server';
7use Moo;
8
9has config_file => (is => 'ro', required => 1);
10
11sub run {
12 my ($self) = @_;
13 set_logger(Log::Contextual::SimpleLogger->new({ levels => [ qw(
21a18863 14 info warn debug error
20038dd8 15 ) ] }));
16 my $loop = IO::Async::Loop->new;
17 my $server = Server->new(
18 config_file => $self->config_file,
19 loop => $loop,
20 );
21 $loop->later(sub {
22 $server->reload_config->on_finished(sub {
23 log_info { "Server startup complete" };
24 });
25 });
21a18863 26 while (1) {
27 local $@;
28 last if eval { $loop->loop_forever; 1 };
29 my $error = $@;
30 log_error { "Server exception: ${error}" };
31 }
32 log_info { "Server shut down cleanly" };
20038dd8 33}
34
351;