ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/MP.pm
(Generate patch)

Comparing AnyEvent-MP/MP.pm (file contents):
Revision 1.56 by root, Sat Aug 15 04:12:38 2009 UTC vs.
Revision 1.61 by root, Mon Aug 24 08:06:49 2009 UTC

126use base "Exporter"; 126use base "Exporter";
127 127
128our $VERSION = $AnyEvent::MP::Kernel::VERSION; 128our $VERSION = $AnyEvent::MP::Kernel::VERSION;
129 129
130our @EXPORT = qw( 130our @EXPORT = qw(
131 NODE $NODE *SELF node_of _any_ 131 NODE $NODE *SELF node_of after
132 resolve_node initialise_node 132 resolve_node initialise_node
133 snd rcv mon kil reg psub spawn 133 snd rcv mon mon_guard kil reg psub spawn
134 port 134 port
135); 135);
136 136
137our $SELF; 137our $SELF;
138 138
396 396
397sub rcv($@) { 397sub rcv($@) {
398 my $port = shift; 398 my $port = shift;
399 my ($noderef, $portid) = split /#/, $port, 2; 399 my ($noderef, $portid) = split /#/, $port, 2;
400 400
401 ($NODE{$noderef} || add_node $noderef) == $NODE{""} 401 $NODE{$noderef} == $NODE{""}
402 or Carp::croak "$port: rcv can only be called on local ports, caught"; 402 or Carp::croak "$port: rcv can only be called on local ports, caught";
403 403
404 while (@_) { 404 while (@_) {
405 if (ref $_[0]) { 405 if (ref $_[0]) {
406 if (my $self = $PORT_DATA{$portid}) { 406 if (my $self = $PORT_DATA{$portid}) {
505message loss has been detected. No messages will be lost "in between" 505message loss has been detected. No messages will be lost "in between"
506(after the first lost message no further messages will be received by the 506(after the first lost message no further messages will be received by the
507port). After the monitoring action was invoked, further messages might get 507port). After the monitoring action was invoked, further messages might get
508delivered again. 508delivered again.
509 509
510Note that monitoring-actions are one-shot: once released, they are removed
511and will not trigger again.
512
510In the first form (callback), the callback is simply called with any 513In the first form (callback), the callback is simply called with any
511number of C<@reason> elements (no @reason means that the port was deleted 514number of C<@reason> elements (no @reason means that the port was deleted
512"normally"). Note also that I<< the callback B<must> never die >>, so use 515"normally"). Note also that I<< the callback B<must> never die >>, so use
513C<eval> if unsure. 516C<eval> if unsure.
514 517
679 snd_to_func $noderef, "AnyEvent::MP::_spawn" => $id, @_; 682 snd_to_func $noderef, "AnyEvent::MP::_spawn" => $id, @_;
680 683
681 "$noderef#$id" 684 "$noderef#$id"
682} 685}
683 686
684=back 687=item after $timeout, @msg
685 688
686=head1 NODE MESSAGES 689=item after $timeout, $callback
687 690
688Nodes understand the following messages sent to them. Many of them take 691Either sends the given message, or call the given callback, after the
689arguments called C<@reply>, which will simply be used to compose a reply 692specified number of seconds.
690message - C<$reply[0]> is the port to reply to, C<$reply[1]> the type and
691the remaining arguments are simply the message data.
692 693
693While other messages exist, they are not public and subject to change. 694This is simply a utility function that come sin handy at times.
694 695
695=over 4
696
697=cut 696=cut
698 697
699=item lookup => $name, @reply 698sub after($@) {
699 my ($timeout, @action) = @_;
700 700
701Replies with the port ID of the specified well-known port, or C<undef>. 701 my $t; $t = AE::timer $timeout, 0, sub {
702 702 undef $t;
703=item devnull => ... 703 ref $action[0]
704 704 ? $action[0]()
705Generic data sink/CPU heat conversion. 705 : snd @action;
706 706 };
707=item relay => $port, @msg 707}
708
709Simply forwards the message to the given port.
710
711=item eval => $string[ @reply]
712
713Evaluates the given string. If C<@reply> is given, then a message of the
714form C<@reply, $@, @evalres> is sent.
715
716Example: crash another node.
717
718 snd $othernode, eval => "exit";
719
720=item time => @reply
721
722Replies the the current node time to C<@reply>.
723
724Example: tell the current node to send the current time to C<$myport> in a
725C<timereply> message.
726
727 snd $NODE, time => $myport, timereply => 1, 2;
728 # => snd $myport, timereply => 1, 2, <time>
729 708
730=back 709=back
731 710
732=head1 AnyEvent::MP vs. Distributed Erlang 711=head1 AnyEvent::MP vs. Distributed Erlang
733 712

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines