// This example shows all information available about categories that particular OPC servers do support.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
using System;
using OpcLabs.EasyOpc;
using OpcLabs.EasyOpc.AlarmsAndEvents;
using OpcLabs.EasyOpc.DataAccess;
using OpcLabs.EasyOpc.OperationModel;
namespace DocExamples._ServerCategories
{
    class General
    {
        public static void Main1()
        {
            // Instantiate the OPC-DA client object.
            var daClient = new EasyDAClient();
            Console.WriteLine();
            Console.WriteLine("OPC DATA ACCESS");
            ServerElementCollection daServerElements;
            try
            {
                daServerElements = daClient.BrowseServers();
            }
            catch (OpcException opcException)
            {
                Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message);
                return;
            }
            DumpServerElements(daServerElements);
            // Instantiate the OPC-A&E client object.
            var aeClient = new EasyAEClient();
            Console.WriteLine();
            Console.WriteLine("OPC ALARMS AND EVENTS");
            ServerElementCollection aeServerElements;
            try
            {
                aeServerElements = aeClient.BrowseServers();
            }
            catch (OpcException opcException)
            {
                Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message);
                return;
            }
            DumpServerElements(aeServerElements);
        }
        private static void DumpServerElements(ServerElementCollection serverElements)
        {
            foreach (ServerElement serverElement in serverElements)
            {
                Console.WriteLine($"Categories of \"{serverElement.ProgId}\":");
                ServerCategories serverCategories = serverElement.ServerCategories;
                Console.WriteLine($"    .OpcAlarmsAndEvents10: {serverCategories.OpcAlarmsAndEvents10}");
                Console.WriteLine($"    .OpcDataAccess10: {serverCategories.OpcDataAccess10}");
                Console.WriteLine($"    .OpcDataAccess20: {serverCategories.OpcDataAccess20}");
                Console.WriteLine($"    .OpcDataAccess30: {serverCategories.OpcDataAccess30}");
                Console.WriteLine($"    .ToString(): {serverCategories}");
            }
        }
        
        // Example output:
        //
        //OPC DATA ACCESS
        //Categories of "OPCLabs.KitServer.2":
        //    .OpcAlarmsAndEvents10: False
        //    .OpcDataAccess10: True
        //    .OpcDataAccess20: True
        //    .OpcDataAccess30: True
        //    .ToString(): (OpcDataAccess10, OpcDataAccess20, OpcDataAccess30)
        //
        //OPC ALARMS AND EVENTS
        //Categories of "OPCLabs.KitEventServer.2":
        //    .OpcAlarmsAndEvents10: True
        //    .OpcDataAccess10: False
        //    .OpcDataAccess20: False
        //    .OpcDataAccess30: False
        //    .ToString(): (OpcAlarmsAndEvents10)
    }
}
	 
	
		# This example shows all information available about categories that particular OPC servers do support.
#
# Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
# OPC client and subscriber examples in Python on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-Python .
# The QuickOPC package is needed. Install it using "pip install opclabs_quickopc".
import opclabs_quickopc
# Import .NET namespaces.
from OpcLabs.EasyOpc.AlarmsAndEvents import *
from OpcLabs.EasyOpc.DataAccess import *
from OpcLabs.EasyOpc.OperationModel import *
def dumpServerElements(serverElements):
    for serverElement in serverElements:
        print('Categories of ', serverElement.ProgId, ':', sep='')
        serverCategories = serverElement.ServerCategories
        print('    .OpcAlarmsAndEvents10: ', serverCategories.OpcAlarmsAndEvents10, sep='')
        print('    .OpcDataAccess10: ', serverCategories.OpcDataAccess10, sep='')
        print('    .OpcDataAccess20: ', serverCategories.OpcDataAccess20, sep='')
        print('    .OpcDataAccess30: ', serverCategories.OpcDataAccess30, sep='')
        print('    .ToString(): ', serverCategories, sep='')
# Instantiate the OPC-DA client object.
daClient = EasyDAClient()
print()
print('OPC DATA ACCESS')
try:
    daServerElements = IEasyDAClientExtension.BrowseServers(daClient)
except OpcException as opcException:
    print('*** Failure: ' + opcException.GetBaseException().Message)
    exit()
dumpServerElements(daServerElements)
# Instantiate the OPC-A&E client object.
aeClient = EasyAEClient()
print()
print('OPC ALARMS AND EVENTS')
try:
    aeServerElements = IEasyAEClientExtension.BrowseServers(aeClient)
except OpcException as opcException:
    print('*** Failure: ' + opcException.GetBaseException().Message)
    exit()
dumpServerElements(aeServerElements)