/// <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() }); }
/// <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); }
/// <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); }