Opc.Ua.Server.MasterNodeManager.MasterNodeManager C# (CSharp) Method

MasterNodeManager() public method

Initializes the object with default values.
public MasterNodeManager ( IServerInternal server, ApplicationConfiguration configuration, string dynamicNamespaceUri ) : System
server IServerInternal
configuration ApplicationConfiguration
dynamicNamespaceUri string
return System
        public MasterNodeManager(
            IServerInternal          server,
            ApplicationConfiguration configuration,
            string                   dynamicNamespaceUri,
            params INodeManager[]    additionalManagers)
        {
            if (server == null) throw new ArgumentNullException("server");
            if (configuration == null) throw new ArgumentNullException("configuration");

            m_server = server;
            m_nodeManagers = new List<INodeManager>();
            m_maxContinuationPointsPerBrowse = (uint)configuration.ServerConfiguration.MaxBrowseContinuationPoints;

            // ensure the dynamic namespace uris.
            int dynamicNamespaceIndex = 1;
            
            if (!String.IsNullOrEmpty(dynamicNamespaceUri))
            {
                dynamicNamespaceIndex = server.NamespaceUris.GetIndex(dynamicNamespaceUri);

                if (dynamicNamespaceIndex == -1)
                {
                    dynamicNamespaceIndex = server.NamespaceUris.Append(dynamicNamespaceUri);
                }
            }

            // need to build a table of NamespaceIndexes and their NodeManagers.
            List<INodeManager> registeredManagers = null;
            Dictionary<int,List<INodeManager>> namespaceManagers = new Dictionary<int,List<INodeManager>>();
            
            namespaceManagers[0] = registeredManagers = new List<INodeManager>();            
            namespaceManagers[1] = registeredManagers = new List<INodeManager>();

            // always add the diagnostics node manager to the start of the list.
            DiagnosticsNodeManager diagnosticsManager = new DiagnosticsNodeManager(server, configuration);
            RegisterNodeManager(diagnosticsManager, registeredManagers, namespaceManagers);
                        
            // add the core node manager second because the diagnostics node manager takes priority.
            // always add the core node manager to the second of the list.
            m_nodeManagers.Add(new CoreNodeManager(m_server, configuration, (ushort)dynamicNamespaceIndex));
            
            // register core node manager for default UA namespace.
            namespaceManagers[0].Add(m_nodeManagers[1]);

            // register core node manager for built-in server namespace.
            namespaceManagers[1].Add(m_nodeManagers[1]);

            // add the custom NodeManagers provided by the application.
            if (additionalManagers != null)
            {
                foreach (INodeManager nodeManager in additionalManagers)
                {
                    RegisterNodeManager(nodeManager, registeredManagers, namespaceManagers);
                }

                // build table from dictionary.
                m_namespaceManagers = new INodeManager[m_server.NamespaceUris.Count][];

                for (int ii = 0; ii < m_namespaceManagers.Length; ii++)
                {
                    if (namespaceManagers.TryGetValue(ii, out registeredManagers))
                    {
                        m_namespaceManagers[ii] = registeredManagers.ToArray();
                    }
                }
            }
        }