2222const netUtils = require ( './utils/network_utils.js' ) ;
2323const msgUtils = require ( './utils/message_utils.js' ) ;
2424const messages = require ( './utils/messages.js' ) ;
25+ const util = require ( 'util' ) ;
2526msgUtils . 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+
7586let Rosnodejs = {
7687 /**
7788 * Initializes a ros node for this process. Only one ros node can exist per process
@@ -81,19 +92,23 @@ 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+ console . log ( 'anonymous node name ' + nodeName ) ;
99+ }
100+
84101 nodeName = _validateNodeName ( nodeName ) ;
85102
86103 if ( rosNode !== null ) {
87104 if ( nodeName === rosNode . getNodeName ( ) ) {
88105 return Promise . resolve ( this . getNodeHandle ( ) ) ;
89106 }
90107 // else
91- throw new Error ( 'Unable to initialize node [' + nodeName + '] - node ['
108+ throw new Error ( 'Unable to initialize node [' + nodeName + '] - node ['
92109 + rosNode . getNodeName ( ) + '] already exists' ) ;
93110 }
94111
95- // FIXME: validate nodeName -- MUST START WITH '/'
96- options = options || { } ;
97112 let rosMasterUri = process . env . ROS_MASTER_URI ;
98113 if ( options . rosMasterUri ) {
99114 rosMasterUri = options . rosMasterUri ;
@@ -170,7 +185,7 @@ let Rosnodejs = {
170185 }
171186 var count = types . length ;
172187 return new Promise ( ( resolve , reject ) => {
173- types . forEach ( function ( type ) {
188+ types . forEach ( function ( type ) {
174189 messages . getMessage ( type , function ( error , Message ) {
175190 if ( -- count == 0 ) {
176191 resolve ( ) ;
@@ -179,15 +194,15 @@ let Rosnodejs = {
179194 } ) ;
180195 } ) ;
181196 } ,
182-
197+
183198 /** create message classes for all the given types */
184199 _useServices ( types ) {
185200 if ( ! types || types . length == 0 ) {
186201 return Promise . resolve ( ) ;
187202 }
188203 var count = types . length ;
189204 return new Promise ( ( resolve , reject ) => {
190- types . forEach ( function ( type ) {
205+ types . forEach ( function ( type ) {
191206 messages . getServiceRequest ( type , function ( ) {
192207 messages . getServiceResponse ( type , function ( ) {
193208 if ( -- count == 0 ) {
0 commit comments