/// <summary>
        /// Connects to the server with the specified OpcUrl and credentials.
        /// </summary>
        public override void Connect(OpcUrl url, OpcConnectData connectData)
        {
            LicenseHandler.ValidateFeatures(LicenseHandler.ProductFeature.AlarmsConditions);
            if (Factory == null)
            {
                Factory = new Factory();
            }
            // connect to server.
            base.Connect(url, connectData);

            // all done if no subscriptions.
            if (subscriptions_.Count == 0)
            {
                return;
            }

            // create subscriptions (should only happen if server has been deserialized).
            SubscriptionCollection subscriptions = new SubscriptionCollection();

            foreach (TsCAeSubscription template in subscriptions_)
            {
                // create subscription for template.
                try { subscriptions.Add(EstablishSubscription(template)); }
                catch
                {
                    // ignored
                }
            }

            // save new set of subscriptions.
            subscriptions_ = subscriptions;
        }
        ///////////////////////////////////////////////////////////////////////
        #region Public Methods

        /// <summary>
        /// Connects to the server with the specified OpcUrl and credentials.
        /// </summary>
        public override void Connect(OpcUrl url, OpcConnectData connectData)
        {
            if (_factory == null)
            {
                _factory = new Com.Factory();
            }
            // connect to server.
            base.Connect(url, connectData);

            // all done if no subscriptions.
            if (_subscriptions.Count == 0)
            {
                return;
            }

            // create subscriptions (should only happen if server has been deserialized).
            SubscriptionCollection subscriptions = new SubscriptionCollection();

            foreach (Ae.TsCAeSubscription template in _subscriptions)
            {
                // create subscription for template.
                try { subscriptions.Add(EstablishSubscription(template)); }
                catch { }
            }

            // save new set of subscriptions.
            _subscriptions = subscriptions;
        }
Exemplo n.º 3
0
        private async Task GetSubscriptions(string tenantId)
        {
            var requestUrl = "https://management.azure.com/subscriptions?api-version=2014-04-01";

            try
            {
                HttpClient client = new HttpClient();
                var        data   = await DependencyService.Get <IAuthenticator>().AuthenticateSilently(tenantId, App.ManagementResourceUri, App.ClientID);

                //var loginAuthnority = "https://login.windows.net/" + tenantId;
                //var data = await DependencyService.Get<IAuthenticator>().Authenticate(loginAuthnority, App.ManagementResourceUri, App.ClientID, App.returnUri.ToString());

                client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", data.AccessToken);


                //client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", App.authResult.AccessToken);

                var subsriptionResponse = await client.GetStringAsync(requestUrl);

                var subscriptions = JsonConvert.DeserializeObject <SubscriptionResponse>(subsriptionResponse);
                foreach (var subscription in subscriptions.SubscriptionCollection)
                {
                    Console.WriteLine("subscrip: " + subscription.Id);
                    SubscriptionCollection.Add(subscription);
                }
                IsFirstRunComplete = true;
            }
            catch (Exception ex)
            {
                await DisplayAlert("Error!", ex.Message, "Dismiss");
            }
        }
        /// <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);
            }
        }
        /// <summary>
        /// Constructs 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++)
            {
                var subscription = (TsCAeSubscription)info.GetValue(Names.Subscription + ii, typeof(TsCAeSubscription));
                subscriptions_.Add(subscription);
            }
        }
Exemplo n.º 6
0
 public override void Connect(URL url, ConnectData connectData)
 {
     base.Connect(url, connectData);
     if (this.m_subscriptions.Count != 0)
     {
         SubscriptionCollection subscriptions = new SubscriptionCollection();
         foreach (Subscription subscription in this.m_subscriptions)
         {
             try
             {
                 subscriptions.Add(this.EstablishSubscription(subscription));
             }
             catch
             {
             }
         }
         this.m_subscriptions = subscriptions;
     }
 }
        /// <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);
        }
        /// <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(TsCAeSubscriptionState state)
        {
            LicenseHandler.ValidateFeatures(LicenseHandler.ProductFeature.AlarmsConditions);
            if (Server == null)
            {
                throw new NotConnectedException();
            }

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

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

            // should never happen.
            return(null);
        }
Exemplo n.º 9
0
        //======================================================================
        // Connection Management

        /// <summary>
        /// Connects to the server with the specified URL and credentials.
        /// </summary>
        public override void Connect(URL url, ConnectData connectData)
        {
            // connect to server.
            base.Connect(url, connectData);

            // all done if no subscriptions.
            if (m_subscriptions.Count == 0)
            {
                return;
            }

            // create subscriptions (should only happen if server has been deserialized).
            SubscriptionCollection subscriptions = new SubscriptionCollection();

            foreach (Subscription template in m_subscriptions)
            {
                // create subscription for template.
                try   { subscriptions.Add(EstablishSubscription(template)); }
                catch {}
            }

            // save new set of subscriptions.
            m_subscriptions = subscriptions;
        }
