37 bool containsString(
const int length,
const char** input,
const char* toFind)
39 return std::count_if(input, input + length, [toFind](
const char* arg) {
return std::strcmp(arg, toFind) == 0; }) >
46 typedef ExtensionPlugin* (*CreateFuncType)(int,
const char**);
50 const bool help = containsString(argc, argv,
"--help");
52 for (
int i = 0; i < argc; ++i)
54 if (std::strcmp(argv[i],
"--plugin") != 0)
56 if (++i == argc || argv[i][0] ==
'\0' || argv[i][0] ==
'-')
63 std::string str(argv[i]);
68 words.push_back(
"--help");
70 const char* name = words.front().c_str();
71 std::vector<const char*> args;
72 for (
const auto& w : words)
73 args.push_back(w.c_str());
75 _loadPlugin(name, args.size(), args.data());
88 if (haveHttpServerURI)
92 _extensions.insert(_extensions.begin(), std::make_unique<RocketsPlugin>());
94 throw std::runtime_error(
95 "CORE_NETWORKING_ENABLED was not set, but HTTP server URI "
99 for (
const auto& extension : _extensions)
101 extension->_api = api;
114 for (
const auto& extension : _extensions)
115 extension->preRender();
120 for (
const auto& extension : _extensions)
121 extension->postRender();
124 void PluginManager::_loadPlugin(
const char* name,
int argc,
const char* argv[])
129 auto createSym = library.getSymbolAddress(
"core_plugin_create");
132 throw std::runtime_error(std::string(
"Plugin '") + name +
"' is not a valid Core plugin; missing " +
133 "core_plugin_create()");
137 if (
auto plugin = createFunc(argc, argv))
139 _extensions.emplace_back(plugin);
140 _libs.push_back(std::move(library));
141 CORE_INFO(
"Loaded plugin '" << name <<
"'");
144 catch (
const std::runtime_error& exc)
const std::string & getHttpServerURI() const
PLATFORM_API ApplicationParameters & getApplicationParameters()
virtual ParametersManager & getParametersManager()=0
PluginManager(int argc, const char **argv)
Constructor.
void initPlugins(PluginAPI *api)
void trim(std::string &s)
std::vector< std::string > split(const std::string &s, char delim)
Engine *(* CreateFuncType)(int, const char **, ParametersManager &)