46 lines
1.3 KiB
C#
46 lines
1.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Encompass
|
|
{
|
|
internal class MessageManager
|
|
{
|
|
private readonly Dictionary<Type, List<IMessage>> messageTypeToMessages = new Dictionary<Type, List<IMessage>>();
|
|
|
|
internal void RegisterMessageType(Type messageType)
|
|
{
|
|
if (!messageTypeToMessages.ContainsKey(messageType)) {
|
|
messageTypeToMessages.Add(messageType, new List<IMessage>());
|
|
}
|
|
}
|
|
|
|
internal void AddMessage(IMessage message)
|
|
{
|
|
var type = message.GetType();
|
|
|
|
messageTypeToMessages[type].Add(message);
|
|
}
|
|
|
|
internal void AddMessage<TMessage>(IMessage message) where TMessage : struct, IMessage
|
|
{
|
|
messageTypeToMessages[typeof(TMessage)].Add(message);
|
|
}
|
|
|
|
internal void ClearMessages()
|
|
{
|
|
foreach (var entry in messageTypeToMessages)
|
|
{
|
|
entry.Value.Clear();
|
|
}
|
|
}
|
|
|
|
internal IEnumerable<TMessage> GetMessagesByType<TMessage>() where TMessage : struct, IMessage
|
|
{
|
|
return messageTypeToMessages.ContainsKey(typeof(TMessage)) ?
|
|
messageTypeToMessages[typeof(TMessage)].Cast<TMessage>() :
|
|
Enumerable.Empty<TMessage>();
|
|
}
|
|
}
|
|
}
|