auto it = plugin_subscriptions.find(msgid); if (it == plugin_subscriptions.end()) { // new entry ROS_DEBUG_STREAM(log_msgname << " - new element"); plugin_subscriptions[msgid] = PluginBase::Subscriptions{{info}}; } else { // existing: check handler message type bool append_allowed = is_mavlink_message_t(type_hash_); if (!append_allowed) { append_allowed = true; for (auto &e : it->second) { auto t2 = std::get<2>(e); if (!is_mavlink_message_t(t2) && t2 != type_hash_) { ROS_ERROR_STREAM(log_msgname << " routed to different message type (hash: " << t2 << ")"); append_allowed = false; } } } if (append_allowed) { ROS_DEBUG_STREAM(log_msgname << " - emplace"); it->second.emplace_back(info); } else ROS_ERROR_STREAM(log_msgname << " handler dropped because this ID are used for another message type"); }
时间: 2023-06-16 09:02:59 浏览: 187
这段代码看起来像是 C++ 的一个消息订阅系统,用于处理消息的路由和分发。它首先检查是否已经有一个订阅相同消息 ID 的处理程序,如果没有则创建一个新的订阅列表并添加当前处理程序;如果已经存在,则检查当前处理程序处理的消息类型是否与已有处理程序处理的类型相同,如果不同则不允许添加当前处理程序,否则将当前处理程序添加到订阅列表中。在这个过程中,代码使用了 STL 中的 map 和 vector 容器来存储订阅信息。
相关问题
if (is_blacklisted(pl_name, blacklist, whitelist)) { ROS_INFO_STREAM("Plugin " << pl_name << " blacklisted"); return; } try { auto plugin = plugin_loader.createInstance(pl_name); ROS_INFO_STREAM("Plugin " << pl_name << " loaded"); for (auto &info : plugin->get_subscriptions()) { auto msgid = std::get<0>(info); auto msgname = std::get<1>(info); auto type_hash_ = std::get<2>(info); std::string log_msgname; if (is_mavlink_message_t(type_hash_)) log_msgname = utils::format("MSG-ID (%u) <%zu>", msgid, type_hash_); else log_msgname = utils::format("%s (%u) <%zu>", msgname, msgid, type_hash_); ROS_DEBUG_STREAM("Route " << log_msgname << " to " << pl_name); auto it = plugin_subscriptions.find(msgid); if (it == plugin_subscriptions.end()) { // new entry ROS_DEBUG_STREAM(log_msgname << " - new element"); plugin_subscriptions[msgid] = PluginBase::Subscriptions{{info}}; } else { // existing: check handler message type bool append_allowed = is_mavlink_message_t(type_hash_); if (!append_allowed) { append_allowed = true; for (auto &e : it->second) { auto t2 = std::get<2>(e); if (!is_mavlink_message_t(t2) && t2 != type_hash_) { ROS_ERROR_STREAM(log_msgname << " routed to different message type (hash: " << t2 << ")"); append_allowed = false; } } } if (append_allowed) { ROS_DEBUG_STREAM(log_msgname << " - emplace"); it->second.emplace_back(info); } else ROS_ERROR_STREAM(log_msgname << " handler dropped because this ID are used for another message type"); } } plugin->initialize(mav_uas); loaded_plugins.push_back(plugin); ROS_INFO_STREAM("Plugin " << pl_name << " initialized"); } catch (pluginlib::PluginlibException &ex) { ROS_ERROR_STREAM("Plugin " << pl_name << " load exception: " << ex.what()); } }
这是一段C++代码,用于加载和初始化插件,并将其与消息路由器相关联。首先,它使用“is_blacklisted”函数检查插件是否在黑名单或白名单中。如果插件在黑名单中,则不会加载。然后,它使用“plugin_loader”对象创建插件实例,并调用“get_subscriptions”函数获取插件支持的订阅消息类型。对于每个订阅类型,它将其与插件名称相关联,并将其添加到“plugin_subscriptions”映射中。如果消息ID已经存在于“plugin_subscriptions”中,则会检查处理程序的消息类型是否与现有类型匹配。如果匹配,则将处理程序添加到现有消息ID的列表中。如果不匹配,则会记录错误消息并跳过处理程序。最后,它调用“initialize”函数初始化插件,并将其添加到“loaded_plugins”列表中。
plugin-load-add=validate_password.so validate-password=FORCE_PLUS_PERMANENT
您好!感谢您的提问。根据您的问题,您想了解的是如何在MySQL中启用密码验证插件的设置。要启用密码验证插件,您可以按照以下步骤进行操作:
1. 打开MySQL的配置文件(通常是my.cnf或my.ini)。
2. 找到[mysqld]部分,并在其中添加以下行:
```
plugin-load-add=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
```
这将加载validate_password插件并将其设置为强制密码验证。
3. 保存并关闭配置文件。
4. 重启MySQL服务以使更改生效。
请注意,这只是启用密码验证插件的基本设置。您可能还需要进一步配置validate_password插件的参数,例如密码长度、特殊字符要求等。您可以查阅MySQL官方文档以获取更详细的配置信息。
希望以上信息能对您有所帮助!如果您有任何其他问题,请随时提问。
阅读全文