comparison Framework/Layers/OrthancFrameLayerSource.cpp @ 299:3897f9f28cfa am-callable-and-promise

backup work in progress: updated messaging framework with ICallable
author am@osimis.io
date Fri, 14 Sep 2018 16:44:01 +0200
parents 5bd4161bf11b
children b4abaeb783b1
comparison
equal deleted inserted replaced
298:f58bfb7bbcc9 299:3897f9f28cfa
29 29
30 #include <boost/lexical_cast.hpp> 30 #include <boost/lexical_cast.hpp>
31 31
32 namespace OrthancStone 32 namespace OrthancStone
33 { 33 {
34 void OrthancFrameLayerSource::HandleMessage(IObservable& from, const IMessage& message) 34
35 void OrthancFrameLayerSource::OnSliceGeometryReady(const OrthancSlicesLoader::SliceGeometryReadyMessage& message)
35 { 36 {
36 switch (message.GetType()) 37 if (message.origin_.GetSliceCount() > 0)
37 { 38 {
38 case MessageType_SliceLoader_GeometryReady: 39 LayerSourceBase::NotifyGeometryReady();
40 }
41 else
39 { 42 {
40 const OrthancSlicesLoader& loader = dynamic_cast<const OrthancSlicesLoader&>(from);
41 if (loader.GetSliceCount() > 0)
42 {
43 LayerSourceBase::NotifyGeometryReady();
44 }
45 else
46 {
47 LayerSourceBase::NotifyGeometryError();
48 }
49
50 }; break;
51 case MessageType_SliceLoader_GeometryError:
52 {
53 const OrthancSlicesLoader& loader = dynamic_cast<const OrthancSlicesLoader&>(from);
54 LayerSourceBase::NotifyGeometryError(); 43 LayerSourceBase::NotifyGeometryError();
55 }; break;
56 case MessageType_SliceLoader_ImageReady:
57 {
58 const OrthancSlicesLoader::SliceImageReadyMessage& msg = dynamic_cast<const OrthancSlicesLoader::SliceImageReadyMessage&>(message);
59 bool isFull = (msg.effectiveQuality_ == SliceImageQuality_FullPng || msg.effectiveQuality_ == SliceImageQuality_FullPam);
60 LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(msg.image_.release(), msg.slice_, isFull),
61 msg.slice_.GetGeometry(), false);
62
63 }; break;
64 case MessageType_SliceLoader_ImageError:
65 {
66 const OrthancSlicesLoader::SliceImageErrorMessage& msg = dynamic_cast<const OrthancSlicesLoader::SliceImageErrorMessage&>(message);
67 LayerSourceBase::NotifyLayerReady(NULL, msg.slice_.GetGeometry(), true);
68 }; break;
69 default:
70 VLOG("unhandled message type" << message.GetType());
71 } 44 }
72 } 45 }
73 46
47 void OrthancFrameLayerSource::OnSliceGeometryError(const OrthancSlicesLoader::SliceGeometryErrorMessage& message)
48 {
49 LayerSourceBase::NotifyGeometryError();
50 }
51
52 void OrthancFrameLayerSource::OnSliceImageReady(const OrthancSlicesLoader::SliceImageReadyMessage& message)
53 {
54 bool isFull = (message.effectiveQuality_ == SliceImageQuality_FullPng || message.effectiveQuality_ == SliceImageQuality_FullPam);
55 LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(message.image_.release(), message.slice_, isFull),
56 message.slice_.GetGeometry(), false);
57 }
58
59 void OrthancFrameLayerSource::OnSliceImageError(const OrthancSlicesLoader::SliceImageErrorMessage& message)
60 {
61 LayerSourceBase::NotifyLayerReady(NULL, message.slice_.GetGeometry(), true);
62 }
74 63
75 OrthancFrameLayerSource::OrthancFrameLayerSource(MessageBroker& broker, IWebService& orthanc) : 64 OrthancFrameLayerSource::OrthancFrameLayerSource(MessageBroker& broker, IWebService& orthanc) :
76 LayerSourceBase(broker), 65 LayerSourceBase(broker),
77 IObserver(broker), 66 IObserver(broker),
78 //OrthancSlicesLoader::ISliceLoaderObserver(broker), 67 //OrthancSlicesLoader::ISliceLoaderObserver(broker),
79 loader_(broker, orthanc), 68 loader_(broker, orthanc),
80 quality_(SliceImageQuality_FullPng) 69 quality_(SliceImageQuality_FullPng)
81 { 70 {
82 DeclareHandledMessage(MessageType_SliceLoader_GeometryReady); 71 // DeclareHandledMessage(MessageType_SliceLoader_GeometryReady);
83 DeclareHandledMessage(MessageType_SliceLoader_GeometryError); 72 // DeclareHandledMessage(MessageType_SliceLoader_GeometryError);
84 DeclareHandledMessage(MessageType_SliceLoader_ImageReady); 73 // DeclareHandledMessage(MessageType_SliceLoader_ImageReady);
85 DeclareHandledMessage(MessageType_SliceLoader_ImageError); 74 // DeclareHandledMessage(MessageType_SliceLoader_ImageError);
86 loader_.RegisterObserver(*this); 75 loader_.RegisterObserverCallback(new Callable<OrthancFrameLayerSource, OrthancSlicesLoader::SliceGeometryReadyMessage>(*this, &OrthancFrameLayerSource::OnSliceGeometryReady));
76 loader_.RegisterObserverCallback(new Callable<OrthancFrameLayerSource, OrthancSlicesLoader::SliceGeometryErrorMessage>(*this, &OrthancFrameLayerSource::OnSliceGeometryError));
77 loader_.RegisterObserverCallback(new Callable<OrthancFrameLayerSource, OrthancSlicesLoader::SliceImageReadyMessage>(*this, &OrthancFrameLayerSource::OnSliceImageReady));
78 loader_.RegisterObserverCallback(new Callable<OrthancFrameLayerSource, OrthancSlicesLoader::SliceImageErrorMessage>(*this, &OrthancFrameLayerSource::OnSliceImageError));
87 } 79 }
88 80
89 81
90 void OrthancFrameLayerSource::LoadSeries(const std::string& seriesId) 82 void OrthancFrameLayerSource::LoadSeries(const std::string& seriesId)
91 { 83 {