File Basic.java¶
File List > algorithm > migration > Basic.java
Go to the documentation of this file
package skydata.behaviour.algorithm.migration;
import jade.core.AID;
import jade.core.behaviours.CyclicBehaviour;
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 Basic extends SKAgentBehaviour {
private SKD skd;
public Basic(SKAgent agent) {
super(agent);
skd = (SKD) agent;
}
@Override
public void action() {
// When an agent wishes to migrate
SKAgentBehaviour whenWantMigrate = new SKAgentBehaviour(agent) {
@Override
public void actionWithParameters(Object o) {
AID harbour = (AID) o;
skd.migrate(harbour, true);
}
};
skd.addInternalUpdate("WANT_MIGRATE", whenWantMigrate);
// When an agent has finished migrating
SKAgentBehaviour afterMigration = new SKAgentBehaviour(agent) {
public void action() {
SKLMessage message = new SKLMessage("UPDATE_POSITION", "MIGRATION");
skd.broadcastFamily(message);
}
};
skd.addInternalUpdate("AFTER_MIGRATION", afterMigration);
// when you receive someone update
MessageTemplate mtUpdate = MessageTemplate.and(
MessageTemplate.MatchProtocol("MIGRATION"),
MessageTemplate.and(
MessageTemplate.MatchPerformative(ACLMessage.INFORM),
MessageTemplate.MatchOntology("UPDATE_POSITION")));
skd.addBehaviour(new CyclicBehaviour(skd) {
@Override
public void action() {
SKLMessage msg = skd.skReceive(mtUpdate);
if (msg == null) {
block();
return;
}
skd.updatePositionFamily(msg.getSender());
}
});
}
}