Skip to content

Commit ae121f9

Browse files
Merge pull request #18 from RethinkRobotics-opensource/anonymousNode
Provide option to anonymize node
2 parents 2fcd250 + ef4e30f commit ae121f9

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

index.js

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
const netUtils = require('./utils/network_utils.js');
2323
const msgUtils = require('./utils/message_utils.js');
2424
const messages = require('./utils/messages.js');
25+
const util = require('util');
2526
msgUtils.findMessageFiles();
2627

2728
// these will be modules, they depend on logger which isn't initialized yet
@@ -72,6 +73,16 @@ function _validateNodeName(nodeName) {
7273
return nodeName;
7374
}
7475

76+
/**
77+
* Appends a random string of numeric characters to the end
78+
* of the node name. Follows rospy logic.
79+
* @param nodeName {string} string to anonymize
80+
* @return {string} anonymized nodeName
81+
*/
82+
function _anonymizeNodeName(nodeName) {
83+
return util.format('%s_%s_%s', nodeName, process.pid, Date.now());
84+
}
85+
7586
let Rosnodejs = {
7687
/**
7788
* Initializes a ros node for this process. Only one ros node can exist per process
@@ -81,19 +92,22 @@ let Rosnodejs = {
8192
* @return {Promise} resolved when connection to master is established
8293
*/
8394
initNode(nodeName, options) {
95+
options = options || {};
96+
if (options.anonymous) {
97+
nodeName = _anonymizeNodeName(nodeName);
98+
}
99+
84100
nodeName = _validateNodeName(nodeName);
85101

86102
if (rosNode !== null) {
87103
if (nodeName === rosNode.getNodeName()) {
88104
return Promise.resolve(this.getNodeHandle());
89105
}
90106
// else
91-
throw new Error('Unable to initialize node [' + nodeName + '] - node ['
107+
throw new Error('Unable to initialize node [' + nodeName + '] - node ['
92108
+ rosNode.getNodeName() + '] already exists');
93109
}
94110

95-
// FIXME: validate nodeName -- MUST START WITH '/'
96-
options = options || {};
97111
let rosMasterUri = process.env.ROS_MASTER_URI;
98112
if (options.rosMasterUri) {
99113
rosMasterUri = options.rosMasterUri;
@@ -170,7 +184,7 @@ let Rosnodejs = {
170184
}
171185
var count = types.length;
172186
return new Promise((resolve, reject) => {
173-
types.forEach(function(type) {
187+
types.forEach(function(type) {
174188
messages.getMessage(type, function(error, Message) {
175189
if (--count == 0) {
176190
resolve();
@@ -179,15 +193,15 @@ let Rosnodejs = {
179193
});
180194
});
181195
},
182-
196+
183197
/** create message classes for all the given types */
184198
_useServices(types) {
185199
if (!types || types.length == 0) {
186200
return Promise.resolve();
187201
}
188202
var count = types.length;
189203
return new Promise((resolve, reject) => {
190-
types.forEach(function(type) {
204+
types.forEach(function(type) {
191205
messages.getServiceRequest(type, function() {
192206
messages.getServiceResponse(type, function() {
193207
if (--count == 0) {

utils/message_utils.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ let MessageUtils = {
184184
loadMessagePackage(msgPackage) {
185185
const indexPath = messagePackagePathMap[msgPackage];
186186
if (indexPath === undefined) {
187-
throw new Error('Unable to find message package %s', msgPackage);
187+
throw new Error('Unable to find message package ' + msgPackage);
188188
}
189189
try {
190190
messagePackageMap[msgPackage] = require(indexPath);
@@ -225,17 +225,17 @@ let MessageUtils = {
225225
let type = parts[1];
226226
return messagePackage.srv[type];
227227
} else {
228-
let request =
228+
let request =
229229
messages.getFromRegistry(rosDataType, ["srv", "Request"]);
230-
let response =
230+
let response =
231231
messages.getFromRegistry(rosDataType, ["srv", "Response"]);
232232
if (request && response) {
233-
return {
233+
return {
234234
Request: request,
235235
Response: response
236236
};
237237
} else {
238-
console.error('Unable to find service package %s: %j %j',
238+
console.error('Unable to find service package %s: %j %j',
239239
msgPackage, request, response);
240240
throw new Error();
241241
}

0 commit comments

Comments
 (0)