File CleanMessagesBuffer.java¶
File List > behaviours > CleanMessagesBuffer.java
Go to the documentation of this file
package skydata.internal.behaviours;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import jade.core.behaviours.TickerBehaviour;
import skydata.internal.agents.SKAgent;
import skydata.internal.message.SKLMessage;
public class CleanMessagesBuffer extends SKAgentBehaviour {
public CleanMessagesBuffer(SKAgent agent){
super(agent);
}
@Override
public void action() {
long messageDelayInBuffer = (Integer)(this.agent.args.getOrDefault("messageDelayInBuffer", 10000));
agent.addBehaviour(new TickerBehaviour(this.agent, 5000){
@Override
protected void onTick(){
long now = Instant.now().toEpochMilli();
// Remove too old sent messages
for (Entry<String, HashMap<String, SKLMessage>> msgs : agent.getMsgInfoBF().entrySet()) {
msgs.getValue().entrySet().removeIf(entry -> {
SKLMessage msg = entry.getValue();
if (now - msg.getArrivalDate() > messageDelayInBuffer * 1000) {
msg.removeReceiver(msgs.getKey());
return true;
}
return false;
});
}
for (Map.Entry<String, HashMap<String, Long>> member : agent.getReceivedMsgs().entrySet()) {
member.getValue().entrySet().removeIf(d -> now - d.getValue() > messageDelayInBuffer * 1000);
}
}
});
}
}