From 669090a1b2247c05d9d271f453ae2895954d6b8f Mon Sep 17 00:00:00 2001 From: SebastianEbert <sebastian.ebert@tu-dresden.de> Date: Thu, 18 Nov 2021 18:14:10 +0100 Subject: [PATCH] compatibility for new ragconnect version (java backend), working on ros backend --- .../src/main/resources/JavaHandler.jadd | 22 ++--- .../src/main/resources/RosHandler.jadd | 89 +++++++++++++++++++ .../main/resources/receiveDefinition.mustache | 2 +- .../main/resources/sendDefinition.mustache | 5 +- 4 files changed, 105 insertions(+), 13 deletions(-) create mode 100644 ragconnect.base/src/main/resources/RosHandler.jadd diff --git a/ragconnect.base/src/main/resources/JavaHandler.jadd b/ragconnect.base/src/main/resources/JavaHandler.jadd index 5849b61..1ba24cb 100644 --- a/ragconnect.base/src/main/resources/JavaHandler.jadd +++ b/ragconnect.base/src/main/resources/JavaHandler.jadd @@ -3,7 +3,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Consumer; +import java.util.function.BiConsumer; aspect JavaHandler { @@ -16,7 +16,7 @@ aspect JavaHandler { private final org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(JavaHandler.class); - private Map<String, List<org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>>>> callbackList = new ConcurrentHashMap<>(); + private Map<String, List<org.apache.commons.lang3.tuple.Pair<String, BiConsumer<String, byte[]>>>> callbackList = new ConcurrentHashMap<>(); private JavaHandler() { @@ -29,16 +29,16 @@ aspect JavaHandler { return JAVA_HANDLER_INSTANCE; } - public String registerCallback(String topic, Consumer<byte[]> callback) { + public String registerCallback(String topic, BiConsumer<String, byte[]> callback) { logger.debug("[JAVA_HANDLER] Registering new callback."); String callbackUUID = java.util.UUID.randomUUID().toString(); - List<org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>>> registeredCallbacks = getAllCallbacks().get(topic); + List<org.apache.commons.lang3.tuple.Pair<String, BiConsumer<String, byte[]>>> registeredCallbacks = getAllCallbacks().get(topic); if(registeredCallbacks == null){ - List<org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>>> newCallbackList = Collections.synchronizedList(new ArrayList<>()); + List<org.apache.commons.lang3.tuple.Pair<String, BiConsumer<String, byte[]>>> newCallbackList = Collections.synchronizedList(new ArrayList<>()); newCallbackList.add(new org.apache.commons.lang3.tuple.MutablePair<>(callbackUUID, callback)); callbackList.put(topic, newCallbackList); } else { @@ -52,12 +52,12 @@ aspect JavaHandler { logger.debug("[JAVA_HANDLER] Unregistering callback with uuid: " + uuid + " on path: " + path); - List<org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>>> callbacks = getAllCallbacks().get(path); + List<org.apache.commons.lang3.tuple.Pair<String, BiConsumer<String, byte[]>>> callbacks = getAllCallbacks().get(path); int count = 0; if(callbacks != null){ - for(org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>> callbackPair : callbacks){ + for(org.apache.commons.lang3.tuple.Pair<String, BiConsumer<String, byte[]>> callbackPair : callbacks){ if(callbackPair.getLeft().equals(uuid)){ callbacks.remove(count); return true; @@ -79,22 +79,22 @@ aspect JavaHandler { logger.info("[JAVA_HANDLER] Data: " + dataString); - List<org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>>> callbacks = getAllCallbacks().get(topic); + List<org.apache.commons.lang3.tuple.Pair<String, BiConsumer<String, byte[]>>> callbacks = getAllCallbacks().get(topic); if(callbacks == null){ logger.error("[JAVA_HANDLER] Could not publish message. No callback registered for topic " + topic); return false; } - for(org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>> callbackPair : callbacks){ + for(org.apache.commons.lang3.tuple.Pair<String, BiConsumer<String, byte[]>> callbackPair : callbacks){ logger.debug("[JAVA_HANDLER] Calling callback: " + callbackPair.getLeft()); - callbackPair.getRight().accept(data); + callbackPair.getRight().accept(topic, data); } return true; } - public Map<String, List<org.apache.commons.lang3.tuple.Pair<String, Consumer<byte[]>>>> getAllCallbacks() { + public Map<String, List<org.apache.commons.lang3.tuple.Pair<String, BiConsumer<String, byte[]>>>> getAllCallbacks() { return callbackList; } } diff --git a/ragconnect.base/src/main/resources/RosHandler.jadd b/ragconnect.base/src/main/resources/RosHandler.jadd new file mode 100644 index 0000000..5830c8e --- /dev/null +++ b/ragconnect.base/src/main/resources/RosHandler.jadd @@ -0,0 +1,89 @@ +import org.apache.commons.lang3.tuple.Pair; +import org.ros.concurrent.CancellableLoop; +import org.ros.namespace.GraphName; +import org.ros.node.AbstractNodeMain; +import org.ros.node.ConnectedNode; +import org.ros.node.topic.Publisher; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiConsumer; + +import org.ros.node.*; +import org.ros.node.NodeMainExecutor; + +import java.net.URI; +import java.net.URISyntaxException; + +aspect RosHandler { + + public class RosHandler { + + public static RosHandler ROS_HANDLER_INSTANCE = null; + private final org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(RosHandler.class); + List<Pair<String, RosDefaultPublisher>> publishers = new ArrayList<>(); + + NodeMainExecutor nodeMainExecutor = DefaultNodeMainExecutor.newDefault(); + NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic("localhost"); + + private RosHandler(){ + nodeConfiguration.setMasterUri(new URI("http://localhost:11311")); + } + + public synchronized static RosHandler getInstance(){ + if(ROS_HANDLER_INSTANCE == null){ + ROS_HANDLER_INSTANCE = new RosHandler(); + } + return ROS_HANDLER_INSTANCE; + } + + public ConnectToken newPublisher(java.net.URI uri, String topic){ + + RosDefaultPublisher publisher = new RosDefaultPublisher(topic); + + ConnectToken connectToken = new ConnectToken(uri); + + new Thread(() -> { + nodeMainExecutor.execute(listener, nodeConfiguration); + }) {{ + start(); + }}; + + return connectToken; + } + + } + + public class RosDefaultPublisher extends AbstractNodeMain { + + private String topic; + + private Publisher<std_msgs.String> publisher; + + public RosDefaultPublisher(String topic){ + this.topic = topic; + } + + @Override + public GraphName getDefaultNodeName() { + String nodeID = java.util.UUID.randomUUID().toString(); + return GraphName.of("ragconnect/publisher/" + nodeID); + } + + @Override + public void onStart(final ConnectedNode connectedNode) { + publisher = connectedNode.newPublisher(topic_name, std_msgs.String._TYPE); + } + + public void publish(byte[] msgContent){ + std_msgs.String msg = publisher.newMessage(); + String s = new String(msgContent, StandardCharsets.UTF_8); + msg.setData(s); + publisher.publish(msg); + } + } + + public class RosDefaultSubscriber extends AbstractNodeMain { + + } +} \ No newline at end of file diff --git a/ragconnect.base/src/main/resources/receiveDefinition.mustache b/ragconnect.base/src/main/resources/receiveDefinition.mustache index 9a8e309..ddd50a3 100644 --- a/ragconnect.base/src/main/resources/receiveDefinition.mustache +++ b/ragconnect.base/src/main/resources/receiveDefinition.mustache @@ -145,7 +145,7 @@ public boolean {{parentTypeName}}.{{disconnectMethod}}(String {{connectParameter case "mqtt": return {{mqttHandlerAttribute}}().disconnect(connectTokens.get(this).get(uri)); {{/usesMqtt}} {{#usesJava}} - case "java": return {{javaHandlerAttribute}}().unregisterCallback(uri.getPath(), connectTokens.get(this).get(uri).id); + case "java": return {{javaHandlerAttribute}}().unregisterCallback(uri.getPath(), connectTokens.get(this).get(uri).globalId); {{/usesJava}} {{#usesRest}} case "rest": return {{restHandlerAttribute}}().disconnect(connectTokens.get(this).get(uri)); diff --git a/ragconnect.base/src/main/resources/sendDefinition.mustache b/ragconnect.base/src/main/resources/sendDefinition.mustache index bf05fad..c0d20aa 100644 --- a/ragconnect.base/src/main/resources/sendDefinition.mustache +++ b/ragconnect.base/src/main/resources/sendDefinition.mustache @@ -38,6 +38,8 @@ public boolean {{parentTypeName}}.{{connectMethod}}(String {{connectParameterNam if (writeCurrentValue) { {{writeMethod}}(); } + + connectToken = new ConnectToken(uri); break; {{/usesJava}} {{#usesRest}} @@ -85,7 +87,8 @@ public boolean {{parentTypeName}}.{{disconnectMethod}}(String {{connectParameter {{/usesMqtt}} {{#usesJava}} case "java": - // nothing todo, because senders are not registered (just callbacks) + {{sender}} = null; + {{lastValue}} = null; break; {{/usesJava}} {{#usesRest}} -- GitLab