/// <summary> /// Initializes object with default values. /// </summary> public TsCDaSubscription(TsCDaServer server, ITsCDaSubscription subscription) { server_ = server ?? throw new ArgumentNullException(nameof(server)); Subscription = subscription ?? throw new ArgumentNullException(nameof(subscription)); GetResultFilters(); GetState(); }
/// <summary> /// Cancels a subscription and releases all resources allocated for it. /// </summary> /// <param name="subscription">The subscription to cancel.</param> public void CancelSubscription(ITsCDaSubscription subscription) { if (subscription == null) { throw new ArgumentNullException(nameof(subscription)); } lock (this) { if (server_ == null) { throw new NotConnectedException(); } string methodName = "IOPCServer.RemoveGroup"; // validate argument. if (!typeof(Subscription).IsInstanceOfType(subscription)) { throw new ArgumentException("Incorrect object type.", nameof(subscription)); } // get the subscription state. TsCDaSubscriptionState state = subscription.GetState(); if (!subscriptions_.ContainsKey(state.ServerHandle)) { throw new ArgumentException("Handle not found.", nameof(subscription)); } subscriptions_.Remove(state.ServerHandle); // release all subscription resources. subscription.Dispose(); // invoke COM method. try { IOPCServer server = BeginComCall <IOPCServer>(methodName, true); server.RemoveGroup((int)state.ServerHandle, 0); if (DCOMCallWatchdog.IsCancelled) { throw new Exception($"{methodName} call was cancelled due to response timeout"); } } catch (Exception e) { ComCallError(methodName, e); throw Utilities.Interop.CreateException(methodName, e); } finally { EndComCall(methodName); } } }
/// <summary>Cancels a subscription and releases all resources allocated for it.</summary> /// <requirements>OPC XML-DA Server or OPC Data Access Server V2.x / V3.x</requirements> /// <param name="subscription">The subscription to cancel.</param> public virtual void CancelSubscription(ITsCDaSubscription subscription) { if (subscription == null) { throw new ArgumentNullException("subscription"); } if (_server == null) { throw new NotConnectedException(); } // validate argument. if (!typeof(TsCDaSubscription).IsInstanceOfType(subscription)) { throw new ArgumentException("Incorrect object type.", "subscription"); } if (!Equals(((TsCDaSubscription)subscription).Server)) { throw new ArgumentException("Server subscription.", "subscription"); } // search for subscription in list of subscriptions. TsCDaSubscriptionCollection subscriptions = new TsCDaSubscriptionCollection(); foreach (TsCDaSubscription current in _subscriptions) { if (!subscription.Equals(current)) { subscriptions.Add(current); continue; } } // check if subscription was not found. if (subscriptions.Count == _subscriptions.Count) { throw new ArgumentException("Subscription not found.", "subscription"); } // remove subscription from list of subscriptions. _subscriptions = subscriptions; // cancel subscription on server. ((ITsDaServer)_server).CancelSubscription(((TsCDaSubscription)subscription)._subscription); }
/// <summary>Cancels a subscription and releases all resources allocated for it.</summary> /// <requirements>OPC XML-DA Server or OPC Data Access Server V2.x / V3.x</requirements> /// <param name="subscription">The subscription to cancel.</param> public virtual void CancelSubscription(ITsCDaSubscription subscription) { LicenseHandler.ValidateFeatures(LicenseHandler.ProductFeature.DataAccess); if (subscription == null) { throw new ArgumentNullException(nameof(subscription)); } if (Server == null) { throw new NotConnectedException(); } // validate argument. if (!typeof(TsCDaSubscription).IsInstanceOfType(subscription)) { throw new ArgumentException(@"Incorrect object type.", nameof(subscription)); } if (!Equals(((TsCDaSubscription)subscription).Server)) { throw new ArgumentException(@"Server subscription.", nameof(subscription)); } // search for subscription in list of subscriptions. TsCDaSubscriptionCollection subscriptions = new TsCDaSubscriptionCollection(); foreach (TsCDaSubscription current in subscriptions_) { if (!subscription.Equals(current)) { subscriptions.Add(current); } } // check if subscription was not found. if (subscriptions.Count == subscriptions_.Count) { throw new ArgumentException(@"Subscription not found.", nameof(subscription)); } // remove subscription from list of subscriptions. subscriptions_ = subscriptions; // cancel subscription on server. ((ITsDaServer)Server).CancelSubscription(((TsCDaSubscription)subscription).Subscription); }
/////////////////////////////////////////////////////////////////////// #region Constructors, Destructor, Initialization /// <summary> /// Initializes object with default values. /// </summary> public TsCDaSubscription(TsCDaServer server, ITsCDaSubscription subscription) { if (server == null) { throw new ArgumentNullException("server"); } if (subscription == null) { throw new ArgumentNullException("subscription"); } _server = server; _subscription = subscription; GetResultFilters(); GetState(); }
private void TestMI_Click(object sender, System.EventArgs e) { try { TsCDaServer server = (TsCDaServer)m_server; TsCDaItem[] items = new TsCDaItem[100]; for (int ii = 0; ii < items.Length; ii++) { items[ii] = new TsCDaItem(); items[ii].ItemName = "Static/ArrayTypes/Object[]"; items[ii].ItemPath = "DA30"; items[ii].ClientHandle = ii; } TsCDaSubscriptionState state = new TsCDaSubscriptionState(); state.Active = true; state.UpdateRate = 1000; ITsCDaSubscription subscription = server.CreateSubscription(state); Thread.Sleep(100); TsCDaItemResult[] results = subscription.AddItems(items); Thread.Sleep(100); subscription.RemoveItems(results); Thread.Sleep(100); server.CancelSubscription(subscription); Thread.Sleep(100); } catch (Exception exception) { MessageBox.Show(exception.Message); } }
/// <summary> /// Dispose(bool disposing) executes in two distinct scenarios. /// If disposing equals true, the method has been called directly /// or indirectly by a user's code. Managed and unmanaged resources /// can be disposed. /// If disposing equals false, the method has been called by the /// runtime from inside the finalizer and you should not reference /// other objects. Only unmanaged resources can be disposed. /// </summary> /// <param name="disposing">If true managed and unmanaged resources can be disposed. If false only unmanaged resources.</param> protected virtual void Dispose(bool disposing) { // Check to see if Dispose has already been called. if (!disposed_) { // If disposing equals true, dispose all managed // and unmanaged resources. if (disposing) { if (Subscription != null) { Subscription.Dispose(); server_ = null; Subscription = null; daItems_ = null; } } // Release unmanaged resources. If disposing is false, // only the following code is executed. } disposed_ = true; }
/// <summary> /// Dispose(bool disposing) executes in two distinct scenarios. /// If disposing equals true, the method has been called directly /// or indirectly by a user's code. Managed and unmanaged resources /// can be disposed. /// If disposing equals false, the method has been called by the /// runtime from inside the finalizer and you should not reference /// other objects. Only unmanaged resources can be disposed. /// </summary> /// <param name="disposing"></param> protected virtual void Dispose(bool disposing) { // Check to see if Dispose has already been called. if (!_disposed) { // If disposing equals true, dispose all managed // and unmanaged resources. if (disposing) { if (_subscription != null) { _subscription.Dispose(); _server = null; _subscription = null; _items = null; } } // Release unmanaged resources. If disposing is false, // only the following code is executed. } _disposed = true; }
/// <summary> /// Creates a new subscription. /// </summary> /// <returns>The new subscription object.</returns> /// <requirements>OPC XML-DA Server or OPC Data Access Server V2.x / V3.x</requirements> /// <param name="state">The initial state of the subscription.</param> public virtual ITsCDaSubscription CreateSubscription(TsCDaSubscriptionState state) { LicenseHandler.ValidateFeatures(LicenseHandler.ProductFeature.DataAccess); if (state == null) { throw new ArgumentNullException(nameof(state)); } if (Server == null) { throw new NotConnectedException(); } // create subscription on server. ITsCDaSubscription subscription = ((ITsDaServer)Server).CreateSubscription(state); // set filters. subscription.SetResultFilters(filters_); // append new subscription to existing list. TsCDaSubscriptionCollection subscriptions = new TsCDaSubscriptionCollection(); if (subscriptions_ != null) { foreach (TsCDaSubscription value in subscriptions_) { subscriptions.Add(value); } } subscriptions.Add(CreateSubscription(subscription)); // save new subscription list. subscriptions_ = subscriptions; // return new subscription. return(subscriptions_[subscriptions_.Count - 1]); }
/// <summary> /// Creates a new subscription. /// </summary> /// <returns>The new subscription object.</returns> /// <requirements>OPC XML-DA Server or OPC Data Access Server V2.x / V3.x</requirements> /// <param name="state">The initial state of the subscription.</param> public virtual ITsCDaSubscription CreateSubscription(TsCDaSubscriptionState state) { if (state == null) { throw new ArgumentNullException("state"); } if (_server == null) { throw new NotConnectedException(); } // create subscription on server. ITsCDaSubscription subscription = ((ITsDaServer)_server).CreateSubscription(state); // set filters. subscription.SetResultFilters(_filters); // append new subscription to existing list. TsCDaSubscriptionCollection subscriptions = new TsCDaSubscriptionCollection(); if (_subscriptions != null) { foreach (TsCDaSubscription value in _subscriptions) { subscriptions.Add(value); } } subscriptions.Add(CreateSubscription(subscription)); // save new subscription list. _subscriptions = subscriptions; // return new subscription. return(_subscriptions[_subscriptions.Count - 1]); }
/// <summary> /// Creates a new instance of the appropriate subcription object. /// </summary> /// <param name="subscription">The remote subscription object.</param> protected virtual TsCDaSubscription CreateSubscription(ITsCDaSubscription subscription) { return(new TsCDaSubscription(this, subscription)); }
/// <summary> /// Initializes the object with a subscription and a unique id. /// </summary> public TsCDaRequest(ITsCDaSubscription subscription, object handle) { subscription_ = subscription; handle_ = handle; }
/////////////////////////////////////////////////////////////////////// #region Constructors, Destructor, Initialization /// <summary> /// Initializes the object with a subscription and a unique id. /// </summary> public TsCDaRequest(ITsCDaSubscription subscription, object handle) { _subscription = subscription; _handle = handle; }
/// <summary> /// Creates a new instance of the appropriate subscription object. /// </summary> /// <param name="subscription">The remote subscription object.</param> protected virtual TsCDaSubscription CreateSubscription(ITsCDaSubscription subscription) { LicenseHandler.ValidateFeatures(LicenseHandler.ProductFeature.DataAccess); return(new TsCDaSubscription(this, subscription)); }