indexing description: "Rendezvous propagate example" license: "MIT license (see ../../license.txt)" author: "Beat Strasser " date: "$Date$" revision: "$Revision$" class RENDEZVOUS_PROPAGATE inherit L4E_PRIORITY_CONSTANTS THREAD_CONTROL ARGUMENTS create make feature {NONE} -- Initialization make is -- Create rendezvous propagate local vampeer: P2P_PLATFORM failed: BOOLEAN do if not failed and argument_count = 1 then -- Create stdout logger create_logger -- create vampeer platform vampeer := configure_platform if vampeer.module_status /= vampeer.init_failed then -- add incoming message filter for catching replies npg.endpoint_service.extend_service (service_name, Void, agent message_listener) -- now start platform vampeer.start if vampeer.module_status = vampeer.start_ok then -- wait for connection from until npg.rendezvous_service.is_connected loop sleep (250000000) end -- stay idle and propagate a ping message every 5 seconds from until not npg.rendezvous_service.is_connected loop propagate_message sleep (5000000000) end end end elseif argument_count /= 1 then io.put_string ("Usage: " + argument (0) + " ConfigDirectory") io.new_line end -- stop platform if vampeer /= Void and vampeer.module_status = vampeer.start_ok then vampeer.stop end rescue failed := True retry end feature -- Access logger: L4E_LOGGER npg: P2P_PEERGROUP service_name: STRING is "myservice" feature {NONE} -- Implementation create_logger is -- Create log hierarchy and set `logger' local log_hierarchy: L4E_HIERARCHY log_appender: L4E_APPENDER log_layout: L4E_DATE_TIME_LAYOUT do create log_hierarchy.make (info_p) logger := log_hierarchy.root create {L4E_STDOUT_APPENDER} log_appender.make ("stdoutapp") create log_layout log_appender.set_layout (log_layout) logger.add_appender (log_appender) ensure Logger_set: logger /= Void end configure_platform: P2P_PLATFORM is -- Configure platform and initialize net peer group local conf: P2P_CONFIGURATION do create Result.make (argument (1), logger) if not Result.is_configured then conf := Result.default_configuration conf.set_name ("rendezvous_propagate") conf.set_description ("Propagates messages and displays incoming messages for 'myservice'") Result.configure (conf) end if Result.is_configured then npg := Result.standard_net_peergroup end end propagate_message is -- Propagate a message local msg: P2P_MESSAGE msgel: P2P_MESSAGE_ELEMENT do create msg.make create msgel.make_string (msg.namespace_user, "PingMessage", Void, "Ping") msg.extend (msgel) npg.rendezvous_service.propagate_in_group (msg, service_name, Void, 10) end message_listener (msg: P2P_MESSAGE; src, dest: P2P_ENDPOINT_ADDRESS) is -- Listens for message reply do logger.info ("Incoming message from: " + src.out + " to: " + dest.out + ", message:%N" + msg.out) end end