indexing description: "Origo Core Node" license: "MIT license (see ../../license.txt)" author: "Beat Strasser " date: "$Date$" revision: "$Revision$" class O_NODE_LOOKUP_MAIN inherit O_NODE redefine make_node, load_services, configure_loaded_peer_platform, main, stop end O_LOOKUP_CONSTANTS P2P_CREATORS_SHARED create make feature {NONE} -- Initialization make_node is -- Create specific node do if argument (2).is_integer then xmlrpc_port := argument (2).to_integer Precursor else io.put_string ("Usage: " + argument (0) + " ConfigDirectory Port") io.new_line end end load_services is -- Load Origo services components local lookup_server: LOOKUP_SERVICE do -- Initialize XML RPC server with lookup service create xmlrpc.make (xmlrpc_port, logger) create lookup_server.make xmlrpc.registry.register (lookup_server, lookup_service_name) -- create lookup service and advertisement create start_lookup_flag.make_empty create lookup_service.make (start_lookup_flag, lookup_advertisement, logger) end configure_loaded_peer_platform is -- Additional configuration steps after platform has been loaded local role_adv: O_SERVICE_ROLE_ADVERTISEMENT value_list: DS_ARRAYED_LIST [STRING] role_config: O_LOOKUP_SERVICE_CONFIGURATION do Precursor -- get peer module instance peer_module ?= opg.lookup_module (p2p_module_name) check Peer_module_loaded: peer_module /= Void end -- register lookup configuration creator xml_document_creator.extend_custom_creator ("OrigoLookupMainConfig", agent (a_root: XM_ELEMENT): O_LOOKUP_SERVICE_CONFIGURATION do create Result.make_from_element (a_root) end) -- create service configuration create value_list.make_from_array (<< vampeer.configuration.local_ip, xmlrpc_port.out >>) create role_config.make (value_list) -- create lookup service role Main advertisement create role_adv.make (opg.peer_id, lookup_service_type, lookup_service_name, lookup_service_main_role, {O_SERVICE_ROLE_ADVERTISEMENT}.status_initialized) role_adv.set_configuration (role_config) lookup_service.extend_role (role_adv) -- register service lookup_service.register (peer_module) logger.info ("Services loaded and configured") end main is -- Main routine local failed: BOOLEAN do if not failed then -- wait until lookup service is requested to start from until start_lookup_flag.count > 0 loop sleep (500000000) end logger.info ("Starting XML RPC server now") xmlrpc.run end logger.fatal ("XML RPC server crashed") rescue failed := True retry end stop is -- Stop node do -- unregister service if lookup_service /= Void and lookup_service.p2p_module /= Void then lookup_service.unregister end -- stop network Precursor peer_module := Void end feature -- Access lookup_service: O_LOOKUP_SERVICE_MAIN is_core: BOOLEAN is False xmlrpc_port: INTEGER Peer_name: STRING is -- Node's peer name do Result := "Origo Lookup Main" end Peer_description: STRING is -- Node's peer description do Result := lookup_service_description end expected_argument_count: INTEGER is 2 -- Number of expected arguments feature {NONE} -- Implementation peer_module: O_P2P_MODULE xmlrpc: O_XMLRPC_SERVER start_lookup_flag: STRING end