首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rinda::NotifyTemplateEntry

Parent:Rinda::TemplateEntry

NotifyTemplateEntry由Rinda :: TupleSpace#notify返回并通知TupleSpace更改。迭代通知时,您可能会收到您的订阅事件或“关闭”事件。

请参阅Rinda :: TupleSpace#notify_event获取有效的通知类型。

代码语言:javascript
复制
ts = Rinda::TupleSpace.new
observer = ts.notify 'write', [nil]

Thread.start do
  observer.each { |t| p t }
end

3.times { |i| ts.write [i] }

输出:

代码语言:javascript
复制
['write', [0]]
['write', [1]]
['write', [2]]

公共类方法

new(place, event, tuple, expires=nil) 显示源文件

创建一个新的NotifyTemplateEntry,place用于监视匹配的+ event + s tuple

调用超类方法Rinda :: TupleEntry.new

代码语言:javascript
复制
# 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过期。

代码语言:javascript
复制
# 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一个新事件。

代码语言:javascript
复制
# File lib/rinda/tuplespace.rb, line 255
def notify(ev)
  @queue.push(ev)
end

pop() 显示源

检索通知。当此NotifyTemplateEntry过期时引发RequestExpiredError。

代码语言:javascript
复制
# 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

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com