basically operating chain code
[scpubgit/Clifton.git] / lib / App / Clifton / Server.pm
index c154786..4a46499 100644 (file)
@@ -2,6 +2,8 @@ package App::Clifton::Server;
 
 use aliased 'App::Clifton::ConsoleService';
 use aliased 'App::Clifton::ConfigLoader';
+use aliased 'App::Clifton::Tower::Jabber' => 'Jabber_Tower';
+use aliased 'App::Clifton::Tower::IRC' => 'IRC_Tower';
 use Moo;
 
 extends 'App::Clifton::Service';
@@ -22,6 +24,10 @@ sub _build_config_loader { ConfigLoader->new }
 
 has console_service => (is => 'lazy');
 
+has jabber_towers => (is => 'ro', default => sub { {} });
+
+has irc_towers => (is => 'ro', default => sub { {} });
+
 sub _build_console_service {
   my ($self) = @_;
   $self->_new_child(ConsoleService, { server => $self });
@@ -37,4 +43,39 @@ sub _body_for_reload_config {
   $args->{on_finished}->($config);
 }
 
+sub start_chain { shift->_do(start_chain => @_) }
+
+sub _dependencies_for_start_chain {
+  my ($self, $args) = @_;
+  {
+    irc_tower => $self->start_irc_tower($args->{irc_tower})
+  }
+}
+
+sub _body_for_start_chain {
+  my ($self, $args) = @_;
+  $args->{irc_tower}->start_chain($args);
+}
+
+sub start_irc_tower { shift->_do(start_irc_tower => @_) }
+
+sub _guard_for_start_irc_tower {
+  my ($self, $args) = @_;
+  if (my $tower = $self->irc_towers->{$args->{server}}{$args->{irc_nick}}) {
+    ($tower);
+  } else {
+    ();
+  }
+}
+
+sub _body_for_start_irc_tower {
+  my ($self, $args) = @_;
+  $self->_new_child(IRC_Tower, {
+    irc_server => $args->{server},
+    irc_nick => $args->{irc_nick},
+    on_setup => $args->{on_finished},
+    server => $self,
+  });
+}
+
 1;