Mercurial > hg > orthanc-stone
diff Framework/Messages/IMessage.h @ 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 | 192e6e349e69 |
children | 4a79193ffb58 |
line wrap: on
line diff
--- a/Framework/Messages/IMessage.h Mon Sep 10 12:22:26 2018 +0200 +++ b/Framework/Messages/IMessage.h Fri Sep 14 16:44:01 2018 +0200 @@ -27,16 +27,61 @@ namespace OrthancStone { - struct IMessage : public boost::noncopyable + + // base message that are exchanged between IObservable and IObserver + struct IMessage : public boost::noncopyable { MessageType messageType_; - public: + protected: IMessage(const MessageType& messageType) : messageType_(messageType) {} + public: virtual ~IMessage() {} MessageType GetType() const {return messageType_;} }; + + // base class to derive from to implement your own messages + // it handles the message type for you + template <MessageType type> + struct BaseMessage : public IMessage + { + enum + { + Type = type + }; + + BaseMessage() + : IMessage(static_cast<MessageType>(Type)) + {} + }; + + // simple message implementation when no payload is needed + // sample usage: + // typedef NoPayloadMessage<MessageType_LayerSource_GeometryReady> GeometryReadyMessage; + template <MessageType type> + struct NoPayloadMessage : public BaseMessage<type> + { + NoPayloadMessage() + : BaseMessage<type>() + {} + + }; + + // simple message implementation when no payload is needed but the origin is required + // sample usage: + // typedef OriginMessage<MessageType_SliceLoader_GeometryError, OrthancSlicesLoader> SliceGeometryErrorMessage; + template <MessageType type, typename TOrigin> + struct OriginMessage : public BaseMessage<type> + { + TOrigin& origin_; + OriginMessage(TOrigin& origin) + : BaseMessage<type>(), + origin_(origin) + {} + + }; + }