--- AnyEvent-MP/MP/Node.pm 2010/03/13 20:29:04 1.52 +++ AnyEvent-MP/MP/Node.pm 2012/02/28 18:37:24 1.53 @@ -42,7 +42,7 @@ } # nodes reachable via the network -package AnyEvent::MP::Node::External; +package AnyEvent::MP::Node::Remote; use base "AnyEvent::MP::Node"; @@ -111,7 +111,7 @@ } sub connect { - my ($self, @addresses) = @_; + my ($self) = @_; return if $self->{transport}; @@ -123,11 +123,27 @@ $self->transport_error (transport_error => $self->{id}, "unable to connect"); }; - return unless @addresses; + # maybe @$addresses? + my @addresses = @{ + $AnyEvent::MP::Kernel::GLOBAL_ADDR->{$self->{id}} + || $AnyEvent::MP::Kernel::NODE_ADDR->{$self->{id}} + }; + + unless (@addresses) { + # on global nodes, all betsa re off now - we either know the node, or we don't + unless ($AnyEvent::MP::Kernel::GLOBAL) { + $self->{connect_w} = AnyEvent::MP::Kernel::global_req ( + global_find => $self->{id}, + sub { + return unless $self; # just to be sure + return unless @{ $_[0] }; + + local $AnyEvent::MP::Kernel::GLOBAL_ADDR->{$self->{id}} = $_[0]; #d# UGLY + $self->connect; + } + ); + } - if ($self->{connect_w}) { - # sometimes we get told about new addresses after we started to connect - unshift @{$self->{connect_addr}}, @addresses; return; } @@ -166,7 +182,7 @@ sub kill { my ($self, $port, @reason) = @_; - $self->send (["", kil => $port, @reason]); + $self->{send} (["", kil => $port, @reason]); } sub monitor { @@ -194,11 +210,6 @@ } } -# used for direct slave connections as well -package AnyEvent::MP::Node::Direct; - -use base "AnyEvent::MP::Node::External"; - package AnyEvent::MP::Node::Self; use base "AnyEvent::MP::Node";