/// <summary> /// Removes the specified delegate from this list for the specified type /// </summary> /// <param name="key"></param> /// <param name="handler"></param> public void RemoveHandler(object key, Delegate handler) { EventListEntry exist = this.Find(key); if (null == exist) { exist.Handler = Delegate.Remove(exist.Handler, handler); } }
// // public methods // #region public void AddHandler(object key, Delegate handler) /// <summary> /// Adds a delegate to this event list based on the specified key. /// </summary> /// <param name="key">The key that identifies the handler delegate type</param> /// <param name="handler">The delegate to add</param> public void AddHandler(object key, Delegate handler) { EventListEntry exist = this.Find(key); if (null == exist) { this._head = new EventListEntry(handler, key, this._head); } else { exist.Handler = Delegate.Combine(exist.Handler, handler); } }
// // private implementation // #region private EventListEntry Find(object key) /// <summary> /// looks for an event list entry that matches the specified key /// </summary> /// <param name="key">The key to use</param> /// <returns>The matching entry, or null if no matching entry was found</returns> private EventListEntry Find(object key) { EventListEntry current = this._head; while (current != null) { if (current.Key == key) { return(current); } current = current.Next; } return(current); }
Scryber.IPDFComponent _owner; //The component that owns the events #endregion #region public Delegate this[object key] {get;} /// <summary> /// Gets the registered delegate based on the key if one exists. /// </summary> /// <param name="key">The object key the event is registered under</param> /// <returns>The associated Delegate method or null if one is not registered for the specified object</returns> public Delegate this[object key] { get { EventListEntry entry = null; if ((this._owner != null)) { entry = this.Find(key); } if (entry != null) { return(entry.Handler); } return(null); } }
public JToken Log(string id, JToken data) { var gid = new Guid(id); var obj = JablotronDataList.Create(data.ToString()); var cx = SmartHomeDBContext.Create(AppSettings); // get device detail, if there is no device we will throw exception var device = cx.Jablotrons.Single(e => e.DeviceId == gid); var prevData = new JablotronData(); for (int i = 0; i < obj.data.Length; i++) { var itm = obj.data[i]; string newData = JsonConvert.SerializeObject(itm); if (!prevData.IsEqual(itm)) { var newEntryObj = new EventListEntry(); newEntryObj.Icon = "ALARM-" + itm.GetArmStateEx().ToString(); switch (itm.GetArmStateEx()) { case AlarmStateEx.IDLE: newEntryObj.Row1 = "Alarm OFF"; newEntryObj.Row2 = ""; break; case AlarmStateEx.ARMED: newEntryObj.Row1 = "Alarm ARMED"; newEntryObj.Row2 = "Zones: " + itm.armedzone; break; case AlarmStateEx.ALARM: newEntryObj.Row1 = "ALARM"; newEntryObj.Row2 = "Zone: " + EventListEntry.DecodeDevice(itm.deviceid, AppSettings.JABLOTRONZONES); break; } if (device.Note != newEntryObj.Serialize()) { var entry = new EventList(); entry.DeviceId = device.DeviceId; entry.Created = DateTime.Now; entry.EventCode = newEntryObj.Icon; entry.EventText = newEntryObj.Serialize(); cx.EventLists.Add(entry); cx.SaveChanges(); device.Note = entry.EventText; } device.Contacted = itm.timestamp; if (itm.commandexecuted != "") { device.CommandToExecute = ""; } device.LED_A = itm.led_a; device.LED_B = itm.led_b; device.LED_C = itm.led_c; device.LED_Warning = itm.led_warning; device.State = itm.state; } cx.SaveChanges(); } var ret = new JablotronResponse(); ret.status = "OK"; ret.commandtoexecute = device.CommandToExecute; return(JObject.Parse(JsonConvert.SerializeObject(ret))); }
internal EventListEntry(Delegate handler, object key, EventListEntry next) { this.Handler = handler; this.Key = key; this.Next = next; }
/// <summary> /// Disposes of this event list /// </summary> public void Dispose() { _head = null; _owner = null; }