Class: PipeRpc::Hub::Requests

Inherits:
Object
  • Object
show all
Defined in:
lib/pipe_rpc/hub_requests.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hub) ⇒ Requests

Returns a new instance of Requests.



3
4
5
6
7
8
# File 'lib/pipe_rpc/hub_requests.rb', line 3

def initialize(hub)
  @hub = hub
  @requests ={}
  @uid = 0
  wait_for_results_through nil
end

Instance Attribute Details

#requestsObject (readonly)

Returns the value of attribute requests.



10
11
12
# File 'lib/pipe_rpc/hub_requests.rb', line 10

def requests
  @requests
end

Instance Method Details

#[](id) ⇒ Object



21
22
23
# File 'lib/pipe_rpc/hub_requests.rb', line 21

def [](id)
  @requests[id]
end

#evaluate(request) ⇒ Object



12
13
14
15
16
17
18
19
# 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) ⇒ Object



25
26
27
28
29
30
31
# 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) ⇒ Object



33
34
35
# 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