using RobotLib.Communication; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace RobotLib.DevSplitFlap { internal class DevSplitFlap : DevBase { private const string TOPIC_INITALL = "/splitFlap/cmd/init/"; private const string TOPIC_CONFIGURE_SF = "/splitFlap/config/setup/"; private const string TOPIC_DISPLAY = "/splitFlap/cmd/display/"; public event EventHandler SplitFlapDisplayChanged; public DevSplitFlap(IPublisherSubscriber com) : base(com, new List() { TOPIC_DISPLAY }) { } public void InitializeAllSplitflaps() { base.SendMessage(TOPIC_INITALL, ""); } public void ConfigureSplitflap(int setupId, int hardwareId) { string payload = JsonSerializer.Serialize(new Dictionary() { { "setupId", setupId.ToString() }, { "hardwareId", hardwareId.ToString() } }); base.SendMessage(TOPIC_CONFIGURE_SF, payload); } public void Display(string message) { string payload = JsonSerializer.Serialize(new Dictionary() { { "message", message } }); base.SendMessage(TOPIC_DISPLAY, payload); } protected override void ParseMessage(string fromTopic, string message) { if(fromTopic == TOPIC_DISPLAY) { string parsedMessage = (string)GetValueFromMesage("message", message); if (parsedMessage == null) parsedMessage = "?"; SplitFlapDisplayEventArgs eventArgs = new(parsedMessage); SplitFlapDisplayChanged?.Invoke(this, eventArgs); } } private object GetValueFromMesage(string parameter,string message) { var data = JsonSerializer.Deserialize>(message); object value = null; data.TryGetValue(parameter, out value); return value; } } }