From 7860e579747210d517d413f92f7fc1ed6c0f3b2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2EFernando=20S=C3=A1nchez?= Date: Thu, 26 Apr 2012 19:45:51 +0200 Subject: [PATCH] Added event subscription for asynchronous events --- .../services/socketio/SocketIOConnector.java | 75 ++++++++++++++++++- 1 file changed, 71 insertions(+), 4 deletions(-) diff --git a/src/java/es/upm/dit/gsi/sojason/services/socketio/SocketIOConnector.java b/src/java/es/upm/dit/gsi/sojason/services/socketio/SocketIOConnector.java index a8ec419..75ebbb7 100644 --- a/src/java/es/upm/dit/gsi/sojason/services/socketio/SocketIOConnector.java +++ b/src/java/es/upm/dit/gsi/sojason/services/socketio/SocketIOConnector.java @@ -8,6 +8,7 @@ import io.socket.SocketIOException; import jason.asSyntax.Literal; import java.net.MalformedURLException; +import java.util.HashMap; import java.util.logging.Logger; import net.sf.json.JSONArray; @@ -33,8 +34,11 @@ public class SocketIOConnector implements AsyncWebServiceConnector{ /** */ private Logger logger = Logger.getLogger("Web40SOJason." + SocketIOConnector.class.getName()); - private static SocketIO socket; - static IOCallback callback = new IOCallback() { + private SocketIO socket; + + private SOModel model; + + IOCallback callback = new IOCallback() { public void onMessage(JSONObject json, IOAcknowledge ack) { System.out.println("Message:" + json.toString()); @@ -62,7 +66,20 @@ public class SocketIOConnector implements AsyncWebServiceConnector{ @Override public void on(String event, IOAcknowledge ack, Object... args) { - + logger.info("Package ack'ed"); + JSONObject jso = new JSONObject(); + String name = (String) jso.get("id"); + String agName = ""; + if(agentsID.containsKey(name)){ + agName = agentsID.get(name); + } + else if(agentsEvent.containsKey(event)){ + agName = agentsEvent.get(event); + } + String str = CollectionUtils.toPercepts(jso); + Literal lit = Literal.parseLiteral(str); + model.setDataInbox(agName, lit); + logger.info("DataInbox set to "+str); } @Override @@ -71,12 +88,18 @@ public class SocketIOConnector implements AsyncWebServiceConnector{ } }; + private HashMap agentsID; + private HashMap agentsEvent; //TODO Remove try-catch /** Constructor */ - public SocketIOConnector(String serviceUrl) { + public SocketIOConnector(String serviceUrl, SOModel model) { + this.model = model; this.serviceUrl = serviceUrl; + this.agentsID = new HashMap(); + this.agentsEvent = new HashMap(); + try { socket = new SocketIO(); @@ -131,4 +154,48 @@ public class SocketIOConnector implements AsyncWebServiceConnector{ return true; } + + public void addAgentForID(String name, String id){ + agentsID.put(name, id); + } + + public void removeAgentForID(String name){ + agentsID.remove(name); + } + + + public void removeAgentsForID(String id){ + for(String key : agentsID.keySet()){ + if(agentsID.get(key).equals(id)){ + agentsID.remove(id); + } + } + } + public void addAgentForEvent(String name, String id){ + agentsEvent.put(name, id); + } + + public void removeAgentForEvent(String name){ + agentsEvent.remove(name); + } + + public void removeAgentsForEvent(String id){ + for(String key : agentsEvent.keySet()){ + if(agentsEvent.get(key).equals(id)){ + agentsEvent.remove(id); + } + } + } + public void removeAgentsByName(String name){ + for(String key : agentsEvent.keySet()){ + if(agentsEvent.get(key).equals(name)){ + agentsEvent.remove(name); + } + } + for(String key : agentsID.keySet()){ + if(agentsID.get(key).equals(name)){ + agentsID.remove(name); + } + } + } }