class Rinda::NotifyTemplateEntry
NotifyTemplateEntry
由 TupleSpace#notify
返回,并且会收到 TupleSpace
更改的通知。在迭代通知时,你可能会收到你订阅的事件或 ‘close’ 事件。
有关有效的通知类型,请参阅 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
中与 tuple
匹配的 +event+。
调用超类方法
Rinda::TupleEntry::new
# File rinda-0.2.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
公共实例方法
each() { |event, tuple| ... } 点击以切换源代码
产生事件/元组对,直到此 NotifyTemplateEntry
过期。
# File rinda-0.2.0/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 rinda-0.2.0/lib/rinda/tuplespace.rb, line 255 def notify(ev) @queue.push(ev) end
pop() 点击以切换源代码
检索通知。当此 NotifyTemplateEntry
过期时,会引发 RequestExpiredError
。
# File rinda-0.2.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