X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=scpubgit%2FObject-Remote.git;a=blobdiff_plain;f=lib%2FObject%2FRemote%2FNode.pm;h=f11c40647cfaafa76dba9d872cdcce650617104e;hp=dc2563c717e3659411fcbb2d2e4b82159eb70613;hb=55c0d0209fa9d9265ff178f54ae9fe5fdddef3c1;hpb=12fb4a80d68ad14c18a35f60cc6d8a671f728ac9 diff --git a/lib/Object/Remote/Node.pm b/lib/Object/Remote/Node.pm index dc2563c..f11c406 100644 --- a/lib/Object/Remote/Node.pm +++ b/lib/Object/Remote/Node.pm @@ -2,22 +2,43 @@ package Object::Remote::Node; use strictures 1; use Object::Remote::Connector::STDIO; +use Object::Remote::Logging qw(:log :dlog); +use Object::Remote::WatchDog; use Object::Remote; use CPS::Future; sub run { + my ($class, %args) = @_; + log_trace { "run() has been invoked on remote node" }; + my $c = Object::Remote::Connector::STDIO->new->connect; $c->register_class_call_handler; my $loop = Object::Remote->current_loop; - $c->on_close->on_ready(sub { $loop->want_stop }); + $c->on_close->on_ready(sub { + log_debug { "Node connection with call handler has closed" }; + $loop->want_stop + }); + Dlog_trace { "Node is sending 'Shere' to $_" } $c->send_to_fh; print { $c->send_to_fh } "Shere\n"; + log_debug { "Node is going to start the run loop" }; + #TODO the alarm should be reset after the run loop starts + #at a minimum - the remote side node should probably send + #a command that clears the alarm in all instances - even + #if the Object::Remote::Watchdog is not being used + if ($args{watchdog_timeout}) { + Object::Remote::WatchDog->new(timeout => $args{watchdog_timeout}); + } else { + #reset connection watchdog from the fatnode + alarm(0); + } $loop->want_run; $loop->run_while_wanted; + log_debug { "Run loop invocation in node has completed" }; } 1;