using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Essentials.Devices.Common.Codec; using System; using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { /// /// Represents a IHasScheduleAwarenessMessenger /// public class IHasScheduleAwarenessMessenger : MessengerBase { /// /// Gets or sets the ScheduleSource /// public IHasScheduleAwareness ScheduleSource { get; private set; } public IHasScheduleAwarenessMessenger(string key, IHasScheduleAwareness scheduleSource, string messagePath) : base(key, messagePath, scheduleSource as IKeyName) { ScheduleSource = scheduleSource ?? throw new ArgumentNullException("scheduleSource"); ScheduleSource.CodecSchedule.MeetingsListHasChanged += new EventHandler(CodecSchedule_MeetingsListHasChanged); ScheduleSource.CodecSchedule.MeetingEventChange += new EventHandler(CodecSchedule_MeetingEventChange); } protected override void RegisterActions() { AddAction("/schedule/fullStatus", (id, content) => SendFullScheduleObject()); } private void CodecSchedule_MeetingEventChange(object sender, MeetingEventArgs e) { PostStatusMessage(JToken.FromObject(new MeetingChangeMessage { MeetingChange = new MeetingChange { ChangeType = e.ChangeType.ToString(), Meeting = e.Meeting } }) ); } private void CodecSchedule_MeetingsListHasChanged(object sender, EventArgs e) { SendFullScheduleObject(); } /// /// Helper method to send the full schedule data /// private void SendFullScheduleObject() { PostStatusMessage(new FullScheduleMessage { Meetings = ScheduleSource.CodecSchedule.Meetings, MeetingWarningMinutes = ScheduleSource.CodecSchedule.MeetingWarningMinutes }); } } /// /// Represents a FullScheduleMessage /// public class FullScheduleMessage : DeviceStateMessageBase { [JsonProperty("meetings", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the Meetings /// public List Meetings { get; set; } [JsonProperty("meetingWarningMinutes", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the MeetingWarningMinutes /// public int MeetingWarningMinutes { get; set; } } /// /// Represents a MeetingChangeMessage /// public class MeetingChangeMessage { [JsonProperty("meetingChange", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the MeetingChange /// public MeetingChange MeetingChange { get; set; } } /// /// Represents a MeetingChange /// public class MeetingChange { [JsonProperty("changeType", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the ChangeType /// public string ChangeType { get; set; } [JsonProperty("meeting", NullValueHandling = NullValueHandling.Ignore)] /// /// Gets or sets the Meeting /// public Meeting Meeting { get; set; } } }