Skip to content

File FaultSimulator.java

File List > behaviour > evals > FaultSimulator.java

Go to the documentation of this file

package skydata.behaviour.evals;

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.SKAID;
import skydata.internal.message.SKLMessage;


public class FaultSimulator extends SKAgentBehaviour {

    private SKAID creator;


    public FaultSimulator(SKAgent agent) {
        super(agent);
        String name = (String)agent.args.get("failure_creator");
        String harbourPosition = name.split("@")[1];
        for(SKAID h : agent.connectedHarbours()) {
            if(h.getName().split("@")[1].equals(harbourPosition)) {
                creator = new SKAID(name, h.getAddress());
                agent.print("found");
                break;
            }
        }
        agent.print(creator.toString());
    }

    @Override
    public void action() {
        SKD agent = (SKD)this.agent;

        SKLMessage announce = new SKLMessage("ANNOUNCE", "FAILURE_SIMULATOR");
        announce.addReceiver(creator);
        agent.skSendNormal(announce);

        agent.addBehaviour(new TickerBehaviour(agent, 5000) {
            @Override
            public void onTick() {
                SKLMessage request = new SKLMessage("REQUEST", "FAILURE_SIMULATOR");
                request.addReceiver(creator);
                agent.skSendNormal(request);
            }
        });

        MessageTemplate mtAnnounce = MessageTemplate.and(
                MessageTemplate.MatchOntology("ANSWER"),
                MessageTemplate.and(
                        MessageTemplate.MatchPerformative(ACLMessage.INFORM),
                        MessageTemplate.MatchProtocol("FAILURE_SIMULATOR")));
        agent.addBehaviour(new CyclicBehaviour(agent) {
            @Override
            public void action() {
                SKLMessage acl = agent.skReceive(mtAnnounce);
                if (acl == null) {
                    block();
                    return;
                }
                if((Boolean)acl.getContent()) {
                    agent.print("[CRASH]");
                    int a = 1/0;
                }
            }
        });

    }

}