--- AnyEvent-MP/MP/Node.pm 2009/08/15 15:13:04 1.26 +++ AnyEvent-MP/MP/Node.pm 2009/08/27 07:12:48 1.27 @@ -25,15 +25,21 @@ $self = bless { noderef => $noderef }, $self; + $self->init; $self->transport_reset; $self } +sub init { + # +} + sub send { &{ shift->{send} } } +# nodes reachable via the network package AnyEvent::MP::Node::External; use base "AnyEvent::MP::Node"; @@ -79,10 +85,6 @@ sub transport_connect { my ($self, $transport) = @_; - # first connect with a master node - $AnyEvent::MP::Kernel::SLAVE->($self) - if ref $AnyEvent::MP::Kernel::SLAVE; - $self->transport_error (transport_error => "switched connections") if $self->{transport}; @@ -108,6 +110,9 @@ return if $self->{transport}; + # just ignore connect requests for slave nodes - let's hope it connects to us instead + return if $self->{noderef} =~ /^slave\//; + Scalar::Util::weaken $self; $self->{connect_to} ||= AE::timer @@ -175,52 +180,11 @@ } } +# used for direct slave connections as well package AnyEvent::MP::Node::Direct; use base "AnyEvent::MP::Node::External"; -package AnyEvent::MP::Node::Indirect; - -use base "AnyEvent::MP::Node::Direct"; - -sub master { - my ($self) = @_; - - my (undef, $master) = split /\@/, $self->{noderef}, 2; - $master =~ s/!/,/g; - $master -} - -sub transport_reset { - my ($self) = @_; - - if ($self->{transport}) { - # as an optimisation, immediately nuke slave nodes - delete $AnyEvent::MP::Kernel::NODE{$self->{noderef}}; - } else { - $self->SUPER::transport_reset; - return;#d##TODO# - - my $noderef = $self->{noderef}; - my $master = $self->master; - - # slave nodes are so cool - we can always send to them :) - - $self->{send} = sub { - $self->connect; - snd $master, snd => $noderef, @_; - }; - } -} - -sub connect { - my ($self) = @_; - - #TODO# -# # ask for a connection, #TODO# rate-limit this somehow -# snd $self->master, relay => $self->{noderef}, connect_node => $AnyEvent::MP::Kernel::NODE; -} - package AnyEvent::MP::Node::Self; use base "AnyEvent::MP::Node";