diff Core/DicomNetworking/TimeoutDicomConnectionManager.h @ 3851:6498739a3c3c

refactoring: TimeoutDicomConnectionManager is now only used by Lua
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 20 Apr 2020 16:46:44 +0200
parents d729d6e8b484
children 9973d10bc5c4
line wrap: on
line diff
--- a/Core/DicomNetworking/TimeoutDicomConnectionManager.h	Mon Apr 20 14:45:21 2020 +0200
+++ b/Core/DicomNetworking/TimeoutDicomConnectionManager.h	Mon Apr 20 16:46:44 2020 +0200
@@ -37,62 +37,53 @@
 #  error The macro ORTHANC_ENABLE_DCMTK_NETWORKING must be defined
 #endif
 
-#if ORTHANC_ENABLE_DCMTK_NETWORKING == 0
-
-namespace Orthanc
-{
-  class TimeoutDicomConnectionManager : public boost::noncopyable
-  {
-  public:
-    void SetTimeout(unsigned int timeout)
-    {
-    }
+#if ORTHANC_ENABLE_DCMTK_NETWORKING != 1
+#  error The macro ORTHANC_ENABLE_DCMTK_NETWORKING must be 1 to use this file
+#endif
 
-    unsigned int GetTimeout()
-    {
-      return 0;
-    }
-
-    void Close()
-    {
-    }
-
-    void CheckTimeout()
-    {
-    }
-  };
-}
-
-#else
 
 #include "../Compatibility.h"
 #include "DicomUserConnection.h"
 
 #include <boost/date_time/posix_time/posix_time.hpp>
+#include <boost/thread/mutex.hpp>
 
 namespace Orthanc
 {
+  /**
+   * This class corresponds to a singleton to a DICOM SCU connection.
+   **/
   class TimeoutDicomConnectionManager : public boost::noncopyable
   {
   private:
+    boost::mutex                          mutex_;
     std::unique_ptr<DicomUserConnection>  connection_;
     boost::posix_time::ptime              lastUse_;
     boost::posix_time::time_duration      timeout_;
 
-    void Touch();
+    // Mutex must be locked
+    void TouchInternal();
 
-    void CheckTimeoutInternal();
+    // Mutex must be locked
+    void OpenInternal(const std::string& localAet,
+                      const RemoteModalityParameters& remote);
+
+    // Mutex must be locked
+    void CloseInternal();
 
   public:
-    class Resource : public boost::noncopyable
+    class Lock : public boost::noncopyable
     {
     private:
       TimeoutDicomConnectionManager&  that_;
+      boost::mutex::scoped_lock       lock_;
 
     public:
-      Resource(TimeoutDicomConnectionManager& that);
+      Lock(TimeoutDicomConnectionManager& that,
+           const std::string& localAet,
+           const RemoteModalityParameters& remote);
       
-      ~Resource();
+      ~Lock();
 
       DicomUserConnection& GetConnection();
     };
@@ -102,17 +93,12 @@
     {
     }
 
-    void SetTimeout(unsigned int timeout);
+    void SetInactivityTimeout(unsigned int milliseconds);
 
-    unsigned int GetTimeout();
+    unsigned int GetInactivityTimeout();  // In milliseconds
 
     void Close();
 
-    void CheckTimeout();
-
-    Resource* AcquireConnection(const std::string& localAet,
-                                const RemoteModalityParameters& remote);
+    void CloseIfInactive();
   };
 }
-
-#endif