# File lib/mcollective/application/rpc.rb, line 80
  def main
    mc = rpcclient(configuration[:agent])

    mc.agent_filter(configuration[:agent])

    string_to_ddl_type(configuration[:arguments], mc.ddl.action_interface(configuration[:action])) if mc.ddl

    mc.validate_request(configuration[:action], configuration[:arguments])

    if mc.reply_to
      configuration[:arguments][:process_results] = true

      puts "Request sent with id: " + mc.send(configuration[:action], configuration[:arguments]) + " replies to #{mc.reply_to}"
    elsif !configuration[:show_results]
      configuration[:arguments][:process_results] = false

      puts "Request sent with id: " + mc.send(configuration[:action], configuration[:arguments])
    else
      discover_args = {:verbose => true}
      # IF the discovery method hasn't been explicitly overridden
      #  and we're not being run interactively,
      #  and someone has piped us some data
      # Then we assume it's a discovery list - this can be either:
      #  - list of hosts in plaintext
      #  - JSON that came from another rpc or printrpc
      if mc.default_discovery_method && !STDIN.tty? && !STDIN.eof?
          # Then we override discovery to try to grok the data on STDIN
          mc.discovery_method = 'stdin'
          mc.discovery_options = 'auto'
          discover_args = {:verbose => false}
      end

      mc.discover discover_args

      printrpc mc.send(configuration[:action], configuration[:arguments])

      printrpcstats :summarize => true, :caption => "#{configuration[:agent]}##{configuration[:action]} call stats" if mc.discover.size > 0

      halt mc.stats
    end
  end