/// <summary> /// Changes the session used. /// </summary> public void ChangeSession(Session session) { if (!Object.ReferenceEquals(session, m_session)) { m_session = session; BrowseCTRL.ChangeSession(m_session); EventTypeCTRL.ChangeSession(m_session); EventFilterCTRL.ChangeSession(m_session); EventsCTRL.ChangeSession(m_session); if (m_subscription != null) { m_subscription.PublishStatusChanged -= m_PublishStatusChanged; m_subscription.FastEventCallback = null; m_subscription = null; } if (m_session != null) { // find new subscription. foreach (Subscription subscription in m_session.Subscriptions) { if (Object.ReferenceEquals(subscription.Handle, this)) { m_subscription = subscription; m_subscription.PublishStatusChanged += m_PublishStatusChanged; m_subscription.FastEventCallback = OnEvent; break; } } } } }
/// <summary> /// Handles a change to the state of the subscription. /// </summary> void Subscription_StateChanged(Subscription subscription, SubscriptionStateChangedEventArgs e) { if (InvokeRequired) { BeginInvoke(m_SubscriptionStateChanged, subscription, e); return; } else if (!IsHandleCreated) { return; } try { // ignore notifications for other subscriptions. if (!Object.ReferenceEquals(m_subscription, subscription)) { return; } // notify controls of the change. EventsCTRL.SubscriptionChanged(e); DataChangesCTRL.SubscriptionChanged(e); MonitoredItemsCTRL.SubscriptionChanged(e); // update subscription status. UpdateStatus(); } catch (Exception exception) { GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); } }
private void OnEvent(Subscription subscription, EventNotificationList notification, IList <string> stringTable) { if (!Object.ReferenceEquals(subscription, m_subscription)) { return; } if (this.InvokeRequired) { this.BeginInvoke(new FastEventNotificationEventHandler(OnEvent), subscription, notification, stringTable); return; } try { foreach (EventFieldList e in notification.Events) { EventsCTRL.DisplayEvent(e); } } catch (Exception exception) { ClientUtils.HandleException(this.Text, exception); } }
/// <summary> /// Processes a Publish repsonse from the server. /// </summary> void MonitoredItem_Notification(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs e) { if (InvokeRequired) { BeginInvoke(m_MonitoredItemNotification, monitoredItem, e); return; } else if (!IsHandleCreated) { return; } try { // ignore notifications for other monitored items. if (!Object.ReferenceEquals(m_monitoredItem, monitoredItem)) { return; } // notify controls of the change. EventsCTRL.NotificationReceived(e); DataChangesCTRL.NotificationReceived(e); LatestValueCTRL.ShowValue(monitoredItem, true); // update item status. UpdateStatus(); } catch (Exception exception) { GuiUtils.HandleException(this.Text, MethodBase.GetCurrentMethod(), exception); } }
/// <summary> /// Moves the sequence forward. /// </summary> public void Next() { if (m_state == DisplayState.ViewUpdates) { return; } if (m_state == DisplayState.SelectEventType) { UpdateFilter(); } SetDisplayState(++m_state); if (m_state == DisplayState.SelectEventType) { BrowseCTRL.Initialize(m_session, Opc.Ua.ObjectTypeIds.BaseEventType, Opc.Ua.ReferenceTypeIds.HasSubtype); BrowseCTRL.SelectNode((m_filter == null || m_filter.EventTypeId == null) ? Opc.Ua.ObjectTypeIds.BaseEventType : m_filter.EventTypeId); EventTypeCTRL.ShowType(Opc.Ua.ObjectTypeIds.BaseEventType); return; } if (m_state == DisplayState.SelectEventFields) { EventFilterCTRL.SetFilter(m_filter); return; } if (m_state == DisplayState.ApplyChanges) { UpdateItems(); return; } if (m_state == DisplayState.ViewUpdates) { EventsCTRL.SetFilter(m_filter); return; } }
/// <summary> /// Displays the dialog. /// </summary> public void Show(MonitoredItem monitoredItem) { if (monitoredItem == null) { throw new ArgumentNullException("monitoredItem"); } Show(); BringToFront(); // remove previous subscription. if (m_monitoredItem != null) { monitoredItem.Subscription.StateChanged -= m_SubscriptionStateChanged; monitoredItem.Subscription.PublishStatusChanged -= m_PublishStatusChanged; monitoredItem.Notification -= m_MonitoredItemNotification; } // start receiving notifications from the new subscription. m_monitoredItem = monitoredItem; m_subscription = null; if (m_monitoredItem != null) { m_subscription = monitoredItem.Subscription; m_monitoredItem.Subscription.StateChanged += m_SubscriptionStateChanged; m_monitoredItem.Subscription.PublishStatusChanged += m_PublishStatusChanged; m_monitoredItem.Notification += m_MonitoredItemNotification; } WindowMI_Click(WindowStatusMI, null); WindowMI_Click(WindowLatestValueMI, null); MonitoredItemsCTRL.Initialize(m_monitoredItem); EventsCTRL.Initialize(m_subscription, m_monitoredItem); DataChangesCTRL.Initialize(m_subscription, m_monitoredItem); LatestValueCTRL.ShowValue(m_monitoredItem, false); }
/// <summary> /// Displays the dialog. /// </summary> public void Show(Subscription subscription) { if (subscription == null) { throw new ArgumentNullException("subscription"); } Show(); BringToFront(); // remove previous subscription. if (m_subscription != null) { m_subscription.StateChanged -= m_SubscriptionStateChanged; m_subscription.PublishStatusChanged -= m_PublishStatusChanged; m_subscription.Session.Notification -= m_SessionNotification; } // start receiving notifications from the new subscription. m_subscription = subscription; if (subscription != null) { m_subscription.StateChanged += m_SubscriptionStateChanged; m_subscription.PublishStatusChanged += m_PublishStatusChanged; m_subscription.Session.Notification += m_SessionNotification; } MonitoredItemsCTRL.Initialize(subscription); EventsCTRL.Initialize(subscription, null); DataChangesCTRL.Initialize(subscription, null); WindowMI_Click(WindowDataChangesMI, null); UpdateStatus(); }