Class: Hx::Interop::RPC::Client

Inherits:
Base
  • Object
show all
Defined in:
lib/interop/rpc/client.rb

Overview

An RPC client.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#on, #wait

Constructor Details

#initializeClient



12
13
14
15
16
17
# File 'lib/interop/rpc/client.rb', line 12

def initialize(*)
  @next_id = 1
  @queues  = {}
  @mutex   = Mutex.new
  super
end

Instance Attribute Details

#id_prefixObject

Returns the value of attribute id_prefix.



10
11
12
# File 'lib/interop/rpc/client.rb', line 10

def id_prefix
  @id_prefix
end

Instance Method Details

#call(request, *args) ⇒ Message Also known as: []



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/interop/rpc/client.rb', line 21

def call(request, *args)
  request = build_message(request, *args)

  queue = Queue.new

  @mutex.synchronize do
    id = "#{id_prefix}#{@next_id}"
    @next_id += 1
    request[Headers::ID] = id
    @queues[id] = queue
  end

  write request

  queue.pop
end

#magic(&block) ⇒ Object



40
41
42
# File 'lib/interop/rpc/client.rb', line 40

def magic(&block)
  Magic.new self, :call, &block
end