class DRb::DRbServer::InvokeMethod
:nodoc:
def check_insecure_method
def check_insecure_method @drb_server.check_insecure_method(@obj, @msg_id) end
def init_with_client
def init_with_client obj, msg, argv, block = @client.recv_request @obj = obj @msg_id = msg.intern @argv = argv @block = block end
def initialize(drb_server, client)
def initialize(drb_server, client) @drb_server = drb_server @client = client end
def perform
def perform begin setup_message ensure @result = nil @succ = false end if @block @result = perform_with_block else @result = perform_without_block end @succ = true case @result when Array if @msg_id == :to_ary @result = DRbArray.new(@result) end end return @succ, @result rescue NoMemoryError, SystemExit, SystemStackError, SecurityError raise rescue Exception @result = $! return @succ, @result end
def perform_without_block
def perform_without_block if Proc === @obj && @msg_id == :__drb_yield if @argv.size == 1 ary = @argv else ary = [@argv] end ary.collect(&@obj)[0] else @obj.__send__(@msg_id, *@argv) end end
def setup_message
def setup_message init_with_client check_insecure_method end