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

125Create 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.
126 126
127=cut 127=cut
128 128
129sub create_port { 129sub create_port {
130 my $id = "$AnyEvent::MP::Base::UNIQ." . ++$AnyEvent::MP::Base::ID; 130 my $id = "$AnyEvent::MP::Base::UNIQ." . $AnyEvent::MP::Base::ID++;
131 131
132 my $self = bless { 132 my $self = bless {
133 id => "$NODE#$id", 133 id => "$NODE#$id",
134 names => [$id], 134 names => [$id],
135 }, "AnyEvent::MP::Port"; 135 }, "AnyEvent::MP::Port";
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 $_[0] = "$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