#include "PluginsManager.h"
#include <string>
#ifdef _WIN32
#include <filesystem>
namespace fs = std::filesystem;
const static std::string EXT = ".dll";
#else
#include <dlfcn.h>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
const static std::string EXT = ".so";
#endif
using namespace Dic::Core;
PluginsManager& PluginsManager::Instance()
{
static PluginsManager instance;
return instance;
}
bool PluginsManager::RegisterPlugin(std::unique_ptr<BasePlugin> plugin)
{
pluginsMap_.emplace(plugin->GetPluginName(), std::move(plugin));
return true;
}
void PluginsManager::LoadPlugins()
{
auto pluginsDir = "/home/wangyunkai/code/att/plugins/mindstudio-insight-plugins/Example/HttpPluginExample/output";
if (!fs::exists(pluginsDir)) {
return;
}
for (auto& dir : fs::directory_iterator(pluginsDir)) {
if (!fs::is_directory(dir)) {
continue;
}
for (auto& file : fs::directory_iterator(dir)) {
if (!fs::is_directory(file) && file.path().extension().string() == EXT) {
#ifdef _WIN32
#else
dlopen(file.path().string().c_str(), RTLD_LAZY);
#endif
}
}
}
}
std::map<std::string, std::unique_ptr<BasePlugin>>& PluginsManager::GetAllPlugins()
{
return pluginsMap_;
}
PluginRegister::PluginRegister(std::unique_ptr<BasePlugin> plugin)
{
PluginsManager::Instance().RegisterPlugin(std::move(plugin));
}