/// <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); } } } }
/// <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); } } } }
public static void SendDataChangeEvent(DataChangeInfo info) { if (info == null) { return; } byte[] args = SerializeHelper.Serialize <DataChangeInfo>(info); SendMsgManager.Instance.SendPvpMsg(PvpCode.C2P_DataChange, args); }
/// <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); } } } }