class RedisRPC::Server

Public Class Methods

new(redis_server, message_queue, local_object) click to toggle source
# File lib/redisrpc.rb, line 96
def initialize(redis_server, message_queue, local_object)
    @redis_server = redis_server
    @message_queue = message_queue
    @local_object = local_object
end

Public Instance Methods

flush_queue!() click to toggle source
# File lib/redisrpc.rb, line 131
def flush_queue!
    @redis_server.del @message_queue
end
run() click to toggle source
# File lib/redisrpc.rb, line 102
def run
    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 = MultiJson.load message
        response_queue = rpc_request['response_queue']
        function_call = FunctionCall.new(rpc_request['function_call'])
        begin
            return_value = @local_object.send( function_call.method, *function_call.args )
            rpc_response = {'return_value' => return_value}
        rescue => err
            rpc_response = {'exception' => err}
        end
        message = MultiJson.dump rpc_response
        if $DEBUG
            $stderr.puts 'RPC Response: ' + message
        end
        @redis_server.rpush response_queue, message
    end
end
run!() click to toggle source
# File lib/redisrpc.rb, line 126
def run!
    flush_queue!
    run
end