Mercurial > hg > orthanc-stone
comparison Framework/SmartLoader.cpp @ 262:77fdab5b5d6e am-2
cleanup + todos
author | am@osimis.io |
---|---|
date | Tue, 17 Jul 2018 18:28:12 +0200 |
parents | c887eddd48f1 |
children | c9cf95b49a86 |
comparison
equal
deleted
inserted
replaced
261:58ad26032bd6 | 262:77fdab5b5d6e |
---|---|
31 webService_(webService) | 31 webService_(webService) |
32 {} | 32 {} |
33 | 33 |
34 void SmartLoader::HandleMessage(IObservable& from, const IMessage& message) | 34 void SmartLoader::HandleMessage(IObservable& from, const IMessage& message) |
35 { | 35 { |
36 switch (message.GetType()) { | |
37 case MessageType_SliceGeometryReady: | |
38 // TODO keep track of objects that have been loaded already | |
39 break; | |
40 case MessageType_SliceImageReady: | |
41 // TODO keep track of objects that have been loaded already | |
42 break; | |
43 default: | |
44 VLOG("unhandled message type" << message.GetType()); | |
45 } | |
46 | |
36 // forward messages to its own observers | 47 // forward messages to its own observers |
37 IObservable::broker_.EmitMessage(from, IObservable::observers_, message); | 48 IObservable::broker_.EmitMessage(from, IObservable::observers_, message); |
38 } | 49 } |
39 | 50 |
40 ILayerSource* SmartLoader::GetFrame(const std::string& instanceId, unsigned int frame) | 51 ILayerSource* SmartLoader::GetFrame(const std::string& instanceId, unsigned int frame) |
41 { | 52 { |
53 // TODO: check if this frame has already been loaded or is already being loaded. | |
54 // - if already loaded: create a "clone" that will emit the GeometryReady/ImageReady messages "immediately" | |
55 // (it can not be immediate because Observers needs to register first and this is done after this method returns) | |
56 // - if currently loading, we need to return an object that will observe the existing LayerSource and forward | |
57 // the messages to its observables | |
58 // in both cases, we must be carefull about objects lifecycle !!! | |
42 std::auto_ptr<OrthancFrameLayerSource> layerSource (new OrthancFrameLayerSource(IObserver::broker_, webService_)); | 59 std::auto_ptr<OrthancFrameLayerSource> layerSource (new OrthancFrameLayerSource(IObserver::broker_, webService_)); |
43 layerSource->SetImageQuality(imageQuality_); | 60 layerSource->SetImageQuality(imageQuality_); |
44 layerSource->RegisterObserver(*this); | 61 layerSource->RegisterObserver(*this); |
45 layerSource->LoadFrame(instanceId, frame); | 62 layerSource->LoadFrame(instanceId, frame); |
46 | 63 |