fix: remove null route when releasing route

This commit is contained in:
Nick Genovese
2024-11-26 15:57:56 -05:00
parent a83ba444d3
commit 134e8ba02e

View File

@@ -12,19 +12,19 @@ namespace PepperDash.Essentials.Core
/// Represents an collection of individual route steps between Source and Destination /// Represents an collection of individual route steps between Source and Destination
/// </summary> /// </summary>
public class RouteDescriptor public class RouteDescriptor
{ {
public IRoutingInputs Destination { get; private set; } public IRoutingInputs Destination { get; private set; }
public RoutingInputPort InputPort { get; private set; } public RoutingInputPort InputPort { get; private set; }
public IRoutingOutputs Source { get; private set; } public IRoutingOutputs Source { get; private set; }
public eRoutingSignalType SignalType { get; private set; } public eRoutingSignalType SignalType { get; private set; }
public List<RouteSwitchDescriptor> Routes { get; private set; } public List<RouteSwitchDescriptor> Routes { get; private set; }
public RouteDescriptor(IRoutingOutputs source, IRoutingInputs destination, eRoutingSignalType signalType):this(source,destination, null, signalType) public RouteDescriptor(IRoutingOutputs source, IRoutingInputs destination, eRoutingSignalType signalType) : this(source, destination, null, signalType)
{ {
} }
public RouteDescriptor(IRoutingOutputs source, IRoutingInputs destination, RoutingInputPort inputPort, eRoutingSignalType signalType) public RouteDescriptor(IRoutingOutputs source, IRoutingInputs destination, RoutingInputPort inputPort, eRoutingSignalType signalType)
{ {
@@ -35,20 +35,20 @@ namespace PepperDash.Essentials.Core
Routes = new List<RouteSwitchDescriptor>(); Routes = new List<RouteSwitchDescriptor>();
} }
/// <summary> /// <summary>
/// Executes all routes described in this collection. Typically called via /// Executes all routes described in this collection. Typically called via
/// extension method IRoutingInputs.ReleaseAndMakeRoute() /// extension method IRoutingInputs.ReleaseAndMakeRoute()
/// </summary> /// </summary>
public void ExecuteRoutes() public void ExecuteRoutes()
{ {
foreach (var route in Routes) foreach (var route in Routes)
{ {
Debug.LogMessage(LogEventLevel.Verbose, "ExecuteRoutes: {0}",null, route.ToString()); Debug.LogMessage(LogEventLevel.Verbose, "ExecuteRoutes: {0}", null, route.ToString());
if (route.SwitchingDevice is IRoutingSinkWithSwitching sink) if (route.SwitchingDevice is IRoutingSinkWithSwitching sink)
{ {
sink.ExecuteSwitch(route.InputPort.Selector); sink.ExecuteSwitch(route.InputPort.Selector);
continue; continue;
} }
if (route.SwitchingDevice is IRouting switchingDevice) if (route.SwitchingDevice is IRouting switchingDevice)
@@ -59,15 +59,15 @@ namespace PepperDash.Essentials.Core
Debug.LogMessage(LogEventLevel.Verbose, "Output port {0} routing. Count={1}", null, route.OutputPort.Key, route.OutputPort.InUseTracker.InUseCountFeedback.UShortValue); Debug.LogMessage(LogEventLevel.Verbose, "Output port {0} routing. Count={1}", null, route.OutputPort.Key, route.OutputPort.InUseTracker.InUseCountFeedback.UShortValue);
} }
} }
} }
/// <summary> /// <summary>
/// Releases all routes in this collection. Typically called via /// Releases all routes in this collection. Typically called via
/// extension method IRoutingInputs.ReleaseAndMakeRoute() /// extension method IRoutingInputs.ReleaseAndMakeRoute()
/// </summary> /// </summary>
public void ReleaseRoutes() public void ReleaseRoutes()
{ {
foreach (var route in Routes.Where(r => r.SwitchingDevice is IRouting)) foreach (var route in Routes.Where(r => r.SwitchingDevice is IRouting))
{ {
if (route.SwitchingDevice is IRouting switchingDevice) if (route.SwitchingDevice is IRouting switchingDevice)
@@ -77,8 +77,6 @@ namespace PepperDash.Essentials.Core
continue; continue;
} }
switchingDevice.ExecuteSwitch(null, route.OutputPort.Selector, SignalType);
if (route.OutputPort.InUseTracker != null) if (route.OutputPort.InUseTracker != null)
{ {
route.OutputPort.InUseTracker.RemoveUser(Destination, "destination-" + SignalType); route.OutputPort.InUseTracker.RemoveUser(Destination, "destination-" + SignalType);
@@ -92,12 +90,12 @@ namespace PepperDash.Essentials.Core
} }
} }
public override string ToString() public override string ToString()
{ {
var routesText = Routes.Select(r => r.ToString()).ToArray(); var routesText = Routes.Select(r => r.ToString()).ToArray();
return string.Format("Route table from {0} to {1}:\r{2}", Source.Key, Destination.Key, string.Join("\r", routesText)); return string.Format("Route table from {0} to {1}:\r{2}", Source.Key, Destination.Key, string.Join("\r", routesText));
} }
} }
/*/// <summary> /*/// <summary>
/// Represents an collection of individual route steps between Source and Destination /// Represents an collection of individual route steps between Source and Destination