From 2e5a9e83fbb8a3831cad268b3058f76a8a79db4e Mon Sep 17 00:00:00 2001
From: Ernesto Corbellini <ecorbellini@ekumenlabs.com>
Date: Wed, 16 Dec 2015 14:57:09 -0300
Subject: [PATCH] Added generation of a unique ID for the goal message.

---
 .../rosjava_actionlib/ActionClient.java       |  1 +
 .../rosjava_actionlib/GoalIDGenerator.java    |  8 +++-----
 .../ekumen/rosjava_actionlib/TestClient.java  | 20 ++++++++++++++++---
 3 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ActionClient.java b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ActionClient.java
index 1516857..9c2b3f7 100644
--- a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ActionClient.java
+++ b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/ActionClient.java
@@ -54,6 +54,7 @@ public class ActionClient<T_ACTION_GOAL extends Message,
 
   private void publishClient(ConnectedNode node) {
     goalPublisher = node.newPublisher(actionName + "/goal", actionGoalType);
+    goalPublisher.setLatchMode(false);
     cancelPublisher = node.newPublisher(actionName + "/cancel", GoalID._TYPE);
   }
 
diff --git a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/GoalIDGenerator.java b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/GoalIDGenerator.java
index 35654c6..20b0e09 100644
--- a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/GoalIDGenerator.java
+++ b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/GoalIDGenerator.java
@@ -19,8 +19,6 @@ package com.github.ekumen.rosjava_actionlib;
 import org.ros.message.Time;
 import actionlib_msgs.GoalID;
 import org.ros.node.ConnectedNode;
-import org.ros.node.NodeConfiguration;
-import org.ros.message.MessageFactory;
 
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -62,7 +60,7 @@ public class GoalIDGenerator {
    *
    * @return GoalID object
    */
-  public String generateID(ConnectedNode node, GoalID goal) {
+  public String generateID(GoalID goalId) {
     String id;
     Time t = node.getCurrentTime();
     //NodeConfiguration nc = NodeConfiguration.newPrivate();
@@ -74,8 +72,8 @@ public class GoalIDGenerator {
     id = node.getName().toString() + "-" + goalCount.incrementAndGet()
       + "-" + t.secs + "." + t.nsecs;
 
-    goal.setId(id);
-    goal.setStamp(t);
+    goalId.setId(id);
+    goalId.setStamp(t);
 
     return id;
   }
diff --git a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/TestClient.java b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/TestClient.java
index d27aa70..7abf0a1 100644
--- a/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/TestClient.java
+++ b/src/rosjava_actionlib/rosjava_actionlib/src/main/java/com/github/ekumen/rosjava_actionlib/TestClient.java
@@ -1,5 +1,6 @@
 package com.github.ekumen.rosjava_actionlib;
 
+import java.util.List;
 import org.ros.namespace.GraphName;
 import org.ros.node.AbstractNodeMain;
 import org.ros.node.ConnectedNode;
@@ -11,10 +12,13 @@ import actionlib_tutorials.FibonacciGoal;
 import actionlib_tutorials.FibonacciFeedback;
 import actionlib_tutorials.FibonacciResult;
 import actionlib_msgs.GoalStatusArray;
+import actionlib_msgs.GoalID;
+import actionlib_msgs.GoalStatus;
 
 public class TestClient extends AbstractNodeMain implements ActionClientListener<FibonacciActionFeedback, FibonacciActionResult> {
-  ActionClient ac;
-  volatile private boolean resultReceived = false;
+  private ActionClient ac = null;
+  private volatile boolean resultReceived = false;
+  private GoalIDGenerator goalIdGenerator = null;
 
   @Override
   public GraphName getDefaultNodeName() {
@@ -26,6 +30,8 @@ public class TestClient extends AbstractNodeMain implements ActionClientListener
     ac = new ActionClient<FibonacciActionGoal, FibonacciActionFeedback, FibonacciActionResult>(node, "/fibonacci", FibonacciActionGoal._TYPE, FibonacciActionFeedback._TYPE, FibonacciActionResult._TYPE);
     int repeat = 3;
 
+    goalIdGenerator = new GoalIDGenerator(node);
+
     // Attach listener for the callbacks
     ac.attachListener(this);
 
@@ -40,7 +46,7 @@ public class TestClient extends AbstractNodeMain implements ActionClientListener
     while (repeat > 0) {
       sleep(10000);
       System.out.println("Sending goal #" + repeat + "...");
-      ac.sendGoal(goalMessage);
+      sendGoal(goalMessage);
       System.out.println("Goal sent.");
       //while(!resultReceived) sleep(100);
       resultReceived = false;
@@ -78,7 +84,15 @@ public class TestClient extends AbstractNodeMain implements ActionClientListener
 
   @Override
   public void statusReceived(GoalStatusArray status) {
+    List<GoalStatus> statusList = status.getStatusList();
+    for(GoalStatus gs:statusList) {
+      //System.out.println("GoalID: " + gs.getGoalId().getId() + " -- GoalStatus: " + gs.getStatus() + " -- " + gs.getText());
+    }
+  }
 
+  private void sendGoal(FibonacciActionGoal goal) {
+    goalIdGenerator.generateID(goal.getGoalId());
+    ac.sendGoal(goal);
   }
 
   void sleep(long msec) {
-- 
GitLab