/// <summary> /// Override ConditionRefresh. /// </summary> public override ServiceResult ConditionRefresh( OperationContext context, IList <IEventMonitoredItem> monitoredItems) { ServerSystemContext systemContext = SystemContext.Copy(context); for (int ii = 0; ii < monitoredItems.Count; ii++) { // the IEventMonitoredItem should always be MonitoredItems since they are created by the MasterNodeManager. MonitoredItem monitoredItem = monitoredItems[ii] as MonitoredItem; if (monitoredItem == null) { continue; } List <IFilterTarget> events = new List <IFilterTarget>(); List <NodeState> nodesToRefresh = new List <NodeState>(); lock (Lock) { // check for server subscription. if (monitoredItem.NodeId == ObjectIds.Server) { if (RootNotifiers != null) { nodesToRefresh.AddRange(RootNotifiers); } } else { // check for existing monitored node. MonitoredNode2 monitoredNode = null; if (!MonitoredNodes.TryGetValue(monitoredItem.NodeId, out monitoredNode)) { continue; } // get the refresh events. nodesToRefresh.Add(monitoredNode.Node); } } // block and wait for the refresh. for (int jj = 0; jj < nodesToRefresh.Count; jj++) { nodesToRefresh[jj].ConditionRefresh(systemContext, events, true); } lock (Lock) { // This is where I can add branch events GetBranchesForConditionRefresh(events); } // queue the events. for (int jj = 0; jj < events.Count; jj++) { monitoredItem.QueueEvent(events[jj]); } } // all done. return(ServiceResult.Good); }