code: public void onApplicationCommand(ZWaveControllerContext context, ApplicationCommand ac) {
          byte commandClassId = ac.getCommandClassId();
          CommandClass cc = getCommandClass(commandClassId);
          if (cc != null) {
              // if it's a BasicCommandClass instance, allow the node to perform any
              // required command mapping
              if (cc instanceof BasicCommandClass) {
                  cc = performBasicCommandClassMapping((BasicCommandClass)cc);
              }
  
              // allow the command class to process the frame
              cc.onApplicationCommand(new WrapperedNodeContext(context, this), ac.getCommandClassBytes(), 0);
  
              // if we received a VersionCommandClass and we've got pending responses, decrement the pending count
              // and change to next state if we've received all pending responses
              if (cc instanceof VersionCommandClass && nodeState == ZWaveNodeState.RetrieveVersionSent) {
                  pendingVersionResponses--;
                  if (pendingVersionResponses <= 0) {
                      setState(context, ZWaveNodeState.RetrieveStatePending);
                  }
                  // if we're waiting on state responses, decrement the pending count and change to next state if
                  // we've received all pending responses
              } else if (nodeState == ZWaveNodeState.RetrieveStateSent) {
                  pendingStatusResponses--;
                  if (pendingStatusResponses <= 0) {
                      setState(context, ZWaveNodeState.Started);
                  }
              }
          } else {
              logger.error("Received message for unsupported command class ID: {}", ByteUtil.createString(commandClassId));
          }
      }
docs: Called when an application command message is received for this specific node.
  
  @param context the context for processing the command
  @param ac the application command received