Beispiel #1
0
        /// <summary>
        /// Called when a batch of monitored items has been created.
        /// </summary>
        protected override void OnCreateMonitoredItemsComplete(ServerSystemContext context, IList <IMonitoredItem> monitoredItems)
        {
            ComDaClientManager system = (ComDaClientManager)this.SystemContext.SystemHandle;
            ComDaClient        client = system.SelectClient(context, false);

            // use locale for session to find a subscription manager.
            SubscribeRequestManager manager = null;

            if (!m_subscriptionManagers.TryGetValue(client.Key, out manager))
            {
                m_subscriptionManagers[client.Key] = manager = new SubscribeRequestManager(context, client, 1000);
            }

            manager.CreateItems(context, monitoredItems);

            for (int ii = 0; ii < monitoredItems.Count; ii++)
            {
                m_monitoredItems[monitoredItems[ii].Id] = manager;
            }
        }
Beispiel #2
0
        /// <summary>
        /// Called when a batch of monitored items has been deleted.
        /// </summary>
        protected override void OnDeleteMonitoredItemsComplete(ServerSystemContext context, IList <IMonitoredItem> monitoredItems)
        {
            ComDaClientManager system = (ComDaClientManager)this.SystemContext.SystemHandle;
            ComDaClient        client = system.SelectClient(context, false);

            // sort monitored items by the locale id used to create them.
            Dictionary <string, List <IMonitoredItem> > monitoredItemsByLocaleId = new Dictionary <string, List <IMonitoredItem> >();

            for (int ii = 0; ii < monitoredItems.Count; ii++)
            {
                // look up the manager that was previously used to create the monitor item.
                SubscribeRequestManager manager = null;

                if (!m_monitoredItems.TryGetValue(monitoredItems[ii].Id, out manager))
                {
                    manager = m_subscriptionManagers[client.Key];
                }

                // add monitored item to a list of items for the locale of the manager.
                List <IMonitoredItem> subset = null;

                if (!monitoredItemsByLocaleId.TryGetValue(manager.Key, out subset))
                {
                    monitoredItemsByLocaleId[manager.Key] = subset = new List <IMonitoredItem>();
                }

                subset.Add(monitoredItems[ii]);
            }

            // delete the items.
            foreach (KeyValuePair <string, List <IMonitoredItem> > entry in monitoredItemsByLocaleId)
            {
                SubscribeRequestManager manager = null;

                if (m_subscriptionManagers.TryGetValue(entry.Key, out manager))
                {
                    manager.DeleteItems(context, entry.Value);
                }
            }
        }