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.4 by root, Sat Aug 1 07:36:30 2009 UTC vs.
Revision 1.6 by root, Sat Aug 1 10:02:33 2009 UTC

27This module (-family) implements a simple message passing framework. 27This module (-family) implements a simple message passing framework.
28 28
29Despite its simplicity, you can securely message other processes running 29Despite its simplicity, you can securely message other processes running
30on the same or other hosts. 30on the same or other hosts.
31 31
32At the moment, this module family is severly brokena nd underdocumented,
33so do not use. This was uploaded mainly to resreve the CPAN namespace -
34stay tuned!
35
32=head1 CONCEPTS 36=head1 CONCEPTS
33 37
34=over 4 38=over 4
35 39
36=item port 40=item port
52 56
53Initially, nodes are either private (single-process only) or hidden 57Initially, nodes are either private (single-process only) or hidden
54(connected to a master node only). Only when they epxlicitly "become 58(connected to a master node only). Only when they epxlicitly "become
55public" can you send them messages from unrelated other nodes. 59public" can you send them messages from unrelated other nodes.
56 60
57=item noderef - C<host:port,host:port...>, C<id@noderef, C<id> 61=item noderef - C<host:port,host:port...>, C<id@noderef>, C<id>
58 62
59A noderef is a string that either uniquely identifies a given node (for 63A noderef is a string that either uniquely identifies a given node (for
60private and hidden nodes), or contains a recipe on how to reach a given 64private and hidden nodes), or contains a recipe on how to reach a given
61node (for public nodes). 65node (for public nodes).
62 66
81 85
82use AE (); 86use AE ();
83 87
84use base "Exporter"; 88use base "Exporter";
85 89
86our $VERSION = '0.0'; 90our $VERSION = '0.01';
87our @EXPORT = qw(NODE $NODE $PORT snd rcv _any_); 91our @EXPORT = qw(NODE $NODE $PORT snd rcv _any_);
88 92
89our $DEFAULT_SECRET; 93our $DEFAULT_SECRET;
90our $DEFAULT_PORT = "4040"; 94our $DEFAULT_PORT = "4040";
91 95
111C<become_slave>, after which all local port identifiers become invalid. 115C<become_slave>, after which all local port identifiers become invalid.
112 116
113=cut 117=cut
114 118
115our $UNIQ = sprintf "%x.%x", $$, time; # per-process/node unique cookie 119our $UNIQ = sprintf "%x.%x", $$, time; # per-process/node unique cookie
120our $ID = "a0";
116our $PUBLIC = 0; 121our $PUBLIC = 0;
117our $NODE; 122our $NODE;
118our $PORT; 123our $PORT;
119 124
120our %NODE; # node id to transport mapping, or "undef", for local node 125our %NODE; # node id to transport mapping, or "undef", for local node
366 371
367=back 372=back
368 373
369=head1 NODE MESSAGES 374=head1 NODE MESSAGES
370 375
371Nodes understand the following messages sent to them: 376Nodes understand the following messages sent to them. Many of them take
377arguments called C<@reply>, which will simply be used to compose a reply
378message - C<$reply[0]> is the port to reply to, C<$reply[1]> the type and
379the remaining arguments are simply the message data.
372 380
373=over 4 381=over 4
374 382
375=cut 383=cut
376 384
400rcv "", relay => \&snd; 408rcv "", relay => \&snd;
401 409
402=item eval => $string[ @reply] 410=item eval => $string[ @reply]
403 411
404Evaluates the given string. If C<@reply> is given, then a message of the 412Evaluates the given string. If C<@reply> is given, then a message of the
405form C<@reply, $@, @evalres> is sent (C<$reply[0]> is the port to reply to). 413form C<@reply, $@, @evalres> is sent.
414
415Example: crash another node.
416
417 snd $othernode, eval => "exit";
406 418
407=cut 419=cut
408 420
409rcv "", eval => sub { 421rcv "", eval => sub {
410 my (undef, $string, @reply) = @_; 422 my (undef, $string, @reply) = @_;
414 426
415=item time => @reply 427=item time => @reply
416 428
417Replies the the current node time to C<@reply>. 429Replies the the current node time to C<@reply>.
418 430
431Example: tell the current node to send the current time to C<$myport> in a
432C<timereply> message.
433
434 snd $NODE, time => $myport, timereply => 1, 2;
435 # => snd $myport, timereply => 1, 2, <time>
436
419=cut 437=cut
420 438
421rcv "", time => sub { shift; snd @_, AE::time }; 439rcv "", time => sub { shift; snd @_, AE::time };
422 440
423=back 441=back

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines