indexing description: "Provides a XML RPC server" license: "MIT license (see ../../license.txt)" author: "Beat Strasser " date: "$Date$" revision: "$Revision$" class O_XMLRPC_SERVER inherit GOA_HTTPD_SERVLET_APP rename make as httpd_make redefine run end GOA_SHARED_SERVICE_REGISTRY THREAD_CONTROL export {NONE} all end create make feature {NONE} -- Initialization make (a_port: INTEGER; a_logger: L4E_LOGGER) -- Create and configure new XML RPC server, don't start yet require Port_valid: a_port > 0 Logger_valid: a_logger /= Void do logger := a_logger create configuration configuration.set_server_port (a_port) configuration.set_document_root ("/tmp/xmlrpc/") httpd_make ("localhost", a_port, 10) register_servlets init_xmlrpc logger.info ("XML RPC server initialized, ready for running.") end feature -- Basic operations run is -- Start serving requests. Same as precursor, but *without* heavy busy waiting do from socket_multiplexer.errno.clear_all until socket_multiplexer.errno.is_not_ok -- TODO error_code = sock_err_select loop socket_multiplexer.multiplex if socket_multiplexer.number_of_fired_callbacks = 0 then if socket_multiplexer.errno.is_not_ok then log_hierarchy.logger (Internal_category).error ("Socket error: " + socket_multiplexer.errno.first_value.out) -- socket_multiplexer.errno.clear elseif socket_multiplexer.is_interrupted then io.put_character ('/') -- interrupted else debug ("status_output") io.put_character ('.') end end else debug ("status_output") io.put_character ('!') -- multiplexed end end -- no busy waiting! sleep (50000000) end socket_multiplexer.errno.clear_first end feature {NONE} -- Implementaion logger: L4E_LOGGER configuration: GOA_SERVLET_CONFIG -- Configuration for servlets register_servlets is -- Initialise servlets local servlet: GOA_XMLRPC_SERVLET do servlet_manager.set_servlet_mapping_prefix ("servlet") servlet_manager.set_config (configuration) create servlet.init (configuration) servlet_manager.register_servlet (servlet, "xmlrpc") servlet_manager.register_default_servlet (servlet) end init_xmlrpc is -- Initialize XML RP calls local system_services: GOA_XRPC_SYSTEM do -- XML RPC introspection service create system_services.make registry.register (system_services, "system") end end