package examples.jsp;

import jade.core.*;
import jade.core.behaviours.*;
import jade.lang.acl.*;

/**
 * This agent is to be used in a JSP page. It just sends
 * messages to a buffer agent.
 */
public class Snooper extends Agent {
    private ACLMessage msg;

    public Snooper() {
	// Create the message to send to the client
        msg = new ACLMessage(ACLMessage.INFORM);
	System.out.println("Snooper created");
    }

    public void setup() {
      // Accept objects through the object-to-agent communication
      // channel, with a maximum size of 10 queued objects
      setEnabledO2ACommunication(true, 10);


      // Add a suitable cyclic behaviour...
      addBehaviour(new jade.core.behaviours.CyclicBehaviour() {
	      
	      public void action() {
		  System.out.println(" Trying... ");
		  Object obj = getO2AObject();
		  if(obj != null) {
		      System.out.println(" Snooping "+obj);
		      snoop(obj.toString());
		  } else { 
		      block();
		  }
	      }
      });
    }

    public void takeDown() {
      // Disables the object-to-agent communication channel, thus
      // waking up all waiting threads
      setEnabledO2ACommunication(false, 0);
    }


    /**
     * The method that will be invoked in the JSP page.
     * @param str the message to send to the client
     */
    public void snoop(String str) {
	// JADE 2.3
	msg.clearAllReceiver();
	msg.addReceiver(new AID("buffer",AID.ISLOCALNAME));
        // JADE 2.0: 
        // getHap() cannot be moved in the constructor because it would not 
	// work! each time the previous entry must be removed.
	// msg.clearAllReceiver();
	// msg.addReceiver(new AID("buffer@"+getHap()));
	// JADE 1.4:
	// msg.removeAllDests();
	//msg.addDest("buffer");
	msg.setContent(str);
	send(msg);
    }
}