+ Represents an Xapp that reacts only to RMR messages; i.e., when
+ messages are received, the Xapp does something. When run is called,
+ the xapp framework waits for RMR messages, and calls the appropriate
+ client-registered consume callback on each.
+
+ If environment variable CONFIG_FILE_ENV is defined, and that value is a
+ path to an existing file, the configuration-change handler is invoked at
+ startup and on each configuration-file write event. If no handler is
+ supplied, this class defines a default handler that logs each invocation.
+
+ Parameters
+ ----------
+ default_handler: function
+ A function with the signature (summary, sbuf) to be called
+ when a message type is received for which no other handler is registered.
+ default_handler argument summary: dict
+ The RMR message summary, a dict of key-value pairs
+ default_handler argument sbuf: ctypes c_void_p
+ Pointer to an RMR message buffer. The user must call free on this when done.
+ config_handler: function (optional, default is documented above)
+ A function with the signature (json) to be called at startup and each time
+ a configuration-file change event is detected. The JSON object is read from
+ the configuration file, if the prerequisites are met.
+ config_handler argument json: dict
+ The contents of the configuration file, parsed as JSON.
+ rmr_port: integer (optional, default is 4562)
+ Initialize RMR to listen on this port
+ rmr_wait_for_ready: boolean (optional, default is True)
+ Wait for RMR to signal ready before starting the dispatch loop
+ use_fake_sdl: boolean (optional, default is False)
+ Use an in-memory store instead of the real SDL service
+ post_init: function (optional, default None)
+ Run this function after the app initializes and before the dispatch loop starts;
+ its signature should be post_init(self)