package siebog.interaction.bsp;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import javax.inject.Inject;
import siebog.agents.AID;
import siebog.agents.AgentBuilder;
import siebog.agents.AgentManagerBean;
import siebog.interaction.ACLMsgBuilder;
import siebog.interaction.Performative;
@Singleton
@LocalBean
public class BarrierManager {
@Inject
private AgentManagerBean agm;
public void register(String barrierName, AID aid) {
AID barrierAid = getBarrierAid(barrierName);
// @formatter:off
ACLMsgBuilder
.performative(Performative.SUBSCRIBE)
.receivers(barrierAid)
.contentObj(aid)
.post();
// @formatter:on
}
public void deregister(String barrierName, AID aid) {
AID barrierAid = getBarrierAid(barrierName);
// @formatter:off
ACLMsgBuilder
.performative(Performative.CANCEL)
.receivers(barrierAid)
.contentObj(aid)
.post();
// @formatter:on
}
public void agentCompletedSuperstep(Superstep superstep, AID aid) {
AID barrierAid = getBarrierAid(superstep.getBarrierName());
// @formatter:off
ACLMsgBuilder
.performative(Performative.INFORM)
.receivers(barrierAid)
.contentObj(aid)
.post();
// @formatter:on
}
private AID getBarrierAid(String barrierName) {
AID aid = agm.getAIDByRuntimeName(barrierName);
if (aid != null) {
return aid;
}
return AgentBuilder.siebog().ejb(BarrierBean.class).name(barrierName).start();
}
}