Class: BasicJRPC::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/basicjrpc/client.rb

Overview

Responding Client

Direct Known Subclasses

FAFClient

Instance Method Summary collapse

Constructor Details

#initialize(queue, timeout = 10, host = "redis") ⇒ Client

Returns a new instance of Client.



13
14
15
16
17
18
19
20
# File 'lib/basicjrpc/client.rb', line 13

def initialize(queue, timeout=10, host="redis")
  @queue = queue
  @payload = {}
  @timeout = timeout
  @instance_id = SecureRandom.uuid
  #@nsq_producer = Nsq::Producer.new(nsqd: 'dockerlb:4150', topic: @queue)
  @redis = Redis.new(host: host, port: 6381)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(m, *args, &block) ⇒ Object



22
23
24
# File 'lib/basicjrpc/client.rb', line 22

def method_missing(m, *args, &block)
  send_request({ 'method_name' => m.to_s, 'method_arguments' => args, 'callers' => caller.first(10) })
end

Instance Method Details

#send_request(payload) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/basicjrpc/client.rb', line 26

def send_request payload
  payload['message_id'] = SecureRandom.uuid
  payload['instance_id'] = @instance_id
  payload['response'] = true
        
  my_message = false
  
  @redis.rpush(@queue, Oj.dump(payload))
  
  Timeout::timeout(@timeout) {
    Oj.load(@redis.blpop(payload['message_id'])[1], :symbol_keys => true)
  }
rescue Exception => e
  #terminate
  raise e
end

#terminateObject

This must be called



44
45
46
# File 'lib/basicjrpc/client.rb', line 44

def terminate
  #@nsq_producer.terminate
end