Exemplo n.º 1
0
        /// <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);
                }
            }
        }