Skip to content

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

}