Mercurial > hg > orthanc
diff OrthancServer/ServerContext.h @ 948:e57e08ed510f dicom-rt
integration mainline -> dicom-rt
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 25 Jun 2014 13:57:05 +0200 |
parents | 8cfc6119a5bd d466b3606aca |
children |
line wrap: on
line diff
--- a/OrthancServer/ServerContext.h Wed Apr 16 16:15:58 2014 +0200 +++ b/OrthancServer/ServerContext.h Wed Jun 25 13:57:05 2014 +0200 @@ -38,9 +38,8 @@ #include "../Core/RestApi/RestApiOutput.h" #include "../Core/Lua/LuaContext.h" #include "ServerIndex.h" -#include "FromDcmtkBridge.h" - -#include <boost/thread.hpp> +#include "ParsedDicomFile.h" +#include "DicomProtocol/ReusableDicomUserConnection.h" namespace Orthanc { @@ -65,19 +64,37 @@ virtual IDynamicObject* Provide(const std::string& id); }; - boost::mutex cacheMutex_; - FileStorage storage_; ServerIndex index_; CompressedFileStorageAccessor accessor_; bool compressionEnabled_; DicomCacheProvider provider_; + boost::mutex dicomCacheMutex_; MemoryCache dicomCache_; + ReusableDicomUserConnection scu_; LuaContext lua_; public: + class DicomCacheLocker + { + private: + ServerContext& that_; + ParsedDicomFile *dicom_; + + public: + DicomCacheLocker(ServerContext& that, + const std::string& instancePublicId); + + ~DicomCacheLocker(); + + ParsedDicomFile& GetDicom() + { + return *dicom_; + } + }; + ServerContext(const boost::filesystem::path& storagePath, const boost::filesystem::path& indexPath); @@ -107,25 +124,19 @@ const std::string& remoteAet); StoreStatus Store(std::string& resultPublicId, - DcmFileFormat& dicomInstance, + ParsedDicomFile& dicomInstance, const char* dicomBuffer, size_t dicomSize); StoreStatus Store(std::string& resultPublicId, - DcmFileFormat& dicomInstance); + ParsedDicomFile& dicomInstance); StoreStatus Store(std::string& resultPublicId, const char* dicomBuffer, size_t dicomSize); StoreStatus Store(std::string& resultPublicId, - const std::string& dicomContent) - { - if (dicomContent.size() == 0) - return Store(resultPublicId, NULL, 0); - else - return Store(resultPublicId, &dicomContent[0], dicomContent.size()); - } + const std::string& dicomContent); void AnswerDicomFile(RestApiOutput& output, const std::string& instancePublicId, @@ -140,16 +151,6 @@ FileContentType content, bool uncompressIfNeeded = true); - // TODO IMPLEMENT MULTITHREADING FOR THIS METHOD - ParsedDicomFile& GetDicomFile(const std::string& instancePublicId); - - boost::mutex& GetDicomFileMutex() - { - // TODO IMPROVE MULTITHREADING - // Every call to "ParsedDicomFile" must lock this mutex!!! - return cacheMutex_; - } - LuaContext& GetLuaContext() { return lua_; @@ -161,5 +162,10 @@ { return accessor_.IsStoreMD5(); } + + ReusableDicomUserConnection& GetReusableDicomUserConnection() + { + return scu_; + } }; }