From 539d6de247bcdd513478adbd446ea517f7a50ce1 Mon Sep 17 00:00:00 2001 From: Evan Hemsley Date: Sun, 28 Jul 2019 19:17:00 -0700 Subject: [PATCH] register message types at init time instead of runtime --- TODO | 4 +++- encompass-cs/MessageManager.cs | 17 +++++++---------- encompass-cs/WorldBuilder.cs | 5 +++++ 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/TODO b/TODO index c5af319..e24e2c0 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,6 @@ - look at test coverage - docs -- emit two packages: one for dev, which includes expensive runtime validation checks, and one for release, which disables them \ No newline at end of file +- emit two packages: one for dev, which includes expensive runtime validation checks, and one for release, which disables them + +- thread safety diff --git a/encompass-cs/MessageManager.cs b/encompass-cs/MessageManager.cs index e157229..5cadf61 100644 --- a/encompass-cs/MessageManager.cs +++ b/encompass-cs/MessageManager.cs @@ -8,25 +8,22 @@ namespace Encompass { private readonly Dictionary> messageTypeToMessages = new Dictionary>(); + internal void RegisterMessageType(Type messageType) + { + if (!messageTypeToMessages.ContainsKey(messageType)) { + messageTypeToMessages.Add(messageType, new List()); + } + } + internal void AddMessage(IMessage message) { var type = message.GetType(); - if (!messageTypeToMessages.ContainsKey(type)) - { - messageTypeToMessages.Add(type, new List()); - } - messageTypeToMessages[type].Add(message); } internal void AddMessage(TMessage message) where TMessage : struct, IMessage { - if (!messageTypeToMessages.ContainsKey(typeof(TMessage))) - { - messageTypeToMessages.Add(typeof(TMessage), new List()); - } - messageTypeToMessages[typeof(TMessage)].Add(message); } diff --git a/encompass-cs/WorldBuilder.cs b/encompass-cs/WorldBuilder.cs index b3daa01..eea0982 100644 --- a/encompass-cs/WorldBuilder.cs +++ b/encompass-cs/WorldBuilder.cs @@ -91,6 +91,11 @@ namespace Encompass var messageReceiveTypes = engine.receiveTypes; var messageSendTypes = engine.sendTypes; + foreach (var messageType in messageReceiveTypes.Union(messageSendTypes)) + { + messageManager.RegisterMessageType(messageType); + } + foreach (var messageType in messageReceiveTypes.Intersect(messageSendTypes)) { if ((messageType.IsGenericType && messageType.GetGenericTypeDefinition() == typeof(PendingComponentMessage<>)))