bool console_signal_service_base::system_service::deliver_signal()
{
  bool handled = false;
  lock_guard services_guard(subscribers_mutex_);
  for (console_signal_service_base* subscriber = subscribers_.front(); 
      subscriber; subscriber = subscribers_.next(*subscriber))
  {
    handled |= subscriber->deliver_signal();
  }
  return handled;
}
Exemplo n.º 2
0
bool ControllerManager::listControllersSrv(
  controller_manager_msgs::ListControllers::Request &req,
  controller_manager_msgs::ListControllers::Response &resp)
{
  // pretend to use the request
  (void) req;

  // lock services
  ROS_DEBUG("list controller service called");
  boost::mutex::scoped_lock services_guard(services_lock_);
  ROS_DEBUG("list controller service locked");

  // lock controllers to get all names/types/states
  boost::recursive_mutex::scoped_lock controller_guard(controllers_lock_);
  std::vector<ControllerSpec> &controllers = controllers_lists_[current_controllers_list_];
  resp.controller.resize(controllers.size());

  for (size_t i = 0; i < controllers.size(); ++i)
  {
    controller_manager_msgs::ControllerState& cs = resp.controller[i];
    cs.name               = controllers[i].info.name;
    cs.type               = controllers[i].info.type;
    cs.hardware_interface = controllers[i].info.hardware_interface;
    cs.resources.clear();
    cs.resources.reserve(controllers[i].info.resources.size());
    for (std::set<std::string>::iterator it = controllers[i].info.resources.begin(); it != controllers[i].info.resources.end(); it++)
      cs.resources.push_back(*it);

    if (controllers[i].c->isRunning())
      cs.state = "running";
    else
      cs.state = "stopped";
  }

  ROS_DEBUG("list controller service finished");
  return true;
}
void console_signal_service_base::system_service::remove_subscriber(
    console_signal_service_base& subscriber)
{
  lock_guard services_guard(subscribers_mutex_);
  subscribers_.erase(subscriber);
}
void console_signal_service_base::system_service::add_subscriber(
    console_signal_service_base& subscriber)
{
  lock_guard services_guard(subscribers_mutex_);
  subscribers_.push_back(subscriber);
}