Skip to content

Commit

Permalink
assuming only one library passed in at a time
Browse files Browse the repository at this point in the history
Signed-off-by: Siddharth Kucheria <kucheria@usc.edu>
  • Loading branch information
skucheria committed Jul 18, 2019
1 parent 08474d1 commit 5e7b834
Showing 1 changed file with 15 additions and 24 deletions.
39 changes: 15 additions & 24 deletions rclcpp_components/src/node_main.cpp.in
Original file line number Diff line number Diff line change
Expand Up @@ -99,41 +99,32 @@ int main(int argc, char * argv[])
// Force flush of the stdout buffer.
setvbuf(stdout, NULL, _IONBF, BUFSIZ);

// if (argc < 2) {
// fprintf(stderr, "Requires at least one argument to be passed with the library to load\n");
// return 1;
// }
rclcpp::init(argc, argv);
rclcpp::Logger logger = rclcpp::get_logger(NODE_MAIN_LOGGER_NAME);
rclcpp::executors::SingleThreadedExecutor exec;
rclcpp::NodeOptions options;
std::vector<class_loader::ClassLoader *> loaders;
std::vector<rclcpp_components::NodeInstanceWrapper> node_wrappers;

std::vector<std::string> libraries;
// for (int i = 1; i < argc; ++i) {
// libraries.push_back(argv[i]);
// }
std::string libraryName = "@LIBRARY_NAME@";
libraries.push_back(libraryName);
std::string className = "rclcpp_components::NodeFactoryTemplate<@CLASS_NAME@>";
for (auto library : libraries) {
RCLCPP_INFO(logger, "Load library %s", library.c_str());
auto loader = new class_loader::ClassLoader(library);
auto classes = loader->getAvailableClasses<rclcpp_components::NodeFactory>();
for (auto clazz : classes) {
std::string name = clazz.c_str();
if (!(name.compare(className))) {
RCLCPP_INFO(logger, "Instantiate class %s", clazz.c_str());
auto node_factory = loader->createInstance<rclcpp_components::NodeFactory>(clazz);
auto wrapper = node_factory->create_node_instance(options);
auto node = wrapper.get_node_base_interface();
node_wrappers.push_back(wrapper);
exec.add_node(node);
}

RCLCPP_INFO(logger, "Load library %s", libraryName.c_str());
auto loader = new class_loader::ClassLoader(libraryName);
auto classes = loader->getAvailableClasses<rclcpp_components::NodeFactory>();
for (auto clazz : classes) {
std::string name = clazz.c_str();
if (!(name.compare(className))) {
RCLCPP_INFO(logger, "Instantiate class %s", clazz.c_str());
auto node_factory = loader->createInstance<rclcpp_components::NodeFactory>(clazz);
auto wrapper = node_factory->create_node_instance(options);
auto node = wrapper.get_node_base_interface();
node_wrappers.push_back(wrapper);
exec.add_node(node);
}
loaders.push_back(loader);
}
loaders.push_back(loader);


exec.spin();

Expand Down

0 comments on commit 5e7b834

Please sign in to comment.