@@ -82,76 +82,78 @@ int main(int argc, char * argv[])
8282 const std::shared_ptr<rmw_request_id_t >,
8383 const std::shared_ptr<composition::srv::LoadNode::Request> request,
8484 std::shared_ptr<composition::srv::LoadNode::Response> response)
85- {
86- // get node plugin resource from package
87- std::string content;
88- std::string base_path;
89- if (!ament_index_cpp::get_resource (" node_plugin" , request->package_name , content, &base_path)) {
90- fprintf (stderr, " Could not find requested resource in ament index\n " );
91- response->success = false ;
92- return ;
93- }
94-
95- std::vector<std::string> lines = split (content, ' \n ' , true );
96- for (auto line : lines) {
97- std::vector<std::string> parts = split (line, ' ;' );
98- if (parts.size () != 2 ) {
99- fprintf (stderr, " Invalid resource entry\n " );
85+ {
86+ // get node plugin resource from package
87+ std::string content;
88+ std::string base_path;
89+ if (
90+ !ament_index_cpp::get_resource (" node_plugin" , request->package_name , content, &base_path))
91+ {
92+ fprintf (stderr, " Could not find requested resource in ament index\n " );
10093 response->success = false ;
10194 return ;
10295 }
103- // match plugin name with the same rmw suffix as this executable
104- if (parts[0 ] != request->plugin_name ) {
105- continue ;
106- }
10796
108- std::string class_name = parts[0 ];
97+ std::vector<std::string> lines = split (content, ' \n ' , true );
98+ for (auto line : lines) {
99+ std::vector<std::string> parts = split (line, ' ;' );
100+ if (parts.size () != 2 ) {
101+ fprintf (stderr, " Invalid resource entry\n " );
102+ response->success = false ;
103+ return ;
104+ }
105+ // match plugin name with the same rmw suffix as this executable
106+ if (parts[0 ] != request->plugin_name ) {
107+ continue ;
108+ }
109109
110- // load node plugin
111- std::string library_path = parts[1 ];
112- if (!fs::path (library_path).is_absolute ()) {
113- library_path = base_path + " /" + library_path;
114- }
115- printf (" Load library %s\n " , library_path.c_str ());
116- class_loader::ClassLoader * loader;
117- try {
118- loader = new class_loader::ClassLoader (library_path);
119- } catch (const std::exception & ex) {
120- fprintf (stderr, " Failed to load library: %s\n " , ex.what ());
121- response->success = false ;
122- return ;
123- } catch (...) {
124- fprintf (stderr, " Failed to load library\n " );
125- response->success = false ;
126- return ;
127- }
128- auto classes = loader->getAvailableClasses <rclcpp::Node>();
129- for (auto clazz : classes) {
130- if (clazz == class_name) {
131- printf (" Instantiate class %s\n " , clazz.c_str ());
132- auto node = loader->createInstance <rclcpp::Node>(clazz);
133- exec.add_node (node);
134- nodes.push_back (node);
135- loaders.push_back (loader);
136- response->success = true ;
110+ std::string class_name = parts[0 ];
111+
112+ // load node plugin
113+ std::string library_path = parts[1 ];
114+ if (!fs::path (library_path).is_absolute ()) {
115+ library_path = base_path + " /" + library_path;
116+ }
117+ printf (" Load library %s\n " , library_path.c_str ());
118+ class_loader::ClassLoader * loader;
119+ try {
120+ loader = new class_loader::ClassLoader (library_path);
121+ } catch (const std::exception & ex) {
122+ fprintf (stderr, " Failed to load library: %s\n " , ex.what ());
123+ response->success = false ;
124+ return ;
125+ } catch (...) {
126+ fprintf (stderr, " Failed to load library\n " );
127+ response->success = false ;
137128 return ;
138129 }
139- }
130+ auto classes = loader->getAvailableClasses <rclcpp::Node>();
131+ for (auto clazz : classes) {
132+ if (clazz == class_name) {
133+ printf (" Instantiate class %s\n " , clazz.c_str ());
134+ auto node = loader->createInstance <rclcpp::Node>(clazz);
135+ exec.add_node (node);
136+ nodes.push_back (node);
137+ loaders.push_back (loader);
138+ response->success = true ;
139+ return ;
140+ }
141+ }
140142
141- // no matching class found in loader
142- delete loader;
143+ // no matching class found in loader
144+ delete loader;
145+ fprintf (
146+ stderr, " Failed to find class with the requested plugin name '%s' in "
147+ " the loaded library\n " ,
148+ request->plugin_name .c_str ());
149+ response->success = false ;
150+ return ;
151+ }
143152 fprintf (
144- stderr, " Failed to find class with the requested plugin name '%s' in "
145- " the loaded library\n " ,
146- request->plugin_name .c_str ());
153+ stderr, " Failed to find plugin name '%s' in prefix '%s'\n " ,
154+ request->plugin_name .c_str (), base_path.c_str ());
147155 response->success = false ;
148- return ;
149- }
150- fprintf (
151- stderr, " Failed to find plugin name '%s' in prefix '%s'\n " ,
152- request->plugin_name .c_str (), base_path.c_str ());
153- response->success = false ;
154- });
156+ });
155157
156158 exec.spin ();
157159
0 commit comments