27 GetPluginClassNames();
28 CreatePluginInstances();
33bool DvPluginManager::AutoLoadPlugins() {
34 if (!PluginManager::Instance()->LoadInstalledPlugins()) {
35 AERROR <<
"Load plugins failed!";
38 AERROR <<
"pluginmanager index: " << PluginManager::Instance();
42void DvPluginManager::GetPluginClassNames() {
43 derived_class_names_ =
44 PluginManager::Instance()->GetDerivedClassNameByBaseClass<DvPluginBase>();
47bool DvPluginManager::CreatePluginInstances() {
48 if (derived_class_names_.empty()) {
50 <<
"There be seems no dreamview_plus plugins, please install plugins.";
53 for (
const auto &class_name : derived_class_names_) {
54 CreatePluginInstance(class_name);
59bool DvPluginManager::CreatePluginInstance(
const std::string class_name) {
61 PluginManager::Instance()->CreateInstance<DvPluginBase>(class_name);
62 if (dv_plugin_ptr !=
nullptr) {
63 dv_plugin_ptr->Init();
64 auto websocket_handlers = dv_plugin_ptr->GetWebSocketHandlers();
65 auto handlers = dv_plugin_ptr->GetHandlers();
66 auto updater_websocket_handlers = dv_plugin_ptr->GetUpdaterHandlers();
67 if (!websocket_handlers.empty()) {
68 RegisterWebsocketHandlers(websocket_handlers);
70 if (!handlers.empty()) {
71 RegisterHandlers(handlers);
73 if (!updater_websocket_handlers.empty()) {
74 auto plugin_data_handler_conf = dv_plugin_ptr->GetDataHandlerConf();
75 RegisterUpdaterHandlers(updater_websocket_handlers,
76 plugin_data_handler_conf);
78 plugin_instance_map_[class_name] = dv_plugin_ptr;
83void DvPluginManager::RunInstances() {
84 for (
const auto &instance : plugin_instance_map_) {
85 AINFO <<
"Instance: " << instance.first <<
" start running";
86 instance.second->Run();
90void DvPluginManager::RegisterWebsocketHandlers(
91 std::map<std::string, WebSocketHandler *> &websocket_handler_map) {
92 for (
auto &handler : websocket_handler_map) {
93 server_->addWebSocketHandler(handler.first, *handler.second);
97void DvPluginManager::RegisterHandlers(
98 std::map<std::string, CivetHandler *> &hander_map) {
99 for (
auto &handler : hander_map) {
100 server_->addHandler(handler.first, *handler.second);
104void DvPluginManager::RegisterUpdaterHandlers(
105 std::map<std::string, UpdaterBase *> &updater_handler_map,
106 const DataHandlerConf &data_handler_conf) {
108 for (
auto &handler : updater_handler_map) {
109 AINFO <<
"RegisterUpdaterHandlers: " << handler.first;
113 for (
auto &handler : data_handler_conf.data_handler_info()) {
116 AERROR <<
"There are duplicate updater handlers between dv plugins";
120 (*data_handler_info)[handler.first] = handler.second;
122 AINFO <<
"RegisterUpdaterHandlers: data_handler_conf_: "
127 for (
const auto &instance : plugin_instance_map_) {
128 AINFO <<
"Instance: " << instance.first <<
" stopped";
129 instance.second->Stop();
void Start()
Methods to run the plug-in management class.
void Init()
Method to initialize the plug-in management class.
apollo::dreamview::DataHandlerConf data_handler_conf_
void Stop()
Methods to stop the resource of plug-in management class.
void RegisterUpdater(std::string path_name, UpdaterBase *updater)
Register data updater by websocket path name.
map< string, DataHandlerInfo > data_handler_info