2015-07-01 23:17:14 -04:00
|
|
|
#include "stdafx.h"
|
|
|
|
|
2015-08-28 21:01:18 -04:00
|
|
|
#include <algorithm>
|
2015-07-01 23:17:14 -04:00
|
|
|
#include "MessageManager.h"
|
|
|
|
|
|
|
|
IMessageManager* MessageManager::_messageManager = nullptr;
|
2015-08-08 22:36:39 -04:00
|
|
|
vector<INotificationListener*> MessageManager::_notificationListeners;
|
2015-07-01 23:17:14 -04:00
|
|
|
|
|
|
|
void MessageManager::RegisterMessageManager(IMessageManager* messageManager)
|
|
|
|
{
|
|
|
|
MessageManager::_messageManager = messageManager;
|
|
|
|
}
|
|
|
|
|
2015-07-11 08:27:22 -04:00
|
|
|
void MessageManager::DisplayMessage(string title, string message)
|
2015-07-01 23:17:14 -04:00
|
|
|
{
|
|
|
|
if(MessageManager::_messageManager) {
|
|
|
|
MessageManager::_messageManager->DisplayMessage(title, message);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-07-11 08:27:22 -04:00
|
|
|
void MessageManager::DisplayToast(string title, string message, uint8_t* iconData, uint32_t iconSize)
|
2015-07-01 23:17:14 -04:00
|
|
|
{
|
|
|
|
if(MessageManager::_messageManager) {
|
2016-02-06 18:33:24 -05:00
|
|
|
MessageManager::_messageManager->DisplayToast(shared_ptr<ToastInfo>(new ToastInfo(title, message, 4000, iconData, iconSize)));
|
2015-07-01 23:17:14 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
void MessageManager::RegisterNotificationListener(INotificationListener* notificationListener)
|
|
|
|
{
|
|
|
|
MessageManager::_notificationListeners.push_back(notificationListener);
|
|
|
|
}
|
|
|
|
|
|
|
|
void MessageManager::UnregisterNotificationListener(INotificationListener* notificationListener)
|
|
|
|
{
|
2015-08-08 22:36:39 -04:00
|
|
|
MessageManager::_notificationListeners.erase(std::remove(MessageManager::_notificationListeners.begin(), MessageManager::_notificationListeners.end(), notificationListener), MessageManager::_notificationListeners.end());
|
2015-07-01 23:17:14 -04:00
|
|
|
}
|
|
|
|
|
2015-12-26 17:11:00 -05:00
|
|
|
void MessageManager::SendNotification(ConsoleNotificationType type, void* parameter)
|
2015-07-01 23:17:14 -04:00
|
|
|
{
|
|
|
|
//Iterate on a copy to prevent issues if a notification causes a listener to unregister itself
|
2015-08-08 22:36:39 -04:00
|
|
|
vector<INotificationListener*> listeners = MessageManager::_notificationListeners;
|
|
|
|
vector<INotificationListener*> processedListeners;
|
|
|
|
|
|
|
|
for(size_t i = 0, len = listeners.size(); i < len; i++) {
|
|
|
|
INotificationListener* notificationListener = listeners[i];
|
|
|
|
if(std::find(processedListeners.begin(), processedListeners.end(), notificationListener) == processedListeners.end()) {
|
|
|
|
//Only send notification if it hasn't been processed already
|
2015-12-26 17:11:00 -05:00
|
|
|
notificationListener->ProcessNotification(type, parameter);
|
2015-08-08 22:36:39 -04:00
|
|
|
}
|
|
|
|
processedListeners.push_back(notificationListener);
|
|
|
|
|
|
|
|
if(len != MessageManager::_notificationListeners.size()) {
|
|
|
|
//Vector changed, start from the beginning again (can occur when sending a notification caused listeners to unregister themselves)
|
|
|
|
i = 0;
|
|
|
|
len = MessageManager::_notificationListeners.size();
|
|
|
|
listeners = MessageManager::_notificationListeners;
|
|
|
|
}
|
2015-07-01 23:17:14 -04:00
|
|
|
}
|
|
|
|
}
|