diff Plugin/PluginContext.cpp @ 0:95226b754d9e

initial release
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 17 Sep 2018 11:34:55 +0200
parents
children 5e6de82bb10f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugin/PluginContext.cpp	Mon Sep 17 11:34:55 2018 +0200
@@ -0,0 +1,109 @@
+/**
+ * Transfers accelerator plugin for Orthanc
+ * Copyright (C) 2018 Osimis, Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Affero General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+
+#include "PluginContext.h"
+
+#include <Core/Logging.h>
+
+
+namespace OrthancPlugins
+{
+  PluginContext::PluginContext(OrthancPluginContext* context,
+                               size_t threadsCount,
+                               size_t targetBucketSize,
+                               size_t maxPushTransactions,
+                               size_t memoryCacheSize) :
+    context_(context),
+    cache_(context),
+    pushTransactions_(maxPushTransactions),
+    semaphore_(threadsCount),
+    threadsCount_(threadsCount),
+    targetBucketSize_(targetBucketSize)
+  {
+    pluginUuid_ = Orthanc::Toolbox::GenerateUuid();
+
+    cache_.SetMaxMemorySize(memoryCacheSize);
+
+    LOG(INFO) << "Transfers accelerator will use " << threadsCount << " threads to run HTTP queries";
+    LOG(INFO) << "Transfers accelerator will use keep local DICOM files in a memory cache of size: "
+              << OrthancPlugins::ConvertToMegabytes(memoryCacheSize) << " MB";
+    LOG(INFO) << "Transfers accelerator will aim at HTTP queries of size: "
+              << OrthancPlugins::ConvertToKilobytes(targetBucketSize) << " KB";
+    LOG(INFO) << "Transfers accelerator will be able to receive up to "
+              << maxPushTransactions << " push transactions at once";
+
+  }
+
+
+  std::auto_ptr<PluginContext>& PluginContext::GetSingleton()
+  {
+    static std::auto_ptr<PluginContext>  singleton_;
+    return singleton_;
+  }
+
+  
+  bool PluginContext::LookupBidirectionalPeer(std::string& remoteSelf,
+                                              const std::string& remotePeer) const
+  {
+    BidirectionalPeers::const_iterator found = bidirectionalPeers_.find(remotePeer);
+
+    if (found == bidirectionalPeers_.end())
+    {
+      return false;
+    }
+    else
+    {
+      remoteSelf = found->second;
+      return true;
+    }
+  }
+  
+
+  void PluginContext::Initialize(OrthancPluginContext* context,
+                                 size_t threadsCount,
+                                 size_t targetBucketSize,
+                                 size_t maxPushTransactions,
+                                 size_t memoryCacheSize)
+  {
+    GetSingleton().reset(new PluginContext(context, threadsCount, targetBucketSize,
+                                           maxPushTransactions, memoryCacheSize));
+  }
+
+  
+  PluginContext& PluginContext::GetInstance()
+  {
+    if (GetSingleton().get() == NULL)
+    {
+      throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
+    }
+    else
+    {
+      return *GetSingleton();
+    }
+  }
+  
+
+  void PluginContext::Finalize()
+  {
+    if (GetSingleton().get() != NULL)
+    {
+      GetSingleton().reset();
+    }
+  }
+}