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()";