diff OrthancServer/ServerContext.cpp @ 996:cf52f3bcb2b3 lua-scripting

clarification of Lua classes wrt multithreading
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 03 Jul 2014 16:27:16 +0200
parents 8c67382f44a7
children 1b1d51e9f1a2
line wrap: on
line diff
--- a/OrthancServer/ServerContext.cpp	Thu Jul 03 15:58:53 2014 +0200
+++ b/OrthancServer/ServerContext.cpp	Thu Jul 03 16:27:16 2014 +0200
@@ -46,6 +46,7 @@
 #define ENABLE_DICOM_CACHE  1
 
 static const char* RECEIVED_INSTANCE_FILTER = "ReceivedInstanceFilter";
+static const char* ON_STORED_INSTANCE = "OnStoredInstance";
 
 static const size_t DICOM_CACHE_SIZE = 2;
 
@@ -91,6 +92,31 @@
     storage_.Remove(fileUuid);
   }
 
+
+  bool ServerContext::ApplyReceivedInstanceFilter(const Json::Value& dicomJson,
+                                                  const std::string& remoteAet)
+  {
+    LuaContextLocker locker(*this);
+
+    if (locker.GetLua().IsExistingFunction(RECEIVED_INSTANCE_FILTER))
+    {
+      Json::Value simplified;
+      SimplifyTags(simplified, dicomJson);
+
+      LuaFunctionCall call(locker.GetLua(), RECEIVED_INSTANCE_FILTER);
+      call.PushJSON(simplified);
+      call.PushString(remoteAet);
+
+      if (!call.ExecutePredicate())
+      {
+        return false;
+      }
+    }
+
+    return true;
+  }
+
+
   StoreStatus ServerContext::Store(const char* dicomInstance,
                                    size_t dicomSize,
                                    const DicomMap& dicomSummary,
@@ -98,20 +124,10 @@
                                    const std::string& remoteAet)
   {
     // Test if the instance must be filtered out
-    if (lua_.IsExistingFunction(RECEIVED_INSTANCE_FILTER))
+    if (!ApplyReceivedInstanceFilter(dicomJson, remoteAet))
     {
-      Json::Value simplified;
-      SimplifyTags(simplified, dicomJson);
-
-      LuaFunctionCall call(lua_, RECEIVED_INSTANCE_FILTER);
-      call.PushJSON(simplified);
-      call.PushString(remoteAet);
-
-      if (!call.ExecutePredicate())
-      {
-        LOG(INFO) << "An incoming instance has been discarded by the filter";
-        return StoreStatus_FilteredOut;
-      }
+      LOG(INFO) << "An incoming instance has been discarded by the filter";
+      return StoreStatus_FilteredOut;
     }
 
     if (compressionEnabled_)