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); |
38180dc8 |
42 | my $jt = $self->jabber_towers; |
43 | foreach my $bridge ($config->bridges->flatten) { |
44 | |
45 | $jt->{$bridge->name} = $self->_new_child( |
46 | Jabber_Tower, { |
47 | jabber_config => $bridge->jabber, |
48 | irc_config => $bridge->irc, |
49 | bridge_name => $bridge->name, |
50 | server => $self, |
51 | } |
52 | ); |
53 | } |
54 | foreach my $user ($config->users->flatten) { |
55 | $jt->{$_}->userconfig_set->add($user) for @{$user->allow}; |
56 | } |
46b150cd |
57 | $self->current_config($config); |
58 | $args->{on_finished}->($config); |
20038dd8 |
59 | } |
60 | |
327a4b1a |
61 | sub start_chain { shift->_do(start_chain => @_) } |
62 | |
63 | sub _dependencies_for_start_chain { |
64 | my ($self, $args) = @_; |
65 | { |
66 | irc_tower => $self->start_irc_tower($args->{irc_tower}) |
67 | } |
68 | } |
69 | |
70 | sub _body_for_start_chain { |
71 | my ($self, $args) = @_; |
72 | $args->{irc_tower}->start_chain($args); |
73 | } |
74 | |
75 | sub start_irc_tower { shift->_do(start_irc_tower => @_) } |
76 | |
77 | sub _guard_for_start_irc_tower { |
78 | my ($self, $args) = @_; |
79 | if (my $tower = $self->irc_towers->{$args->{server}}{$args->{irc_nick}}) { |
80 | ($tower); |
81 | } else { |
82 | (); |
83 | } |
84 | } |
85 | |
86 | sub _body_for_start_irc_tower { |
87 | my ($self, $args) = @_; |
88 | $self->_new_child(IRC_Tower, { |
89 | irc_server => $args->{server}, |
90 | irc_nick => $args->{irc_nick}, |
91 | on_setup => $args->{on_finished}, |
92 | server => $self, |
93 | }); |
94 | } |
95 | |
20038dd8 |
96 | 1; |