From 1e2f7fdd5cf930ed5651e452d4985dd504af3f58 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Tue, 22 Apr 2014 19:14:09 +0200 Subject: [PATCH] Skeleton MessageRelay --- src/GUI/Frame.h | 14 ++++++ src/MessageRelay.h | 43 +++++++++++++++++++ vs11/Returngeance/Returngeance.vcxproj | 2 + .../Returngeance/Returngeance.vcxproj.filters | 7 +++ 4 files changed, 66 insertions(+) create mode 100644 src/GUI/Frame.h create mode 100644 src/MessageRelay.h diff --git a/src/GUI/Frame.h b/src/GUI/Frame.h new file mode 100644 index 0000000..5415d64 --- /dev/null +++ b/src/GUI/Frame.h @@ -0,0 +1,14 @@ +#ifndef GUI_Frame_h__ +#define GUI_Frame_h__ + +namespace GUI +{ + +class Frame +{ + +}; + +} + +#endif // GUI_Frame_h__ diff --git a/src/MessageRelay.h b/src/MessageRelay.h new file mode 100644 index 0000000..692f8a7 --- /dev/null +++ b/src/MessageRelay.h @@ -0,0 +1,43 @@ +#ifndef MessageRelay_h__ +#define MessageRelay_h__ + +#include +#include +#include + +struct Message +{ +protected: + Message() { } +}; + +class MessageRelay +{ +private: + typedef std::string MessageType_t; + typedef std::function 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> m_Callbacks; + +}; + +#endif // MessageRelay_h__ diff --git a/vs11/Returngeance/Returngeance.vcxproj b/vs11/Returngeance/Returngeance.vcxproj index 4726981..f5e903d 100755 --- a/vs11/Returngeance/Returngeance.vcxproj +++ b/vs11/Returngeance/Returngeance.vcxproj @@ -139,6 +139,8 @@ + + diff --git a/vs11/Returngeance/Returngeance.vcxproj.filters b/vs11/Returngeance/Returngeance.vcxproj.filters index 672e8dd..4922bd1 100755 --- a/vs11/Returngeance/Returngeance.vcxproj.filters +++ b/vs11/Returngeance/Returngeance.vcxproj.filters @@ -112,6 +112,9 @@ {9f45f029-46c8-4c0d-b44c-dc9bffd3c6a6} + + {6e633434-4aed-453d-b2f9-8c51ca7f78db} + @@ -214,6 +217,10 @@ + + GUI + +