Adding support for a new middleware to MORSE

Adding a datastream manager

When you want to add a new middleware to MORSE, you must first create a ‘datastream’ manager. Basically, its role is to make the link between components and a datastream handler. From an implementation point of view, it must be a subclass of the morse.core.datastream.DatastreamManager. In addition to reimplementing the __init__ and __del__ methods, you may want to override the morse.core.datastream.DatastreamManager.register_component() method which actually includes the registration logic. However, in general, the default implementation should be adequate. You can find some examples of overriding in morse.middleware.socket_datastream.Socket.register_component() where we store additional information to cater for different services.

If you need to run some general datastream/middleware code once per simulation loop, you can also override the morse.core.datastream.DatastreamManager.action`() method.

Module Organisation

To match the MORSE organisation, we expect the following file hierarchy:

  • in morse.middleware, a file <your_middleware>_datastream.py which contains the datastream manager for your middleware.
  • in morse.middleware.your_middleware, a set of files implementing different datastream handlers (see Adding a new datastream handler) for different messages. It is recommended that you abstract generic handling of your middleware into two base classes (Publisher and Reader).

The builder part

To facilitate the use of your middleware, you can add some entries in morse.builder.data. In particular, you need to add an entry for your datastream manager in morse.builder.data.MORSE_DATASTREAM_MODULE, and add the necessary entries for the different datastream handlers in morse.builder.data.MORSE_DATASTREAM_DICT.