protected virtual void AddRootNotifier(NodeState notifier)
{
if (m_rootNotifiers == null)
{
m_rootNotifiers = new List<NodeState>();
}
bool mustAdd = true;
for (int ii = 0; ii < m_rootNotifiers.Count; ii++)
{
if (Object.ReferenceEquals(notifier, m_rootNotifiers[ii]))
{
return;
}
if (m_rootNotifiers[ii].NodeId == notifier.NodeId)
{
m_rootNotifiers[ii] = notifier;
mustAdd = false;
break;
}
}
if (mustAdd)
{
m_rootNotifiers.Add(notifier);
}
// need to prevent recursion with the server object.
if (notifier.NodeId != ObjectIds.Server)
{
notifier.OnReportEvent = OnReportEvent;
if (!notifier.ReferenceExists(ReferenceTypeIds.HasNotifier, true, ObjectIds.Server))
{
notifier.AddReference(ReferenceTypeIds.HasNotifier, true, ObjectIds.Server);
}
}
// subscribe to existing events.
if (m_server.EventManager != null)
{
IList<IEventMonitoredItem> monitoredItems = m_server.EventManager.GetMonitoredItems();
for (int ii = 0; ii < monitoredItems.Count; ii++)
{
if (monitoredItems[ii].MonitoringAllEvents)
{
SubscribeToEvents(
SystemContext,
notifier,
monitoredItems[ii],
true);
}
}
}
}