comparison 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
comparison
equal deleted inserted replaced
298:f58bfb7bbcc9 299:3897f9f28cfa
25 25
26 #include <boost/noncopyable.hpp> 26 #include <boost/noncopyable.hpp>
27 27
28 namespace OrthancStone { 28 namespace OrthancStone {
29 29
30 struct IMessage : public boost::noncopyable 30
31 // base message that are exchanged between IObservable and IObserver
32 struct IMessage : public boost::noncopyable
31 { 33 {
32 MessageType messageType_; 34 MessageType messageType_;
33 public: 35 protected:
34 IMessage(const MessageType& messageType) 36 IMessage(const MessageType& messageType)
35 : messageType_(messageType) 37 : messageType_(messageType)
36 {} 38 {}
39 public:
37 virtual ~IMessage() {} 40 virtual ~IMessage() {}
38 41
39 MessageType GetType() const {return messageType_;} 42 MessageType GetType() const {return messageType_;}
40 }; 43 };
41 44
45
46 // base class to derive from to implement your own messages
47 // it handles the message type for you
48 template <MessageType type>
49 struct BaseMessage : public IMessage
50 {
51 enum
52 {
53 Type = type
54 };
55
56 BaseMessage()
57 : IMessage(static_cast<MessageType>(Type))
58 {}
59 };
60
61 // simple message implementation when no payload is needed
62 // sample usage:
63 // typedef NoPayloadMessage<MessageType_LayerSource_GeometryReady> GeometryReadyMessage;
64 template <MessageType type>
65 struct NoPayloadMessage : public BaseMessage<type>
66 {
67 NoPayloadMessage()
68 : BaseMessage<type>()
69 {}
70
71 };
72
73 // simple message implementation when no payload is needed but the origin is required
74 // sample usage:
75 // typedef OriginMessage<MessageType_SliceLoader_GeometryError, OrthancSlicesLoader> SliceGeometryErrorMessage;
76 template <MessageType type, typename TOrigin>
77 struct OriginMessage : public BaseMessage<type>
78 {
79 TOrigin& origin_;
80 OriginMessage(TOrigin& origin)
81 : BaseMessage<type>(),
82 origin_(origin)
83 {}
84
85 };
86
42 } 87 }