From 66d1b57f122342843460bf34f0b19e4fa0f8f68b Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Tue, 24 May 2016 11:15:00 -0400 Subject: [PATCH 1/2] done. tested. works. --- index.js | 27 +++++++++++++++++++++------ utils/message_utils.js | 10 +++++----- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/index.js b/index.js index d4aed00..c322132 100644 --- a/index.js +++ b/index.js @@ -22,6 +22,7 @@ const netUtils = require('./utils/network_utils.js'); const msgUtils = require('./utils/message_utils.js'); const messages = require('./utils/messages.js'); +const util = require('util'); msgUtils.findMessageFiles(); // these will be modules, they depend on logger which isn't initialized yet @@ -72,6 +73,16 @@ function _validateNodeName(nodeName) { return nodeName; } +/** + * Appends a random string of numeric characters to the end + * of the node name. Follows rospy logic. + * @param nodeName {string} string to anonymize + * @return {string} anonymized nodeName + */ +function _anonymizeNodeName(nodeName) { + return util.format('%s_%s_%s', nodeName, process.pid, Date.now()); +} + let Rosnodejs = { /** * Initializes a ros node for this process. Only one ros node can exist per process @@ -81,6 +92,12 @@ let Rosnodejs = { * @return {Promise} resolved when connection to master is established */ initNode(nodeName, options) { + options = options || {}; + if (options.anonymous) { + nodeName = _anonymizeNodeName(nodeName); + console.log('anonymous node name ' + nodeName); + } + nodeName = _validateNodeName(nodeName); if (rosNode !== null) { @@ -88,12 +105,10 @@ let Rosnodejs = { return Promise.resolve(this.getNodeHandle()); } // else - throw new Error('Unable to initialize node [' + nodeName + '] - node [' + throw new Error('Unable to initialize node [' + nodeName + '] - node [' + rosNode.getNodeName() + '] already exists'); } - // FIXME: validate nodeName -- MUST START WITH '/' - options = options || {}; let rosMasterUri = process.env.ROS_MASTER_URI; if (options.rosMasterUri) { rosMasterUri = options.rosMasterUri; @@ -170,7 +185,7 @@ let Rosnodejs = { } var count = types.length; return new Promise((resolve, reject) => { - types.forEach(function(type) { + types.forEach(function(type) { messages.getMessage(type, function(error, Message) { if (--count == 0) { resolve(); @@ -179,7 +194,7 @@ let Rosnodejs = { }); }); }, - + /** create message classes for all the given types */ _useServices(types) { if (!types || types.length == 0) { @@ -187,7 +202,7 @@ let Rosnodejs = { } var count = types.length; return new Promise((resolve, reject) => { - types.forEach(function(type) { + types.forEach(function(type) { messages.getServiceRequest(type, function() { messages.getServiceResponse(type, function() { if (--count == 0) { diff --git a/utils/message_utils.js b/utils/message_utils.js index 791d7f2..99a8be3 100644 --- a/utils/message_utils.js +++ b/utils/message_utils.js @@ -184,7 +184,7 @@ let MessageUtils = { loadMessagePackage(msgPackage) { const indexPath = messagePackagePathMap[msgPackage]; if (indexPath === undefined) { - throw new Error('Unable to find message package %s', msgPackage); + throw new Error('Unable to find message package ' + msgPackage); } try { messagePackageMap[msgPackage] = require(indexPath); @@ -225,17 +225,17 @@ let MessageUtils = { let type = parts[1]; return messagePackage.srv[type]; } else { - let request = + let request = messages.getFromRegistry(rosDataType, ["srv", "Request"]); - let response = + let response = messages.getFromRegistry(rosDataType, ["srv", "Response"]); if (request && response) { - return { + return { Request: request, Response: response }; } else { - console.error('Unable to find service package %s: %j %j', + console.error('Unable to find service package %s: %j %j', msgPackage, request, response); throw new Error(); } From ef4e30fec2d493b71cefbf4449c928eb15ba0e54 Mon Sep 17 00:00:00 2001 From: chris-smith Date: Wed, 25 May 2016 08:50:40 -0400 Subject: [PATCH 2/2] Remove debug log --- index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/index.js b/index.js index c322132..3616599 100644 --- a/index.js +++ b/index.js @@ -95,7 +95,6 @@ let Rosnodejs = { options = options || {}; if (options.anonymous) { nodeName = _anonymizeNodeName(nodeName); - console.log('anonymous node name ' + nodeName); } nodeName = _validateNodeName(nodeName);