join the dots so server starts on reload_config
Matt S Trout [Wed, 16 Feb 2011 11:34:48 +0000 (11:34 +0000)]
lib/App/Clifton/BridgeConfig.pm
lib/App/Clifton/BridgeConfigSet.pm
lib/App/Clifton/Component.pm
lib/App/Clifton/Server.pm
lib/App/Clifton/Service.pm
lib/App/Clifton/Set.pm
lib/App/Clifton/Tower/Jabber.pm

index abe0727..baa97ff 100644 (file)
@@ -5,6 +5,8 @@ use aliased 'App::Clifton::BridgeConfig::Jabber' => 'BridgeConfig_Jabber';
 use aliased 'App::Clifton::BridgeConfig::IRC' => 'BridgeConfig_IRC';
 use Moo;
 
+has name => (is => 'ro', required => 1);
+
 has jabber => (
   is => 'ro', required => 1, isa => object_of_class(BridgeConfig_Jabber)
 );
index a6c8e51..eb35f77 100644 (file)
@@ -13,6 +13,7 @@ sub _set_over { 'name' }
 sub _spec_to_constructor_args {
   my ($self, $spec) = @_;
   +{
+    name => $spec->{name},
     jabber => BridgeConfig_Jabber->new($spec->{jabber}),
     irc => BridgeConfig_IRC->new($spec->{irc}),
   }
index 6f857ba..5604bae 100644 (file)
@@ -55,7 +55,8 @@ sub _eval_cb {
   my ($self, $code) = @_;
   my $str = "$self";
   sub {
-    try { $code->(@_) } catch { log_error { "Exception from ${self}: $_" } }
+    my @args = @_;
+    try { $code->(@args) } catch { log_error { "Exception from ${self}: $_" } }
   };
 }
 
index 4a46499..07a10bb 100644 (file)
@@ -39,6 +39,21 @@ sub shutdown { shift->_do(shutdown => @_) }
 sub _body_for_reload_config {
   my ($self, $args) = @_;
   my $config = $self->config_loader->config_from_file($self->config_file);
+  my $jt = $self->jabber_towers;
+  foreach my $bridge ($config->bridges->flatten) {
+
+    $jt->{$bridge->name} = $self->_new_child(
+      Jabber_Tower, {
+        jabber_config => $bridge->jabber,
+        irc_config => $bridge->irc,
+        bridge_name => $bridge->name,
+        server => $self,
+      }
+    );
+  }
+  foreach my $user ($config->users->flatten) {
+    $jt->{$_}->userconfig_set->add($user) for @{$user->allow};
+  }
   $self->current_config($config);
   $args->{on_finished}->($config);
 }
index 49bb786..b754183 100644 (file)
@@ -20,6 +20,7 @@ sub _do {
     }
   };
   my $deps = {};
+  $args ||= {};
   if (my $dep_call = $self->can("_dependencies_for_${do}")) {
     $deps = $self->$dep_call($args);
   }
index d938189..2bbf860 100644 (file)
@@ -18,6 +18,12 @@ sub get {
   $self->_set->{$self->_spec_to_key($spec)};
 }
 
+sub flatten {
+  my ($self) = @_;
+  my $set = $self->_set;
+  map $set->{$_}, sort keys %$set;
+}
+
 sub _spec_to_object {
   my ($self, $spec) = @_;
   if (blessed($spec) && $spec->isa($self->_set_of_class)) {
index 44c8d0d..1798f46 100644 (file)
@@ -29,7 +29,9 @@ has chain_set => (
 
 sub _build_xmpp_client {
   my ($self) = @_;
-  $self->_login_xmpp_client($self->_new_child(XMPP_Client, { }));
+  $self->_login_xmpp_client($self->_new_child(XMPP_Client, {
+    on_message => $self->_replace_weakself('handle_message'),
+  }));
 }
 
 sub _login_xmpp_client {
@@ -37,7 +39,6 @@ sub _login_xmpp_client {
   my $conf = $self->jabber_config;
   $xmpp->login(
     jid => $conf->user, host => $conf->server, password => $conf->pass,
-    on_message => $self->_replace_weakself('handle_message'),
   );
   $xmpp;
 }