21 #ifndef GF_MESSAGE_MANAGER_H 22 #define GF_MESSAGE_MANAGER_H 27 #include <type_traits> 32 #include "Portability.h" 35 #ifndef DOXYGEN_SHOULD_SKIP_THIS 129 static_assert(std::is_base_of<Message, E>::value,
"E must be an Message");
130 static_assert(E::type !=
InvalidId,
"E must define its type");
131 return registerHandler(E::type, handler);
161 template<
typename R,
typename T>
163 return registerHandler(type, std::bind(pm, obj, std::placeholders::_1, std::placeholders::_2));
192 template<
typename E,
typename R,
typename T>
194 static_assert(std::is_base_of<Message, E>::value,
"E must be an Message");
195 static_assert(E::type !=
InvalidId,
"E must define its type");
196 return registerHandler(E::type, std::bind(pm, obj, std::placeholders::_1, std::placeholders::_2));
219 for (
auto id : ids) {
254 void sendMessage(
Id type,
Message *message);
280 static_assert(std::is_base_of<Message, E>::value,
"E must be an Message");
281 static_assert(E::type !=
InvalidId,
"E must define its type");
282 sendMessage(E::type, message);
294 std::map<Id, std::vector<Handler>> m_handlers;
297 #ifndef DOXYGEN_SHOULD_SKIP_THIS 302 #endif // GF_MESSAGE_MANAGER_H std::function< MessageStatus(Id, Message *)> MessageHandler
A message handler.
Definition: Message.h:121
MessageHandlerId registerHandler(MessageHandler handler)
Register a message handler for a type of message.
Definition: MessageManager.h:128
void sendMessage(E *message)
Send a message.
Definition: MessageManager.h:279
uint64_t Id
An identifier.
Definition: Id.h:38
A message manager.
Definition: MessageManager.h:76
uint64_t MessageHandlerId
An identifier for a message handler.
Definition: MessageManager.h:45
MessageHandlerId registerHandler(R T::*pm, T *obj)
Register a message handler for a type of message.
Definition: MessageManager.h:193
The namespace for gf classes.
Definition: Action.h:34
A constant reference to an array and its size.
Definition: ArrayRef.h:42
MessageHandlerId registerHandler(Id type, R T::*pm, T *obj)
Register a message handler for a type of message.
Definition: MessageManager.h:162
The base class for all messages.
Definition: Message.h:53
void removeHandlers(ArrayRef< MessageHandlerId > ids)
Remove a list of handlers.
Definition: MessageManager.h:218
constexpr Id InvalidId
The invalid id (which is 0)
Definition: Id.h:44