Mercurial > hg > orthanc-stone
comparison 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 |
comparison
equal
deleted
inserted
replaced
1309:1f877e0846fe | 1310:9bea7e15b519 |
---|---|
19 **/ | 19 **/ |
20 | 20 |
21 | 21 |
22 #include "LoaderStateMachine.h" | 22 #include "LoaderStateMachine.h" |
23 | 23 |
24 #include "../../Loaders/ILoadersContext.h" | |
25 | |
24 #include <Core/OrthancException.h> | 26 #include <Core/OrthancException.h> |
25 | 27 |
26 namespace Deprecated | 28 namespace Deprecated |
27 { | 29 { |
28 void LoaderStateMachine::State::Handle(const OrthancStone::OrthancRestApiCommand::SuccessMessage& message) | 30 void LoaderStateMachine::State::Handle(const OrthancStone::OrthancRestApiCommand::SuccessMessage& message) |
95 LOG(TRACE) << " LoaderStateMachine(" << std::hex << this << std::dec << | 97 LOG(TRACE) << " LoaderStateMachine(" << std::hex << this << std::dec << |
96 ")::Step(): activeCommands_ (" << activeCommands_ << | 98 ")::Step(): activeCommands_ (" << activeCommands_ << |
97 ") < simultaneousDownloads_ (" << simultaneousDownloads_ << | 99 ") < simultaneousDownloads_ (" << simultaneousDownloads_ << |
98 ") --> will Schedule command addr " << std::hex << nextCommand << std::dec; | 100 ") --> will Schedule command addr " << std::hex << nextCommand << std::dec; |
99 | 101 |
100 boost::shared_ptr<IObserver> observer(GetSharedObserver()); | 102 { |
101 oracle_.Schedule(observer, nextCommand); | 103 std::unique_ptr<OrthancStone::ILoadersContext::ILock> lock(loadersContext_.Lock()); |
104 boost::shared_ptr<IObserver> observer(GetSharedObserver()); | |
105 lock->Schedule(observer, 0, nextCommand); // TODO: priority! | |
106 } | |
102 pendingCommands_.pop_front(); | 107 pendingCommands_.pop_front(); |
103 | 108 |
104 activeCommands_++; | 109 activeCommands_++; |
105 } | 110 } |
106 else | 111 else |
155 } | 160 } |
156 } | 161 } |
157 } | 162 } |
158 | 163 |
159 | 164 |
160 LoaderStateMachine::LoaderStateMachine(OrthancStone::IOracle& oracle, | 165 LoaderStateMachine::LoaderStateMachine( |
161 OrthancStone::IObservable& oracleObservable) : | 166 OrthancStone::ILoadersContext& loadersContext) |
162 oracle_(oracle), | 167 : loadersContext_(loadersContext) |
163 active_(false), | 168 , active_(false) |
164 simultaneousDownloads_(4), | 169 , simultaneousDownloads_(4) |
165 activeCommands_(0) | 170 , activeCommands_(0) |
166 { | 171 { |
167 LOG(TRACE) << "LoaderStateMachine(" << std::hex << this << std::dec << ")::LoaderStateMachine()"; | 172 using OrthancStone::ILoadersContext; |
168 | 173 |
169 // TODO => Move this out of constructor | 174 LOG(TRACE) |
170 Register<OrthancStone::OrthancRestApiCommand::SuccessMessage>(oracleObservable, &LoaderStateMachine::HandleSuccessMessage); | 175 << "LoaderStateMachine(" << std::hex << this |
171 Register<OrthancStone::GetOrthancImageCommand::SuccessMessage>(oracleObservable, &LoaderStateMachine::HandleSuccessMessage); | 176 << std::dec << ")::LoaderStateMachine()"; |
172 Register<OrthancStone::GetOrthancWebViewerJpegCommand::SuccessMessage>(oracleObservable, &LoaderStateMachine::HandleSuccessMessage); | 177 |
173 Register<OrthancStone::OracleCommandExceptionMessage>(oracleObservable, &LoaderStateMachine::HandleExceptionMessage); | 178 std::unique_ptr<ILoadersContext::ILock> lock(loadersContext_.Lock()); |
179 | |
180 OrthancStone::IObservable& observable = lock->GetOracleObservable(); | |
181 | |
182 // TODO => Move this out of constructor WHY? | |
183 Register<OrthancStone::OrthancRestApiCommand::SuccessMessage>( | |
184 observable, &LoaderStateMachine::HandleSuccessMessage); | |
185 Register<OrthancStone::GetOrthancImageCommand::SuccessMessage>( | |
186 observable, &LoaderStateMachine::HandleSuccessMessage); | |
187 Register<OrthancStone::GetOrthancWebViewerJpegCommand::SuccessMessage>( | |
188 observable, &LoaderStateMachine::HandleSuccessMessage); | |
189 Register<OrthancStone::OracleCommandExceptionMessage>( | |
190 observable, &LoaderStateMachine::HandleExceptionMessage); | |
174 } | 191 } |
175 | 192 |
176 LoaderStateMachine::~LoaderStateMachine() | 193 LoaderStateMachine::~LoaderStateMachine() |
177 { | 194 { |
178 LOG(TRACE) << "LoaderStateMachine(" << std::hex << this << std::dec << ")::~LoaderStateMachine()"; | 195 LOG(TRACE) << "LoaderStateMachine(" << std::hex << this << std::dec << ")::~LoaderStateMachine()"; |