private void subscribeToolStripMenuItem_Click(object sender, EventArgs e) { if ((NodeId)BrowseCTRL.SelectedNode.NodeId != null) { if (subscriptionOutputWindow == null) { subscriptionOutputWindow = new SubscriptionOutput(); } if (m_subscription == null) { m_subscription = new Subscription(m_session.DefaultSubscription); m_subscription.PublishingEnabled = true; m_subscription.PublishingInterval = 1000; m_session.AddSubscription(m_subscription); m_subscription.Create(); } if (monitoredItems.Count == 0) { if (BrowseCTRL.GetChildOfSelectedNode(0) != null) { BrowseDescription nodeToBrowse = new BrowseDescription(); nodeToBrowse.NodeId = (NodeId)BrowseCTRL.SelectedNode.NodeId; nodeToBrowse.BrowseDirection = BrowseDirection.Forward; nodeToBrowse.ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HierarchicalReferences; nodeToBrowse.IncludeSubtypes = true; //nodeToBrowse.NodeClassMask = (uint)(NodeClass.Object); nodeToBrowse.ResultMask = (uint)(BrowseResultMask.All); ReferenceDescriptionCollection references = ClientUtils.Browse(m_session, nodeToBrowse, false); subscriptionOutputWindow.label1.Text = "You selected a folder: these are the child nodes:\n"; foreach (var item in references) { var mi = new MonitoredItem(m_subscription.DefaultItem); mi.StartNodeId = (NodeId)item.NodeId; mi.AttributeId = Attributes.DisplayName; mi.MonitoringMode = MonitoringMode.Reporting; mi.SamplingInterval = 1000; mi.QueueSize = 0; mi.DiscardOldest = true; mi.Notification += new MonitoredItemNotificationEventHandler(Mi_Notification); monitoredItems.Add(mi); } } else { var mi = new MonitoredItem(m_subscription.DefaultItem); mi.StartNodeId = (NodeId)BrowseCTRL.SelectedNode.NodeId; mi.AttributeId = Attributes.Value; mi.MonitoringMode = MonitoringMode.Reporting; mi.SamplingInterval = 1000; mi.QueueSize = 0; mi.DiscardOldest = true; mi.Notification += new MonitoredItemNotificationEventHandler(Mi_Notification); // define event handler for this item, and then add to subscription mi.Notification += new MonitoredItemNotificationEventHandler(monitoredItem_Notification); monitoredItems.Add(mi); } m_subscription.AddItems(monitoredItems); } subscriptionOutputWindow.Show(); subscriptionOutputWindow.FormClosed += OutputWindow_FormClosed; m_subscription.ApplyChanges(); } }
/// <summary> /// Returns the child node at the specified index. /// </summary> public ReferenceDescription GetChildOfSelectedNode(int index) { return(BrowseCTRL.GetChildOfSelectedNode(index)); }