class PipeRpc::Hub::Requests

Attributes

requests[R]

Public Class Methods

new(hub) click to toggle source
# File lib/pipe_rpc/hub_requests.rb, line 3
def initialize(hub)
  @hub = hub
  @requests ={}
  @uid = 0
  wait_for_results_through nil
end

Public Instance Methods

[](id) click to toggle source
# File lib/pipe_rpc/hub_requests.rb, line 21
def [](id)
  @requests[id]
end
evaluate(request) click to toggle source
# File lib/pipe_rpc/hub_requests.rb, line 12
def evaluate(request)
  @uid += 1
  request.id = @uid
  @requests[@uid] = request
  @hub.socket.write request
  @wait.call until request.result.received?
  request.result.value
end
inject_result_for(id, result) click to toggle source
# File lib/pipe_rpc/hub_requests.rb, line 25
def inject_result_for(id, result)
  if request = @requests.delete(id)
    request.result.value = result
  else
    raise "no request with id '#{id.inspect}'"
  end
end
wait_for_results_through(iteration) click to toggle source
# File lib/pipe_rpc/hub_requests.rb, line 33
def wait_for_results_through(iteration)
  @wait = iteration.respond_to?(:call) ? iteration : proc{ @hub.handle_message }
end