Class: RedisRpc::Client
- Inherits:
-
Object
show all
- Defined in:
- lib/redis-rpc.rb
Instance Method Summary
collapse
Constructor Details
#initialize(redis_server, message_queue, timeout = 0) ⇒ Client
Returns a new instance of Client.
44
45
46
47
48
|
# File 'lib/redis-rpc.rb', line 44
def initialize( redis_server, message_queue, timeout=0 )
@redis_server = redis_server
@message_queue = message_queue
@timeout = timeout
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing ⇒ Object
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/redis-rpc.rb', line 77
def send( method_name, *args)
raise MalformedRequestException, 'block not allowed over RPC' if block_given?
function_call = {'name' => method_name.to_s, 'args' => args}
response_queue = @message_queue + ':rpc:' + rand_string
rpc_request = {'function_call' => function_call, 'response_queue' => response_queue}
rpc_raw_request = MultiJson.dump rpc_request
@redis_server.rpush @message_queue, rpc_raw_request
message_queue, rpc_raw_response = @redis_server.blpop response_queue, @timeout
raise TimeoutException if rpc_raw_response.nil?
rpc_response = MultiJson.load rpc_raw_response
raise RemoteException.new(rpc_response['exception'], rpc_response['backtrace']) if rpc_response.has_key? 'exception'
raise MalformedResponseException, rpc_response unless rpc_response.has_key? 'return_value'
return rpc_response['return_value']
rescue TimeoutException
@redis_server.lrem @message_queue, 0, rpc_raw_request
raise $!
end
|
Instance Method Details
#respond_to?(method_name) ⇒ Boolean
79
80
81
|
# File 'lib/redis-rpc.rb', line 79
def respond_to?( method_name )
send( :respond_to?, method_name )
end
|
#send(method_name, *args) ⇒ Object
Also known as:
method_missing
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/redis-rpc.rb', line 51
def send( method_name, *args)
raise MalformedRequestException, 'block not allowed over RPC' if block_given?
function_call = {'name' => method_name.to_s, 'args' => args}
response_queue = @message_queue + ':rpc:' + rand_string
rpc_request = {'function_call' => function_call, 'response_queue' => response_queue}
rpc_raw_request = MultiJson.dump rpc_request
@redis_server.rpush @message_queue, rpc_raw_request
message_queue, rpc_raw_response = @redis_server.blpop response_queue, @timeout
raise TimeoutException if rpc_raw_response.nil?
rpc_response = MultiJson.load rpc_raw_response
raise RemoteException.new(rpc_response['exception'], rpc_response['backtrace']) if rpc_response.has_key? 'exception'
raise MalformedResponseException, rpc_response unless rpc_response.has_key? 'return_value'
return rpc_response['return_value']
rescue TimeoutException
@redis_server.lrem @message_queue, 0, rpc_raw_request
raise $!
end
|
#send! ⇒ Object
50
|
# File 'lib/redis-rpc.rb', line 50
alias :send! :send
|