class Rinda::NotifyTemplateEntry

NotifyTemplateEntryTupleSpace#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