using Newtonsoft.Json; using PepperDash.Core; using PepperDash.Core.Logging; using PepperDash.Essentials.Core; using PepperDash.Essentials.Room.Config; using System; using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { public class RoomEventScheduleMessenger : MessengerBase { private readonly IRoomEventSchedule _room; public RoomEventScheduleMessenger(string key, string messagePath, IRoomEventSchedule room) : base(key, messagePath, room as IKeyName) { _room = room; } #region Overrides of MessengerBase protected override void RegisterActions() { AddAction("/saveScheduledEvents", (id, content) => SaveScheduledEvents(content.ToObject>())); AddAction("/status", (id, content) => { var events = _room.GetScheduledEvents(); SendFullStatus(events); }); _room.ScheduledEventsChanged += (sender, args) => SendFullStatus(args.ScheduledEvents); } #endregion private void SaveScheduledEvents(List events) { foreach (var evt in events) { SaveScheduledEvent(evt); } } private void SaveScheduledEvent(ScheduledEventConfig eventConfig) { try { _room.AddOrUpdateScheduledEvent(eventConfig); } catch (Exception ex) { this.LogException(ex,"Exception saving event"); } } private void SendFullStatus(List events) { var message = new RoomEventScheduleStateMessage { ScheduleEvents = events, }; PostStatusMessage(message); } } public class RoomEventScheduleStateMessage : DeviceStateMessageBase { [JsonProperty("scheduleEvents")] public List ScheduleEvents { get; set; } } }