Class WakerBehaviour

  • All Implemented Interfaces:
    Serializable, Serializable

    public abstract class WakerBehaviour
    extends SimpleBehaviour
    This abstract class implements a OneShot task that must be executed only one just after a given timeout is elapsed.

    The task is simply the call to the method handleElapsedTimeout() that must be implemented by all subclasses. Notice that the best practice in JADE is when this method just adds a behaviour to the agent class.

    All subclasses have available the protected variable myAgent that points to the agent class.

    The programmer must use this abstract class in this simple way:

    • implements a subclass that extends WakerBehaviour. This subclass must implement the method handleElapsedTimeout.
    • add the subclass to the list of behaviour of this agent by using addBehaviour() method.
    • the method handleElapsedTimeout must implement the task that will be executed after the timeout is elapsed.
    Version:
    $Date$ $Revision$
    Author:
    Fabio Bellifemine - CSELT S.p.A.
    See Also:
    Serialized Form
    • Constructor Detail

      • WakerBehaviour

        public WakerBehaviour​(Agent a,
                              Date wakeupDate)
        This method constructs the behaviour.
        Parameters:
        a - is the pointer to the agent
        wakeupDate - is the date when the task must be executed
      • WakerBehaviour

        public WakerBehaviour​(Agent a,
                              long timeout)
        This method constructs the behaviour.
        Parameters:
        a - is the pointer to the agent
        timeout - indicates the number of milliseconds after which the task must be executed
    • Method Detail

      • action

        public final void action()
        Description copied from class: Behaviour
        Runs the behaviour. This abstract method must be implemented by Behavioursubclasses to perform ordinary behaviour duty. An agent schedules its behaviours calling their action() method; since all the behaviours belonging to the same agent are scheduled cooperatively, this method must not enter in an endless loop and should return as soon as possible to preserve agent responsiveness. To split a long and slow task into smaller section, recursive behaviour aggregation may be used.
        Specified by:
        action in class Behaviour
        See Also:
        CompositeBehaviour
      • onWake

        protected void onWake()
        This method is invoked when the deadline defined in the constructor is reached (or when the timeout specified in the constructor expires). Subclasses are expected to define this method specifying the action that must be performed at that time.
      • handleElapsedTimeout

        protected void handleElapsedTimeout()
        Deprecated.
        Use onWake() instead
      • reset

        public void reset​(Date wakeupDate)
        This method must be called to reset the behaviour and starts again
        Parameters:
        wakeupDate - is the new time when the task must be executed again
      • reset

        public void reset​(long timeout)
        This method must be called to reset the behaviour and starts again
        Parameters:
        timeout - indicates in how many milliseconds from now the behaviour must be waken up again.
      • reset

        public void reset()
        This method must be called to reset the behaviour and starts again
        Overrides:
        reset in class SimpleBehaviour
      • stop

        public void stop()
        Make this WakerBehaviour terminate without calling the onWake() method. Calling stop() has the same effect as removing this WakerBehaviour, but is Thread safe
      • done

        public final boolean done()
        Description copied from class: Behaviour
        Check if this behaviour is done. The agent scheduler calls this method to see whether a Behaviour still need to be run or it has completed its task. Concrete behaviours must implement this method to return their completion state. Finished behaviours are removed from the scheduling queue, while others are kept within to be run again when their turn comes again.
        Specified by:
        done in class Behaviour
        Returns:
        true if the behaviour has completely executed.
      • getWakeupTime

        public final long getWakeupTime()