From 5de1e2d7bbbde0b0f8bb38e233b86f600f53076e Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Wed, 26 Nov 2025 10:26:41 -0700 Subject: [PATCH] feat: add help request timeout functionality to IEssentialsRoomFusionController --- .../Fusion/IEssentialsRoomFusionController.cs | 57 ++++++++++++++++--- ...alsRoomFusionControllerPropertiesConfig.cs | 12 ++++ 2 files changed, 60 insertions(+), 9 deletions(-) diff --git a/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionController.cs b/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionController.cs index 593c9cce..c1a16089 100644 --- a/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionController.cs +++ b/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionController.cs @@ -14,6 +14,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Timers; namespace PepperDash.Essentials.Core.Fusion { @@ -87,15 +88,17 @@ namespace PepperDash.Essentials.Core.Fusion /// public StringFeedback HelpRequestStatusFeedback { get; private set; } + private Timer _helpRequestTimeoutTimer; - #region System Info Sigs + /// + /// Gets the DefaultHelpRequestTimeoutMs + /// + public int HelpRequestTimeoutMs => _config.HelpRequestTimeoutMs; - //StringSigData SystemName; - //StringSigData Model; - //StringSigData SerialNumber; - //StringSigData Uptime; - - #endregion + /// + /// Gets whether to use a timer for help requests + /// + public bool UseHelpRequestTimer => _config.UseTimeoutForHelpRequests; #region Processor Info Sigs @@ -1805,7 +1808,7 @@ namespace PepperDash.Essentials.Core.Fusion break; case "Please call the helpdesk.": // this.LogInformation("Please call the helpdesk."); - // _helpRequestStatus = eFusionHelpResponse.CallHelpDesk; + _helpRequestStatus = eFusionHelpResponse.CallHelpDesk; break; case "Please wait, I will reschedule your meeting to a different room.": // this.LogInformation("Please wait, I will reschedule your meeting to a different room.", @@ -1839,6 +1842,13 @@ namespace PepperDash.Essentials.Core.Fusion } HelpRequestStatusFeedback.FireUpdate(); + + if (_helpRequestTimeoutTimer != null) + { + _helpRequestTimeoutTimer.Stop(); + _helpRequestTimeoutTimer.Dispose(); + _helpRequestTimeoutTimer = null; + } } @@ -1909,10 +1919,39 @@ namespace PepperDash.Essentials.Core.Fusion _helpRequestSent = true; HelpRequestSentFeedback.FireUpdate(); + if (UseHelpRequestTimer) + { + if (_helpRequestTimeoutTimer == null) + { + _helpRequestTimeoutTimer = new Timer(HelpRequestTimeoutMs); + _helpRequestTimeoutTimer.AutoReset = false; + _helpRequestTimeoutTimer.Enabled = true; + + _helpRequestTimeoutTimer.Elapsed += OnTimedEvent; + } + + _helpRequestTimeoutTimer.Interval = HelpRequestTimeoutMs; + _helpRequestTimeoutTimer.Start(); + + this.LogDebug("Help request timeout timer started for room '{0}' with timeout of {1} ms.", + Room.Name, HelpRequestTimeoutMs); + } + _helpRequestStatus = eFusionHelpResponse.HelpRequested; HelpRequestStatusFeedback.FireUpdate(); } + private void OnTimedEvent(object source, ElapsedEventArgs e) + { + this.LogInformation("Help request timeout reached for room '{0}'. Cancelling help request.", + Room.Name); + + CancelHelpRequest(); + _helpRequestTimeoutTimer.Stop(); + _helpRequestTimeoutTimer.Dispose(); + _helpRequestTimeoutTimer = null; + } + /// public void CancelHelpRequest() { @@ -1923,7 +1962,7 @@ namespace PepperDash.Essentials.Core.Fusion HelpRequestSentFeedback.FireUpdate(); _helpRequestStatus = eFusionHelpResponse.None; HelpRequestStatusFeedback.FireUpdate(); - Debug.LogMessage(LogEventLevel.Information, this, "Help request cancelled in Fusion for room '{0}'", Room.Name); + Debug.LogMessage(LogEventLevel.Information, this, "Help request cancelled for room '{0}'", Room.Name); } } diff --git a/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionControllerPropertiesConfig.cs b/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionControllerPropertiesConfig.cs index 4dc4a834..639963f8 100644 --- a/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionControllerPropertiesConfig.cs +++ b/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionControllerPropertiesConfig.cs @@ -56,4 +56,16 @@ public class IEssentialsRoomFusionControllerPropertiesConfig /// [JsonProperty("use24HourTimeFormat")] public bool Use24HourTimeFormat { get; set; } = false; + + /// + /// Gets or sets whether to use a timeout for help requests + /// + [JsonProperty("useTimeoutForHelpRequests")] + public bool UseTimeoutForHelpRequests { get; set; } = false; + + /// + /// Gets or sets the timeout duration for help requests in milliseconds + /// + [JsonProperty("helpRequestTimeoutMs")] + public int HelpRequestTimeoutMs{ get; set; } = 30000; } \ No newline at end of file