![](dotnetdiagramimages/OpcLabs_ServerOpcUA_OpcLabs_EasyOpc_UA_OperationModel_EasyUAServerEndpointStateChangedEventArgs.png)
'Declaration
<ExceptionContractAnnotationAttribute(True)> <CLSCompliantAttribute(True)> <TypeConverterAttribute(System.ComponentModel.ExpandableObjectConverter)> <SerializableAttribute()> Public Class EasyUAServerEndpointStateChangedEventArgs Inherits OpcLabs.BaseLib.Communication.ConnectedConditionChangedEventArgs Implements OpcLabs.BaseLib.Communication.ComTypes._ConnectedConditionChangedEventArgs, OpcLabs.BaseLib.OperationModel.ComTypes._OperationEventArgs, System.ICloneable, System.Runtime.Serialization.ISerializable, System.Xml.Serialization.IXmlSerializable
'Usage
Dim instance As EasyUAServerEndpointStateChangedEventArgs
[ExceptionContractAnnotation(true)] [CLSCompliant(true)] [TypeConverter(System.ComponentModel.ExpandableObjectConverter)] [Serializable()] public class EasyUAServerEndpointStateChangedEventArgs : OpcLabs.BaseLib.Communication.ConnectedConditionChangedEventArgs, OpcLabs.BaseLib.Communication.ComTypes._ConnectedConditionChangedEventArgs, OpcLabs.BaseLib.OperationModel.ComTypes._OperationEventArgs, System.ICloneable, System.Runtime.Serialization.ISerializable, System.Xml.Serialization.IXmlSerializable
[ExceptionContractAnnotation(true)] [CLSCompliant(true)] [TypeConverter(System.ComponentModel.ExpandableObjectConverter)] [Serializable()] public ref class EasyUAServerEndpointStateChangedEventArgs : public OpcLabs.BaseLib.Communication.ConnectedConditionChangedEventArgs, OpcLabs.BaseLib.Communication.ComTypes._ConnectedConditionChangedEventArgs, OpcLabs.BaseLib.OperationModel.ComTypes._OperationEventArgs, System.ICloneable, System.Runtime.Serialization.ISerializable, System.Xml.Serialization.IXmlSerializable
// This example shows how to obtain notifications about the changes in the state of the endpoints that server exposes. // You can use any OPC UA client, including our Connectivity Explorer and OpcCmd utility, to connect to the server. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . // OPC client, server and subscriber examples in C# on GitHub: https://github.com/OPCLabs/Examples-OPCStudio-CSharp . // Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own // a commercial license in order to use Online Forums, and we reply to every post. using System; using OpcLabs.EasyOpc.UA; using OpcLabs.EasyOpc.UA.NodeSpace; using OpcLabs.EasyOpc.UA.OperationModel; namespace UAServerDocExamples._EasyUAServer { class EndpointStateChanged { public static void Main1() { // Instantiate the server object. // By default, the server will run on endpoint URL "opc.tcp://localhost:48040/". var server = new EasyUAServer(); // Define a data variable providing random integers. var random = new Random(); server.Add(new UADataVariable("MyDataVariable").ReadValueFunction(() => random.Next())); // Hook events. server.EndpointStateChanged += ServerOnEndpointStateChanged; // Start the server. Console.WriteLine("The server is starting..."); server.Start(); Console.WriteLine("The server is started."); Console.WriteLine(); // Let the user decide when to stop. Console.WriteLine("Press Enter to stop the server..."); Console.ReadLine(); // Stop the server. Console.WriteLine("The server is stopping..."); server.Stop(); Console.WriteLine("The server is stopped."); } // Event handler for the EndpointStateChanged event. It simply prints out the event. private static void ServerOnEndpointStateChanged(object sender, EasyUAServerEndpointStateChangedEventArgs e) { Console.WriteLine(e); // Following are some useful properties in the event notification: // e.EndpointUrlString // e.ConnectionState // e.Exception // e.Succeeded } } }
' This example shows how to obtain notifications about the changes in the state of the endpoints that server exposes. ' You can use any OPC UA client, including our Connectivity Explorer and OpcCmd utility, to connect to the server. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . ' OPC client and subscriber examples in VB.NET on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBNET . ' Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own ' a commercial license in order to use Online Forums, and we reply to every post. Imports System Imports OpcLabs.EasyOpc.UA Imports OpcLabs.EasyOpc.UA.NodeSpace Imports OpcLabs.EasyOpc.UA.OperationModel Namespace _EasyUAServer Partial Friend Class EndpointStateChanged Shared Sub Main1() ' Instantiate the server object. ' By default, the server will run on endpoint URL "opc.tcp://localhost:48040/". Dim server = New EasyUAServer() ' Define a data variable providing random integers. Dim random = New Random() server.Add(New UADataVariable("MyDataVariable").ReadValueFunction(Function() random.Next())) ' Hook events. AddHandler server.EndpointStateChanged, AddressOf ServerOnEndpointStateChanged ' Start the server. Console.WriteLine("The server is starting...") server.Start() Console.WriteLine("The server is started.") Console.WriteLine() ' Let the user decide when to stop. Console.WriteLine("Press Enter to stop the server...") Console.ReadLine() ' Stop the server. Console.WriteLine("The server is stopping...") server.Stop() Console.WriteLine("The server is stopped.") End Sub ' Event handler for the EndpointStateChanged event. It simply prints out the event. Private Shared Sub ServerOnEndpointStateChanged(ByVal sender As Object, ByVal e As EasyUAServerEndpointStateChangedEventArgs) Console.WriteLine(e) ' Following are some useful properties in the event notification: ' e.EndpointUrlString ' e.ConnectionState ' e.Exception ' e.Succeeded End Sub End Class End Namespace
// A fully functional OPC UA demo server running in Windows Forms host. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . // OPC client, server and subscriber examples in C# on GitHub: https://github.com/OPCLabs/Examples-OPCStudio-CSharp . // Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own // a commercial license in order to use Online Forums, and we reply to every post. using System.Linq; using System.Windows.Forms; using Microsoft.Extensions.DependencyInjection; using OpcLabs.EasyOpc.UA; using OpcLabs.EasyOpc.UA.Forms.Application; using OpcLabs.EasyOpc.UA.OperationModel; using OpcLabs.EasyOpc.UA.Services; using UAServerDemoLibrary; namespace UAServerWindowsFormsDemo { public partial class MainForm : Form { public MainForm() { InitializeComponent(); // Instantiating the EasyUAServer here, and not inline where the field is declared, is important for it to // acquire the proper synchronization context. _server = new EasyUAServer(); } private void Form1_Load(object sender, System.EventArgs e) { // Extend the form's system menu by a command for OPC UA application management. EasyUAFormsApplication.Instance.AddToSystemMenu(this); // Define various nodes. DataNodes.AddToParent(_server.Objects); DemoNodes.AddToParent(_server.Objects); // Hook events to the server object. _server.EndpointStateChanged += ServerOnEndpointStateChanged; // Obtain the server connection monitoring service. IEasyUAServerConnectionMonitoring serverConnectionMonitoring = _server.GetService<IEasyUAServerConnectionMonitoring>(); if (!(serverConnectionMonitoring is null)) { // Hook events to the connection monitoring service. serverConnectionMonitoring.ClientSessionConnected += ServerConnectionMonitoringOnClientSessionConnected; serverConnectionMonitoring.ClientSessionDisconnected += ServerConnectionMonitoringOnClientSessionDisconnected; } _server.Start(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { _server.Stop(); } private void ServerOnEndpointStateChanged(object sender, EasyUAServerEndpointStateChangedEventArgs e) { // Note that since we have created the EasyUAServer on the UI thread, we can access the UI controls in its // event handlers directly, because the events are raised using the synchronization context acquired at time of // the creation. string endpointUrlString = e.EndpointUrlString; ListViewItem listViewItem = endpointStateListView.Items.Cast<ListViewItem>().FirstOrDefault(item => item.Text == endpointUrlString); if (listViewItem is null) { listViewItem = new ListViewItem(endpointUrlString); endpointStateListView.Items.Add(listViewItem); listViewItem.SubItems.Add(""); listViewItem.SubItems.Add(""); } listViewItem.SubItems[1].Text = e.ConnectionState.ToString(); listViewItem.SubItems[2].Text = e.Exception?.Message ?? ""; } private void ServerConnectionMonitoringOnClientSessionConnected(object sender, EasyUAClientSessionConnectionEventArgs e) { // Note that since we have created the EasyUAServer on the UI thread, we can access the UI controls in its // event handlers directly, because the events are raised using the synchronization context acquired at time of // the creation. var listViewItem = new ListViewItem(e.SessionId.Identifier.ToString()); listViewItem.SubItems.Add(e.SessionName); connectionsListView.Items.Add(listViewItem); } private void ServerConnectionMonitoringOnClientSessionDisconnected(object sender, EasyUAClientSessionConnectionEventArgs e) { // Note that since we have created the EasyUAServer on the UI thread, we can access the UI controls in its // event handlers directly, because the events are raised using the synchronization context acquired at time of // the creation. string identifierString = e.SessionId.Identifier.ToString(); ListViewItem listViewItem = connectionsListView.Items.Cast<ListViewItem>().FirstOrDefault(item => item.Text == identifierString); if (!(listViewItem is null)) connectionsListView.Items.Remove(listViewItem); } private readonly EasyUAServer _server; } }
' A fully functional OPC UA demo server running in Windows Forms host. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . ' OPC client and subscriber examples in VB.NET on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBNET . ' Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own ' a commercial license in order to use Online Forums, and we reply to every post. Imports System.Linq Imports System.Windows.Forms Imports Microsoft.Extensions.DependencyInjection Imports OpcLabs.EasyOpc.UA Imports OpcLabs.EasyOpc.UA.Forms.Application Imports OpcLabs.EasyOpc.UA.OperationModel Imports OpcLabs.EasyOpc.UA.Services Imports UAServerDemoLibrary Public Class MainForm Sub New() InitializeComponent() ' Instantiating the EasyUAServer here, and not inline where the field is declared, is important for it to ' acquire the proper synchronization context. _server = New EasyUAServer() End Sub Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Extend the form's system menu by a command for OPC UA application management. EasyUAFormsApplication.Instance.AddToSystemMenu(Me) ' Define various nodes. DataNodes.AddToParent(_server.Objects) DemoNodes.AddToParent(_server.Objects) ' Hook events to the server object. AddHandler _server.EndpointStateChanged, AddressOf ServerOnEndpointStateChanged ' Obtain the server connection monitoring service. Dim serverConnectionMonitoring As IEasyUAServerConnectionMonitoring = _server.GetService(Of IEasyUAServerConnectionMonitoring)() If (Not (serverConnectionMonitoring Is Nothing)) Then ' Hook events to the connection monitoring service. AddHandler serverConnectionMonitoring.ClientSessionConnected, AddressOf ServerConnectionMonitoringOnClientSessionConnected AddHandler serverConnectionMonitoring.ClientSessionDisconnected, AddressOf ServerConnectionMonitoringOnClientSessionDisconnected End If _server.Start() End Sub Private ReadOnly _server As EasyUAServer Private Sub MainForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing _server.Stop() End Sub Private Sub ServerOnEndpointStateChanged(sender As Object, e As EasyUAServerEndpointStateChangedEventArgs) ' Note that since we have created the EasyUAServer on the UI thread, we can access the UI controls in its ' event handlers directly, because the events are raised using the synchronization context acquired at time of ' the creation. Dim endpointUrlString As String = e.EndpointUrlString Dim listViewItem As ListViewItem = endpointStateListView.Items.Cast(Of ListViewItem)().FirstOrDefault(Function(item) _ item.Text = endpointUrlString) If (listViewItem Is Nothing) Then listViewItem = New ListViewItem(endpointUrlString) endpointStateListView.Items.Add(listViewItem) listViewItem.SubItems.Add("") listViewItem.SubItems.Add("") End If listViewItem.SubItems(1).Text = e.ConnectionState.ToString() listViewItem.SubItems(2).Text = If(e.Exception?.Message, "") End Sub Private Sub ServerConnectionMonitoringOnClientSessionConnected(sender As Object, e As EasyUAClientSessionConnectionEventArgs) ' Note that since we have created the EasyUAServer on the UI thread, we can access the UI controls in its ' event handlers directly, because the events are raised using the synchronization context acquired at time of ' the creation. Dim listViewItem = New ListViewItem(e.SessionId.Identifier.ToString()) listViewItem.SubItems.Add(e.SessionName) connectionsListView.Items.Add(listViewItem) End Sub Private Sub ServerConnectionMonitoringOnClientSessionDisconnected(sender As Object, e As EasyUAClientSessionConnectionEventArgs) ' Note that since we have created the EasyUAServer on the UI thread, we can access the UI controls in its ' event handlers directly, because the events are raised using the synchronization context acquired at time of ' the creation. Dim identifierString As String = e.SessionId.Identifier.ToString() Dim listViewItem As ListViewItem = connectionsListView.Items.Cast(Of ListViewItem)().FirstOrDefault(Function(item) _ item.Text = identifierString) If (Not (listViewItem Is Nothing)) Then connectionsListView.Items.Remove(listViewItem) End If End Sub End Class
System.Object
System.EventArgs
OpcLabs.BaseLib.OperationModel.OperationEventArgs
OpcLabs.BaseLib.Communication.ConnectedConditionChangedEventArgs
OpcLabs.EasyOpc.UA.OperationModel.EasyUAServerEndpointStateChangedEventArgs