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,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 ) {
0 commit comments