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_;
+    }
+  }
 }