Mercurial > hg > orthanc
diff Plugins/Engine/PluginsManager.cpp @ 898:7000fc86fe62 plugins
improved plugin api
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 18 Jun 2014 09:18:28 +0200 |
parents | bafc9d592632 |
children | bb0a51561016 |
line wrap: on
line diff
--- a/Plugins/Engine/PluginsManager.cpp Tue Jun 17 17:43:39 2014 +0200 +++ b/Plugins/Engine/PluginsManager.cpp Wed Jun 18 09:18:28 2014 +0200 @@ -132,27 +132,47 @@ } - static void LogError(const char* str) + int32_t PluginsManager::InvokeService(OrthancPluginContext* context, + OrthancPluginService service, + const void* parameters) { - LOG(ERROR) << str; + switch (service) + { + case OrthancPluginService_LogError: + LOG(ERROR) << reinterpret_cast<const char*>(parameters); + return 0; + + case OrthancPluginService_LogWarning: + LOG(WARNING) << reinterpret_cast<const char*>(parameters); + return 0; + + case OrthancPluginService_LogInfo: + LOG(INFO) << reinterpret_cast<const char*>(parameters); + return 0; + + default: + break; + } + + PluginsManager* that = reinterpret_cast<PluginsManager*>(context->pluginsManager); + + if (that->HasServiceProvider() && + that->serviceProvider_->Handle(service, parameters)) + { + return 0; + } + + LOG(ERROR) << "Plugin invoking unknown service " << service; + return -1; } - static void LogWarning(const char* str) - { - LOG(WARNING) << str; - } - - static void LogInfo(const char* str) - { - LOG(INFO) << str; - } void PluginsManager::RegisterRestCallback(const OrthancPluginContext* context, const char* pathRegularExpression, OrthancPluginRestCallback callback) { LOG(INFO) << "Plugin has registered a REST callback on: " << pathRegularExpression; - PluginsManager* manager = reinterpret_cast<PluginsManager*>(context->pimpl); + PluginsManager* manager = reinterpret_cast<PluginsManager*>(context->pluginsManager); manager->restCallbacks_.push_back(std::make_pair(pathRegularExpression, callback)); } @@ -167,15 +187,14 @@ } - PluginsManager::PluginsManager() + PluginsManager::PluginsManager() : + serviceProvider_(NULL) { memset(&context_, 0, sizeof(context_)); - context_.pimpl = this; + context_.pluginsManager = this; context_.orthancVersion = ORTHANC_VERSION; context_.FreeBuffer = ::free; - context_.LogError = LogError; - context_.LogWarning = LogWarning; - context_.LogInfo = LogInfo; + context_.InvokeService = InvokeService; context_.RegisterRestCallback = RegisterRestCallback; context_.AnswerBuffer = AnswerBuffer; } @@ -279,4 +298,17 @@ } } } + + + IPluginServiceProvider& PluginsManager::GetServiceProvider() const + { + if (!HasServiceProvider()) + { + throw OrthancException(ErrorCode_BadRequest); + } + else + { + return *serviceProvider_; + } + } }