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.9 by root, Sun Aug 2 15:47:04 2009 UTC vs.
Revision 1.17 by root, Mon Aug 3 08:35:40 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";
153 && undef $_; 154 && undef $_;
154 } 155 }
155 }; 156 };
156 157
157 $self 158 $self
159}
160
161=item $portid = miniport { my @msg = @_; $finished }
162
163Creates a "mini port", that is, a very lightweight port without any
164pattern matching behind it, and returns its ID.
165
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.
169
170The message will be passed as-is, no extra argument (i.e. 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
181sub miniport(&) {
182 my $cb = shift;
183 my $id = "$AnyEvent::MP::Base::UNIQ." . $AnyEvent::MP::Base::ID++;
184
185 $AnyEvent::MP::Base::PORT{$id} = sub {
186 &$cb
187 and delete $AnyEvent::MP::Base::PORT{$id};
188 };
189
190 "$NODE#$id"
158} 191}
159 192
160package AnyEvent::MP::Port; 193package AnyEvent::MP::Port;
161 194
162=back 195=back

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines