def METHOD_NAME(self):
    """
    Called when the underlying action server receives a goal.
    If the default_result is None, it will wait for a custom result to be set via reply* otherwise
    return the default_result after the given default_result_delay
    In the reply-case,it then notifies self.reply* (which should be called by a test script outside this class),
    after which self.reply* determines the result to the goal.
    Then it notifies _execute_cb that the result has been determined so that _execute_cb can send it
    """
    print('\n########  {}.execute  ###########'.format(self._name))
    self._current_goal = self._as.accept_new_goal()
    self._received_goals.append(self._current_goal)
    try:
        goal_str = self.goal_formatter(self._current_goal)
    except Exception as e:
        rospy.logerr("goal_formatter of {} raised an exception: {}".format(self._name, e))
        goal_str = self._current_goal
    print('{}.execute: From {} to Goal: {}'.format(self._name, self.pose_bl, goal_str))
    if self.default_reply is not None:
        countdown_sleep(self._default_reply_delay, text="{}.execute: Wait for {}s. ".format(self._name, self._default_reply_delay) + "Remaining {}s...")
        self._call_pre_reply_callbacks(self._current_goal, self.default_reply)
        self._send_result(self.default_reply)
    else:
        self._request.set()
        # Now, wait for  to be called, which sets the _reply event AND the _next_reply
        self._reply.wait()
        self._reply.clear()
        self._call_pre_reply_callbacks(self._current_goal, self._next_reply)
        self._send_result(self._next_reply)
        self._next_reply = None
        self._current_goal = None
        self._sent.set()