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