forked from VisualPinball/VisualPinball.Engine.Mpf
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathModeMonitor.cs
More file actions
74 lines (64 loc) · 2.65 KB
/
ModeMonitor.cs
File metadata and controls
74 lines (64 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Visual Pinball Engine
// Copyright (C) 2025 freezy and VPE Team
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
using System;
namespace VisualPinball.Engine.Mpf.Unity.MediaController.Messages.Mode
{
// Does not derive from <c>MonitorBase</c> because it needs to listen receive two different message types
public class ModeMonitor : IDisposable
{
private readonly string _modeName;
private BcpMessageHandler<ModeStartMessage> _modeStartMessageHandler;
private BcpMessageHandler<ModeStopMessage> _modeStopMessageHandler;
private bool _isModeActive = false;
public bool IsModeActive
{
get => _isModeActive;
set
{
if (value == _isModeActive)
return;
_isModeActive = value;
IsModeActiveChanged?.Invoke(this, _isModeActive);
}
}
public event EventHandler<bool> IsModeActiveChanged;
public ModeMonitor(BcpInterface bcpInterface, string modeName)
{
_modeName = modeName;
_modeStartMessageHandler =
(BcpMessageHandler<ModeStartMessage>)
bcpInterface.MessageHandlers.Handlers[ModeStartMessage.Command];
_modeStartMessageHandler.Received += OnModeStarted;
_modeStopMessageHandler =
(BcpMessageHandler<ModeStopMessage>)
bcpInterface.MessageHandlers.Handlers[ModeStopMessage.Command];
_modeStopMessageHandler.Received += OnModeStopped;
}
public void Dispose()
{
if (_modeStartMessageHandler != null)
_modeStartMessageHandler.Received -= OnModeStarted;
if (_modeStopMessageHandler != null)
_modeStopMessageHandler.Received -= OnModeStopped;
}
private void OnModeStarted(object sender, ModeStartMessage msg)
{
if (msg.Name != _modeName && !string.IsNullOrWhiteSpace(_modeName))
IsModeActive = true;
}
private void OnModeStopped(object sender, ModeStopMessage msg)
{
if (msg.Name != _modeName)
return;
IsModeActive = false;
}
}
}