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

RegisterNamespaceManager() public method

Registers the node manager as the node manager for Nodes in the specified namespace.
Multiple NodeManagers may register interest in a Namespace. The order in which this method is called determines the precedence if multiple NodeManagers exist. This method adds the namespaceUri to the Server's Namespace table if it does not already exist. This method is thread safe and can be called at anytime. This method does not have to be called for any namespaces that were in the NodeManager's NamespaceUri property when the MasterNodeManager was created.
Throw if the namespaceUri or the nodeManager are null.
public RegisterNamespaceManager ( string namespaceUri, INodeManager nodeManager ) : void
namespaceUri string The URI of the namespace.
nodeManager INodeManager The NodeManager which owns node in the namespacee.
return void
        public void RegisterNamespaceManager(string namespaceUri, INodeManager nodeManager)
        {
            if (String.IsNullOrEmpty(namespaceUri)) throw new ArgumentNullException("namespaceUri");
            if (nodeManager == null) throw new ArgumentNullException("nodeManager");

            // look up the namespace uri.
            int index = m_server.NamespaceUris.GetIndex(namespaceUri);

            if (index < 0)
            {
                index = m_server.NamespaceUris.Append(namespaceUri);
            }

            // allocate a new table (using arrays instead of collections because lookup efficiency is critical).
            INodeManager[][] namespaceManagers = new INodeManager[m_server.NamespaceUris.Count][];

            lock (m_namespaceManagers)
            {
                // copy existing values.
                for (int ii = 0; ii < m_namespaceManagers.Length; ii++)
                {
                    if (m_namespaceManagers.Length >= ii)
                    {
                        namespaceManagers[ii] = m_namespaceManagers[ii];
                    }
                }

                // allocate a new array for the index being updated.
                INodeManager[] registeredManagers = namespaceManagers[index];

                if (registeredManagers == null)
                {
                    registeredManagers = new INodeManager[1];
                }
                else
                {
                    registeredManagers = new INodeManager[registeredManagers.Length+1];
                    Array.Copy(namespaceManagers[index], registeredManagers, namespaceManagers[index].Length);
                }

                // add new node manager to the end of the list.
                registeredManagers[registeredManagers.Length-1] = nodeManager;
                namespaceManagers[index] = registeredManagers;

                // replace the table.
                m_namespaceManagers = namespaceManagers;
            }
        }