using System; using System.Collections.Generic; using System.Linq; using System.Text; using Crestron.SimplSharp; using Crestron.SimplSharpPro; using PepperDash.Core; namespace PepperDash.Essentials.Core { public abstract class Feedback : IKeyed { public event EventHandler OutputChange; public string Key { get; private set; } public virtual bool BoolValue { get { return false; } } public virtual int IntValue { get { return 0; } } public virtual string StringValue { get { return ""; } } public virtual string SerialValue { get { return ""; } } /// /// Feedbacks can be put into test mode for simulation of events without real data. /// Using JSON debugging methods and the Set/ClearTestValue methods, we can simulate /// Feedback behaviors /// public bool InTestMode { get; protected set; } /// /// Base Constructor - empty /// protected Feedback() { } protected Feedback(string key) { if (key == null) Key = ""; else Key = key; } /// /// Clears test mode and fires update. /// public void ClearTestValue() { InTestMode = false; FireUpdate(); } /// /// Fires an update synchronously /// public abstract void FireUpdate(); /// /// Fires the update asynchronously within a CrestronInvoke /// public void InvokeFireUpdate() { CrestronInvoke.BeginInvoke(o => FireUpdate()); } ///// ///// Helper method that fires event. Use this intstead of calling OutputChange ///// //protected void OnOutputChange() //{ // if (OutputChange != null) OutputChange(this, EventArgs.Empty); //} protected void OnOutputChange(bool value) { if (OutputChange != null) OutputChange(this, new FeedbackEventArgs(value)); } protected void OnOutputChange(int value) { if (OutputChange != null) OutputChange(this, new FeedbackEventArgs(value)); } protected void OnOutputChange(string value) { if (OutputChange != null) OutputChange(this, new FeedbackEventArgs(value)); } } }