From ed965d43a36c6d45a04fdd8658f684cfed64fa86 Mon Sep 17 00:00:00 2001 From: Evan Hemsley Date: Sun, 28 Jul 2019 22:25:34 -0700 Subject: [PATCH] unparameterized SendMessage --- encompass-cs/Engine.cs | 13 +++++++++++++ encompass-cs/MessageManager.cs | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/encompass-cs/Engine.cs b/encompass-cs/Engine.cs index 869b7cc..ab8db3e 100644 --- a/encompass-cs/Engine.cs +++ b/encompass-cs/Engine.cs @@ -269,6 +269,19 @@ namespace Encompass messageManager.AddMessage(message); } + // unparameterized version to enable dynamic dispatch + protected void SendMessage(IMessage message) + { + var type = message.GetType(); + + if (!sendTypes.Contains(type) || !type.IsValueType) + { + throw new IllegalSendException("Engine {0} tried to send undeclared Message {1}", GetType().Name, type.Name); + } + + messageManager.AddMessage(message); + } + protected IEnumerable ReadMessages() where TMessage : struct, IMessage { if (!receiveTypes.Contains(typeof(TMessage))) diff --git a/encompass-cs/MessageManager.cs b/encompass-cs/MessageManager.cs index b6a758d..3f2d723 100644 --- a/encompass-cs/MessageManager.cs +++ b/encompass-cs/MessageManager.cs @@ -18,6 +18,18 @@ namespace Encompass messageTypeToMessages[typeof(TMessage)].Add(message); } + internal void AddMessage(IMessage message) + { + var type = message.GetType(); + + if (!messageTypeToMessages.ContainsKey(type)) + { + messageTypeToMessages.Add(type, new List()); + } + + messageTypeToMessages[type].Add(message); + } + internal void ClearMessages() { foreach (var entry in messageTypeToMessages)