diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs
index dcdba6d8..eb529376 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs
@@ -59,6 +59,9 @@ namespace PepperDash.Essentials.Core
VolumeLevelFeedback = new IntFeedback(() => { return _FakeVolumeLevel; });
MuteFeedback = new BoolFeedback("MuteOn", () => _IsMuted);
+
+ WarmupTime = 10000;
+ CooldownTime = 5000;
}
public override void PowerOn()
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/iHasScheduleAwareness.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/iHasScheduleAwareness.cs
index 5e2b1c23..24f1968b 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/iHasScheduleAwareness.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/iHasScheduleAwareness.cs
@@ -10,13 +10,14 @@ using Newtonsoft.Json;
namespace PepperDash.Essentials.Devices.Common.Codec
{
+ [Flags]
public enum eMeetingEventChangeType
{
Unknown = 0,
- MeetingStartWarning,
- MeetingStart,
- MeetingEndWarning,
- MeetingEnd
+ MeetingStartWarning = 1,
+ MeetingStart = 2,
+ MeetingEndWarning = 4,
+ MeetingEnd = 8
}
public interface IHasScheduleAwareness
@@ -83,50 +84,69 @@ namespace PepperDash.Essentials.Devices.Common.Codec
_scheduleChecker = new CTimer(CheckSchedule, null, pollTime, pollTime);
}
+ ///
+ /// Helper method to fire MeetingEventChange. Should only fire once for each changeType on each meeting
+ ///
+ ///
+ ///
private void OnMeetingChange(eMeetingEventChangeType changeType, Meeting meeting)
{
- var handler = MeetingEventChange;
- if (handler != null)
+ Debug.Console(2, "*****************OnMeetingChange. id: {0} changeType: {1}**********************", meeting.Id, changeType);
+ if (changeType != (changeType & meeting.NotifiedChangeTypes))
{
- handler(this, new MeetingEventArgs() { ChangeType = changeType, Meeting = meeting });
+ // Add this change type to the NotifiedChangeTypes
+ meeting.NotifiedChangeTypes |= changeType;
+
+ var handler = MeetingEventChange;
+ if (handler != null)
+ {
+ handler(this, new MeetingEventArgs() { ChangeType = changeType, Meeting = meeting });
+ }
+ }
+ else
+ {
+ Debug.Console(2, "Meeting: {0} already notified of changeType: {1}", meeting.Id, changeType);
}
}
+
+ ///
+ /// Checks the schedule to see if any MeetingEventChange updates should be fired
+ ///
+ ///
private void CheckSchedule(object o)
{
- // Iterate the meeting list and check if any meeting need to do anythingk
+ // Iterate the meeting list and check if any meeting need to do anything
const double meetingTimeEpsilon = 0.05;
foreach (var m in Meetings)
{
var changeType = eMeetingEventChangeType.Unknown;
- //Debug.Console(2, "Math.Abs(m.TimeToMeetingEnd.TotalMinutes) = {0}", Math.Abs(m.TimeToMeetingEnd.TotalMinutes));
- if (_previousChangeType != eMeetingEventChangeType.MeetingStartWarning && m.TimeToMeetingStart.TotalMinutes <= m.MeetingWarningMinutes.TotalMinutes && m.TimeToMeetingStart.Seconds > 0) // Meeting is about to start
+ if (eMeetingEventChangeType.MeetingStartWarning != (m.NotifiedChangeTypes & eMeetingEventChangeType.MeetingStartWarning) && m.TimeToMeetingStart.TotalMinutes <= m.MeetingWarningMinutes.TotalMinutes && m.TimeToMeetingStart.Seconds > 0) // Meeting is about to start
{
- Debug.Console(2, "MeetingStartWarning. TotalMinutes: {0} Seconds: {1}", m.TimeToMeetingStart.TotalMinutes, m.TimeToMeetingStart.Seconds);
+ Debug.Console(2, "********************* MeetingStartWarning. TotalMinutes: {0} Seconds: {1}", m.TimeToMeetingStart.TotalMinutes, m.TimeToMeetingStart.Seconds);
changeType = eMeetingEventChangeType.MeetingStartWarning;
}
- else if (_previousChangeType != eMeetingEventChangeType.MeetingStart && Math.Abs(m.TimeToMeetingEnd.TotalMinutes) < meetingTimeEpsilon) // Meeting Start
+ else if (eMeetingEventChangeType.MeetingStart != (m.NotifiedChangeTypes & eMeetingEventChangeType.MeetingStart) && Math.Abs(m.TimeToMeetingStart.TotalMinutes) < meetingTimeEpsilon) // Meeting Start
{
- Debug.Console(2, "MeetingStart");
+ Debug.Console(2, "********************* MeetingStart");
changeType = eMeetingEventChangeType.MeetingStart;
}
- else if (_previousChangeType != eMeetingEventChangeType.MeetingEndWarning && m.TimeToMeetingEnd.TotalMinutes <= m.MeetingWarningMinutes.TotalMinutes && m.TimeToMeetingEnd.Seconds > 0) // Meeting is about to end
+ else if (eMeetingEventChangeType.MeetingEndWarning != (m.NotifiedChangeTypes & eMeetingEventChangeType.MeetingEndWarning) && m.TimeToMeetingEnd.TotalMinutes <= m.MeetingWarningMinutes.TotalMinutes && m.TimeToMeetingEnd.Seconds > 0) // Meeting is about to end
+ {
+ Debug.Console(2, "********************* MeetingEndWarning. TotalMinutes: {0} Seconds: {1}", m.TimeToMeetingEnd.TotalMinutes, m.TimeToMeetingEnd.Seconds);
changeType = eMeetingEventChangeType.MeetingEndWarning;
- else if (_previousChangeType != eMeetingEventChangeType.MeetingEnd && Math.Abs(m.TimeToMeetingEnd.TotalMinutes) < meetingTimeEpsilon) // Meeting has ended
+ }
+ else if (eMeetingEventChangeType.MeetingEnd != (m.NotifiedChangeTypes & eMeetingEventChangeType.MeetingEnd) && Math.Abs(m.TimeToMeetingEnd.TotalMinutes) < meetingTimeEpsilon) // Meeting has ended
+ {
+ Debug.Console(2, "********************* MeetingEnd");
changeType = eMeetingEventChangeType.MeetingEnd;
+ }
if (changeType != eMeetingEventChangeType.Unknown)
{
- // check to make sure this is not a redundant event for one that was fired last
- if (_previousChangedMeeting == null || (_previousChangedMeeting != m && _previousChangeType != changeType))
- {
- _previousChangeType = changeType;
- _previousChangedMeeting = m;
-
- OnMeetingChange(changeType, m);
- }
+ OnMeetingChange(changeType, m);
}
}
@@ -191,8 +211,8 @@ namespace PepperDash.Essentials.Devices.Common.Codec
get
{
var joinable = StartTime.AddMinutes(-MinutesBeforeMeeting) <= DateTime.Now
- && DateTime.Now <= EndTime; //.AddMinutes(-5);
- Debug.Console(2, "Meeting Id: {0} joinable: {1}", Id, joinable);
+ && DateTime.Now <= EndTime.AddMinutes(-5);
+ //Debug.Console(2, "Meeting Id: {0} joinable: {1}", Id, joinable);
return joinable;
}
}
@@ -205,6 +225,12 @@ namespace PepperDash.Essentials.Devices.Common.Codec
[JsonProperty("calls")]
public List Calls { get; private set; }
+ ///
+ /// Tracks the change types that have already been notified for
+ ///
+ [JsonIgnore]
+ public eMeetingEventChangeType NotifiedChangeTypes { get; set; }
+
public Meeting()
{
Calls = new List();
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs
index b87f1fa8..ca199957 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs
@@ -416,8 +416,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
m.MinutesBeforeMeeting = 5;
m.Id = i.ToString();
m.Organizer = "Employee " + 1;
- m.StartTime = DateTime.Now.AddMinutes(3).AddHours(i);
- m.EndTime = DateTime.Now.AddHours(i).AddMinutes(55);
+ m.StartTime = DateTime.Now.AddMinutes(6).AddHours(i);
+ m.EndTime = DateTime.Now.AddHours(i).AddMinutes(16);
m.Title = "Meeting " + i;
m.Calls.Add(new Call() { Number = i + "meeting@fake.com"});
_CodecSchedule.Meetings.Add(m);