11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/basicjrpc/server.rb', line 11
def listen(trigger=nil, error_handler=nil)
puts "Listening..."
@redis = Redis.new(host: @host, port: 6381)
while true
begin
redis_response = @redis.blpop(@queue)
rescue Redis::TimeoutError
puts "ERROR: Redis Read timed out. Retrying"
retry
end
next if redis_response.nil?
message = redis_response[1]
payload = Oj.load(message, :symbol_keys => false)
if payload['method_argument_type'] and payload.method_argument_type == "hash"
if @injected_class.method(payload.method_name).parameters.flatten.include?(:keyreq)
response = @injected_class.send(payload.method_name, *payload.method_arguments)
else
response = @injected_class.send(payload.method_name, *payload.method_arguments.first.values)
end
else
response = @injected_class.send(payload.method_name, *payload.method_arguments)
end
@redis.rpush(payload.message_id, Oj.dump(response))
@injected_class.send(trigger) if trigger
end
rescue Exception => e
@redis.rpush(payload.message_id, Oj.dump(error_handler.handle(e))) if error_handler
raise e
end
|