class Rinda::TupleEntry
A TupleEntry is a Tuple (i.e. a possible entry in some Tuplespace) together with expiry and cancellation data.
Атрибуты
Публичные методы класса
# File lib/rinda/tuplespace.rb, line 26 def initialize(ary, sec=nil) @cancel = false @expires = nil @tuple = make_tuple(ary) @renewer = nil renew(sec) end
Создаёт TupleEntry на основе ary с необязательным объектом обновления или временем истечения sec.
Объект обновления должен реализовывать метод renew, который возвращает Numeric, nil или true для индикации истечения времени жизни кортежа.
Публичные методы экземпляра
# File lib/rinda/tuplespace.rb, line 110 def [](key) @tuple[key] end
Извлекает key из кортежа.
# File lib/rinda/tuplespace.rb, line 44 def alive? !canceled? && !expired? end
Кортеж считается неактивным, когда он отменён или срок его действия истек.
# File lib/rinda/tuplespace.rb, line 37 def cancel @cancel = true end
Отмечает этот TupleEntry как отменённый.
# File lib/rinda/tuplespace.rb, line 57 def canceled?; @cancel; end
Возвращает статус отмены.
# File lib/rinda/tuplespace.rb, line 65 def expired? return true unless @expires return false if @expires > Time.now return true if @renewer.nil? renew(@renewer) return true unless @expires return @expires < Time.now end
Истекло ли время жизни этого кортежа? (true/false).
Кортеж истекает, когда таймер истечения времени, основанный на аргументе sec при инициализации, заканчивает отсчёт.
# File lib/rinda/tuplespace.rb, line 117 def fetch(key) @tuple.fetch(key) end
Извлекает key из кортежа.
# File lib/rinda/tuplespace.rb, line 96
def make_expires(sec=nil)
case sec
when Numeric
Time.now + sec
when true
Time.at(1)
when nil
Time.at(2**31-1)
end
end Возвращает время истечения Time на основе sec, которое может быть:
-
Numeric -
secсекунды в будущем -
true -
время истечения — начало 1970 года (т.е. истекло)
-
nil -
время истечения — вторник, 19 января 2038 года 03:14:07 по Гринвичу (т.е. когда таймеры UNIX умрут)
# File lib/rinda/tuplespace.rb, line 131 def make_tuple(ary) Rinda::Tuple.new(ary) end
Создаёт Rinda::Tuple для ary.
# File lib/rinda/tuplespace.rb, line 84 def renew(sec_or_renewer) sec, @renewer = get_renewer(sec_or_renewer) @expires = make_expires(sec) end
Сброс времени истечения в соответствии с sec_or_renewer.
-
nil -
время истечения установлено в далёком будущем.
-
true -
время истечения истекло.
-
Numeric -
время истечения наступит через указанное количество секунд.
В противном случае аргумент относится к какому-либо объекту обновления, который сбросит время истечения.
# File lib/rinda/tuplespace.rb, line 124 def size @tuple.size end
Размер кортежа.
Приватные методы экземпляра
# File lib/rinda/tuplespace.rb, line 144
def get_renewer(it)
case it
when Numeric, true, nil
return it, nil
else
begin
return it.renew, it
rescue Exception
return it, nil
end
end
end Возвращает допустимый аргумент для make_expires и объект обновления или nil.
Принимая true, nil, или Numeric, возвращает это значение и nil (нет фактического объекта обновления). В противном случае возвращает значение времени истечения, полученное при вызове it.renew и объект обновления.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.