Exemplo n.º 10
0
        public async Task TransferSubscription(TransferType transferType, bool sendInitialValues)
        {
            const int kTestSubscriptions = 2;
            const int kDelay             = 2_000;

            // create test session and subscription
            var originSession = await ClientFixture.ConnectAsync(ServerUrl, SecurityPolicies.Basic256Sha256).ConfigureAwait(false);

            bool originSessionOpen = transferType == TransferType.KeepOpen;

            // create subscriptions
            var originSubscriptions        = new SubscriptionCollection();
            var originSubscriptionCounters = new int[kTestSubscriptions];
            var targetSubscriptionCounters = new int[kTestSubscriptions];

            for (int ii = 0; ii < kTestSubscriptions; ii++)
            {
                // create subscription with static monitored items
                var subscription = new Subscription(originSession.DefaultSubscription)
                {
                    PublishingInterval = 1_000,
                    PublishingEnabled  = true,
                };

                originSubscriptions.Add(subscription);
                originSession.AddSubscription(subscription);
                subscription.RepublishAfterTransfer = transferType == TransferType.DisconnectedRepublish;
                subscription.Create();

                // set defaults
                subscription.DefaultItem.DiscardOldest  = true;
                subscription.DefaultItem.QueueSize      = (ii == 0) ? 0U : 5;
                subscription.DefaultItem.MonitoringMode = MonitoringMode.Reporting;

                // create test set
                var namespaceUris = Session.NamespaceUris;
                var testSet       = new List <NodeId>();
                if (ii == 0)
                {
                    testSet.AddRange(GetTestSetStatic(namespaceUris));
                }
                else
                {
                    testSet.AddRange(GetTestSetSimulation(namespaceUris));
                }

                subscription.Handle = ii;
                var list = CreateMonitoredItemTestSet(subscription, testSet).ToList();
                list.ForEach(i => i.Notification += (MonitoredItem item, MonitoredItemNotificationEventArgs e) => {
                    originSubscriptionCounters[(int)subscription.Handle]++;
                    foreach (var value in item.DequeueValues())
                    {
                        TestContext.Out.WriteLine("Org:{0}: {1:20}, {2}, {3}, {4}", subscription.Id, item.DisplayName, value.Value, value.SourceTimestamp, value.StatusCode);
                    }
                });
                subscription.AddItems(list);
                subscription.ApplyChanges();
            }

            // settle
            await Task.Delay(kDelay).ConfigureAwait(false);

            // persist the subscription state
            var filePath = Path.GetTempFileName();

            // close session, do not delete subscription
            if (transferType != TransferType.KeepOpen)
            {
                originSession.DeleteSubscriptionsOnClose = false;
                originSession.Save(filePath);
                if (transferType == TransferType.CloseSession)
                {
                    // graceful close
                    originSession.Close();
                }
                else
                {
                    // force a socket dispose, to emulate network disconnect
                    // without closing session on server
                    originSession.TransportChannel.Dispose();
                }
            }

            // wait
            await Task.Delay(kDelay).ConfigureAwait(false);

            // close session, do not delete subscription
            if (transferType > TransferType.CloseSession)
            {
                originSession.Close();
            }

            // create target session
            var targetSession = await ClientFixture.ConnectAsync(ServerUrl, SecurityPolicies.Basic256Sha256).ConfigureAwait(false);

            // restore client state
            var transferSubscriptions = new SubscriptionCollection();

            if (transferType != TransferType.KeepOpen)
            {
                // load
                transferSubscriptions.AddRange(targetSession.Load(filePath));

                // hook notifications for log output
                int ii = 0;
                foreach (var subscription in transferSubscriptions)
                {
                    subscription.Handle = ii;
                    subscription.MonitoredItems.ToList().ForEach(i => i.Notification += (MonitoredItem item, MonitoredItemNotificationEventArgs e) => {
                        targetSubscriptionCounters[(int)subscription.Handle]++;
                        foreach (var value in item.DequeueValues())
                        {
                            TestContext.Out.WriteLine("Tra:{0}: {1:20}, {2}, {3}, {4}", subscription.Id, item.DisplayName, value.Value, value.SourceTimestamp, value.StatusCode);
                        }
                    });
                    ii++;
                }
            }
            else
            {
                transferSubscriptions.AddRange(originSubscriptions);
            }

            // wait
            await Task.Delay(kDelay).ConfigureAwait(false);

            // transfer restored subscriptions
            var result = targetSession.TransferSubscriptions(transferSubscriptions, sendInitialValues);

            Assert.IsTrue(result);

            // validate results
            for (int ii = 0; ii < transferSubscriptions.Count; ii++)
            {
                Assert.IsTrue(transferSubscriptions[ii].Created);
            }

            TestContext.Out.WriteLine("TargetSession is now SessionId={0}", targetSession.SessionId);

            // wait for some events
            await Task.Delay(kDelay).ConfigureAwait(false);

            // stop publishing
            foreach (var subscription in transferSubscriptions)
            {
                TestContext.Out.WriteLine("SetPublishingMode(false) for SessionId={0}, SubscriptionId={1}",
                                          subscription.Session.SessionId, subscription.Id);
                subscription.SetPublishingMode(false);
            }

            // validate expected counts
            for (int jj = 0; jj < kTestSubscriptions; jj++)
            {
                TestContext.Out.WriteLine("Subscription {0}: OriginCounts {1}, TargetCounts {2} ",
                                          jj, originSubscriptionCounters[jj], targetSubscriptionCounters[jj]);
                var monitoredItemCount  = transferSubscriptions[jj].MonitoredItemCount;
                var originExpectedCount = sendInitialValues && originSessionOpen ? monitoredItemCount * 2 : monitoredItemCount;
                var targetExpectedCount = sendInitialValues && !originSessionOpen ? monitoredItemCount : 0;
                if (jj == 0)
                {
                    // static nodes, expect only one set of changes, another one if send initial values was set
                    Assert.AreEqual(originExpectedCount, originSubscriptionCounters[jj]);
                    Assert.AreEqual(targetExpectedCount, targetSubscriptionCounters[jj]);
                }
                else
                {
                    // dynamic nodes, expect only one set of changes, another one if send initial values was set
                    Assert.LessOrEqual(originExpectedCount, originSubscriptionCounters[jj]);
                    Assert.LessOrEqual(targetExpectedCount, targetSubscriptionCounters[jj]);
                }
            }

            // close sessions
            targetSession.Close();
            if (originSessionOpen)
            {
                originSession.Close();
            }

            // cleanup
            File.Delete(filePath);
        }