класс Rinda::NotifyTemplateEntry
Объект NotifyTemplateEntry возвращается методом Rinda::TupleSpace#notify и уведомляется об изменениях в TupleSpace. При итерации по уведомлениям вы можете получить либо событие, на которое вы подписаны, либо событие 'close'.
См. 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]]
Публичные методы класса
# File lib/rinda/tuplespace.rb, line 246 def initialize(place, event, tuple, expires=nil) ary = [event, Rinda::Template.new(tuple)] super(ary, expires) @queue = Queue.new @done = false end
Создает новый объект NotifyTemplateEntry, который следит за place событиями, соответствующими tuple.
Публичные методы экземпляра
# File lib/rinda/tuplespace.rb, line 274
def each # :yields: event, tuple
while !@done
it = pop
yield(it)
end
rescue
ensure
cancel
end Возвращает пары событие/кортеж до истечения срока действия этого объекта NotifyTemplateEntry.
# File lib/rinda/tuplespace.rb, line 256 def notify(ev) @queue.push(ev) end
Вызывается пространством кортежей TupleSpace для уведомления этого объекта NotifyTemplateEntry о новом событии.
# File lib/rinda/tuplespace.rb, line 264 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.