class
IMessageManagerThis manager defines a messaging system, that allows communication between different parts of the code.
When a message is sent from any part of the code, all the objects that are listening to that specific message (which is identified using an ID) are notified. Therefore, all the parts of the code that need to react to certain events can be notified without he sender needing to know them.
To listen to messages, two things can be used. The first one, and the most common, is the IMessageListener interface, which allow classes to listen to messages. Another alternative is using a handler function, which is a static function that receives messages.
Derived classes
- class cMessageManager
- The implementation of IMessageManager; this should only be used for extending and detouring.
Public types
- enum Options { kOptionAllowLock = 0, kOptionRefCount = 4 }
- using MessageHandler_t = void(*)(uint32_t messageID, void*pData, void*pObject)
- A static message handler. This is the equivalent to the IMessageListener::
HandleMessage() function.
Public static functions
- static auto Get() -> IMessageManager*
- Returns the active message manager.
Constructors, destructors, conversion operators
- ~IMessageManager() virtual
Public functions
- auto Initialize() -> bool pure virtual
- auto Dispose() -> bool pure virtual
- auto GetOption(Options option) -> bool pure virtual
- Returns the boolean value of the specified option, in the IMessageManager::
Options enum. - auto SetOption(Options option, bool bValue) -> void pure virtual
- Sets the boolean value of the specified option, in the IMessageManager::
Options enum. -
auto MessageSend(uint32_
t messageID, void* pMessage, IUnmanagedMessageListener* pListener = nullptr) -> void pure virtual - Sends a message in this manager, notifying all the interfaces listening for the specified message ID.
-
auto MessagePost(uint32_
t messageID, IMessageRC* pMessage, IMessageListener* pListener = nullptr) -> void pure virtual -
auto MessagePostFunction(uint32_
t messageID, IMessageRC* pMessage, int, MessageHandler_ t handler, void*) -> void pure virtual -
auto AddListener(IMessageListener* pListener,
uint32_
t messageID) -> void pure virtual - Adds a message listener to this manager, that will be notified of messages with the specified ID.
-
auto AddListener(LambdaMessageListener::
HandleMessage_T function, const std::initializer_list<uint32_ t> messageIDs) -> void - Adds a message listener to this manager, that will be notified of messages with the specified ID.
-
auto AddUnmanagedListener(IUnmanagedMessageListener* pListener,
uint32_
t messageID) -> void pure virtual - Same as IMessageManager::
AddListener(), but this does not call AddRef(). -
auto AddHandler(MessageHandler_
t pFunction, void* pObject, uint32_ t messageID, bool bRefCounted = false, int nPriority = -1) -> void pure virtual - Adds a static handler function to this manager, that will be notified of messages with the specified ID.
-
auto RemoveListener(IUnmanagedMessageListener* pListener,
uint32_
t messageID, int nPriority = -9999) -> bool pure virtual - Makes the listener stop listening to the specified message ID.
-
auto RemoveHandler(MessageHandler_
t pFunction, uint32_ t messageID, int nPriority = -9999) -> bool pure virtual - Makes the handler stop listening to the specified message ID.
- auto ProcessQueue(int, int, int) -> int pure virtual
- auto ProcessQueue2() -> int pure virtual
- auto GetMessageQueue() -> int pure virtual
- auto Lock(bool bLock) -> int pure virtual
- Locks or unlocks the mutexs in this manager, allowing to safely interact with this manager in different threads.
Protected types
- struct Entry
Protected functions
Enum documentation
enum App:: IMessageManager:: Options
Enumerators | |
---|---|
kOptionAllowLock |
If true, this manager uses mutexs to work with threads. Additionally, the user can use the function IMessageManager::UseMutex(bool). |
kOptionRefCount |
If true, the listeners added in the manager will be refcounted. |
Function documentation
bool App:: IMessageManager:: GetOption(Options option) pure virtual
Returns the boolean value of the specified option, in the IMessageManager::
Parameters | |
---|---|
option | The option whose value will be returned. |
void App:: IMessageManager:: SetOption(Options option,
bool bValue) pure virtual
Sets the boolean value of the specified option, in the IMessageManager::
Parameters | |
---|---|
option | The option whose value will be set. |
bValue | The new boolean value of the option. |
void App:: IMessageManager:: MessageSend(uint32_ t messageID,
void* pMessage,
IUnmanagedMessageListener* pListener = nullptr) pure virtual
Sends a message in this manager, notifying all the interfaces listening for the specified message ID.
Parameters | |
---|---|
messageID | The ID this message notifies. |
pMessage | Data related to the message, not all messages need to use this. |
pListener | [Optional] The IMessageListener that will receive this message. If this is specified, no other listener will be notified. |
void App:: IMessageManager:: AddListener(IMessageListener* pListener,
uint32_ t messageID) pure virtual
Adds a message listener to this manager, that will be notified of messages with the specified ID.
Parameters | |
---|---|
pListener | The message listener to add. |
messageID | The ID of the messages the listener is listening to. |
A single listener can be listening to multiple message IDs. If the kOptionRefCount option is true, the IMessageListener::
void App:: IMessageManager:: AddListener(LambdaMessageListener:: HandleMessage_T function,
const std::initializer_list<uint32_ t> messageIDs)
Adds a message listener to this manager, that will be notified of messages with the specified ID.
Parameters | |
---|---|
function | The message listener to add. |
messageIDs | A list of the IDs of the messages the listener will listen to. |
A single listener can be listening to multiple message IDs.
void App:: IMessageManager:: AddUnmanagedListener(IUnmanagedMessageListener* pListener,
uint32_ t messageID) pure virtual
Same as IMessageManager::
Parameters | |
---|---|
pListener | The message listener to add. |
messageID | The ID of the messages the listener is listening to. |
void App:: IMessageManager:: AddHandler(MessageHandler_ t pFunction,
void* pObject,
uint32_ t messageID,
bool bRefCounted = false,
int nPriority = -1) pure virtual
Adds a static handler function to this manager, that will be notified of messages with the specified ID.
Parameters | |
---|---|
pFunction | A pointer to the handler function. |
pObject | An object that will be sent as a parameter in the handler function. |
messageID | The ID of the messages the handler is listening to. |
bRefCounted | [Optional] If true and kOptionRefCount is true, a kMsgAddRef message will be sent on the handler. |
nPriority | [Optional] The priority of this handler. |
The same handler can be added multiple times using different priorities.
bool App:: IMessageManager:: RemoveListener(IUnmanagedMessageListener* pListener,
uint32_ t messageID,
int nPriority = -9999) pure virtual
Makes the listener stop listening to the specified message ID.
Parameters | |
---|---|
pListener | The listener to remove. |
messageID | The ID of the messages the listener is listening to, and that will stop listening. |
nPriority | [Optional] The priority the listener must have to be removed. If it's -9999 (by default), it will be ignored. |
Returns | Whether the handler was removed or not. |
Optionally, a priority can be specified; if so, only if the listener with that priority will be removed.
bool App:: IMessageManager:: RemoveHandler(MessageHandler_ t pFunction,
uint32_ t messageID,
int nPriority = -9999) pure virtual
Makes the handler stop listening to the specified message ID.
Parameters | |
---|---|
pFunction | The handler function to remove. |
messageID | The ID of the messages the handler is listening to, and that will stop listening. |
nPriority | [Optional] The priority the handler must have to be removed. If it's -9999 (by default), it will be ignored. |
Returns | Whether the handler was removed or not. |
Optionally, a priority can be specified; if so, only if the handler with that priority will be removed.
bool App:: IMessageManager:: RemoveEntry(void* pMessageObject,
uint32_ t messageID,
int nPriority = -9999) virtual protected
Removes the entry assigned at the given messageID with the given priority.
Parameters | |
---|---|
pMessageObject | The handler or listener to remove. |
messageID | The message ID the entry will be removed from. |
nPriority | [Optional] The priority of the entry to be removed. |
Returns | Whether the entry was removed or not. |
If the priority is -9999, it will be ignored. If the entry is refcounted and kOptionRefCount is true, Release() will be called on the listener (or a kMsgRelease will be sent to the handler). This function works for both listeners and handlers.