File ReceiveOnReliableSend.java¶
File List > behaviours > ReceiveOnReliableSend.java
Go to the documentation of this file
package skydata.internal.behaviours;
import java.util.HashMap;
import jade.core.behaviours.CyclicBehaviour;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
import skydata.internal.agents.SKAgent;
import skydata.internal.message.SKLMessage;
public class ReceiveOnReliableSend extends SKAgentBehaviour {
public ReceiveOnReliableSend(SKAgent agent) {
super(agent);
}
@Override
public void action() {
MessageTemplate messageAck = MessageTemplate.and(
MessageTemplate.MatchOntology("ACK"),
MessageTemplate.and(
MessageTemplate.MatchProtocol("RELIABLE_SEND"),
MessageTemplate.MatchPerformative(ACLMessage.INFORM)));
agent.addBehaviour(new CyclicBehaviour(this.agent) {
@Override
public void action() {
SKLMessage acl = agent.skReceive(messageAck);
if (acl != null) {
String msg_id = (String) acl.getContent();
HashMap<String, SKLMessage> msgs = agent.getMsgInfoBF().getOrDefault(acl.getSender().getName(),
null);
if (msgs != null) {
SKLMessage m = msgs.get(msg_id);
if(m != null) {
m.removeReceiver(acl.getSender().getName());
msgs.remove(msg_id);
}
}
} else {
block();
}
}
});
}
}