Mercurial > hg > orthanc-stone
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 } |