Rinda::NotifyTemplateEntry
class Rinda::NotifyTemplateEntry
Parent:Rinda::TemplateEntry
NotifyTemplateEntry由Rinda :: TupleSpace#notify返回并通知TupleSpace更改。迭代通知时,您可能会收到您的订阅事件或“关闭”事件。
请参阅Rinda :: TupleSpace#notify_event获取有效的通知类型。
例
ts = Rinda::TupleSpace.new
observer = ts.notify 'write', [nil]
Thread.start do
observer.each { |t| p t }
end
3.times { |i| ts.write [i] }
输出:
['write', [0]]
['write', [1]]
['write', [2]]
公共类方法
new(place, event, tuple, expires=nil) 显示源文件
创建一个新的NotifyTemplateEntry,place
用于监视匹配的+ event + s tuple
。
调用超类方法Rinda :: TupleEntry.new
# File 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
公共实例方法
each(){| event,tuple | ...}显示源文件
产生事件/元组对,直到此NotifyTemplateEntry过期。
# File lib/rinda/tuplespace.rb, line 273
def each # :yields: event, tuple
while !@done
it = pop
yield(it)
end
rescue
ensure
cancel
end
notify(ev)显示源
由TupleSpace调用以通知此NotifyTemplateEntry一个新事件。
# File lib/rinda/tuplespace.rb, line 255
def notify(ev)
@queue.push(ev)
end
pop() 显示源
检索通知。当此NotifyTemplateEntry过期时引发RequestExpiredError。
# File lib/rinda/tuplespace.rb, line 263
def pop
raise RequestExpiredError if @done
it = @queue.pop
@done = true if it[0] == 'close'
return it
end