Skip to content

File TestCohesion.java

File List > behaviour > evals > TestCohesion.java

Go to the documentation of this file

package skydata.behaviour.evals;

import java.time.Instant;

import jade.core.behaviours.CyclicBehaviour;
import jade.core.behaviours.TickerBehaviour;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
import skydata.internal.agents.SKAgent;
import skydata.internal.agents.SKD;
import skydata.internal.behaviours.SKAgentBehaviour;
import skydata.internal.message.SKLMessage;

public class TestCohesion extends SKAgentBehaviour {

    public TestCohesion(SKAgent agent) {
        super(agent);
    }

    @Override
    public void action() {
        SKD agent = (SKD) this.agent;
        // I send the test message
        TickerBehaviour tickerBehaviour = new TickerBehaviour(agent, 1000) {
            @Override
            public void onTick() {
                if (agent.getFamily().size() == 1) {
                    return;
                }
                agent.print("[COHESION_SEND] " + (agent.getFamilySize() - 1));
                SKLMessage msg = new SKLMessage("TEST", "COHESION");
                msg.setContent(Instant.now().toEpochMilli());
                agent.broadcastFamily(msg, false);
            }
        };
        agent.addBehaviour(tickerBehaviour);

        // I receive a test message
        MessageTemplate mtTest = MessageTemplate.and(
                MessageTemplate.MatchOntology("TEST"),
                MessageTemplate.and(
                        MessageTemplate.MatchPerformative(ACLMessage.INFORM),
                        MessageTemplate.MatchProtocol("COHESION")));
        agent.addBehaviour(new CyclicBehaviour(agent) {
            @Override
            public void action() {
                SKLMessage acl = agent.skReceive(mtTest);
                if (acl == null) {
                    block();
                    return;
                }
                agent.print("[COHESION_RECEIVE]");

            }
        });

    }

}