mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-14 20:24:57 +00:00
fix: add mutex to prevent multiple scenarios from running at once
This commit is contained in:
@@ -5,6 +5,7 @@ using Serilog.Events;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
namespace PepperDash.Essentials.Core
|
||||||
{
|
{
|
||||||
@@ -48,6 +49,8 @@ namespace PepperDash.Essentials.Core
|
|||||||
|
|
||||||
private int _scenarioChangeDebounceTimeSeconds = 10; // default to 10s
|
private int _scenarioChangeDebounceTimeSeconds = 10; // default to 10s
|
||||||
|
|
||||||
|
private Mutex _scenarioChange = new Mutex();
|
||||||
|
|
||||||
public EssentialsRoomCombiner(string key, EssentialsRoomCombinerPropertiesConfig props)
|
public EssentialsRoomCombiner(string key, EssentialsRoomCombinerPropertiesConfig props)
|
||||||
: base(key)
|
: base(key)
|
||||||
{
|
{
|
||||||
@@ -205,30 +208,39 @@ namespace PepperDash.Essentials.Core
|
|||||||
}
|
}
|
||||||
private set
|
private set
|
||||||
{
|
{
|
||||||
if (value != _currentScenario)
|
try
|
||||||
{
|
{
|
||||||
// Deactivate the old scenario first
|
_scenarioChange.WaitOne();
|
||||||
if (_currentScenario != null)
|
|
||||||
|
if (value != _currentScenario)
|
||||||
{
|
{
|
||||||
_currentScenario.Deactivate();
|
// Deactivate the old scenario first
|
||||||
}
|
if (_currentScenario != null)
|
||||||
|
{
|
||||||
_currentScenario = value;
|
_currentScenario.Deactivate();
|
||||||
|
}
|
||||||
// Activate the new scenario
|
|
||||||
if (_currentScenario != null)
|
_currentScenario = value;
|
||||||
{
|
|
||||||
_currentScenario.Activate();
|
// Activate the new scenario
|
||||||
|
if (_currentScenario != null)
|
||||||
Debug.LogMessage(LogEventLevel.Debug, $"Current Scenario: {_currentScenario.Name}", this);
|
{
|
||||||
}
|
_currentScenario.Activate();
|
||||||
|
|
||||||
var handler = RoomCombinationScenarioChanged;
|
Debug.LogMessage(LogEventLevel.Debug, $"Current Scenario: {_currentScenario.Name}", this);
|
||||||
if (handler != null)
|
}
|
||||||
{
|
|
||||||
handler(this, new EventArgs());
|
var handler = RoomCombinationScenarioChanged;
|
||||||
|
if (handler != null)
|
||||||
|
{
|
||||||
|
handler(this, new EventArgs());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_scenarioChange.ReleaseMutex();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user