code: private void doGroupStart(final JsonObject message) {
      String groupID = message.getString("group");
      String name = message.getString("name");
      String parentId = message.getString("parent");
      Object args = deserializer.deserialize(message);
      DefaultConnectionInputGroup group = new DefaultConnectionInputGroup(groupID, name, this);
      groups.put(groupID, group);
      if (parentId != null) {
        if (log.isDebugEnabled()) {
          log.debug(String.format("%s - Group started: Group[name=%s, group=%s, parent=%s, args=%s]", this, name, groupID, parentId, args));
        }
        if (currentBatch != null && parentId.equals(currentBatch.id())) {
          currentBatch.handleGroup(group);
        } else {
          DefaultConnectionInputGroup parent = groups.get(parentId);
          if (parent != null) {
            parent.handleGroup(group);
          }
        }
      } else {
        if (log.isDebugEnabled()) {
          log.debug(String.format("%s - Group started: Group[name=%s, group=%s, args=%s]", this, name, groupID, args));
        }
        // First check for a named group handler. If a named group handler isn't
        // registered then trigger the arbitrary group handler if one is registered.
        Handler<InputGroup> handler = groupHandlers.get(name);
        if (handler != null) {
          handler.handle(group);
        } else if (groupHandler != null) {
          groupHandler.handle(group);
        } else {
          groupReady(groupID);
        }
      }
      group.handleStart(args);
    }
docs: Handles a group start.