示例#1
0
 /// <summary>
 /// Clone
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public static PublishedDataItemsModel Clone(this PublishedDataItemsModel model)
 {
     if (model == null)
     {
         return(null);
     }
     return(new PublishedDataItemsModel {
         PublishedData = model.PublishedData?.Select(d => d.Clone()).ToList()
     });
 }
示例#2
0
        /// <summary>
        /// Convert to monitored items including heartbeat handling.
        /// </summary>
        /// <param name="dataItems"></param>
        /// <returns></returns>
        public static IEnumerable <MonitoredItemModel> ToMonitoredItems(
            this PublishedDataItemsModel dataItems)
        {
            if (dataItems?.PublishedData == null)
            {
                return(Enumerable.Empty <MonitoredItemModel>());
            }

            var map = new Dictionary <string, MonitoredItemModel>();

            foreach (var item in dataItems.PublishedData)
            {
                if (item == null)
                {
                    continue;
                }
                var monitoredItem = item.ToMonitoredItem();
                map.Add(monitoredItem.Id ?? Guid.NewGuid().ToString(),
                        monitoredItem);
                if (item.HeartbeatInterval == null)
                {
                    continue;
                }

                //
                // We add a timer as heartbeat trigger that samples
                // server time, but we configure it so it will not be
                // part of the notifications (Sampling only).
                //
                var originalTrigger = item.TriggerId;
                item.TriggerId = ((originalTrigger ?? "heartbeat") +
                                  item.HeartbeatInterval.Value.Ticks).ToSha1Hash();
                if (map.ContainsKey(item.TriggerId))
                {
                    continue;
                }

                map.Add(item.TriggerId,
                        new MonitoredItemModel {
                    MonitoringMode   = MonitoringMode.Sampling,
                    StartNodeId      = "i=2258",
                    SamplingInterval = item.HeartbeatInterval,
                    Id        = item.TriggerId,
                    TriggerId = originalTrigger
                });
            }
            return(map.Values);
        }
示例#3
0
        /// <summary>
        /// Convert to monitored items including heartbeat handling.
        /// </summary>
        /// <param name="dataItems"></param>
        /// <returns></returns>
        public static IEnumerable <MonitoredItemModel> ToMonitoredItems(
            this PublishedDataItemsModel dataItems)
        {
            if (dataItems?.PublishedData == null)
            {
                return(Enumerable.Empty <MonitoredItemModel>());
            }

            var map = new Dictionary <string, MonitoredItemModel>();

            foreach (var item in dataItems.PublishedData)
            {
                if (item == null)
                {
                    continue;
                }
                var monitoredItem = item.ToMonitoredItem();
                map.Add(monitoredItem.Id ?? Guid.NewGuid().ToString(), monitoredItem);

                /*  Heartbeat using triggering mode
                 * if (monitoredItem.HeartbeatInterval == null) {
                 *  continue;
                 * }
                 *
                 * //
                 * // We add a timer as heartbeat trigger that samples
                 * // server time, but we configure it so it will not be
                 * // part of the notifications (Sampling only).
                 * //
                 * monitoredItem.TriggerId ??= ("heartbeat_" +
                 *  monitoredItem.HeartbeatInterval.Value.TotalSeconds.ToString()).ToSha1Hash();
                 * if (map.ContainsKey(monitoredItem.TriggerId)) {
                 *  continue;
                 * }
                 * monitoredItem.MonitoringMode = MonitoringMode.Sampling;
                 * map.Add(monitoredItem.TriggerId,
                 *  new MonitoredItemModel {
                 *      MonitoringMode = MonitoringMode.Sampling,
                 *      StartNodeId = "i=2258",
                 *      SamplingInterval = monitoredItem.HeartbeatInterval,
                 *      Id = monitoredItem.TriggerId,
                 *  });
                 */
            }
            return(map.Values);
        }
        /// <summary>
        /// Convert to monitored items including heartbeat handling.
        /// </summary>
        /// <param name="dataItems"></param>
        /// <returns></returns>
        public static IEnumerable <MonitoredItemModel> ToMonitoredItems(
            this PublishedDataItemsModel dataItems)
        {
            if (dataItems?.PublishedData == null)
            {
                return(Enumerable.Empty <MonitoredItemModel>());
            }

            var map = new Dictionary <string, MonitoredItemModel>();

            foreach (var item in dataItems.PublishedData)
            {
                if (item == null)
                {
                    continue;
                }
                var monitoredItem = item.ToMonitoredItem();

                map.Add(monitoredItem.StartNodeId, monitoredItem);
            }
            return(map.Values);
        }