/**
 * MensagensRecebidas.java
 *
 * @author Wanderson C. Bragança <wanderson.wbc@gmail.com>
 * @link http://www.wanderson.wordpress.com
 * @copyright Copyright © 2009
 * @version  14/04/2009
 */

import java.util.StringTokenizer;
import jade.core.*;
import jade.core.behaviours.*;
import jade.lang.acl.*;
import javax.swing.JOptionPane;

class MensagensRecebidas extends SimpleBehaviour {
    MensagensRecebidas(Agent a) {
        super(a);
    }
    
    public boolean done() {
        return false;
    }
    
    public void action() {
        ACLMessage msg;
        MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.REQUEST);
        
        // Pega uma mensagem da fila ou espera por uma nova se a fila estiver vazia
        msg = myAgent.receive(mt);
        if (msg == null) {
            block();
            return;
        } else {
            String replySentence = new String("");
            
            //Pega ação e executa
            StringTokenizer st = new StringTokenizer(msg.getContent(), " ()\t\n\r\f");
            String action = (st.nextToken()).toLowerCase();
            // SAIR
            if(action.equals("exit")){
                JOptionPane.showMessageDialog(null,"Recebido pedido para Sair");
                replySentence = new String("\"OK Saindo\"");
                myAgent.doDelete();
            }
            
            // MOVER-SE PARA UMA OUTRA POSIÇÃO
            else if (action.equals("move")) {
                String destination = st.nextToken();
                System.out.println();
                Location dest = new jade.core.ContainerID(destination, null);
                JOptionPane.showMessageDialog(null,"Recebido pedido para mover para " + destination);
                // Senten�a de resposta
                replySentence = new String("\"OK movendo para " + destination+" \"");
                // Prepara para mover
                ((SGRBA)myAgent).nextSite = dest;
                myAgent.doMove(dest);
            }
            // DIZ A POSIÇÃO ATUAL
            else if (action.equals("where-are-you")) {
                System.out.println();
                Location current = myAgent.here();
                JOptionPane.showMessageDialog(null,"Atualmente estou executando sobre " +current.getName());
                // Setença de resposta
                replySentence = current.getName();
            }            
            // Resposta
            ACLMessage replyMsg = msg.createReply();
            replyMsg.setPerformative(ACLMessage.INFORM);
            replyMsg.setContent(replySentence);
            myAgent.send(replyMsg);
        }
        
        return;
    }
}

