Mercurial > hg > orthanc-stone
diff Framework/Deprecated/Loaders/LoaderStateMachine.cpp @ 1310:9bea7e15b519 broker
- first pass at changes to cope with the refactoring of the loading system
- global loader-related data accessible through ILoadersContext::ILock
- many changes in legacy loaders (CT, RTSTRUCT, DOSE) + loader cache
- NOT FINISHED! there are shared_from_this calls in ctors! this will crash!
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Mon, 09 Mar 2020 14:53:22 +0100 |
parents | 257f2c9a02ac |
children | 9b126de2cde2 |
line wrap: on
line diff
--- a/Framework/Deprecated/Loaders/LoaderStateMachine.cpp Wed Mar 04 13:20:12 2020 +0100 +++ b/Framework/Deprecated/Loaders/LoaderStateMachine.cpp Mon Mar 09 14:53:22 2020 +0100 @@ -21,6 +21,8 @@ #include "LoaderStateMachine.h" +#include "../../Loaders/ILoadersContext.h" + #include <Core/OrthancException.h> namespace Deprecated @@ -97,8 +99,11 @@ ") < simultaneousDownloads_ (" << simultaneousDownloads_ << ") --> will Schedule command addr " << std::hex << nextCommand << std::dec; - boost::shared_ptr<IObserver> observer(GetSharedObserver()); - oracle_.Schedule(observer, nextCommand); + { + std::unique_ptr<OrthancStone::ILoadersContext::ILock> lock(loadersContext_.Lock()); + boost::shared_ptr<IObserver> observer(GetSharedObserver()); + lock->Schedule(observer, 0, nextCommand); // TODO: priority! + } pendingCommands_.pop_front(); activeCommands_++; @@ -157,20 +162,32 @@ } - LoaderStateMachine::LoaderStateMachine(OrthancStone::IOracle& oracle, - OrthancStone::IObservable& oracleObservable) : - oracle_(oracle), - active_(false), - simultaneousDownloads_(4), - activeCommands_(0) + LoaderStateMachine::LoaderStateMachine( + OrthancStone::ILoadersContext& loadersContext) + : loadersContext_(loadersContext) + , active_(false) + , simultaneousDownloads_(4) + , activeCommands_(0) { - LOG(TRACE) << "LoaderStateMachine(" << std::hex << this << std::dec << ")::LoaderStateMachine()"; + using OrthancStone::ILoadersContext; + + LOG(TRACE) + << "LoaderStateMachine(" << std::hex << this + << std::dec << ")::LoaderStateMachine()"; + + std::unique_ptr<ILoadersContext::ILock> lock(loadersContext_.Lock()); + + OrthancStone::IObservable& observable = lock->GetOracleObservable(); - // TODO => Move this out of constructor - Register<OrthancStone::OrthancRestApiCommand::SuccessMessage>(oracleObservable, &LoaderStateMachine::HandleSuccessMessage); - Register<OrthancStone::GetOrthancImageCommand::SuccessMessage>(oracleObservable, &LoaderStateMachine::HandleSuccessMessage); - Register<OrthancStone::GetOrthancWebViewerJpegCommand::SuccessMessage>(oracleObservable, &LoaderStateMachine::HandleSuccessMessage); - Register<OrthancStone::OracleCommandExceptionMessage>(oracleObservable, &LoaderStateMachine::HandleExceptionMessage); + // TODO => Move this out of constructor WHY? + Register<OrthancStone::OrthancRestApiCommand::SuccessMessage>( + observable, &LoaderStateMachine::HandleSuccessMessage); + Register<OrthancStone::GetOrthancImageCommand::SuccessMessage>( + observable, &LoaderStateMachine::HandleSuccessMessage); + Register<OrthancStone::GetOrthancWebViewerJpegCommand::SuccessMessage>( + observable, &LoaderStateMachine::HandleSuccessMessage); + Register<OrthancStone::OracleCommandExceptionMessage>( + observable, &LoaderStateMachine::HandleExceptionMessage); } LoaderStateMachine::~LoaderStateMachine()