A NotifyTemplateEntry
is returned by TupleSpace#notify
and is notified of TupleSpace
changes. You may receive either your subscribed event or the ‘close’ event when iterating over notifications.
See TupleSpace#notify_event
for valid notification types.
Example
ts = Rinda::TupleSpace.new observer = ts.notify 'write', [nil] Thread.start do observer.each { |t| p t } end 3.times { |i| ts.write [i] }
Outputs:
['write', [0]] ['write', [1]] ['write', [2]]
Class Methods
lib/rinda/tuplespace.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rinda/tuplespace.rb, line 245
def initialize(place, event, tuple, expires=nil)
ary = [event, Rinda::Template.new(tuple)]
super(ary, expires)
@queue = Thread::Queue.new
@done = false
end
Creates a new NotifyTemplateEntry
that watches place
for +event+s that match tuple
.
Instance Methods
lib/rinda/tuplespace.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rinda/tuplespace.rb, line 273
def each # :yields: event, tuple
while !@done
it = pop
yield(it)
end
rescue
ensure
cancel
end
Yields event/tuple pairs until this NotifyTemplateEntry
expires.
lib/rinda/tuplespace.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rinda/tuplespace.rb, line 255
def notify(ev)
@queue.push(ev)
end
Called by TupleSpace
to notify this NotifyTemplateEntry
of a new event.
#
lib/rinda/tuplespace.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rinda/tuplespace.rb, line 263
def pop
raise RequestExpiredError if @done
it = @queue.pop
@done = true if it[0] == 'close'
return it
end
Retrieves a notification. Raises RequestExpiredError
when this NotifyTemplateEntry
expires.