@@ -29,6 +29,7 @@ const LogFormatter = require('./utils/log/LogFormatter.js');
2929const RosNode = require ( './lib/RosNode.js' ) ;
3030const NodeHandle = require ( './lib/NodeHandle.js' ) ;
3131const Logging = require ( './lib/Logging.js' ) ;
32+ const ActionClient = require ( './lib/ActionClient.js' ) ;
3233
3334msgUtils . findMessageFiles ( ) ;
3435
@@ -133,15 +134,19 @@ let Rosnodejs = {
133134 rosNode = new RosNode ( nodeName , rosMasterUri ) ;
134135
135136 return new Promise ( ( resolve , reject ) => {
136- this . use ( options . messages , options . services ) . then ( ( ) => {
137-
138- const connectedToMasterCallback = ( ) => {
139- Logging . initializeOptions ( this , options . logging ) ;
140- resolve ( this . getNodeHandle ( ) ) ;
141- } ;
142-
137+ const connectedToMasterCallback = ( ) => {
138+ Logging . initializeOptions ( this , options . logging ) ;
139+ resolve ( this . getNodeHandle ( ) ) ;
140+ } ;
141+
142+ if ( options . onTheFly ) {
143+ // generate definitions for all messages and services
144+ messages . getAll ( function ( ) {
145+ _checkMasterHelper ( connectedToMasterCallback , 0 ) ;
146+ } ) ;
147+ } else {
143148 _checkMasterHelper ( connectedToMasterCallback , 0 ) ;
144- } ) ;
149+ }
145150 } )
146151 . catch ( ( err ) => {
147152 log . error ( 'Error: ' + err ) ;
@@ -188,68 +193,6 @@ let Rosnodejs = {
188193 return rtv ;
189194 } ,
190195
191- /** create message classes and services classes for all the given
192- * types before calling callback */
193- use ( messages , services ) {
194- const self = this ;
195- return new Promise ( ( resolve , reject ) => {
196- self . _useMessages ( messages )
197- . then ( ( ) => { return self . _useServices ( services ) ; } )
198- . then ( ( ) => { resolve ( ) ; } ) ;
199- } ) ;
200- } ,
201-
202- /** create message classes for all the given types */
203- _useMessages ( types ) {
204- const self = this ;
205-
206- // make sure required types are available
207- [
208- // for action lib:
209- 'actionlib_msgs/GoalStatusArray' ,
210- 'actionlib_msgs/GoalID' ,
211- // for logging:
212- 'rosgraph_msgs/Log' ,
213- ] . forEach ( function ( type ) {
214- if ( ! self . checkMessage ( type ) ) {
215- // required message definition not available yet, load it
216- // on-demand
217- types . unshift ( type ) ;
218- }
219- } ) ;
220-
221- if ( ! types || types . length == 0 ) {
222- return Promise . resolve ( ) ;
223- }
224- var count = types . length ;
225- return new Promise ( ( resolve , reject ) => {
226- types . forEach ( function ( type ) {
227- messages . getMessage ( type , function ( error , Message ) {
228- if ( -- count == 0 ) {
229- resolve ( ) ;
230- }
231- } ) ;
232- } ) ;
233- } ) ;
234- } ,
235-
236- /** create service classes for all the given types */
237- _useServices ( types ) {
238- if ( ! types || types . length == 0 ) {
239- return Promise . resolve ( ) ;
240- }
241- var count = types . length ;
242- return new Promise ( ( resolve , reject ) => {
243- types . forEach ( function ( type ) {
244- messages . getService ( type , function ( ) {
245- if ( -- count == 0 ) {
246- resolve ( ) ;
247- }
248- } ) ;
249- } ) ;
250- } ) ;
251- } ,
252-
253196 /**
254197 * @return {NodeHandle } for initialized node
255198 */
@@ -274,6 +217,29 @@ let Rosnodejs = {
274217 console : ConsoleLogStream ,
275218 ros : RosLogStream
276219 }
220+ } ,
221+
222+
223+ //------------------------------------------------------------------
224+ // ActionLib
225+ //------------------------------------------------------------------
226+
227+ /**
228+ Get an action client for a given type and action server.
229+
230+ Example:
231+ let ac = rosNode.getActionClient({
232+ type: "turtle_actionlib/ShapeAction",
233+ actionServer: "/turtle_shape"
234+ });
235+ let shapeActionGoal =
236+ rosnodejs.require('turtle_actionlib').msg.ShapeActionGoal;
237+ ac.sendGoal(new shapeActionGoal({
238+ goal: { edges: 3, radius: 1 } }));
239+ */
240+ getActionClient ( options ) {
241+ options . rosnodejs = Rosnodejs ;
242+ return new ActionClient ( options ) ;
277243 }
278244}
279245
0 commit comments