Details
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalRequestPlan.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalRequestPlan.java
index 0880cb8..4adad51 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalRequestPlan.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalRequestPlan.java
@@ -62,7 +62,7 @@ import br.ufrgs.inf.bdinetr.domain.ontology.BDINetROntology;
*/
public class GoalRequestPlan extends DefaultPlan {
- public class PlanBody extends AbstractPlanBody {
+ public class GoalRequestPlanBody extends AbstractPlanBody {
private static final long serialVersionUID = -1833810388789537049L;
private int answers;
@@ -164,10 +164,11 @@ public class GoalRequestPlan extends DefaultPlan {
if (reply != null) {
this.answers++;
if (ACLMessage.PROPOSE == reply.getPerformative()) {
- log.info("Agent " + reply.getSender() + " sent a proposal.");
+ log.info("Agent " + reply.getSender().getLocalName()
+ + " sent a proposal.");
positiveAnswers.add(reply);
} else {
- log.info("Agent " + reply.getSender()
+ log.info("Agent " + reply.getSender().getLocalName()
+ " refused the request.");
}
} else {
@@ -196,7 +197,7 @@ public class GoalRequestPlan extends DefaultPlan {
msg.addReceiver(agentDesc.getName());
}
}
- log.info(receivers);
+ log.info("Number of requests: " + receivers.size());
GoalRequest request = new GoalRequest();
if (getGoal() instanceof BeliefPresentGoal) {
@@ -252,11 +253,11 @@ public class GoalRequestPlan extends DefaultPlan {
.getConversationId()), MessageTemplate
.MatchInReplyTo(reply.getReplyWith()));
log.info("Accepted proposal of agent: "
- + answer.getSender());
+ + answer.getSender().getLocalName());
} else {
reply.setPerformative(ACLMessage.REJECT_PROPOSAL);
log.info("Rejected proposal of agent: "
- + answer.getSender());
+ + answer.getSender().getLocalName());
}
this.myAgent.send(reply);
}
@@ -272,6 +273,7 @@ public class GoalRequestPlan extends DefaultPlan {
private Capability capability;
private Predicate<?> predicate;
+ private boolean done;
public ReceiveUpdatesBehavior(Agent agent, MessageTemplate mt,
Capability capability, Predicate<?> predicate) {
@@ -279,6 +281,7 @@ public class GoalRequestPlan extends DefaultPlan {
ReceiveUpdatesBehavior.class.getSimpleName());
this.capability = capability;
this.predicate = predicate;
+ this.done = false;
}
@Override
@@ -296,7 +299,7 @@ public class GoalRequestPlan extends DefaultPlan {
} else {
log.info("Predicate removed: " + predicate);
// capability.getBeliefBase().removeBelief(predicate.getName());
- myAgent.removeBehaviour(this);
+ this.done = true;
}
}
} catch (Exception exc) {
@@ -306,6 +309,11 @@ public class GoalRequestPlan extends DefaultPlan {
}
}
+ @Override
+ public boolean done() {
+ return done;
+ }
+
}
class RequestDescription {
@@ -325,13 +333,13 @@ public class GoalRequestPlan extends DefaultPlan {
AchievingGoal, Ended, ReceivingResponses, Resquesting, Selecting;
}
- public static final int ANSWER_TIME_OUT = 30000;
+ public static final int ANSWER_TIME_OUT = 15000;
private static final Log log = LogFactory.getLog(GoalRequestPlan.class);
public static final int MSG_TIME_OUT = 10000;
private Map<GoalTemplate, RequestDescription> requestDescriptions;
public GoalRequestPlan() {
- super(PlanBody.class);
+ super(GoalRequestPlanBody.class);
this.requestDescriptions = new HashMap<>();
}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalResponsePlan.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalResponsePlan.java
index 3375fc4..e4af606 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalResponsePlan.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalResponsePlan.java
@@ -55,7 +55,8 @@ import br.ufrgs.inf.bdinetr.domain.message.GoalResponse;
*/
public class GoalResponsePlan extends DefaultPlan {
- public class PlanBody extends AbstractPlanBody implements BeliefListener {
+ public class GoalResponsePlanBody extends AbstractPlanBody implements
+ BeliefListener {
private static final long serialVersionUID = -4231465068344668721L;
@@ -68,6 +69,7 @@ public class GoalResponsePlan extends DefaultPlan {
private Predicate<?> predicate;
private GoalRequest<?> request;
private State state;
+ private long responseTime;
private void achieveBeliefGoal() throws Exception {
GoalEvent event = getGoalEvent();
@@ -156,7 +158,7 @@ public class GoalResponsePlan extends DefaultPlan {
}
} else {
Boolean currentValue = predicate.getValue();
- if (currentValue != lastValue) {
+ if (!currentValue.equals(lastValue)) {
try {
ACLMessage reply = acceptProposalMsg.createReply();
reply.setPerformative(ACLMessage.INFORM);
@@ -167,6 +169,7 @@ public class GoalResponsePlan extends DefaultPlan {
myAgent.getContentManager()
.fillContent(reply, response);
this.myAgent.send(reply);
+ this.lastValue = currentValue;
} catch (Exception exc) {
log.error(exc);
exc.printStackTrace();
@@ -194,12 +197,20 @@ public class GoalResponsePlan extends DefaultPlan {
return;
}
} else {
- block();
+ long timeElapsed = System.currentTimeMillis() - responseTime;
+ if (timeElapsed >= ANSWER_TIME_OUT) {
+ setEndState(EndState.SUCCESSFUL);
+ log.info("No answer received... ending plan.");
+ } else {
+ block(ANSWER_TIME_OUT);
+ }
}
}
private void sendResponse() throws Exception {
- log.info(beliefGoalMsg);
+ this.responseTime = System.currentTimeMillis();
+
+ log.info(beliefGoalMsg.getContent());
this.request = (GoalRequest<?>) myAgent.getContentManager()
.extractContent(beliefGoalMsg);
if (request.getBeliefGoal()) {
@@ -225,7 +236,7 @@ public class GoalResponsePlan extends DefaultPlan {
ACLMessage reply = beliefGoalMsg.createReply();
reply.setPerformative(canAchieve ? ACLMessage.PROPOSE
: ACLMessage.REFUSE);
- reply.setReplyWith("per" + System.currentTimeMillis());
+ reply.setReplyWith("per" + responseTime);
// TODO set proposal cost
Random r = new Random(System.currentTimeMillis());
@@ -234,8 +245,8 @@ public class GoalResponsePlan extends DefaultPlan {
myAgent.send(reply);
- log.info("Agent " + myAgent + " can achieve " + goal + ": "
- + canAchieve);
+ log.info("Agent " + myAgent.getLocalName() + " can achieve " + goal
+ + ": " + canAchieve);
this.mt = MessageTemplate.and(MessageTemplate
.MatchConversationId(reply.getConversationId()),
@@ -255,6 +266,7 @@ public class GoalResponsePlan extends DefaultPlan {
}
private static final Log log = LogFactory.getLog(GoalResponsePlan.class);
+ public static final int ANSWER_TIME_OUT = 15000;
public GoalResponsePlan() {
super(new MessageTemplate(new MatchExpression() {
@@ -271,7 +283,7 @@ public class GoalResponsePlan extends DefaultPlan {
return false;
}
}
- }), PlanBody.class);
+ }), GoalResponsePlanBody.class);
}
}
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
index 3c40ced..75b920b 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
@@ -73,10 +73,13 @@ public class BDINetRApp {
Set<Router> routers = new HashSet<>();
routers.add(new Router(new Ip("RouterLM"), Role.LINK_MONITOR.getId()));
- routers.add(new Router(new Ip("RouterRL1"), Role.RATE_LIMITER.getId()));
- routers.add(new Router(new Ip("RouterRL2"), Role.RATE_LIMITER.getId()));
- routers.add(new Router(new Ip("RouterADFC"), Role.CLASSIFIER.getId()
- | Role.FLOW_EXPORTER.getId() | Role.ANOMALY_DETECTION.getId()));
+ routers.add(new Router(new Ip("RouterRL"), Role.RATE_LIMITER.getId()));
+ routers.add(new Router(new Ip("RouterRL+FE"), Role.RATE_LIMITER.getId()
+ | Role.FLOW_EXPORTER.getId()));
+ routers.add(new Router(new Ip("RouterAD"), Role.ANOMALY_DETECTION
+ .getId()));
+ routers.add(new Router(new Ip("RouterCL"), Role.CLASSIFIER.getId()));
+ routers.add(new Router(new Ip("RouterEX"), Role.FLOW_EXPORTER.getId()));
Link affectedLink = new Link("AFFECTED_LINK");