diff --git a/src/PepperDash.Essentials.Devices.Common/Generic/GenericSink.cs b/src/PepperDash.Essentials.Devices.Common/Generic/GenericSink.cs
index 8f2fc1e2..a01daa2e 100644
--- a/src/PepperDash.Essentials.Devices.Common/Generic/GenericSink.cs
+++ b/src/PepperDash.Essentials.Devices.Common/Generic/GenericSink.cs
@@ -1,8 +1,10 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using PepperDash.Core;
using PepperDash.Core.Logging;
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Config;
+using PepperDash.Essentials.Core.Routing;
using Serilog.Events;
namespace PepperDash.Essentials.Devices.Common.Generic
@@ -10,8 +12,17 @@ namespace PepperDash.Essentials.Devices.Common.Generic
///
/// Represents a GenericSink
///
- public class GenericSink : EssentialsDevice, IRoutingSinkWithSwitchingWithInputPort
+ public class GenericSink : EssentialsDevice, IRoutingSinkWithSwitchingWithInputPort, ICurrentSources
{
+ ///
+ public Dictionary CurrentSources { get; private set; }
+
+ ///
+ public Dictionary CurrentSourceKeys { get; private set; }
+
+ ///
+ public event EventHandler CurrentSourcesChanged;
+
///
/// Initializes a new instance of the GenericSink class
///
@@ -26,6 +37,53 @@ namespace PepperDash.Essentials.Devices.Common.Generic
InputPorts.Add(inputPort);
}
+ ///
+ public void SetCurrentSource(eRoutingSignalType signalType, string sourceListKey, SourceListItem sourceListItem)
+ {
+ foreach (eRoutingSignalType type in Enum.GetValues(typeof(eRoutingSignalType)))
+ {
+ var flagValue = Convert.ToInt32(type);
+ // Skip if flagValue is 0 or not a power of two (i.e., not a single-bit flag).
+ // (flagValue & (flagValue - 1)) != 0 checks if more than one bit is set.
+ if (flagValue == 0 || (flagValue & (flagValue - 1)) != 0)
+ {
+ this.LogDebug("Skipping {type}", type);
+ continue;
+ }
+
+ this.LogDebug("setting {type}", type);
+
+ if (signalType.HasFlag(type))
+ {
+ UpdateCurrentSources(type, sourceListKey, sourceListItem);
+ }
+ }
+ // Raise the CurrentSourcesChanged event
+ CurrentSourcesChanged?.Invoke(this, EventArgs.Empty);
+ }
+
+ private void UpdateCurrentSources(eRoutingSignalType signalType, string sourceListKey, SourceListItem sourceListItem)
+ {
+ if (CurrentSources.ContainsKey(signalType))
+ {
+ CurrentSources[signalType] = sourceListItem;
+ }
+ else
+ {
+ CurrentSources.Add(signalType, sourceListItem);
+ }
+
+ // Update the current source key for the specified signal type
+ if (CurrentSourceKeys.ContainsKey(signalType))
+ {
+ CurrentSourceKeys[signalType] = sourceListKey;
+ }
+ else
+ {
+ CurrentSourceKeys.Add(signalType, sourceListKey);
+ }
+ }
+
///
/// Gets or sets the InputPorts
///