コード例 #1
0
ファイル: SessionCtrl.cs プロジェクト: fr830/OPCUA.NET
        /// <summary>
        /// Processes a Publish response from the server.
        /// </summary>
        ///
        void ItemNotification(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs e)
        {
            if (InvokeRequired)
            {
                BeginInvoke(new MonitoredItemNotificationEventHandler(ItemNotification), monitoredItem, e);
                return;
            }
            else if (!IsHandleCreated)
            {
                return;
            }
            try
            {
                if (monitoredItem != null)
                {
                    string         Key  = monitoredItem.StartNodeId.Identifier.ToString() + "." + monitoredItem.RelativePath;
                    ListViewItem[] lvis = listView1.Items.Find(Key, true);
                    Opc.Ua.MonitoredItemNotification change = e.NotificationValue as Opc.Ua.MonitoredItemNotification;
                    if (change != null)
                    {
                        DataValue dv = change.Value;
                        if (lvis.Length == 1)
                        {
                            ListViewItem lvi                = lvis[0];
                            int          subindex           = lvi.SubItems.IndexOfKey(Key);
                            ListViewItem.ListViewSubItem si = lvi.SubItems[subindex];
                            TypedMonitoredItem           mi = si.Tag as TypedMonitoredItem;

                            if (mi != null)
                            {
                                if (mi.ClientHandle == monitoredItem.ClientHandle)
                                {
                                    if (dv != null && dv.Value != null)
                                    {
                                        if (monitoredItem.Status.Id == StatusCodes.BadNodeIdUnknown)
                                        {
                                            // Randy said we would get this, but we don't
                                            RemoveSessionItem(lvi, true);
                                        }
                                        else
                                        {
                                            si.Text = mi.ToString(dv);
                                        }
                                    }
                                    else
                                    {
                                        // This is what we get
                                        RemoveSessionItem(lvi, true);
                                    }
                                }
                                else
                                {
                                    Utils.Trace("(mi.ClientHandle != monitoredItem.ClientHandle " + MethodBase.GetCurrentMethod());
                                }
                            }
                            else
                            {
                                Utils.Trace("mi is null " + MethodBase.GetCurrentMethod());
                            }
                        }
                        else
                        {
                            Utils.Trace("lvis.Length != 1 " + MethodBase.GetCurrentMethod());
                        }
                    }
                    else
                    {
                        EventFieldList eventFields = e.NotificationValue as EventFieldList;
                        if (eventFields != null)
                        {
                            // get the event fields.
                            NodeId        eventType  = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.EventType) as NodeId;
                            string        sourceName = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.SourceName) as string;
                            DateTime?     time       = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.Time) as DateTime?;
                            ushort?       severity   = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.Severity) as ushort?;
                            LocalizedText message    = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.Message) as LocalizedText;
                            NodeId        sourceNode = monitoredItem.GetFieldValue(eventFields, ObjectTypes.BaseEventType, BrowseNames.SourceNode) as NodeId;
                            //Utils.Trace("eventType: {0}, message: {1}, sourceName: {2} sourceNode: {3}", eventType.ToString(), message.Text.ToString(), sourceName.ToString(), sourceNode.ToString());
                            if (eventType == new NodeId(ObjectTypes.AuditActivateSessionEventType))
                            {
                                Utils.Trace("AuditActivateSessionEventType detected " + MethodBase.GetCurrentMethod());
                                AddSessions();
                                m_Subscription.ModifyItems();
                                m_Subscription.ApplyChanges();
                            }
                        }
                        else
                        {
                            Utils.Trace("eventFields is null " + MethodBase.GetCurrentMethod());
                        }
                    }
                }
                else
                {
                    Utils.Trace("monitoredItem is null " + MethodBase.GetCurrentMethod());
                }
            }
            catch (Exception exception)
            {
                GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception);
            }
        }
