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.14 by root, Sun Aug 2 18:26:00 2009 UTC vs.
Revision 1.15 by root, Sun Aug 2 19:25:27 2009 UTC

156 }; 156 };
157 157
158 $self 158 $self
159} 159}
160 160
161=item $portid = create_miniport { } 161=item $portid = miniport { my @msg = @_; $finished }
162 162
163Creates 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.
164 165
165=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.
166 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
167sub create_miniport(&) { 181sub miniport(&) {
168 my $cb = shift; 182 my $cb = shift;
169 my $id = "$AnyEvent::MP::Base::UNIQ." . ++$AnyEvent::MP::Base::ID; 183 my $id = "$AnyEvent::MP::Base::UNIQ." . ++$AnyEvent::MP::Base::ID;
170 184
171 $AnyEvent::MP::Base::PORT{$id} = sub { 185 $AnyEvent::MP::Base::PORT{$id} = sub {
172# unshift @_, "$NODE#$id";
173 &$cb 186 &$cb
174 and delete $AnyEvent::MP::Base::PORT{$id}; 187 and delete $AnyEvent::MP::Base::PORT{$id};
175 }; 188 };
176 189
177 "$NODE#$id" 190 "$NODE#$id"

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines