Spec-Zone.ru › Ruby 2.7

класс Rinda::NotifyTemplateEntry

Родитель:
Rinda::TemplateEntry

Объект 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) Показать исходный код
# 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

Создаёт новый объект NotifyTemplateEntry, который отслеживает place события +event+, соответствующие tuple.

Вызывает метод суперкласса Rinda::TupleEntry::new

Публичные методы экземпляра

each() { |event, tuple| ... } Показать исходный код
# File lib/rinda/tuplespace.rb, line 273
def each # :yields: event, tuple
  while !@done
    it = pop
    yield(it)
  end
rescue
ensure
  cancel
end

Возвращает пары событие/кортеж до тех пор, пока этот объект NotifyTemplateEntry не истечёт.

notify(ev) Показать исходный код
# File lib/rinda/tuplespace.rb, line 255
def notify(ev)
  @queue.push(ev)
end

Вызывается пространством TupleSpace, чтобы уведомить этот объект NotifyTemplateEntry о новом событии.

pop() Показать исходный код
# 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

Извлекает уведомление. Вызывает исключение RequestExpiredError, когда этот объект NotifyTemplateEntry истекает.

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API