コード例 #2
0
ファイル: SessionCtrl.cs プロジェクト: yuriik83/UA-.NET
    /// <summary>
    /// 
    /// </summary>
    private void AddSessions()
    {
      Browser browser = new Browser(m_Session);
      browser.MaxReferencesReturned = 0;
      browser.BrowseDirection   = BrowseDirection.Forward;
      browser.IncludeSubtypes   = true;
      browser.NodeClassMask     = (int)NodeClass.Object;
      browser.ContinueUntilDone = true;
      NodeId browseid = new NodeId(Objects.Server_ServerDiagnostics_SessionsDiagnosticsSummary);
      browser.ReferenceTypeId =  null;
      ReferenceDescriptionCollection refs = browser.Browse(browseid);

      foreach(ReferenceDescription rf in refs)
      {
        if(m_Session.TypeTree.IsTypeOf(new ExpandedNodeId(rf.TypeDefinition), new ExpandedNodeId(ObjectTypes.SessionDiagnosticsObjectType)))
        {
          if(listView1.Items.IndexOfKey(rf.NodeId.ToString()) == -1)
          {
            ListViewItem lvi = listView1.Items.Add(rf.NodeId.ToString(), rf.DisplayName.Text.ToString(), -1);
            lvi.Tag = rf.NodeId;
            lvi.IndentCount = 0;

            string SessionID = "SessionDiagnostics.SessionId";
            string ClientName = "SessionDiagnostics.ClientName";
            string ClientConnectionTime = "SessionDiagnostics.ClientConnectionTime";

            ListViewItem.ListViewSubItem SessionIDSubItem = lvi.SubItems.Add("");
            SessionIDSubItem.Name = rf.NodeId.Identifier.ToString() + "." + SessionID;
            ListViewItem.ListViewSubItem ClientNameSubItem = lvi.SubItems.Add("");
            ClientNameSubItem.Name = rf.NodeId.Identifier.ToString() + "." + ClientName;
            ListViewItem.ListViewSubItem ClientConnectionTimeSubItem = lvi.SubItems.Add("");
            ClientConnectionTimeSubItem.Name = rf.NodeId.Identifier.ToString() + "." + ClientConnectionTime;

            MonitoredItem sessionItem = new MonitoredItem(m_Subscription.DefaultItem);
            sessionItem.StartNodeId = (NodeId)rf.NodeId;
            sessionItem.RelativePath = SessionID;
            sessionItem.NodeClass = NodeClass.Object;
            sessionItem.AttributeId = Attributes.Value;
            m_Subscription.AddItem(sessionItem);
            sessionItem.Notification += m_ItemNotification;


            INode node = m_Session.NodeCache.Find(rf.NodeId);

            TypedMonitoredItem SessionIDItem = new TypedMonitoredItem(m_Subscription.DefaultItem);
            SessionIDItem.StartNodeId = (NodeId)rf.NodeId;
            SessionIDItem.RelativePath = SessionID;
            SessionIDItem.NodeClass = NodeClass.Variable;
            SessionIDItem.AttributeId = Attributes.Value;
            m_Subscription.AddItem(SessionIDItem);
            SessionIDItem.Notification += m_ItemNotification;
            SessionIDSubItem.Tag = SessionIDItem;
            Utils.Trace("Adding: {0}, {1} as subitem in AddSessions()", SessionIDItem.StartNodeId.ToString(), SessionIDItem.RelativePath.ToString());


            TypedMonitoredItem ClientNameItem = new TypedMonitoredItem(m_Subscription.DefaultItem);
            ClientNameItem.StartNodeId = (NodeId)rf.NodeId;
            ClientNameItem.RelativePath = ClientName;
            ClientNameItem.NodeClass = NodeClass.Variable;
            ClientNameItem.AttributeId = Attributes.Value;
            m_Subscription.AddItem(ClientNameItem);
            ClientNameItem.Notification += m_ItemNotification;
            ClientNameSubItem.Tag = ClientNameItem;
            Utils.Trace("Adding: {0}, {1} as subitem in AddSessions()", ClientNameItem.StartNodeId.ToString(), ClientNameItem.RelativePath.ToString());

            DateTimeMonitoredItem ClientConnectionTimeItem = new DateTimeMonitoredItem(m_Subscription.DefaultItem);
            ClientConnectionTimeItem.StartNodeId = (NodeId)rf.NodeId;
            ClientConnectionTimeItem.RelativePath = ClientConnectionTime;
            ClientConnectionTimeItem.NodeClass = NodeClass.Variable;
            ClientConnectionTimeItem.AttributeId = Attributes.Value;
            m_Subscription.AddItem(ClientConnectionTimeItem);
            ClientConnectionTimeItem.Notification += m_ItemNotification;
            ClientConnectionTimeSubItem.Tag = ClientConnectionTimeItem;
            Utils.Trace("Adding: {0}, {1} as subitem in AddSessions()", ClientConnectionTimeItem.StartNodeId.ToString(), ClientConnectionTimeItem.RelativePath.ToString());
          }
          else
          {
            Utils.Trace("Key already exists in listview. rf.BrowseName: {0},rf.NodeId: {1}, rf.TypeDefinition: {2}", rf.BrowseName.ToString(), rf.NodeId.ToString(), rf.TypeDefinition.ToString());
          }
        }
        else
        {
          Utils.Trace("Unknown Object rf.BrowseName: {0},rf.NodeId: {1}, rf.TypeDefinition: {2}", rf.BrowseName.ToString(), rf.NodeId.ToString(), rf.TypeDefinition.ToString());
        }
      }
    }
