Skip to content

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);                 
                }
            }
        });

    }

}