class Bones::RPC::Synchronous::Future
Public Class Methods
new()
click to toggle source
# File lib/bones/rpc/synchronous/future.rb, line 9 def initialize @start = Time.now @mutex = Mutex.new @ready = false @result = nil @forwards = nil end
Public Instance Methods
ready?()
click to toggle source
Check if this future has a value yet
# File lib/bones/rpc/synchronous/future.rb, line 18 def ready? @ready end
runtime()
click to toggle source
# File lib/bones/rpc/synchronous/future.rb, line 68 def runtime if @stop @stop - @start else Time.now - @start end end
signal(value)
click to toggle source
Signal this future with the given result value
# File lib/bones/rpc/synchronous/future.rb, line 52 def signal(value) @stop = Time.now result = Result.new(value, self) @mutex.synchronize do raise "the future has already happened!" if @ready @result = result @ready = true end end
Also aliased as: <<
value(timeout = nil)
click to toggle source
Obtain the value for this Future
# File lib/bones/rpc/synchronous/future.rb, line 23 def value(timeout = nil) ready = result = nil begin @mutex.lock if @ready ready = true result = @result end ensure @mutex.unlock end unless ready if timeout raise TimeoutError, "Timeout not supported by Bones::RPC::Synchronous backend" end end if result result.value else raise TimeoutError, "Timeout not supported by Bones::RPC::Synchronous backend" end end
Also aliased as: call