From f3f7755735610ffb44088238abe09eaf30490efa Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Thu, 2 Jul 2026 17:21:06 -0600 Subject: [PATCH] feat: refine messenger factory to prevent conflicting state shapes for IDialerCallStatus and ICodecCallControls --- .../Messengers/IDialerCallStatusMessenger.cs | 1 - .../MessengerFactoryRegistry.cs | 8 +++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDialerCallStatusMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDialerCallStatusMessenger.cs index d9eacecd..a1c6e5d7 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDialerCallStatusMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDialerCallStatusMessenger.cs @@ -32,7 +32,6 @@ namespace PepperDash.Essentials.AppServer.Messengers /// protected override void RegisterActions() - { base.RegisterActions(); diff --git a/src/PepperDash.Essentials.MobileControl/MessengerFactoryRegistry.cs b/src/PepperDash.Essentials.MobileControl/MessengerFactoryRegistry.cs index d4fd816c..d2b5c73e 100644 --- a/src/PepperDash.Essentials.MobileControl/MessengerFactoryRegistry.cs +++ b/src/PepperDash.Essentials.MobileControl/MessengerFactoryRegistry.cs @@ -168,7 +168,13 @@ namespace PepperDash.Essentials new MessengerFactoryEntry( typeof(IHasDialer), (d, mp, ck) => new IHasDialerMessenger( - $"{d.Key}-dialer-{ck}", mp, d) + $"{d.Key}-dialer-{ck}", mp, d), + // IDialerCallStatus and ICodecCallControls both extend IHasDialer and each already + // provide their own richer messenger (posting a "calls" array) subscribed to the same + // CallStatusChange event and the same "/device/{key}" message path. Without this + // exclusion, a device implementing either interface would get both messengers posting + // conflicting state shapes ("callItem" vs "calls") to the same clients. + predicate: d => d is IHasDialer && !(d is IDialerCallStatus) && !(d is ICodecCallControls) ), new MessengerFactoryEntry( typeof(ICodecCallControls),