Class: RedisRPC::Server

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

Instance Method Summary collapse

Constructor Details

#initialize(redis_server, message_queue, local_object) ⇒ Server

Returns a new instance of Server.



102
103
104
105
106
# File 'lib/redisrpc.rb', line 102

def initialize(redis_server, message_queue, local_object)
    @redis_server = redis_server
    @message_queue = message_queue
    @local_object = local_object
end

Instance Method Details

#runObject



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/redisrpc.rb', line 108

def run
    # Flush the message queue.
    @redis_server.del @message_queue
    loop do
        message_queue, message = @redis_server.blpop @message_queue, 0
        if $DEBUG
            fail 'assertion failed' if message_queue != @message_queue
            $stderr.puts 'RPC Request: ' + message
        end
        rpc_request = JSON.parse(message)
        response_queue = rpc_request['response_queue']
        function_call = FunctionCall.new(rpc_request['function_call'])
        code = '@local_object.' + function_call.as_ruby_code
        begin
            return_value = eval code
            rpc_response = {'return_value' => return_value}
        rescue => err
            rpc_response = {'exception' => err}
        end
        message = JSON.generate rpc_response
        if $DEBUG
            $stderr.puts 'RPC Response: ' + message
        end
        @redis_server.rpush response_queue, message
    end
end