Commit | Line | Data |
20038dd8 |
1 | package App::Clifton::Server; |
2 | |
21a18863 |
3 | use aliased 'App::Clifton::ConsoleService'; |
20038dd8 |
4 | use aliased 'App::Clifton::ConfigLoader'; |
327a4b1a |
5 | use aliased 'App::Clifton::Tower::Jabber' => 'Jabber_Tower'; |
6 | use aliased 'App::Clifton::Tower::IRC' => 'IRC_Tower'; |
20038dd8 |
7 | use Moo; |
8 | |
9 | extends 'App::Clifton::Service'; |
10 | |
11 | sub BUILD { |
12 | my ($self, $args) = @_; |
13 | $args->{loop}->add($self); |
21a18863 |
14 | $self->$_ for qw(console_service); |
20038dd8 |
15 | } |
16 | |
17 | has config_file => (is => 'ro', required => 1); |
18 | |
19 | has config_loader => (is => 'lazy'); |
20 | |
46b150cd |
21 | has current_config => (is => 'rw'); |
22 | |
20038dd8 |
23 | sub _build_config_loader { ConfigLoader->new } |
24 | |
21a18863 |
25 | has console_service => (is => 'lazy'); |
20038dd8 |
26 | |
327a4b1a |
27 | has jabber_towers => (is => 'ro', default => sub { {} }); |
28 | |
29 | has irc_towers => (is => 'ro', default => sub { {} }); |
30 | |
21a18863 |
31 | sub _build_console_service { |
32 | my ($self) = @_; |
33 | $self->_new_child(ConsoleService, { server => $self }); |
20038dd8 |
34 | } |
35 | |
36 | sub reload_config { shift->_do(reload_config => @_) } |
37 | sub shutdown { shift->_do(shutdown => @_) } |
38 | |
39 | sub _body_for_reload_config { |
40 | my ($self, $args) = @_; |
46b150cd |
41 | my $config = $self->config_loader->config_from_file($self->config_file); |
42 | $self->current_config($config); |
43 | $args->{on_finished}->($config); |
20038dd8 |
44 | } |
45 | |
327a4b1a |
46 | sub start_chain { shift->_do(start_chain => @_) } |
47 | |
48 | sub _dependencies_for_start_chain { |
49 | my ($self, $args) = @_; |
50 | { |
51 | irc_tower => $self->start_irc_tower($args->{irc_tower}) |
52 | } |
53 | } |
54 | |
55 | sub _body_for_start_chain { |
56 | my ($self, $args) = @_; |
57 | $args->{irc_tower}->start_chain($args); |
58 | } |
59 | |
60 | sub start_irc_tower { shift->_do(start_irc_tower => @_) } |
61 | |
62 | sub _guard_for_start_irc_tower { |
63 | my ($self, $args) = @_; |
64 | if (my $tower = $self->irc_towers->{$args->{server}}{$args->{irc_nick}}) { |
65 | ($tower); |
66 | } else { |
67 | (); |
68 | } |
69 | } |
70 | |
71 | sub _body_for_start_irc_tower { |
72 | my ($self, $args) = @_; |
73 | $self->_new_child(IRC_Tower, { |
74 | irc_server => $args->{server}, |
75 | irc_nick => $args->{irc_nick}, |
76 | on_setup => $args->{on_finished}, |
77 | server => $self, |
78 | }); |
79 | } |
80 | |
20038dd8 |
81 | 1; |