Mercurial > hg > orthanc
comparison Core/DicomNetworking/TimeoutDicomConnectionManager.cpp @ 2608:25225f0b4f33 jobs
simplification wrt. dicom connection manager
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Sat, 19 May 2018 15:50:09 +0200 |
parents | 988936118354 |
children | f7a84b551ee4 |
comparison
equal
deleted
inserted
replaced
2607:44e268605478 | 2608:25225f0b4f33 |
---|---|
45 | 45 |
46 class TimeoutDicomConnectionManager::Resource : public IDicomConnectionManager::IResource | 46 class TimeoutDicomConnectionManager::Resource : public IDicomConnectionManager::IResource |
47 { | 47 { |
48 private: | 48 private: |
49 TimeoutDicomConnectionManager& that_; | 49 TimeoutDicomConnectionManager& that_; |
50 boost::mutex::scoped_lock lock_; | |
51 | 50 |
52 public: | 51 public: |
53 Resource(TimeoutDicomConnectionManager& that) : | 52 Resource(TimeoutDicomConnectionManager& that) : |
54 that_(that), | 53 that_(that) |
55 lock_(that.mutex_) | |
56 { | 54 { |
55 if (that_.connection_.get() == NULL) | |
56 { | |
57 throw OrthancException(ErrorCode_InternalError); | |
58 } | |
57 } | 59 } |
58 | 60 |
59 ~Resource() | 61 ~Resource() |
60 { | 62 { |
61 that_.Touch(); | 63 that_.Touch(); |
62 } | 64 } |
63 | 65 |
64 DicomUserConnection& GetConnection() | 66 DicomUserConnection& GetConnection() |
65 { | 67 { |
66 if (that_.connection_.get() == NULL) | 68 assert(that_.connection_.get() != NULL); |
67 { | |
68 throw OrthancException(ErrorCode_InternalError); | |
69 } | |
70 | |
71 return *that_.connection_; | 69 return *that_.connection_; |
72 } | 70 } |
73 }; | 71 }; |
74 | 72 |
75 | 73 |
89 } | 87 } |
90 | 88 |
91 | 89 |
92 void TimeoutDicomConnectionManager::SetTimeout(unsigned int timeout) | 90 void TimeoutDicomConnectionManager::SetTimeout(unsigned int timeout) |
93 { | 91 { |
94 boost::mutex::scoped_lock lock(mutex_); | |
95 | |
96 timeout_ = boost::posix_time::milliseconds(timeout); | 92 timeout_ = boost::posix_time::milliseconds(timeout); |
97 CheckTimeoutInternal(); | 93 CheckTimeoutInternal(); |
98 } | 94 } |
99 | 95 |
100 | 96 |
101 unsigned int TimeoutDicomConnectionManager::GetTimeout() | 97 unsigned int TimeoutDicomConnectionManager::GetTimeout() |
102 { | 98 { |
103 boost::mutex::scoped_lock lock(mutex_); | |
104 return timeout_.total_milliseconds(); | 99 return timeout_.total_milliseconds(); |
105 } | 100 } |
106 | 101 |
107 | 102 |
108 void TimeoutDicomConnectionManager::Close() | 103 void TimeoutDicomConnectionManager::Close() |
109 { | 104 { |
110 boost::mutex::scoped_lock lock(mutex_); | |
111 connection_.reset(NULL); | 105 connection_.reset(NULL); |
112 } | 106 } |
113 | 107 |
114 | 108 |
115 void TimeoutDicomConnectionManager::CheckTimeout() | 109 void TimeoutDicomConnectionManager::CheckTimeout() |
116 { | 110 { |
117 boost::mutex::scoped_lock lock(mutex_); | |
118 CheckTimeoutInternal(); | 111 CheckTimeoutInternal(); |
119 } | 112 } |
120 | 113 |
121 | 114 |
122 IDicomConnectionManager::IResource* | 115 IDicomConnectionManager::IResource* |
123 TimeoutDicomConnectionManager::AcquireConnection(const std::string& localAet, | 116 TimeoutDicomConnectionManager::AcquireConnection(const std::string& localAet, |
124 const RemoteModalityParameters& remote) | 117 const RemoteModalityParameters& remote) |
125 { | 118 { |
126 boost::mutex::scoped_lock lock(mutex_); | |
127 | |
128 if (connection_.get() == NULL || | 119 if (connection_.get() == NULL || |
129 !connection_->IsSameAssociation(localAet, remote)) | 120 !connection_->IsSameAssociation(localAet, remote)) |
130 { | 121 { |
131 connection_.reset(new DicomUserConnection(localAet, remote)); | 122 connection_.reset(new DicomUserConnection(localAet, remote)); |
132 } | 123 } |