コード例 #3
0
ファイル: SessionCtrl.cs プロジェクト: fr830/OPCUA.NET
        /// <summary>
        ///
        /// </summary>
        private void AddSessions()
        {
            Browser browser = new Browser(m_Session);

            browser.MaxReferencesReturned = 0;
            browser.BrowseDirection       = BrowseDirection.Forward;
            browser.IncludeSubtypes       = true;
            browser.NodeClassMask         = (int)NodeClass.Object;
            browser.ContinueUntilDone     = true;
            NodeId browseid = new NodeId(Objects.Server_ServerDiagnostics_SessionsDiagnosticsSummary);

            browser.ReferenceTypeId = null;
            ReferenceDescriptionCollection refs = browser.Browse(browseid);

            foreach (ReferenceDescription rf in refs)
            {
                if (m_Session.TypeTree.IsTypeOf(new ExpandedNodeId(rf.TypeDefinition), new ExpandedNodeId(ObjectTypes.SessionDiagnosticsObjectType)))
                {
                    if (listView1.Items.IndexOfKey(rf.NodeId.ToString()) == -1)
                    {
                        ListViewItem lvi = listView1.Items.Add(rf.NodeId.ToString(), rf.DisplayName.Text.ToString(), -1);
                        lvi.Tag         = rf.NodeId;
                        lvi.IndentCount = 0;

                        string SessionID            = "SessionDiagnostics.SessionId";
                        string ClientName           = "SessionDiagnostics.ClientName";
                        string ClientConnectionTime = "SessionDiagnostics.ClientConnectionTime";

                        ListViewItem.ListViewSubItem SessionIDSubItem = lvi.SubItems.Add("");
                        SessionIDSubItem.Name = rf.NodeId.Identifier.ToString() + "." + SessionID;
                        ListViewItem.ListViewSubItem ClientNameSubItem = lvi.SubItems.Add("");
                        ClientNameSubItem.Name = rf.NodeId.Identifier.ToString() + "." + ClientName;
                        ListViewItem.ListViewSubItem ClientConnectionTimeSubItem = lvi.SubItems.Add("");
                        ClientConnectionTimeSubItem.Name = rf.NodeId.Identifier.ToString() + "." + ClientConnectionTime;

                        MonitoredItem sessionItem = new MonitoredItem(m_Subscription.DefaultItem);
                        sessionItem.StartNodeId  = (NodeId)rf.NodeId;
                        sessionItem.RelativePath = SessionID;
                        sessionItem.NodeClass    = NodeClass.Object;
                        sessionItem.AttributeId  = Attributes.Value;
                        m_Subscription.AddItem(sessionItem);
                        sessionItem.Notification += m_ItemNotification;


                        INode node = m_Session.NodeCache.Find(rf.NodeId);

                        TypedMonitoredItem SessionIDItem = new TypedMonitoredItem(m_Subscription.DefaultItem);
                        SessionIDItem.StartNodeId  = (NodeId)rf.NodeId;
                        SessionIDItem.RelativePath = SessionID;
                        SessionIDItem.NodeClass    = NodeClass.Variable;
                        SessionIDItem.AttributeId  = Attributes.Value;
                        m_Subscription.AddItem(SessionIDItem);
                        SessionIDItem.Notification += m_ItemNotification;
                        SessionIDSubItem.Tag        = SessionIDItem;
                        Utils.Trace("Adding: {0}, {1} as subitem in AddSessions()", SessionIDItem.StartNodeId.ToString(), SessionIDItem.RelativePath.ToString());


                        TypedMonitoredItem ClientNameItem = new TypedMonitoredItem(m_Subscription.DefaultItem);
                        ClientNameItem.StartNodeId  = (NodeId)rf.NodeId;
                        ClientNameItem.RelativePath = ClientName;
                        ClientNameItem.NodeClass    = NodeClass.Variable;
                        ClientNameItem.AttributeId  = Attributes.Value;
                        m_Subscription.AddItem(ClientNameItem);
                        ClientNameItem.Notification += m_ItemNotification;
                        ClientNameSubItem.Tag        = ClientNameItem;
                        Utils.Trace("Adding: {0}, {1} as subitem in AddSessions()", ClientNameItem.StartNodeId.ToString(), ClientNameItem.RelativePath.ToString());

                        DateTimeMonitoredItem ClientConnectionTimeItem = new DateTimeMonitoredItem(m_Subscription.DefaultItem);
                        ClientConnectionTimeItem.StartNodeId  = (NodeId)rf.NodeId;
                        ClientConnectionTimeItem.RelativePath = ClientConnectionTime;
                        ClientConnectionTimeItem.NodeClass    = NodeClass.Variable;
                        ClientConnectionTimeItem.AttributeId  = Attributes.Value;
                        m_Subscription.AddItem(ClientConnectionTimeItem);
                        ClientConnectionTimeItem.Notification += m_ItemNotification;
                        ClientConnectionTimeSubItem.Tag        = ClientConnectionTimeItem;
                        Utils.Trace("Adding: {0}, {1} as subitem in AddSessions()", ClientConnectionTimeItem.StartNodeId.ToString(), ClientConnectionTimeItem.RelativePath.ToString());
                    }
                    else
                    {
                        Utils.Trace("Key already exists in listview. rf.BrowseName: {0},rf.NodeId: {1}, rf.TypeDefinition: {2}", rf.BrowseName.ToString(), rf.NodeId.ToString(), rf.TypeDefinition.ToString());
                    }
                }
                else
                {
                    Utils.Trace("Unknown Object rf.BrowseName: {0},rf.NodeId: {1}, rf.TypeDefinition: {2}", rf.BrowseName.ToString(), rf.NodeId.ToString(), rf.TypeDefinition.ToString());
                }
            }
        }