Class MsgReceiver

  • All Implemented Interfaces:
    Serializable, Serializable

    public class MsgReceiver
    extends SimpleBehaviour
    This behaviour is a simple implementation of a message receiver. It puts into the given key of the given datastore the received message according to the given message template and timeout. All these data must be passed in the constructor. If the timeout expires before any message arrives, the behaviour terminates and put null into the datastore.
    Version:
    $Date$ $Revision$
    Author:
    Tiziana Trucco - TILab
    See Also:
    Serialized Form
    • Field Detail

      • TIMEOUT_EXPIRED

        public static final int TIMEOUT_EXPIRED
        A numeric constant to mean that a timeout expired.
        See Also:
        Constant Field Values
      • INTERRUPTED

        public static final int INTERRUPTED
        A numeric constant to mean that the receive operation was interrupted.
        See Also:
        Constant Field Values
      • INFINITE

        public static final int INFINITE
        A numeric constant to mean that the deadline for the receive operation will never expire.
        See Also:
        Constant Field Values
      • deadline

        protected long deadline
      • receivedMsgKey

        protected Object receivedMsgKey
    • Constructor Detail

      • MsgReceiver

        public MsgReceiver​(Agent a,
                           MessageTemplate mt,
                           long deadline,
                           DataStore s,
                           Object msgKey)
        Constructor.
        Parameters:
        a - a reference to the Agent
        mt - the MessageTemplate of the message to be received, if null the first received message is returned by this behaviour
        deadline - a timeout for waiting until a message arrives. It must be expressed as an absolute time, as it would be returned by System.currentTimeMillisec()
        s - the dataStore for this bheaviour
        msgKey - the key where the beahviour must put the received message into the DataStore.
      • MsgReceiver

        protected MsgReceiver()
    • Method Detail

      • action

        public 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
      • done

        public 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.
      • onEnd

        public int onEnd()
        Description copied from class: Behaviour
        This method is just an empty placeholder for subclasses. It is invoked just once after this behaviour has ended. Therefore, it acts as an epilog for the task represented by this Behaviour.
        Note that onEnd is called after the behaviour has been removed from the pool of behaviours to be executed by an agent. Therefore calling reset() is not sufficient to cyclically repeat the task represented by this Behaviour. In order to achieve that, this Behaviour must be added again to the agent (using myAgent.addBehaviour(this)). The same applies to in the case of a Behaviour that is a child of a ParallelBehaviour.
        Overrides:
        onEnd in class Behaviour
        Returns:
        the performative if a message arrived, TIMEOUT_EXPIRED if the timeout expired or INTERRUPTED if this MsgReceiver was interrupted calling the interrupt() method.
      • handleMessage

        protected void handleMessage​(ACLMessage msg)
        This is invoked when a message matching the specified template is received or the timeout has expired (the msg parameter is null in this case). Users may redefine this method to react to this event. The default implementation of does nothing.
      • reset

        public void reset​(MessageTemplate mt,
                          long deadline,
                          DataStore s,
                          Object msgKey)
        Reset this behaviour, possibly replacing the receive templatt and other data.
        Parameters:
        mt - The template to match ACL messages against during the receive operation.
        deadline - The relative timeout of the receive operation. If the INFINITE constant is used, then no deadline is set and the operation will wait until a matching ACL message arrives.
        s - The datastore where the received ACL message is to be put.
        msgKey - The key to use to put the received message into the selected datastore.
      • setDeadline

        public void setDeadline​(long deadline)
        This method allows modifying the deadline
      • setTemplate

        public void setTemplate​(MessageTemplate mt)
        This method allows modifying the template
      • setReceivedKey

        public void setReceivedKey​(Object key)
        This method allows modifying the key in the DS where to put the received message
      • interrupt

        public void interrupt()
        Signal an interruption to this receiver, and cause the ongoing receive operation to abort.