How to offer a nano service

Service, van Gogh

Nano services are needed for three purposes:

  • Offering notifications.

    For a nano service, interested targets can register an observer. The notification trigger sends messages to the nano service, of which each observer receives a copy.
  • Operation of a tiny services

    The owner registers a nano service and registers himself as an observer. Clients of the service send a message to the nano service, which is forwarded to the owner. Advantage: The client does not need the address of the providing service.
  • Observation

    A silent observer can register an observer for a nano service and get copies of the messages to the service.

Prerequisite for the tutorial

You should have read these tutorials beforehand:
Package initialization
How to start a simple target
How to register a nano service
How to add an observer to a nano service

Preliminary work

As described in the tutorials, first a nano service is registered and then an observer with its own address is added.

Nano service message processing

Another message handler is added in the constructor.


The method of the message handler is implemented:

  • The data is fetched from the message if necessary.
  • The data will be verified.
  • Something will be done with it.
  • New data is placed in the message (the same message is returned as a response).
  • A result code is set.
  • After leaving the handler, the message is automatically sent back to the sender by the system (if the sender wishes a reply).
private boolean asyncStartApp(@NotNull final CEnvelope aEnvelope,
                              @NotNull final CRecord aRecord) throws CException
    // get preset name
    final String presetName = CRecordAppRunApplication.getPresetName(aRecord,
                                "Missing Preset Name.");

    // get remote skin client
    final CNodeAddress remoteSkinClient = CRecordAppRunApplication.getRemoteSkinClient(aRecord,

    // get session token
    final UUID sessionToken = CRecordAppRunApplication.getSessionToken(aRecord,
                            "Missing Session Token");

    // ...
    // Do something


    return true;
} - Innovative Distributed System