/// <summary> /// Reports newly measured values. /// </summary> /// <param name="Reference">Optional node reference</param> /// <param name="Values">New momentary values.</param> /// <param name="ExceptJID">Only check subscriptions not from this JID.</param> internal void NewMomentaryValues(ThingReference Reference, IEnumerable <Field> Values, string ExceptJID) { LinkedList <Subscription> Triggered = null; if (Reference == null) { Reference = ThingReference.Empty; } lock (this.subscriptionsByThing) { if (!this.subscriptionsByThing.TryGetValue(Reference, out LinkedList <Subscription> Subscriptions)) { return; } foreach (Subscription Subscription in Subscriptions) { if (Subscription.From == ExceptJID) { Subscription.LastTrigger = DateTime.Now; continue; } if (!Subscription.IsTriggered(Values)) { continue; } if (Triggered == null) { Triggered = new LinkedList <Subscription>(); } Triggered.AddLast(Subscription); } } if (Triggered != null) { foreach (Subscription Subscription in Triggered) { this.TriggerSubscription(Subscription); } } }