Esempio n. 1
0
        /// <summary>
        /// Sets the monitored items associated with the item.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="monitoredItems">The monitored items.</param>
        public void SetMonitoredItems(GroupItem item, MonitoredItem[] monitoredItems)
        {
            // check if callbacks are enabled.
            if (item == null || m_monitoredItems == null)
            {
                return;
            }

            // save the monitored items.
            lock (m_monitoredItems)
            {
                DataChangeInfo info = null;

                if (!m_monitoredItems.TryGetValue(item.ClientHandle, out info))
                {
                    m_monitoredItems[item.ClientHandle] = info = new DataChangeInfo();
                }

                info.MonitoredItems = monitoredItems;

                // resend the last cached value.
                if (info.LastError != null || info.LastValue != null)
                {
                    for (int ii = 0; ii < monitoredItems.Length; ii++)
                    {
                        monitoredItems[ii].QueueValue(info.LastValue, info.LastError);
                    }
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Called when a data change event arrives.
        /// </summary>
        /// <param name="clientHandles">The client handles.</param>
        /// <param name="values">The values.</param>
        internal void OnDataChange(int[] clientHandles, DaValue[] values)
        {
            // check if callbacks are enabled.
            if (m_monitoredItems == null)
            {
                return;
            }

            // lookup client handle a report change directly to monitored item.
            lock (m_monitoredItems)
            {
                for (int ii = 0; ii < clientHandles.Length; ii++)
                {
                    DataChangeInfo info = null;

                    if (!m_monitoredItems.TryGetValue(clientHandles[ii], out info))
                    {
                        continue;
                    }

                    MonitoredItem[] monitoredItems = info.MonitoredItems;

                    // convert the value to a UA value.
                    info.LastValue = new DataValue();
                    info.LastError = ReadRequest.GetItemValue(values[ii], info.LastValue, DiagnosticsMasks.All);
                    info.LastValue.ServerTimestamp = DateTime.UtcNow;

                    // queue the values.
                    for (int jj = 0; jj < monitoredItems.Length; jj++)
                    {
                        monitoredItems[jj].QueueValue(info.LastValue, info.LastError);
                    }
                }
            }
        }
Esempio n. 3
0
 public static void SendDataChangeEvent(DataChangeInfo info)
 {
     if (info == null)
     {
         return;
     }
     byte[] args = SerializeHelper.Serialize <DataChangeInfo>(info);
     SendMsgManager.Instance.SendPvpMsg(PvpCode.C2P_DataChange, args);
 }
Esempio n. 4
0
        /// <summary>
        /// Sets the monitored items associated with the item.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="monitoredItems">The monitored items.</param>
        public void SetMonitoredItems(GroupItem item, MonitoredItem[] monitoredItems)
        {
            // check if callbacks are enabled.
            if (item == null || m_monitoredItems == null)
            {
                return;
            }

            // save the monitored items.
            lock (m_monitoredItems)
            {
                DataChangeInfo info = null;

                if (!m_monitoredItems.TryGetValue(item.ClientHandle, out info))
                {
                    m_monitoredItems[item.ClientHandle] = info = new DataChangeInfo();
                }

                info.MonitoredItems = monitoredItems;

                // resend the last cached value.
                if (info.LastError != null || info.LastValue != null)
                {
                    for (int ii = 0; ii < monitoredItems.Length; ii++)
                    {
                        monitoredItems[ii].QueueValue(info.LastValue, info.LastError);
                    }
                }
            }
        }