CRecordCliAddHandler

The message adds a handler for one or more console commands. When the user enters these commands, a message containing the input is sent to the registered handler. In response, the handler sends back a text that is displayed on the console.

This message is part of the console API. It is a nanoservice in the SYSTEM namespace.

{
  "id": "3eaa3a56-5a84-4f11-b2fc-62da19141013",
  "name": "CLI_ADD_HANDLER",
  "isService": "true",
  "namespaces": "SYSTEM",
  "description": "Add a Command Handler.",
  "slots": [
    {
      "key": "1",
      "name": "COMMAND",
      "direction": "REQUEST",
      "mandatory": "true",
      "type": "STRING_ARRAY",
      "description": "The commands."
    },
    {
      "key": "2",
      "name": "HELP",
      "direction": "REQUEST",
      "mandatory": "true",
      "type": "STRING_ARRAY",
      "description": "The help texts."
    }
  ]
}

Arguments

  • COMMAND is the command for which a handler should be registered. Multiple commands can be registered simultaneously; therefore, the argument is a string array.
  • HELP is a help text that is displayed for the command when "?" or "help" is entered on the command line. Multiple commands can be registered simultaneously; therefore, the argument is a string array.

The handler itself is identified by the sender address of the message.

Usage

The following method registers a command handler.

private void registerCliQuit() throws CException
{
    final CEnvelope env = CEnvelope.forLocalNanoService(CWellKnownNID.SYSTEM);
    final CRecord record = CRecordCliAddHandler.create();
    CRecordCliAddHandler.setCommand(record,
                                    new String[]{
                                            QUIT,
                                            EXIT
                                    });
    CRecordCliAddHandler.setHelp(record,
                                 new String[]{
                                         HELP_QUIT,
                                         HELP_QUIT
                                 });
    sendNotification(env,
                     record);
}

Subsequently, your target will receive messages of type CRecordCliHandle when the user enters one of the registered commands.

Registration of the message handler for CRecordCliHandle:

addMessageHandler(CRecordCliHandle.ID,
                  this::asyncCliHandle);

Example implementation of the handler:

private boolean asyncCliHandle(@NotNull final CEnvelope aEnvelope,
                               @NotNull final CRecord aRecord) throws CException
{
    if (aEnvelope.isAnswer())
    {
        return false;
    }
    else
    {
        final String command = CRecordCliHandle.getCommand(aRecord,
                                                           "");
        if (QUIT.equals(command) || EXIT.equals(command))
        {
            final String[] args = CRecordCliHandle.getArguments(aRecord,
                                                                null);
            if (args != null && args.length >= 1 && args[0] != null)
            {
                int exitCode = CUtilInteger.fromObject(args[0],
                                                    0);
            }
            shutDown(exitCode);
        }
        aEnvelope.setResultSuccess();
        return true;
    }
}

nyssr.net - Innovative Distributed System