Skip to content

Commit

Permalink
Restructure Node Init
Browse files Browse the repository at this point in the history
  • Loading branch information
Theosakamg committed Jul 1, 2017
1 parent 1e6047b commit d3367d6
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 39 deletions.
34 changes: 3 additions & 31 deletions rcljava/src/main/java/org/ros2/rcljava/RCLJava.java
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ public abstract class RCLJava {
* @param spaceName The name-space that will identify this node in a ROS2 graph.
* @return A pointer to the underlying ROS2 node structure.
*/
private static native long nativeCreateNodeHandle(String nodeName, String spaceName);
public static native long nativeCreateNodeHandle(String nodeName, String spaceName);

// Wait.h
public static native long nativeGetZeroInitializedWaitSet();
Expand Down Expand Up @@ -273,44 +273,16 @@ public static Node createNode(final String defaultName) {

/**
* Create a @{link Node}.
* Take the value from argument app, if you pass null parameter on defaultName.
*
* @param namespace Name Space.
* @param defaultName The name that will identify this node in a ROS2 graph.
* @return A @{link Node} that represents the underlying ROS2 node
* structure.
*/
public static Node createNode(final String namespace, final String defaultName) {
RCLJava.logger.debug("Create Node stack : " + defaultName);

if (!RCLJava.initialized) {
throw new NotInitializedException();
}

String prefix = namespace;
String nodeName = defaultName;

if (RCLJava.arguments != null) {
for (String arg : RCLJava.arguments) {
if (arg.contains("=")) {
String[] item = arg.split("=");
if ("-node".equals(item[0])) {
nodeName = item[1];
}

if ("-prefix".equals(item[0])) {
prefix = item[1];
}
}
}
}

if (prefix == null) {
prefix = "";
}

// String fullName = GraphName.getFullName(ns, nodeName);
long nodeHandle = RCLJava.nativeCreateNodeHandle(nodeName, prefix);
Node node = new NativeNode(nodeHandle, prefix, nodeName, RCLJava.arguments);
Node node = new NativeNode(namespace, defaultName, RCLJava.arguments);

return node;
}
Expand Down
43 changes: 36 additions & 7 deletions rcljava/src/main/java/org/ros2/rcljava/node/NativeNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import org.ros2.rcljava.time.WallTimerCallback;
import org.ros2.rcljava.RCLJava;
import org.ros2.rcljava.exception.NotImplementedException;
import org.ros2.rcljava.exception.NotInitializedException;
import org.ros2.rcljava.internal.message.Message;
import org.ros2.rcljava.internal.service.MessageService;
import org.ros2.rcljava.namespace.GraphName;
Expand Down Expand Up @@ -198,24 +199,52 @@ private static native <T> long nativeCreateServiceHandle(
*
* @param nodeHandle A pointer to the underlying ROS2 node structure. Must not
* be zero.
* @param nameSpace prefix path of node.
* @param nodeName name of node.
* @param namespace prefix path of node.
* @param defaultName name of node.
*/
public NativeNode(final long nodeHandle,final String nameSpace, final String nodeName, final String[] args) {
public NativeNode(final String namespace, final String defaultName, final String[] args) {
NativeNode.logger.debug("Create Node stack : " + defaultName);

if (nodeHandle==0) throw new NullPointerException("Node Handle is not define !");
if (nodeName==null || nodeName.length() == 0) throw new NullPointerException("Node name is needed !");
if (!RCLJava.isInitialized()) {
throw new NotInitializedException();
}

this.nameSpace = nameSpace;
String prefix = namespace;
String nodeName = defaultName;

if (args != null && defaultName == null) {
for (String arg : args) {
if (arg.contains("=")) {
String[] item = arg.split("=");
if ("-node".equals(item[0])) {
nodeName = item[1];
}

if ("-prefix".equals(item[0])) {
prefix = item[1];
}
}
}
}

if (prefix == null) {
prefix = "";
}

if (nodeName==null || nodeName.length() == 0) throw new NullPointerException("Node name is needed !");
this.nameSpace = prefix;
this.name = nodeName;
this.nodeHandle = nodeHandle;
this.subscriptions = new LinkedBlockingQueue<Subscription<?>>();
this.publishers = new LinkedBlockingQueue<Publisher<?>>();
this.clients = new LinkedBlockingQueue<Client<?>>();
this.services = new LinkedBlockingQueue<Service<? extends MessageService>>();
this.timers = new LinkedBlockingQueue<WallTimer>();
this.parameters = new HashMap<String, ParameterVariant<?>>();

long nodeHandle = RCLJava.nativeCreateNodeHandle(this.name, this.nameSpace);
if (nodeHandle==0) throw new NullPointerException("Node Handle is not define !");
this.nodeHandle = nodeHandle;

NativeNode.logger.debug("Create Node stack : " + GraphName.getFullName(this.nameSpace, this.name));

if (args != null) {
Expand Down
2 changes: 1 addition & 1 deletion rcljava/src/main/java/org/ros2/rcljava/node/Node.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
public interface Node {

/**
* Release all ressource.
* Release all resource.
*/
void dispose();

Expand Down

0 comments on commit d3367d6

Please sign in to comment.