Esempio n. 1
0
        /// <summary>
        /// Updates a subscription in the list.
        /// </summary>
        private void Update(ListViewItem item)
        {
            Ae.TsCAeSubscription subscription = (Ae.TsCAeSubscription)item.Tag;

            item.Text             = subscription.Name;
            item.SubItems[1].Text = (subscription.Active)?"Yes":"No";
        }
        /// <summary>
        /// Removes a subscription from the control.
        /// </summary>
        public void RemoveSubscription(Ae.TsCAeSubscription subscription)
        {
            State state = (State)m_subscriptions[subscription.ClientHandle];

            if (state != null)
            {
                // unregister call backs.
                subscription.DataChangedEvent -= state.EventHandler;

                // remove subscription.
                m_subscriptions.Remove(subscription.ClientHandle);

                // compile list of item to delete.
                ArrayList itemsToDelete = new ArrayList();

                foreach (ListViewItem item in NotificationsLV.Items)
                {
                    TsCAeEventNotification notification = (TsCAeEventNotification)item.Tag;

                    if (notification.ClientHandle.Equals(subscription.ClientHandle))
                    {
                        itemsToDelete.Add(item);
                    }
                }

                // delete items.
                foreach (ListViewItem item in itemsToDelete)
                {
                    item.Remove();
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Called when the close button is clicked.
        /// </summary>
        private void DoneBTN_Click(object sender, System.EventArgs e)
        {
            try
            {
                m_areas   = AreaSourcesListCTRL.GetAreas();
                m_sources = AreaSourcesListCTRL.GetSources();

                // don't activate until all the filters are applied.
                bool active = m_state.Active;
                bool update = m_subscription != null;

                // create new subscription.
                if (m_subscription == null)
                {
                    m_state.Active       = false;
                    m_state.ClientHandle = Guid.NewGuid().ToString();
                    m_subscription       = (Ae.TsCAeSubscription)m_server.CreateSubscription(m_state);
                }

                // update existing subscription.
                else
                {
                    m_subscription.ModifyState(((int)TsCAeStateMask.All & ~(int)TsCAeStateMask.Active), m_state);
                }

                // select filters.
                m_filters.Areas.Clear();
                m_filters.Areas.AddRange(m_areas);
                m_filters.Sources.Clear();
                m_filters.Sources.AddRange(m_sources);

                m_subscription.SetFilters(m_filters);

                // select attributes.
                IDictionaryEnumerator enumerator = m_attributes.GetEnumerator();

                while (enumerator.MoveNext())
                {
                    int categoryID = (int)enumerator.Key;
                    OpcClientSdk.Ae.TsCAeAttributeCollection attributeIDs = (OpcClientSdk.Ae.TsCAeAttributeCollection)enumerator.Value;

                    m_subscription.SelectReturnedAttributes(categoryID, attributeIDs.ToArray());
                }

                // activate the subscription.
                if (active || update)
                {
                    m_state.Active = active;
                    m_subscription.ModifyState((int)TsCAeStateMask.Active, m_state);
                }

                // close the dialog.
                DialogResult = DialogResult.OK;
                Close();
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
        }
        ///////////////////////////////////////////////////////////////////////
        #region Private Methods

        /// <summary>
        /// Called when a subscription object is disposed.
        /// </summary>
        /// <param name="subscription"></param>
        internal void SubscriptionDisposed(Ae.TsCAeSubscription subscription)
        {
            if (!_disposing)
            {
                _subscriptions.Remove(subscription);
            }
        }
Esempio n. 5
0
        ///////////////////////////////////////////////////////////////////////
        #region ICloneable Members

        /// <summary>
        /// Returns an unconnected copy of the subscription with the same items.
        /// </summary>
        public virtual object Clone()
        {
            // do a memberwise clone.
            Ae.TsCAeSubscription clone = (Ae.TsCAeSubscription)MemberwiseClone();

            /*
             * // place clone in disconnected state.
             * clone.server       = null;
             * clone.subscription = null;
             * clone.state        = (SubscriptionState)state.Clone();
             *
             * // clear server handles.
             * clone.state.ServerHandle = null;
             *
             * // always make cloned subscriptions inactive.
             * clone.state.Active = false;
             *
             * // clone items.
             * if (clone.items != null)
             * {
             *      ArrayList items = new ArrayList();
             *
             *      foreach (Item item in clone.items)
             *      {
             *              items.Add(item.Clone());
             *      }
             *
             *      clone.items = (Item[])items.ToArray(typeof(Item));
             * }
             */

            // return clone.
            return(clone);
        }
Esempio n. 6
0
        /// <summary>
        /// Toggles the active/inactive state for a subscription.
        /// </summary>
        private void ActiveMI_Click(object sender, System.EventArgs e)
        {
            try
            {
                ListViewItem         item         = SubscriptionsLV.SelectedItems[0];
                Ae.TsCAeSubscription subscription = (Ae.TsCAeSubscription)item.Tag;

                Ae.TsCAeSubscriptionState state = new Ae.TsCAeSubscriptionState();
                state.Active = !ActiveMI.Checked;

                subscription.ModifyState((int)TsCAeStateMask.Active, state);

                // toggle checkbox.
                ActiveMI.Checked = !ActiveMI.Checked;

                // update list.
                Update(item);

                // receive notifications.
                if (m_SubscriptionAction != null)
                {
                    m_SubscriptionAction(subscription, !subscription.Active);
                }

                // adjust columns.
                AdjustColumns(SubscriptionsLV);
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
        }
        /// <summary>
        /// Adds a subscription to the control.
        /// </summary>
        public void AddSubscription(Ae.TsCAeSubscription subscription)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException();
            }
            if (m_subscriptions.Contains(subscription.ClientHandle))
            {
                throw new ArgumentException("Subscription exists");
            }

            // update current server.
            if (m_server != subscription.Server)
            {
                m_server = subscription.Server;
            }

            State state = new State();

            state.Subscription = subscription;
            state.EventHandler = new TsCAeDataChangedEventHandler(Subscription_EventChanged);

            subscription.DataChangedEvent += new TsCAeDataChangedEventHandler(Subscription_EventChanged);

            m_subscriptions.Add(subscription.ClientHandle, state);
        }
            /// <summary>
            /// Adds a subscription to the end of the collection.
            /// </summary>
            internal void Add(Ae.TsCAeSubscription subscription)
            {
                TsCAeSubscription[] array = new TsCAeSubscription[Count + 1];

                Array.CopyTo(array, 0);
                array[Count] = subscription;

                Array = array;
            }
Esempio n. 9
0
        /// <summary>
        /// Adds a subscription to the list.
        /// </summary>
        private void Add(Ae.TsCAeSubscription subscription)
        {
            ListViewItem item = new ListViewItem(subscription.Name, Resources.IMAGE_ENVELOPE);

            item.SubItems.Add((subscription.Active)?"Yes":"No");
            item.Tag = subscription;

            SubscriptionsLV.Items.Add(item);
        }
Esempio n. 10
0
        /// <summary>
        /// Prompts a user to create a new subscription with a modal dialog.
        /// </summary>
        public Ae.TsCAeSubscription ShowDialog(TsCAeServer server, Ae.TsCAeSubscription subscription)
        {
            if (server == null)
            {
                throw new ArgumentNullException("server");
            }

            m_server       = server;
            m_subscription = subscription;

            // go to the initial stage.
            m_stage = 0;
            ChangeStage(0);

            // initialize controls.
            StateCTRL.SetDefaults();
            FiltersCTRL.SetDefaults();
            CategoriesCTRL.ShowCategories(m_server);
            AttributesCTRL.ShowAttributes(m_server);
            BrowseCTRL.ShowAreas(m_server);

            if (m_subscription != null)
            {
                m_state      = m_subscription.GetState();
                m_filters    = m_subscription.GetFilters();
                m_attributes = m_subscription.GetAttributes();
                m_areas      = m_subscription.Areas.ToArray();
                m_sources    = m_subscription.Sources.ToArray();
            }
            else
            {
                m_state.Name = String.Format("Subscription{0,3:000}", ++m_count);
            }

            // set current values.
            StateCTRL.Set(m_state);
            FiltersCTRL.Set(m_filters);
            CategoriesCTRL.SetSelectedCategories(m_filters.Categories.ToArray());
            AttributesCTRL.SetSelectedAttributes(m_attributes);
            AreaSourcesListCTRL.AddAreas(m_areas);
            AreaSourcesListCTRL.AddSources(m_sources);

            // show dialog.
            if (ShowDialog() != DialogResult.OK)
            {
                return(null);
            }

            // return updated/created subscription.
            return(m_subscription);
        }
        /// <summary>
        /// Contructs a server by de-serializing its OpcUrl from the stream.
        /// </summary>
        protected TsCAeServer(SerializationInfo info, StreamingContext context)
            :
            base(info, context)
        {
            int count = (int)info.GetValue(Names.COUNT, typeof(int));

            _subscriptions = new SubscriptionCollection();

            for (int ii = 0; ii < count; ii++)
            {
                Ae.TsCAeSubscription subscription = (Ae.TsCAeSubscription)info.GetValue(Names.SUBSCRIPTION + ii.ToString(), typeof(Ae.TsCAeSubscription));
                _subscriptions.Add(subscription);
            }
        }
Esempio n. 12
0
        /// <summary>
        /// Refreshes the current subscription.
        /// </summary>
        private void RefreshMI_Click(object sender, System.EventArgs e)
        {
            try
            {
                ListViewItem         item         = SubscriptionsLV.SelectedItems[0];
                Ae.TsCAeSubscription subscription = (Ae.TsCAeSubscription)item.Tag;

                subscription.Refresh();
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
        }
        /// <summary>
        /// Displays the event notifications.
        /// </summary>
        public void ShowDialog(Ae.TsCAeSubscription subscription, TsCAeEventNotification notification)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            m_subscription = subscription;
            m_notification = notification;

            AcknowledgeBTN.Enabled = notification.AckRequired;

            NotificationCTRL.ShowNotification(subscription, notification);

            ShowDialog();
        }
        /// <summary>
        /// Establishes a subscription based on the template provided.
        /// </summary>
        private Ae.TsCAeSubscription EstablishSubscription(Ae.TsCAeSubscription template)
        {
            ITsCAeSubscription remoteServer = null;

            try
            {
                // create remote object.
                remoteServer = ((ITsCAeServer)_server).CreateSubscription(template.State);

                if (remoteServer == null)
                {
                    return(null);
                }

                // create wrapper.
                Ae.TsCAeSubscription subscription = new Ae.TsCAeSubscription(this, remoteServer, template.State);

                // set filters.
                subscription.SetFilters(template.Filters);

                // set attributes.
                IDictionaryEnumerator enumerator = template.Attributes.GetEnumerator();

                while (enumerator.MoveNext())
                {
                    subscription.SelectReturnedAttributes(
                        (int)enumerator.Key,
                        ((Ae.TsCAeSubscription.AttributeCollection)enumerator.Value).ToArray());
                }

                // return new subscription
                return(subscription);
            }
            catch
            {
                if (remoteServer != null)
                {
                    remoteServer.Dispose();
                    remoteServer = null;
                }
            }

            // return null.
            return(null);
        }
            /// <summary>
            /// Removes a subscription to the from the collection.
            /// </summary>
            internal void Remove(Ae.TsCAeSubscription subscription)
            {
                TsCAeSubscription[] array = new TsCAeSubscription[Count - 1];

                int index = 0;

                for (int ii = 0; ii < Array.Length; ii++)
                {
                    TsCAeSubscription element = (TsCAeSubscription)Array.GetValue(ii);

                    if (subscription != element)
                    {
                        array[index++] = element;
                    }
                }

                Array = array;
            }
 /// <summary>
 /// Adds or removes a subscription from the event notifications control.
 /// </summary>
 private void SubscriptionsCTRL_SubscriptionAction(Ae.TsCAeSubscription subscription, bool deleted)
 {
     try
     {
         if (deleted)
         {
             EventListCTRL.RemoveSubscription(subscription);
         }
         else
         {
             EventListCTRL.AddSubscription(subscription);
         }
     }
     catch (Exception exception)
     {
         MessageBox.Show(exception.Message);
     }
 }
        /// <summary>
        /// Creates a new event subscription.
        /// </summary>
        /// <param name="state">The initial state for the subscription.</param>
        /// <returns>The new subscription object.</returns>
        public ITsCAeSubscription CreateSubscription(Ae.TsCAeSubscriptionState state)
        {
            if (_server == null)
            {
                throw new NotConnectedException();
            }

            // create remote object.
            ITsCAeSubscription subscription = ((ITsCAeServer)_server).CreateSubscription(state);

            if (subscription != null)
            {
                // create wrapper.
                Ae.TsCAeSubscription wrapper = new Ae.TsCAeSubscription(this, subscription, state);
                _subscriptions.Add(wrapper);
                return(wrapper);
            }

            // should never happen.
            return(null);
        }
Esempio n. 18
0
        /// <summary>
        /// Deletes a subscription.
        /// </summary>
        private void DeleteMI_Click(object sender, System.EventArgs e)
        {
            try
            {
                ListViewItem         item         = SubscriptionsLV.SelectedItems[0];
                Ae.TsCAeSubscription subscription = (Ae.TsCAeSubscription)item.Tag;

                // send notifications.
                if (m_SubscriptionAction != null)
                {
                    m_SubscriptionAction(subscription, true);
                }

                // remove from list.
                item.Remove();
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
        }
Esempio n. 19
0
        /// <summary>
        /// Edits the state of a subscription.
        /// </summary>
        private void EditMI_Click(object sender, System.EventArgs e)
        {
            try
            {
                ListViewItem         item         = SubscriptionsLV.SelectedItems[0];
                Ae.TsCAeSubscription subscription = (Ae.TsCAeSubscription)item.Tag;

                // show properties dialog.
                bool active = subscription.Active;

                new SubscriptionEditDlg().ShowDialog(m_server, subscription);

                if (subscription == null)
                {
                    return;
                }

                // update list.
                Update(item);

                // send notifications.
                if (active != subscription.Active)
                {
                    if (m_SubscriptionAction != null)
                    {
                        m_SubscriptionAction(subscription, !subscription.Active);
                    }
                }

                // adjust columns.
                AdjustColumns(SubscriptionsLV);
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
        }
        /// <summary>
        /// Displays the notification in the control.
        /// </summary>
        public void ShowNotification(Ae.TsCAeSubscription subscription, TsCAeEventNotification notification)
        {
            // check for null value.
            if (notification == null)
            {
                SourceTB.Text           = "";
                TimeTB.Text             = "";
                MessageTB.Text          = "";
                EventTypeTB.Text        = "";
                EventCategoryTB.Text    = "";
                ConditionNameTB.Text    = "";
                SubConditionNameTB.Text = "";
                NewStateTB.Text         = "";
                AckRequiredTB.Text      = "";
                QualityTB.Text          = "";
                ActiveTimeTB.Text       = "";
                ActorTB.Text            = "";

                AttributesLV.Items.Clear();
                return;
            }

            // find category.
            OpcClientSdk.Ae.TsCAeCategory category = null;

            try
            {
                OpcClientSdk.Ae.TsCAeCategory[] categories = subscription.Server.QueryEventCategories((int)notification.EventType);

                for (int ii = 0; ii < categories.Length; ii++)
                {
                    if (categories[ii].ID == notification.EventCategory)
                    {
                        category = categories[ii];
                        break;
                    }
                }
            }
            catch
            {
                category = null;
            }

            // find attributes.
            ArrayList attributes = new ArrayList();

            try
            {
                // get attribute descriptions.
                OpcClientSdk.Ae.TsCAeAttribute[] descriptions = subscription.Server.QueryEventAttributes(notification.EventCategory);

                // get selected attributes.
                int[] attributeIDs = null;

                if (subscription.Attributes.Contains(notification.EventCategory))
                {
                    attributeIDs = subscription.Attributes[notification.EventCategory].ToArray();
                }

                // find decriptions for selected attributes.
                if (attributeIDs != null)
                {
                    for (int ii = 0; ii < attributeIDs.Length; ii++)
                    {
                        for (int jj = 0; jj < descriptions.Length; jj++)
                        {
                            if (descriptions[jj].ID == attributeIDs[ii])
                            {
                                attributes.Add(descriptions[jj]);
                                break;
                            }
                        }
                    }
                }
            }
            catch
            {
                // ignore errors.
            }

            SourceTB.Text           = notification.SourceID;
            TimeTB.Text             = OpcClientSdk.OpcConvert.ToString(notification.Time);
            MessageTB.Text          = notification.Message;
            EventTypeTB.Text        = OpcClientSdk.OpcConvert.ToString(notification.EventType);
            EventCategoryTB.Text    = (category != null)?category.Name:"";
            ConditionNameTB.Text    = notification.ConditionName;
            SubConditionNameTB.Text = notification.SubConditionName;
            NewStateTB.Text         = "";
            AckRequiredTB.Text      = OpcClientSdk.OpcConvert.ToString(notification.AckRequired);
            QualityTB.Text          = OpcClientSdk.OpcConvert.ToString(notification.Quality);
            ActiveTimeTB.Text       = OpcClientSdk.OpcConvert.ToString(notification.ActiveTime);
            ActorTB.Text            = notification.ActorID;

            // convert state to a string.
            if ((notification.NewState & (int)Ae.TsCAeConditionState.Active) != 0)
            {
                NewStateTB.Text += Ae.TsCAeConditionState.Active.ToString();
            }

            if ((notification.NewState & (int)Ae.TsCAeConditionState.Enabled) != 0)
            {
                if (NewStateTB.Text != "")
                {
                    NewStateTB.Text += " AND ";
                }
                NewStateTB.Text += Ae.TsCAeConditionState.Enabled.ToString();
            }

            if ((notification.NewState & (int)Ae.TsCAeConditionState.Acknowledged) != 0)
            {
                if (NewStateTB.Text != "")
                {
                    NewStateTB.Text += " AND ";
                }
                NewStateTB.Text += Ae.TsCAeConditionState.Acknowledged.ToString();
            }

            // fill attributes list.
            AttributesLV.Items.Clear();

            for (int ii = 0; ii < notification.Attributes.Count; ii++)
            {
                OpcClientSdk.Ae.TsCAeAttribute attribute = (ii < attributes.Count)?(OpcClientSdk.Ae.TsCAeAttribute)attributes[ii]:null;

                ListViewItem item = new ListViewItem((attribute != null)?attribute.Name:"Unknown");

                item.SubItems.Add(OpcClientSdk.OpcConvert.ToString(notification.Attributes[ii]));

                AttributesLV.Items.Add(item);
            }

            AdjustColumns(AttributesLV);
        }