|
From: <jom...@us...> - 2011-03-08 23:39:29
|
Revision: 1634
http://jason.svn.sourceforge.net/jason/?rev=1634&view=rev
Author: jomifred
Date: 2011-03-08 23:39:22 +0000 (Tue, 08 Mar 2011)
Log Message:
-----------
Ignore tell messages answering a synchronous ask if it is received after timeout
Modified Paths:
--------------
trunk/src/jason/asSemantics/Message.java
trunk/src/jason/asSemantics/TransitionSystem.java
trunk/src/jason/stdlib/send.java
Modified: trunk/src/jason/asSemantics/Message.java
===================================================================
--- trunk/src/jason/asSemantics/Message.java 2011-03-08 23:00:33 UTC (rev 1633)
+++ trunk/src/jason/asSemantics/Message.java 2011-03-08 23:39:22 UTC (rev 1634)
@@ -43,11 +43,14 @@
public final static String[] knownPerformatives = {"tell","untell","achieve","unachieve","askOne","askAll","tellHow", "untellHow","askHow"};
+ public final static String msgIdPrefix = "mid";
+ public final static String msgIdSyncAskPrefix = "midsa";
+
public Message() {
}
public Message(String ilf, String s, String r, Object c) {
- this(ilf, s, r, c, "mid"+(idCount++));
+ this(ilf, s, r, c, msgIdPrefix+(idCount++));
}
public Message(String ilf, String s, String r, Object c, String id) {
@@ -57,7 +60,6 @@
propCont = c;
msgId = id;
}
-
public Message(Message m) {
ilForce = m.ilForce;
@@ -67,6 +69,10 @@
msgId = m.msgId;
inReplyTo= m.inReplyTo;
}
+
+ public void setSyncAskMsgId() {
+ msgId = msgIdSyncAskPrefix+(idCount++);
+ }
public String getIlForce() {
return ilForce;
@@ -90,6 +96,10 @@
public boolean isUnTell() {
return ilForce.startsWith("untell");
}
+
+ public boolean isReplyToSyncAsk() {
+ return inReplyTo != null && inReplyTo.startsWith(msgIdSyncAskPrefix);
+ }
public boolean isKnownPerformative() {
for (String s: knownPerformatives) {
Modified: trunk/src/jason/asSemantics/TransitionSystem.java
===================================================================
--- trunk/src/jason/asSemantics/TransitionSystem.java 2011-03-08 23:00:33 UTC (rev 1633)
+++ trunk/src/jason/asSemantics/TransitionSystem.java 2011-03-08 23:39:22 UTC (rev 1634)
@@ -286,17 +286,21 @@
// the message is not an ask answer
} else if (conf.ag.socAcc(m)) {
- // generate an event
- String sender = m.getSender();
- if (sender.equals(agArch.getAgName()))
- sender = "self";
- Literal received = new LiteralImpl("kqml_received").addTerms(
- new Atom(sender),
- new Atom(m.getIlForce()),
- content,
- new Atom(m.getMsgId()));
-
- updateEvents(new Event(new Trigger(TEOperator.add, TEType.achieve, received), Intention.EmptyInt));
+ if (! m.isReplyToSyncAsk()) { // ignore answer after the timeout
+ // generate an event
+ String sender = m.getSender();
+ if (sender.equals(agArch.getAgName()))
+ sender = "self";
+ Literal received = new LiteralImpl("kqml_received").addTerms(
+ new Atom(sender),
+ new Atom(m.getIlForce()),
+ content,
+ new Atom(m.getMsgId()));
+
+ updateEvents(new Event(new Trigger(TEOperator.add, TEType.achieve, received), Intention.EmptyInt));
+ } else {
+ logger.fine("Ignoring message "+m+" because it is received after the timeout.");
+ }
}
}
}
Modified: trunk/src/jason/stdlib/send.java
===================================================================
--- trunk/src/jason/stdlib/send.java 2011-03-08 23:00:33 UTC (rev 1633)
+++ trunk/src/jason/stdlib/send.java 2011-03-08 23:39:22 UTC (rev 1634)
@@ -157,6 +157,7 @@
// async ask has a fourth argument and should suspend the intention
lastSendWasSynAsk = m.isAsk() && args.length > 3;
if (lastSendWasSynAsk) {
+ m.setSyncAskMsgId();
ts.getC().addPendingIntention(m.getMsgId(), ts.getC().getSelectedIntention());
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|