File UpdateStatsHarbour.java¶
File List > behaviours > UpdateStatsHarbour.java
Go to the documentation of this file
package skydata.internal.behaviours;
import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
import jade.core.behaviours.CyclicBehaviour;
import jade.core.behaviours.TickerBehaviour;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
import jade.lang.acl.UnreadableException;
import skydata.internal.agents.SKAgent;
import skydata.internal.agents.SKD;
import skydata.internal.message.SKAID;
import skydata.internal.message.SKLMessage;
public class UpdateStatsHarbour extends SKAgentBehaviour {
public UpdateStatsHarbour(SKAgent agent) {
super(agent);
}
@SuppressWarnings("rawtypes")
@Override
public void action() {
SKD agent = (SKD) this.agent;
HashMap<SKAID, HashMap<String, Comparable>> harboursStats = agent.getHarboursStats();
String[] wantedStats = new String[] { "available", "capacity" };
// Regularly, we ask the information
agent.addBehaviour(new TickerBehaviour(agent, 5000) {
@Override
public void onTick() {
SKLMessage request = new SKLMessage("STATS_REQUEST", "HARBOUR");
for (SKAID harbour : agent.connectedHarbours()) {
request.addReceiver(harbour);
}
request.setContent((Serializable) wantedStats);
agent.skSendNormal(request);
}
});
// Manage the reception
MessageTemplate mtStats = MessageTemplate.and(
MessageTemplate.MatchOntology("STATS_RESPONSE"),
MessageTemplate.and(
MessageTemplate.MatchProtocol("HARBOUR"),
MessageTemplate.MatchPerformative(ACLMessage.INFORM)));
agent.addBehaviour(new CyclicBehaviour(agent) {
@SuppressWarnings("unchecked")
@Override
public void action() {
SKLMessage acl = agent.skReceive(mtStats);
if (acl != null) {
SKAID sender = acl.getSender();
HashMap<String, Comparable> hashMapContent = (HashMap<String, Comparable>) acl.getContent();
harboursStats.put(sender, hashMapContent);
} else {
block();
}
}
});
}
}