/**
* @fileOverview
* @author Justin Young - justin@oodar.com.au
* @author Russell Toris - rctoris@wpi.edu
*/
var Topic = require('../core/Topic');
var Message = require('../core/Message');
var EventEmitter2 = require('eventemitter2').EventEmitter2;
/**
* An actionlib action listener.
*
* Emits the following events:
* * 'status' - The status messages received from the action server.
* * 'feedback' - The feedback messages received from the action server.
* * 'result' - The result returned from the action server.
*
* @constructor
* @param {Object} options
* @param {Ros} options.ros - The ROSLIB.Ros connection handle.
* @param {string} options.serverName - The action server name, like '/fibonacci'.
* @param {string} options.actionName - The action message name, like 'actionlib_tutorials/FibonacciAction'.
*/
function ActionListener(options) {
var that = this;
options = options || {};
this.ros = options.ros;
this.serverName = options.serverName;
this.actionName = options.actionName;
// create the topics associated with actionlib
var goalListener = new Topic({
ros : this.ros,
name : this.serverName + '/goal',
messageType : this.actionName + 'Goal'
});
var feedbackListener = new Topic({
ros : this.ros,
name : this.serverName + '/feedback',
messageType : this.actionName + 'Feedback'
});
var statusListener = new Topic({
ros : this.ros,
name : this.serverName + '/status',
messageType : 'actionlib_msgs/GoalStatusArray'
});
var resultListener = new Topic({
ros : this.ros,
name : this.serverName + '/result',
messageType : this.actionName + 'Result'
});
goalListener.subscribe(function(goalMessage) {
that.emit('goal', goalMessage);
});
statusListener.subscribe(function(statusMessage) {
statusMessage.status_list.forEach(function(status) {
that.emit('status', status);
});
});
feedbackListener.subscribe(function(feedbackMessage) {
that.emit('status', feedbackMessage.status);
that.emit('feedback', feedbackMessage.feedback);
});
// subscribe to the result topic
resultListener.subscribe(function(resultMessage) {
that.emit('status', resultMessage.status);
that.emit('result', resultMessage.result);
});
}
ActionListener.prototype.__proto__ = EventEmitter2.prototype;
module.exports = ActionListener;