Mercurial > hg > orthanc
diff Plugins/Engine/PluginsManager.cpp @ 1630:ffd23c0104af
"/system" URI gives information about the plugins used for storage area and DB back-end
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 21 Sep 2015 13:26:45 +0200 |
parents | c17b1142caab |
children | eb8fbcf008b5 |
line wrap: on
line diff
--- a/Plugins/Engine/PluginsManager.cpp Fri Sep 18 17:45:59 2015 +0200 +++ b/Plugins/Engine/PluginsManager.cpp Mon Sep 21 13:26:45 2015 +0200 @@ -54,6 +54,19 @@ namespace Orthanc { + PluginsManager::Plugin::Plugin(PluginsManager& pluginManager, + const std::string& path) : + library_(path), + pluginManager_(pluginManager) + { + memset(&context_, 0, sizeof(context_)); + context_.pluginsManager = this; + context_.orthancVersion = ORTHANC_VERSION; + context_.Free = ::free; + context_.InvokeService = InvokeService; + } + + static void CallInitialize(SharedLibrary& plugin, const OrthancPluginContext& context) { @@ -157,15 +170,15 @@ break; } - PluginsManager* that = reinterpret_cast<PluginsManager*>(context->pluginsManager); + Plugin* that = reinterpret_cast<Plugin*>(context->pluginsManager); for (std::list<IPluginServiceProvider*>::iterator - it = that->serviceProviders_.begin(); - it != that->serviceProviders_.end(); ++it) + it = that->GetPluginManager().serviceProviders_.begin(); + it != that->GetPluginManager().serviceProviders_.end(); ++it) { try { - if ((*it)->InvokeService(service, params)) + if ((*it)->InvokeService(that->GetSharedLibrary(), service, params)) { return OrthancPluginErrorCode_Success; } @@ -185,11 +198,6 @@ PluginsManager::PluginsManager() { - memset(&context_, 0, sizeof(context_)); - context_.pluginsManager = this; - context_.orthancVersion = ORTHANC_VERSION; - context_.Free = ::free; - context_.InvokeService = InvokeService; } PluginsManager::~PluginsManager() @@ -201,7 +209,7 @@ LOG(WARNING) << "Unregistering plugin '" << it->first << "' (version " << it->second->GetVersion() << ")"; - CallFinalize(it->second->GetLibrary()); + CallFinalize(it->second->GetSharedLibrary()); delete it->second; } } @@ -231,27 +239,27 @@ return; } - std::auto_ptr<Plugin> plugin(new Plugin(path)); + std::auto_ptr<Plugin> plugin(new Plugin(*this, path)); - if (!IsOrthancPlugin(plugin->GetLibrary())) + if (!IsOrthancPlugin(plugin->GetSharedLibrary())) { - LOG(ERROR) << "Plugin " << plugin->GetLibrary().GetPath() + LOG(ERROR) << "Plugin " << plugin->GetSharedLibrary().GetPath() << " does not declare the proper entry functions"; throw OrthancException(ErrorCode_SharedLibrary); } - std::string name(CallGetName(plugin->GetLibrary())); + std::string name(CallGetName(plugin->GetSharedLibrary())); if (plugins_.find(name) != plugins_.end()) { LOG(ERROR) << "Plugin '" << name << "' already registered"; throw OrthancException(ErrorCode_SharedLibrary); } - plugin->SetVersion(CallGetVersion(plugin->GetLibrary())); + plugin->SetVersion(CallGetVersion(plugin->GetSharedLibrary())); LOG(WARNING) << "Registering plugin '" << name << "' (version " << plugin->GetVersion() << ")"; - CallInitialize(plugin->GetLibrary(), context_); + CallInitialize(plugin->GetSharedLibrary(), plugin->GetContext()); plugins_[name] = plugin.release(); } @@ -333,5 +341,4 @@ return it->second->GetVersion(); } } - }