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.10 by root, Sun Aug 2 18:05:43 2009 UTC vs.
Revision 1.16 by root, Sun Aug 2 19:29:41 2009 UTC

86 86
87our $VERSION = '0.02'; 87our $VERSION = '0.02';
88our @EXPORT = qw( 88our @EXPORT = qw(
89 NODE $NODE $PORT snd rcv _any_ 89 NODE $NODE $PORT snd rcv _any_
90 create_port create_port_on 90 create_port create_port_on
91 create_miniport
91 become_slave become_public 92 become_slave become_public
92); 93);
93 94
94=item NODE / $NODE 95=item NODE / $NODE
95 96
124Create a new local port object. See the next section for allowed methods. 125Create a new local port object. See the next section for allowed methods.
125 126
126=cut 127=cut
127 128
128sub create_port { 129sub create_port {
129 my $id = "$AnyEvent::MP::Base::UNIQ." . ++$AnyEvent::MP::Base::ID; 130 my $id = "$AnyEvent::MP::Base::UNIQ." . $AnyEvent::MP::Base::ID++;
130 131
131 my $self = bless { 132 my $self = bless {
132 id => "$NODE#$id", 133 id => "$NODE#$id",
133 names => [$id], 134 names => [$id],
134 }, "AnyEvent::MP::Port"; 135 }, "AnyEvent::MP::Port";
155 }; 156 };
156 157
157 $self 158 $self
158} 159}
159 160
160=item $portid = create_miniport { } 161=item $portid = miniport { my @msg = @_; $finished }
161 162
162Creates a "mini port", that is, a port without much #TODO 163Creates a "mini port", that is, a very lightweight port without any
164pattern matching behind it, and returns its ID.
163 165
164=cut 166The block will be called for every message received on the port. When the
167callback returns a true value its job is considered "done" and the port
168will be destroyed. Otherwise it will stay alive.
165 169
170The message will be passed as-is, no extra argument (ie.. no port id) will
171be passed to the callback.
172
173If you need the local port id in the callback, this works nicely:
174
175 my $port; $port = miniport {
176 snd $otherport, reply => $port;
177 };
178
179=cut
180
166sub create_miniport(&) { 181sub miniport(&) {
167 my $cb = shift; 182 my $cb = shift;
168 my $id = "$AnyEvent::MP::Base::UNIQ." . ++$AnyEvent::MP::Base::ID; 183 my $id = "$AnyEvent::MP::Base::UNIQ." . $AnyEvent::MP::Base::ID++;
169 184
170 $AnyEvent::MP::Base::PORT{$id} = sub { 185 $AnyEvent::MP::Base::PORT{$id} = sub {
171 &$cb 186 &$cb
172 and delete $AnyEvent::MP::Base::PORT{$id}; 187 and delete $AnyEvent::MP::Base::PORT{$id};
173 }; 188 };

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines