public virtual object GetManagerHandle(NodeId nodeId, out INodeManager nodeManager)
{
nodeManager = null;
object handle = null;
// null node ids have no manager.
if (NodeId.IsNull(nodeId))
{
return null;
}
// use the namespace index to select the node manager.
int index = nodeId.NamespaceIndex;
lock (m_namespaceManagers)
{
// check if node managers are registered - use the core node manager if unknown.
if (index >= m_namespaceManagers.Length || m_namespaceManagers[index] == null)
{
handle = m_nodeManagers[1].GetManagerHandle(nodeId);
if (handle != null)
{
nodeManager = m_nodeManagers[1];
return handle;
}
return null;
}
// check each of the registered node managers.
INodeManager[] nodeManagers = m_namespaceManagers[index];
for (int ii = 0; ii < nodeManagers.Length; ii++)
{
handle = nodeManagers[ii].GetManagerHandle(nodeId);
if (handle != null)
{
nodeManager = nodeManagers[ii];
return handle;
}
}
}
// node not recognized.
return null;
}