类 Rinda::TupleEntry

一个 TupleEntry 是一个 Tuple(即元组空间中的一个可能的条目),以及过期和取消数据。

属性

expires[RW]

公共类方法

new(ary, sec=nil) 点击切换源代码

创建一个基于 aryTupleEntry,并带有可选的续约器或过期时间 sec

续约器必须实现 renew 方法,该方法返回一个 Numeric、nil 或 true,以指示元组何时过期。

# 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

公共实例方法

[](key) 点击切换源代码

从元组中检索 key

# File lib/rinda/tuplespace.rb, line 110
def [](key)
  @tuple[key]
end
alive?() 点击切换源代码

一个 TupleEntry 在被取消或过期时就失效了。

# File lib/rinda/tuplespace.rb, line 44
def alive?
  !canceled? && !expired?
end
cancel() 点击切换源代码

将此 TupleEntry 标记为已取消。

# File lib/rinda/tuplespace.rb, line 37
def cancel
  @cancel = true
end
canceled?() 点击切换源代码

返回取消状态。

# File lib/rinda/tuplespace.rb, line 57
def canceled?; @cancel; end
expired?() 点击切换源代码

此元组是否已过期?(true/false)。

当基于初始化时 sec 参数的过期计时器运行完毕时,元组就过期了。

# 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
fetch(key) 点击切换源代码

从元组中获取 key

# File lib/rinda/tuplespace.rb, line 117
def fetch(key)
  @tuple.fetch(key)
end
make_expires(sec=nil) 点击切换源代码

返回基于 sec 的过期 Time,它可以是以下之一

Numeric

sec 秒后的时间

true

过期时间为 1970 年开始(即已过期)

nil

现在是格林威治标准时间 2038 年 1 月 19 日星期二 03:14:07 (Time,即 UNIX 时钟将停止工作的时间)

# 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
make_tuple(ary) 点击切换源代码

ary 创建一个 Rinda::Tuple

# File lib/rinda/tuplespace.rb, line 131
def make_tuple(ary)
  Rinda::Tuple.new(ary)
end
renew(sec_or_renewer) 点击切换源代码

根据 sec_or_renewer 重置过期时间。

nil

它被设置为在遥远的未来过期。

true

它已经过期了。

Numeric

它将在这么多秒后过期。

否则,参数指的是某种续期对象,它将重置其过期时间。

# File lib/rinda/tuplespace.rb, line 84
def renew(sec_or_renewer)
  sec, @renewer = get_renewer(sec_or_renewer)
  @expires = make_expires(sec)
end
size() 点击切换源代码

元组的大小。

# File lib/rinda/tuplespace.rb, line 124
def size
  @tuple.size
end
value() 点击切换源代码

返回构成元组本身的对象:ArrayHash

# File lib/rinda/tuplespace.rb, line 52
def value; @tuple.value; end

私有实例方法

get_renewer(it) 点击切换源代码

返回一个有效的参数到 make_expires 以及续期器或 nil。

给定 truenilNumeric,返回该值和 nil(没有实际的续期器)。否则,它将返回从调用 it.renew 获得的过期值和续期器。

# 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