Skeleton MessageRelay

This commit is contained in:
2014-04-22 19:14:09 +02:00
parent 84d6911744
commit 1e2f7fdd5c
4 changed files with 66 additions and 0 deletions
+14
View File
@@ -0,0 +1,14 @@
#ifndef GUI_Frame_h__
#define GUI_Frame_h__
namespace GUI
{
class Frame
{
};
}
#endif // GUI_Frame_h__
+43
View File
@@ -0,0 +1,43 @@
#ifndef MessageRelay_h__
#define MessageRelay_h__
#include <functional>
#include <unordered_map>
#include <list>
struct Message
{
protected:
Message() { }
};
class MessageRelay
{
private:
typedef std::string MessageType_t;
typedef std::function<bool(Message)> MessageCallback_t;
public:
void Subscribe(std::string messageType, MessageCallback_t callback)
{
m_Callbacks[messageType].push_back(callback);
}
void Raise(std::string messageType, Message message)
{
auto callbackIt = m_Callbacks.find(messageType);
if (callbackIt == m_Callbacks.end())
return;
for (auto &callback : callbackIt->second)
{
callback(message);
}
}
private:
std::unordered_map<MessageType_t, std::list<MessageCallback_t>> m_Callbacks;
};
#endif // MessageRelay_h__