123456789_123456789_123456789_123456789_123456789_

Class: XMLRPC::Server

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: XMLRPC::WEBrickServlet
Defined in: lib/xmlrpc/server.rb

Overview

Implements a standalone XML-RPC server. The method #serve is left if a SIGHUP is sent to the program.

require "xmlrpc/server"

s = XMLRPC::Server.new(8080)

s.add_handler("michael.add") do |a,b|
  a + b
end

s.add_handler("michael.div") do |a,b|
  if b == 0
    raise XMLRPC::FaultException.new(1, "division by zero")
  else
    a / b
  end
end

s.set_default_handler do |name, *args|
  raise XMLRPC::FaultException.new(-99, "Method #{name} missing" +
                                   " or wrong number of parameters!")
end

s.serve

Constant Summary

BasicServer - Inherited

ERR_MC_EXPECTED_STRUCT, ERR_MC_MISSING_METHNAME, ERR_MC_MISSING_PARAMS, ERR_MC_RECURSIVE_CALL, ERR_MC_WRONG_PARAM, ERR_MC_WRONG_PARAM_PARAMS, ERR_METHOD_MISSING, ERR_UNCAUGHT_EXCEPTION

Class Method Summary

WEBrickServlet - Inherited

BasicServer - Inherited

.new

Creates a new BasicServer instance, which should not be done, because BasicServer is an abstract class.

Instance Attribute Summary

WEBrickServlet - Inherited

#require_path_info?

Deprecated from WEBrick/1.2.2, but does not break anything.

Instance Method Summary

  • #serve

    Call this after you have added all you handlers to the server.

  • #shutdown

    Stops and shuts the server down.

WEBrickServlet - Inherited

#get_instance,
#get_valid_ip

Return the valid IP addresses that are allowed to connect to the server.

#service,
#set_valid_ip

Specifies the valid IP addresses that are allowed to connect to the server.

BasicServer - Inherited

#add_handler

Adds aBlock to the list of handlers, with name as the name of the method.

#add_introspection

Adds the introspection handlers "system.listMethods", "system.methodSignature" and "system.methodHelp", where only the first one works.

#add_multicall

Adds the multi-call handler "system.multicall".

#get_default_handler

Returns the default-handler, which is called when no handler for a method-name is found.

#get_service_hook

Returns the service-hook, which is called on each service request (RPC) unless it's nil.

#process,
#set_default_handler

Sets handler as the default-handler, which is called when no handler for a method-name is found.

#set_service_hook

A service-hook is called for each service request (RPC).

#call_method,
#check_arity

Returns true, if the arity of obj matches n_args

#dispatch, #handle, #multicall_fault

ParseContentType - Included

ParserWriterChooseMixin - Included

#set_parser

Sets the XMLParser to use for parsing XML documents.

#set_writer

Sets the XMLWriter to use for generating XML output.

#create, #parser

Constructor Details

.new(port = 8080, host = "127.0.0.1", maxConnections = 4, stdlog = $stdout, audit = true, debug = true, *a) ⇒ Server

Creates a new Server instance, which is a XML-RPC server listening on the given port and accepts requests for the given host, which is localhost by default.

The server is not started, to start it you have to call #serve.

The optional audit and debug parameters are obsolete!

All additionally provided parameters in *a are by-passed to BasicServer.new.

[ GitHub ]

  
# File 'lib/xmlrpc/server.rb', line 574

def initialize(port=8080, host="127.0.0.1", maxConnections=4, stdlog=$stdout, audit=true, debug=true, *a)
  super(*a)
  require 'webrick'
  @server = WEBrick::HTTPServer.new(:Port => port, :BindAddress => host, :MaxClients => maxConnections,
                                    :Logger => WEBrick::Log.new(stdlog))
  @server.mount("/", self)
end

Instance Method Details

#serve

Call this after you have added all you handlers to the server. This method starts the server to listen for XML-RPC requests and answer them.

[ GitHub ]

  
# File 'lib/xmlrpc/server.rb', line 584

def serve
  signals = %w[INT TERM HUP] & Signal.list.keys
  signals.each { |signal| trap(signal) { @server.shutdown } }

  @server.start
end

#shutdown

Stops and shuts the server down.

[ GitHub ]

  
# File 'lib/xmlrpc/server.rb', line 592

def shutdown
  @server.shutdown
end