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; }
}
}