c1547866f8a3628a85f74fb5acaaddaf949ad943
[scpubgit/Clifton.git] / lib / App / Clifton / Server.pm
1 package App::Clifton::Server;
2
3 use aliased 'App::Clifton::ConsoleService';
4 use aliased 'App::Clifton::ConfigLoader';
5 use Moo;
6
7 extends 'App::Clifton::Service';
8
9 sub BUILD {
10   my ($self, $args) = @_;
11   $args->{loop}->add($self);
12   $self->$_ for qw(console_service);
13 }
14
15 has config_file => (is => 'ro', required => 1);
16
17 has config_loader => (is => 'lazy');
18
19 has current_config => (is => 'rw');
20
21 sub _build_config_loader { ConfigLoader->new }
22
23 has console_service => (is => 'lazy');
24
25 sub _build_console_service {
26   my ($self) = @_;
27   $self->_new_child(ConsoleService, { server => $self });
28 }
29
30 sub reload_config { shift->_do(reload_config => @_) }
31 sub shutdown { shift->_do(shutdown => @_) }
32
33 sub _body_for_reload_config {
34   my ($self, $args) = @_;
35   my $config = $self->config_loader->config_from_file($self->config_file);
36   $self->current_config($config);
37   $args->{on_finished}->($config);
38 }
39
40 1;