diff --git a/src/problem/problem.cpp b/src/problem/problem.cpp index 6fe2afb34530e550d8a361e56bcaae2c07938349..0fc42a15dbf90088f389d87cf98705a5947ca047 100644 --- a/src/problem/problem.cpp +++ b/src/problem/problem.cpp @@ -104,26 +104,6 @@ ProblemPtr Problem::autoSetup(ParamsServer &_server) if (plugins_path.back() != '/'){ plugins_path += '/'; // only works for UNIX systems } - /*try - { - plugins_path = _server.getParam<std::string>("plugins_path"); - } - catch (MissingValueException& e) - { - WOLF_WARN(e.what()); - WOLF_WARN("Setting '/usr/local/lib/' as plugins path..."); - plugins_path="/usr/local/lib/"; - }*/ - for (auto plugin_name : _server.getParam<std::vector<std::string>>("plugins")) - { - if (plugin_name == "core" or plugin_name == "wolf" or plugin_name == "") continue; // ignore plugin "core" - - std::string plugin = plugins_path + "libwolf" + plugin_name + lib_extension; - WOLF_TRACE("Loading plugin " + plugin_name + " via " + plugin); - auto l = std::make_shared<LoaderRaw>(plugin); - l->load(); - loaders.push_back(l); - } // load raw libs std::vector<std::string> raw_libs; @@ -143,20 +123,35 @@ ProblemPtr Problem::autoSetup(ParamsServer &_server) loaders.push_back(l); } - // Install sensors and processors + // Install sensors and processors -- load plugins only if sensors and processor are not registered auto sensors = _server.getParam<std::vector<std::map<std::string, std::string>>>("sensors"); - for(auto sen : sensors) - problem->installSensor(sen["type"], - sen["name"], - _server); - - auto processors = _server.getParam<std::vector<std::map<std::string, std::string>>>("processors"); - for(auto prc : processors) - problem->installProcessor(prc["type"], - prc["name"], - prc["sensor_name"], - _server); - + for (auto sen : sensors) + { + if (not AutoConfFactorySensor::isCreatorRegistered(sen["type"])) + { + auto plugin_name = sen["plugin"]; + std::string plugin = plugins_path + "libwolf" + plugin_name + lib_extension; + WOLF_TRACE("Loading plugin " + plugin_name + " via " + plugin); + auto l = std::make_shared<LoaderRaw>(plugin); + l->load(); + loaders.push_back(l); + } + problem->installSensor(sen["type"], sen["name"], _server); + } + auto processors = _server.getParam<std::vector<std::map<std::string, std::string>>>("processors"); + for (auto prc : processors) + { + if (not AutoConfFactoryProcessor::isCreatorRegistered(prc["type"])) + { + auto plugin_name = prc["plugin"]; + std::string plugin = plugins_path + "libwolf" + plugin_name + lib_extension; + WOLF_TRACE("Loading plugin " + plugin_name + " via " + plugin); + auto l = std::make_shared<LoaderRaw>(plugin); + l->load(); + loaders.push_back(l); + } + problem->installProcessor(prc["type"], prc["name"], prc["sensor_name"], _server); + } // Map (optional) std::string map_type, map_plugin;