Mercurial > hg > orthanc
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