public static bool IsNull(ExpandedNodeId?nodeId) { return((nodeId == null) || NodeId.IsNull(nodeId.NodeId)); }
/// <summary> /// Initializes a new instance of the <see cref="MonitoredItemCollection"/> class. /// Attributes found in the given subscription are added to the collection. /// </summary> /// <param name="subscription">the instance that will be inspected for [MonitoredItem] attributes.</param> public MonitoredItemCollection(object subscription) { var typeInfo = subscription.GetType().GetTypeInfo(); foreach (var propertyInfo in typeInfo.DeclaredProperties) { var itemAttribute = propertyInfo.GetCustomAttribute <MonitoredItemAttribute>(); if (itemAttribute == null || string.IsNullOrEmpty(itemAttribute.NodeId)) { continue; } MonitoringFilter filter = null; if (itemAttribute.AttributeId == AttributeIds.Value && (itemAttribute.DataChangeTrigger != DataChangeTrigger.StatusValue || itemAttribute.DeadbandType != DeadbandType.None)) { filter = new DataChangeFilter() { Trigger = itemAttribute.DataChangeTrigger, DeadbandType = (uint)itemAttribute.DeadbandType, DeadbandValue = itemAttribute.DeadbandValue }; } var propType = propertyInfo.PropertyType; if (propType == typeof(DataValue)) { this.Add(new DataValueMonitoredItem( property: propertyInfo, nodeId: NodeId.Parse(itemAttribute.NodeId), indexRange: itemAttribute.IndexRange, attributeId: itemAttribute.AttributeId, samplingInterval: itemAttribute.SamplingInterval, filter: filter, queueSize: itemAttribute.QueueSize, discardOldest: itemAttribute.DiscardOldest)); continue; } if (propType == typeof(ObservableQueue <DataValue>)) { this.Add(new DataValueQueueMonitoredItem( property: propertyInfo, nodeId: NodeId.Parse(itemAttribute.NodeId), indexRange: itemAttribute.IndexRange, attributeId: itemAttribute.AttributeId, samplingInterval: itemAttribute.SamplingInterval, filter: filter, queueSize: itemAttribute.QueueSize, discardOldest: itemAttribute.DiscardOldest)); continue; } if (propType == typeof(BaseEvent) || propType.GetTypeInfo().IsSubclassOf(typeof(BaseEvent))) { this.Add(new EventMonitoredItem( property: propertyInfo, nodeId: NodeId.Parse(itemAttribute.NodeId), indexRange: itemAttribute.IndexRange, attributeId: itemAttribute.AttributeId, samplingInterval: itemAttribute.SamplingInterval, filter: new EventFilter() { SelectClauses = EventHelper.GetSelectClauses(propType) }, queueSize: itemAttribute.QueueSize, discardOldest: itemAttribute.DiscardOldest)); continue; } if (propType.IsConstructedGenericType && propType.GetGenericTypeDefinition() == typeof(ObservableQueue <>)) { var elemType = propType.GenericTypeArguments[0]; if (elemType == typeof(BaseEvent) || elemType.GetTypeInfo().IsSubclassOf(typeof(BaseEvent))) { this.Add((MonitoredItemBase)Activator.CreateInstance( typeof(EventQueueMonitoredItem <>).MakeGenericType(elemType), propertyInfo, NodeId.Parse(itemAttribute.NodeId), itemAttribute.AttributeId, itemAttribute.IndexRange, MonitoringMode.Reporting, itemAttribute.SamplingInterval, new EventFilter() { SelectClauses = EventHelper.GetSelectClauses(elemType) }, itemAttribute.QueueSize, itemAttribute.DiscardOldest)); continue; } } this.Add(new ValueMonitoredItem( property: propertyInfo, nodeId: NodeId.Parse(itemAttribute.NodeId), indexRange: itemAttribute.IndexRange, attributeId: itemAttribute.AttributeId, samplingInterval: itemAttribute.SamplingInterval, filter: filter, queueSize: itemAttribute.QueueSize, discardOldest: itemAttribute.DiscardOldest)); } }
public ExpandedNodeId(NodeId identifier, string?namespaceUri = null, uint serverIndex = 0) { this.NodeId = identifier; this.NamespaceUri = namespaceUri; this.ServerIndex = serverIndex; }
public Variant(NodeId value) { this.Value = value; this.Type = VariantType.NodeId; this.ArrayDimensions = null; }