From 253f60f3d5486d0eb742a6054c6b815463a5d734 Mon Sep 17 00:00:00 2001 From: Madpeter <57852827+Madpeterz@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:09:11 +0100 Subject: [PATCH] enable the usage of shortened relay messages --- SecondBotEvents/Config/RelayConfig.cs | 105 ++++++++++++++++++++++++-- 1 file changed, 100 insertions(+), 5 deletions(-) diff --git a/SecondBotEvents/Config/RelayConfig.cs b/SecondBotEvents/Config/RelayConfig.cs index 0202f03..b02772f 100644 --- a/SecondBotEvents/Config/RelayConfig.cs +++ b/SecondBotEvents/Config/RelayConfig.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; namespace SecondBotEvents.Config @@ -13,6 +14,7 @@ namespace SecondBotEvents.Config filename = "relay"; settings.Add("count"); settings.Add("HideStatusOutput"); + settings.Add("UseShortEncoder"); } public int GetRelayCount() @@ -20,31 +22,124 @@ namespace SecondBotEvents.Config return ReadSettingAsInt("count", 0); } + public bool GetUseShortEncoder() + { + return ReadSettingAsBool("UseShortEncoder", false); + } + public bool GetRelayEnabled(int relayID) { - return ReadSettingAsBool(relayID.ToString() + "_enabled", false); + if (GetUseShortEncoder() == false) + { + return ReadSettingAsBool(relayID.ToString() + "_enabled", false); + } + return true; } public string RelaySourceType(int relayID) { - return ReadSettingAsString(relayID.ToString() + "_source_type", "none"); + if (GetUseShortEncoder() == false) + { + return ReadSettingAsString(relayID.ToString() + "_source_type", "none"); + } + Dictionary settings = GetShortEncodedOptions(relayID); + if (settings.ContainsKey("sType") == false) + { + return "none"; + } + return settings["sType"]; } public string RelaySourceOption(int relayID) { - return ReadSettingAsString(relayID.ToString() + "_source_option", ""); + if (GetUseShortEncoder() == false) + { + return ReadSettingAsString(relayID.ToString() + "_source_option", ""); + } + Dictionary settings = GetShortEncodedOptions(relayID); + if (settings.ContainsKey("sFilter") == false) + { + return ""; + } + return settings["sFilter"]; } public string RelayTargetType(int relayID) { - return ReadSettingAsString(relayID.ToString() + "_target_type", "none"); + if (GetUseShortEncoder() == false) + { + return ReadSettingAsString(relayID.ToString() + "_target_type", "none"); + } + Dictionary settings = GetShortEncodedOptions(relayID); + if (settings.ContainsKey("tType") == false) + { + return "none"; + } + return settings["tType"]; } public string RelayTargetOption(int relayID) { - return ReadSettingAsString(relayID.ToString() + "_target_option", ""); + if (GetUseShortEncoder() == false) + { + return ReadSettingAsString(relayID.ToString() + "_target_option", ""); + } + Dictionary settings = GetShortEncodedOptions(relayID); + if (settings.ContainsKey("tConfig") == false) + { + return "none"; + } + return settings["tConfig"]; } + protected Dictionary GetShortEncodedOptions(int relayID) + { + if(UnpackedConfigs.ContainsKey(relayID) == true) + { + return UnpackedConfigs[relayID]; + } + // config not unpacked from string lets unpack it + string config = ReadSettingAsString(relayID.ToString() + "_RelayConfig", ""); + UnpackedConfigs.Add(relayID, new Dictionary()); + if (config == "") + { + return UnpackedConfigs[relayID]; + } + string[] bits = config.Split("{}", StringSplitOptions.RemoveEmptyEntries); + Dictionary data = new Dictionary(); + foreach(string A in bits) + { + string[] B = A.Split("::", StringSplitOptions.RemoveEmptyEntries); + if (B.Count() == 2) + { + if (data.ContainsKey(B[0]) == false) + { + data.Add(B[0], B[1]); + } + } + } + if(data.Count() != 4) + { + return UnpackedConfigs[relayID]; + } + List checks = new List() { "sType", "sFilter", "tType", "tConfig" }; + bool allfound = true; + foreach (string A in checks) + { + if (data.ContainsKey(A) == false) + { + allfound = false; + break; + } + } + if(allfound == true) + { + UnpackedConfigs[relayID] = data; + } + return UnpackedConfigs[relayID]; + } + + protected Dictionary> UnpackedConfigs = new Dictionary>(); }