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)

:nodoc:
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