public void WhenSearchAndIsActive_ThenReturnsActiveSubscriptionsOnly()
            {
                var config1       = new SubscriptionConfig();
                var config2       = new SubscriptionConfig();
                var subscription1 = new WebhookSubscription
                {
                    Event    = "aneventname",
                    Config   = config1,
                    IsActive = false
                };
                var subscription2 = new WebhookSubscription
                {
                    Event    = "aneventname",
                    Config   = config2,
                    IsActive = true
                };

                cacheClient.As <ICacheClientExtended>().Setup(cc => cc.GetKeysByPattern(It.IsAny <string>()))
                .Returns(new List <string> {
                    "akey1", "akey2"
                });
                cacheClient.Setup(cc => cc.Get <object>("akey1"))
                .Returns(subscription1);
                cacheClient.Setup(cc => cc.Get <object>("akey2"))
                .Returns(subscription2);

                var result = store.Search("aneventname", true);

                Assert.That(result[0].Config, Is.EqualTo(config2));
                cacheClient.As <ICacheClientExtended>().Verify(cc => cc.GetKeysByPattern(CacheClientSubscriptionStore.CachekeyPrefix + "*"));
                cacheClient.Verify(cc => cc.Get <object>("akey1"));
                cacheClient.Verify(cc => cc.Get <object>("akey2"));
            }
Esempio n. 2
0
        public long CreateSubscription(SubscriptionCriteria criteria)
        {
            long id = -1;

            using (Database.IdentityLock.Lock())
            {
                Database.TransactionalStorage.Batch(accessor =>
                {
                    id = accessor.General.GetNextIdentityValue(Constants.RavenSubscriptionsPrefix);

                    try
                    {
                        if (criteria.StartEtag == null || criteria.StartEtag == Etag.Empty)
                        {
                            TryFigureOutFirstEtagForSubscription(criteria);
                        }
                    }
                    catch (Exception e)
                    {
                        Log.InfoException("Could not figure out start etag for subscription automatically", e);
                    }

                    var config = new SubscriptionConfig
                    {
                        SubscriptionId = id,
                        Criteria       = criteria,
                        AckEtag        = criteria.StartEtag ?? Etag.Empty,
                    };

                    SaveSubscriptionConfig(id, config);
                });
            }

            return(id);
        }
        public static async Task <JToken> CreateSubscriptionAndWaitSubscribed(
            this IRtmClient client,
            string channel,
            string position,
            ISubscriptionObserver observer)
        {
            var tcs  = new TaskCompletionSource <JToken>();
            var sobs = new SubscriptionObserver();

            sobs.OnEnterSubscribed += (s) =>
            {
                tcs.TrySetResult(s.Position);
            };
            sobs.OnEnterFailed += (_) =>
            {
                tcs.TrySetException(new Exception("subscription was removed"));
            };
            sobs.OnDeleted += (_) =>
            {
                tcs.TrySetException(new Exception("subscription was removed"));
            };
            var subCfg = new SubscriptionConfig(SubscriptionModes.Advanced)
            {
                Position = position,
                Observer = new SubscriptionCompoundObserver(sobs, observer)
            };

            client.CreateSubscription(channel, subCfg);
            return(await tcs.Task.ConfigureAwait(false));
        }
Esempio n. 4
0
            public void WhenFromEntity_ThenReturnsDto()
            {
                var datum  = DateTime.UtcNow;
                var config = new SubscriptionConfig
                {
                    Url = "aurl"
                };
                var result = new WebhookSubscriptionEntity
                {
                    Id                  = "asubscriptionid",
                    Config              = config.ToJson(),
                    IsActive            = true.ToString().ToLowerInvariant(),
                    CreatedById         = "auserid",
                    CreatedDateUtc      = datum,
                    Event               = "anevent",
                    Name                = "aname",
                    LastModifiedDateUtc = datum
                }.FromEntity();

                Assert.That(result.Id, Is.EqualTo("asubscriptionid"));
                Assert.That(result.Config.Url, Is.EqualTo("aurl"));
                Assert.That(result.IsActive, Is.EqualTo(true));
                Assert.That(result.CreatedById, Is.EqualTo("auserid"));
                Assert.That(result.CreatedDateUtc, Is.EqualTo(datum));
                Assert.That(result.Event, Is.EqualTo("anevent"));
                Assert.That(result.Event, Is.EqualTo("anevent"));
                Assert.That(result.Name, Is.EqualTo("aname"));
                Assert.That(result.LastModifiedDateUtc, Is.EqualTo(datum));
            }
Esempio n. 5
0
 /// <summary>
 /// Creates a new subscription node according to the subscription configuration.
 /// </summary>
 private static TreeNode CreateSubscriptionNode(SubscriptionConfig subscriptionConfig)
 {
     return(TreeViewExtensions.CreateNode(
                GetDisplayName(subscriptionConfig.DisplayName, DriverPhrases.UnnamedSubscription),
                ImageKey.FolderClosed,
                subscriptionConfig));
 }
Esempio n. 6
0
        public async Task TwoSubscriptionsWithDifferentNames()
        {
            var client = new RtmClientBuilder(Config.Endpoint, Config.AppKey).Build();

            var channel = GenerateRandomChannelName();
            var subId1  = "s1_" + channel;
            var subId2  = "s2_" + channel;

            await client.StartAndWaitConnected();

            var subCfg = new SubscriptionConfig(SubscriptionModes.Advanced)
            {
                Filter = $"select * FROM `{channel}`"
            };

            var queue1 = new TestSubscriptionObserverQueue();

            queue1.ObserveSubscriptionState();
            queue1.ObserveSubscriptionPdu();
            subCfg.Observer = queue1;
            client.CreateSubscription(subId1, subCfg);

            Assert.That(await queue1.Dequeue(), Is.EqualTo("rtm:created"));
            Assert.That(await queue1.Dequeue(), Is.EqualTo("rtm:enter-unsubscribed"));
            Assert.That(await queue1.Dequeue(), Is.EqualTo("rtm:leave-unsubscribed"));
            Assert.That(await queue1.Dequeue(), Is.EqualTo("rtm:enter-subscribing"));
            Assert.That(await queue1.Dequeue(), Is.EqualTo("rtm:leave-subscribing"));
            Assert.That(await queue1.Dequeue(), Is.EqualTo("rtm:enter-subscribed"));

            var queue2 = new TestSubscriptionObserverQueue();

            queue2.ObserveSubscriptionState();
            queue2.ObserveSubscriptionPdu();
            subCfg.Observer = queue2;
            client.CreateSubscription(subId2, subCfg);

            Assert.That(await queue2.Dequeue(), Is.EqualTo("rtm:created"));
            Assert.That(await queue2.Dequeue(), Is.EqualTo("rtm:enter-unsubscribed"));
            Assert.That(await queue2.Dequeue(), Is.EqualTo("rtm:leave-unsubscribed"));
            Assert.That(await queue2.Dequeue(), Is.EqualTo("rtm:enter-subscribing"));
            Assert.That(await queue2.Dequeue(), Is.EqualTo("rtm:leave-subscribing"));
            Assert.That(await queue2.Dequeue(), Is.EqualTo("rtm:enter-subscribed"));

            var msg = new JObject(new JProperty("filed", "value"));

            await client.Publish(channel, msg, Ack.Yes);

            Assert.That(await queue1.Dequeue(), Is.EqualTo($"rtm:subscription-data:{msg}"));
            Assert.That(await queue2.Dequeue(), Is.EqualTo($"rtm:subscription-data:{msg}"));

            await Task.Delay(200);

            await client.Yield();

            Assert.That(queue1.TryDequeue(), Is.EqualTo(null));
            Assert.That(queue2.TryDequeue(), Is.EqualTo(null));

            await client.Dispose();
        }
Esempio n. 7
0
        /// <summary>
        /// Creates a new subscription node according to the subscription configuration.
        /// </summary>
        private TreeNode CreateSubscriptionNode(SubscriptionConfig subscriptionConfig)
        {
            TreeNode subscriptionNode = TreeViewUtils.CreateNode(
                GetDisplayName(subscriptionConfig.DisplayName, KpPhrases.EmptySubscription),
                FolderClosedImageKey);

            subscriptionNode.Tag = subscriptionConfig;
            return(subscriptionNode);
        }
Esempio n. 8
0
 /// <summary>
 /// Shows the subscription properties.
 /// </summary>
 private void ShowSubscriptionProps(SubscriptionConfig subscriptionConfig)
 {
     if (subscriptionConfig != null)
     {
         chkSubscrActive.Checked = subscriptionConfig.Active;
         txtDisplayName.Text     = subscriptionConfig.DisplayName;
         numPublishingInterval.SetValue(subscriptionConfig.PublishingInterval);
     }
 }
 public void Initialize()
 {
     dto = new SubscriptionConfig
     {
         Url         = "http://localhost",
         ContentType = MimeTypes.Json,
         Secret      = Convert.ToBase64String(Encoding.Default.GetBytes("asecret"))
     };
     validator = new SubscriptionConfigValidator();
 }
Esempio n. 10
0
        private void btnAddSubscription_Click(object sender, EventArgs e)
        {
            // add a new subscription
            SubscriptionConfig subscriptionConfig = new SubscriptionConfig();
            TreeNode           subscriptionNode   = CreateSubscriptionNode(subscriptionConfig);

            tvDevice.Insert(subscriptionsNode, subscriptionNode,
                            deviceConfig.Subscriptions, subscriptionConfig);
            ctrlSubscription.SetFocus();
            Modified = true;
        }
        public void ShouldCreateProductSubscriptionTemplateResourceFromCreatorConfigWithCorrectContent()
        {
            // arrange
            SubscriptionTemplateCreator subscriptionTemplateCreator = new SubscriptionTemplateCreator();

            CreatorConfig creatorConfig = new CreatorConfig()
            {
                products = new List <ProductConfig>()
            };
            ProductConfig product = new ProductConfig()
            {
                name                 = "productName",
                displayName          = "displayName",
                description          = "description",
                terms                = "terms",
                subscriptionRequired = true,
                approvalRequired     = true,
                subscriptionsLimit   = 1,
                state                = "state",
            };

            SubscriptionConfig subscription = new SubscriptionConfig()
            {
                name         = "subscriptionName",
                ownerId      = "user/ownerId",
                displayName  = "displayName",
                primaryKey   = "primaryKey",
                secondaryKey = "secondaryKey",
                state        = "active",
                allowTracing = true,
            };

            product.subscriptions = new List <SubscriptionConfig>();
            product.subscriptions.Add(subscription);

            creatorConfig.products.Add(product);

            var dependsOn = new[] { $"[resourceId('Microsoft.ApiManagement/service/products', parameters('ApimServiceName'), '{product.name}')]" };

            // act
            var subscriptionsTemplateResources = subscriptionTemplateCreator.CreateSubscriptionsTemplateResources(product, dependsOn);

            // assert

            var subscriptionsTemplateResource = subscriptionsTemplateResources[0];

            Assert.Equal($"/products/{product.name}", subscriptionsTemplateResource.properties.scope);
            Assert.Equal(subscription.displayName, subscriptionsTemplateResource.properties.displayName);
            Assert.Equal(subscription.primaryKey, subscriptionsTemplateResource.properties.primaryKey);
            Assert.Equal(subscription.secondaryKey, subscriptionsTemplateResource.properties.secondaryKey);
            Assert.Equal(subscription.state, subscriptionsTemplateResource.properties.state);
            Assert.Equal(subscription.allowTracing, subscriptionsTemplateResource.properties.allowTracing);
        }
Esempio n. 12
0
    static void Main()
    {
        // Log messages from SDK to the console
        Trace.Listeners.Add(new ConsoleTraceListener());

        IRtmClient client = new RtmClientBuilder(endpoint, appkey).Build();

        client.OnEnterConnected += cn => Console.WriteLine("Connected to Satori RTM!");

        client.OnError += ex =>
                          Console.WriteLine("Failed to connect: " + ex.Message);

        client.Start();

        var observer = new SubscriptionObserver();

        observer.OnEnterSubscribed += (ISubscription sub) =>
                                      Console.WriteLine("Subscribed to: " + sub.SubscriptionId);

        observer.OnLeaveSubscribed += (ISubscription sub) =>
                                      Console.WriteLine("Unsubscribed from: " + sub.SubscriptionId);

        observer.OnSubscriptionData += (ISubscription sub, RtmSubscriptionData data) =>
        {
            foreach (JToken jToken in data.Messages)
            {
                Console.WriteLine("Got message: " + jToken);
            }
        };

        observer.OnSubscribeError += (ISubscription sub, Exception err) =>
                                     Console.WriteLine("Failed to subscribe: " + err.Message);

        observer.OnSubscriptionError += (ISubscription sub, RtmSubscriptionError err) =>
                                        Console.WriteLine("Subscription failed. RTM sent the unsolicited error {0}: {1}", err.Code, err.Reason);

        client.CreateSubscription("animals", SubscriptionModes.Simple, observer);

        client.RemoveSubscription("animals");

        var cfg = new SubscriptionConfig(SubscriptionModes.Simple, observer)
        {
            Filter = "SELECT * FROM `animals` WHERE who LIKE 'z%'"
        };

        client.CreateSubscription("animals", cfg);

        Console.ReadKey();

        // Stop and clean up the client before exiting the program
        client.Dispose().Wait();
    }
Esempio n. 13
0
    static async Task Async(IRtmClient client)
    {
        RtmPublishReply reply = null;

        try
        {
            var message = new Animal
            {
                Who   = "zebra",
                Where = new float[] { 34.134358f, -118.321506f }
            };

            reply = await client.Publish("animals", message, Ack.Yes);

            Console.WriteLine("Publish confirmed");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Failed to publish: " + ex.Message);
        }

        var observer = new SubscriptionObserver();

        observer.OnEnterSubscribed += (ISubscription sub) =>
                                      Console.WriteLine("Subscribed to: " + sub.SubscriptionId);

        observer.OnLeaveSubscribed += (ISubscription sub) =>
                                      Console.WriteLine("Unsubscribed from: " + sub.SubscriptionId);

        observer.OnSubscriptionData += (ISubscription sub, RtmSubscriptionData data) =>
        {
            foreach (JToken jToken in data.Messages)
            {
                Console.WriteLine("Got message: " + jToken);
            }
        };

        observer.OnSubscribeError += (ISubscription sub, Exception err) =>
                                     Console.WriteLine("Failed to subscribe: " + err.Message);

        observer.OnSubscriptionError += (ISubscription sub, RtmSubscriptionError err) =>
                                        Console.WriteLine("Subscription failed. RTM sent the unsolicited error {0}: {1}", err.Code, err.Reason);

        var cfg = new SubscriptionConfig(SubscriptionModes.Simple, observer)
        {
            Position = reply?.Position
        };

        client.CreateSubscription("animals", cfg);
    }
Esempio n. 14
0
        public SubscriptionConfig GetSubscriptionConfig(long id)
        {
            SubscriptionConfig config = null;

            TransactionalStorage.Batch(accessor =>
            {
                var listItem = accessor.Lists.Read(Constants.RavenSubscriptionsPrefix, id.ToString("D19"));

                if (listItem == null)
                {
                    throw new SubscriptionDoesNotExistException("There is no subscription configuration for specified identifier (id: " + id + ")");
                }

                config = listItem.Data.JsonDeserialization <SubscriptionConfig>();
            });

            return(config);
        }
            public void WhenSearch_ThenReturnsSubscriptions()
            {
                var config       = new SubscriptionConfig();
                var subscription = new WebhookSubscription
                {
                    Event  = "aneventname",
                    Config = config
                };

                cacheClient.Setup(cc => cc.Get <object>("akey"))
                .Returns(subscription);

                var result = store.Search("aneventname");

                Assert.That(result[0].Config, Is.EqualTo(config));
                cacheClient.As <ICacheClientExtended>().Verify(cc => cc.GetKeysByPattern(CacheClientSubscriptionStore.CachekeyPrefix + "*"));
                cacheClient.Verify(cc => cc.Get <object>("akey"));
            }
Esempio n. 16
0
        public Task Subscribe(List <ushort> signalIds, Action <SubscriptionStateEventArgs> callBack)
        {
            _callBack = callBack;
            TryConnect();

            var subConfig = new SubscriptionConfig()
                            .Identity(_identity)
                            .Timeout(TimeSpan.FromMilliseconds(_timeout));

            foreach (var id in signalIds)
            {
                subConfig.AddSignal(id);
            }

            subConfig.AddAoI();
            _subscription = _connection.CreateNewSubscription(subConfig);
            SubscribeInternal();
            return(Task.CompletedTask);
        }
Esempio n. 17
0
        /// <summary>
        /// Adds a new subscription item to the configuration.
        /// </summary>
        private void AddItemToSubscription(ServerNodeTag serverNodeTag)
        {
            // create new monitored item
            ItemConfig itemConfig = new()
            {
                NodeID      = serverNodeTag.NodeIdStr,
                DisplayName = serverNodeTag.DisplayName,
                TagCode     = GetTagCode(serverNodeTag),
                Tag         = new ItemConfigTag(0)
            };

            if (GetDataTypeName(serverNodeTag.NodeId, out string dataTypeName))
            {
                itemConfig.DataTypeName = dataTypeName;
            }

            // find subscription
            TreeNode deviceNode       = tvDevice.SelectedNode;
            TreeNode subscriptionNode = deviceNode?.FindClosest(typeof(SubscriptionConfig)) ??
                                        subscriptionsNode.LastNode;
            SubscriptionConfig subscriptionConfig;

            // add new subscription
            if (subscriptionNode == null)
            {
                subscriptionConfig = new SubscriptionConfig();
                subscriptionNode   = CreateSubscriptionNode(subscriptionConfig);
                tvDevice.Insert(subscriptionsNode, subscriptionNode,
                                deviceConfig.Subscriptions, subscriptionConfig);
            }
            else
            {
                subscriptionConfig = (SubscriptionConfig)subscriptionNode.Tag;
            }

            // add monitored item
            TreeNode itemNode = CreateItemNode(itemConfig);

            tvDevice.Insert(subscriptionNode, itemNode, subscriptionConfig.Items, itemConfig);
            UpdateTagNums(itemNode);
            Modified = true;
        }
Esempio n. 18
0
        public long CreateSubscription(SubscriptionCriteria criteria)
        {
            long id = -1;

            Database.TransactionalStorage.Batch(accessor =>
            {
                id = accessor.General.GetNextIdentityValue(Constants.RavenSubscriptionsPrefix);

                var config = new SubscriptionConfig
                {
                    SubscriptionId = id,
                    Criteria       = criteria,
                    AckEtag        = Etag.Empty
                };

                SaveSubscriptionConfig(id, config);
            });

            return(id);
        }
Esempio n. 19
0
 public SubscriptionsTemplateResource CreateSubscriptionsTemplateResource(SubscriptionConfig subscription, string[] dependsOn)
 {
     return(new SubscriptionsTemplateResource
     {
         Name = $"[concat(parameters('ApimServiceName'), '/{subscription.name}')]",
         Type = "Microsoft.ApiManagement/service/subscriptions",
         ApiVersion = "2019-01-01",
         Properties = new SubscriptionsTemplateProperties
         {
             ownerId = subscription.ownerId,
             scope = subscription.scope,
             displayName = subscription.displayName,
             primaryKey = subscription.primaryKey,
             secondaryKey = subscription.secondaryKey,
             state = subscription.state,
             allowTracing = subscription.allowTracing,
         },
         DependsOn = dependsOn,
     });
 }
        public void ShouldCreateSubscriptionResourceFromSubscriptionConfig()
        {
            // arrange
            SubscriptionTemplateCreator subscriptionTemplateCreator = new SubscriptionTemplateCreator();
            CreatorConfig creatorConfig = new CreatorConfig()
            {
                subscriptions = new List <SubscriptionConfig>()
            };

            SubscriptionConfig subscription = new SubscriptionConfig()
            {
                name         = "subscriptionName",
                ownerId      = "user/ownerId",
                scope        = "/products/productId",
                displayName  = "displayName",
                primaryKey   = "primaryKey",
                secondaryKey = "secondaryKey",
                state        = "active",
                allowTracing = true,
            };

            string[] dependsOn = new string[] { "dependsOn" };

            // act
            SubscriptionsTemplateResource subscriptionsTemplateResource = subscriptionTemplateCreator.CreateSubscriptionsTemplateResource(subscription, dependsOn);

            // assert

            Assert.Equal($"[concat(parameters('ApimServiceName'), '/{subscription.name}')]", subscriptionsTemplateResource.name);
            Assert.Equal($"Microsoft.ApiManagement/service/subscriptions", subscriptionsTemplateResource.type);
            Assert.Equal("2019-01-01", subscriptionsTemplateResource.apiVersion);

            Assert.Equal(subscription.scope, subscriptionsTemplateResource.properties.scope);
            Assert.Equal(subscription.displayName, subscriptionsTemplateResource.properties.displayName);
            Assert.Equal(subscription.primaryKey, subscriptionsTemplateResource.properties.primaryKey);
            Assert.Equal(subscription.secondaryKey, subscriptionsTemplateResource.properties.secondaryKey);
            Assert.Equal(subscription.state, subscriptionsTemplateResource.properties.state);
            Assert.Equal(subscription.allowTracing, subscriptionsTemplateResource.properties.allowTracing);

            Assert.Equal(dependsOn, subscriptionsTemplateResource.dependsOn);
        }
Esempio n. 21
0
        public void GenerateSubscriptions()
        {
            stringOperator.Add("!=");
            stringOperator.Add("==");

            numberOperator.Add(">");
            numberOperator.Add("<");
            numberOperator.Add(">=");
            numberOperator.Add("<=");
            numberOperator.Add("==");
            numberOperator.Add("!=");

            var subscriptionConfig    = new SubscriptionConfig();
            var numberOfSubscriptions = subscriptionConfig.NumberOfSubscriptions;
            var subscriptions         = new List <Subscription>();
            var subscriptionsToFill   = numberOfSubscriptions;

            for (int i = 0; i < numberOfSubscriptions; i++)
            {
                subscriptions.Add(new Subscription());
            }

            var companies  = GenerateCompanies(_subscriptionConfig.CompaniesFrequency);
            var values     = GenerateValues(_subscriptionConfig.ValueFrequency);
            var drops      = GenerateDrops(_subscriptionConfig.DropFrequency);
            var variations = GenerateVariations(_subscriptionConfig.VariationFrequency);
            var dates      = GenerateDates(_subscriptionConfig.DatesFrequency);
            var remainingEqualOperatorFrequency = subscriptionConfig.EqualOperatorFrequency;

            foreach (var company in companies)
            {
                int index = _random.Next(subscriptions.Count);


                if (subscriptionsToFill > 0)
                {
                    while (subscriptions[index].Company != null || subscriptions[index].HasAtLeastOneField == true)
                    {
                        index = _random.Next(subscriptions.Count);
                    }
                }
                else
                {
                    while (subscriptions[index].Company != null)
                    {
                        index = _random.Next(subscriptions.Count);
                    }
                }


                if (remainingEqualOperatorFrequency > 0)
                {
                    subscriptions[index].Company = new CompanyModel(company, "==");
                    remainingEqualOperatorFrequency--;
                }
                else
                {
                    subscriptions[index].Company = new CompanyModel(company, GenerateRandomStringOperator());
                }

                subscriptions[index].HasAtLeastOneField = true;
                subscriptionsToFill--;
            }

            foreach (var value in values)
            {
                int index = _random.Next(subscriptions.Count);

                if (subscriptionsToFill > 0)
                {
                    while (subscriptions[index].Value != null || subscriptions[index].HasAtLeastOneField == true)
                    {
                        index = _random.Next(subscriptions.Count);
                    }
                }
                else
                {
                    while (subscriptions[index].Value != null)
                    {
                        index = _random.Next(subscriptions.Count);
                    }
                }

                subscriptions[index].Value = new ValueModel(value, GenerateRandomNumberOperator());

                subscriptions[index].HasAtLeastOneField = true;
                subscriptionsToFill--;
            }

            foreach (var drop in drops)
            {
                int index = _random.Next(subscriptions.Count);

                if (subscriptionsToFill > 0)
                {
                    while (subscriptions[index].Drop != null || subscriptions[index].HasAtLeastOneField == true)
                    {
                        index = _random.Next(subscriptions.Count);
                    }
                }
                else
                {
                    while (subscriptions[index].Drop != null)
                    {
                        index = _random.Next(subscriptions.Count);
                    }
                }

                subscriptions[index].Drop = new DropModel(drop, GenerateRandomNumberOperator());

                subscriptions[index].HasAtLeastOneField = true;
                subscriptionsToFill--;
            }

            foreach (var variation in variations)
            {
                int index = _random.Next(subscriptions.Count);

                if (subscriptionsToFill > 0)
                {
                    while (subscriptions[index].Variation != null || subscriptions[index].HasAtLeastOneField == true)
                    {
                        index = _random.Next(subscriptions.Count);
                    }
                }
                else
                {
                    while (subscriptions[index].Variation != null)
                    {
                        index = _random.Next(subscriptions.Count);
                    }
                }

                subscriptions[index].Variation = new VariationModel(variation, GenerateRandomNumberOperator());

                subscriptions[index].HasAtLeastOneField = true;
                subscriptionsToFill--;
            }

            foreach (var date in dates)
            {
                int index = _random.Next(subscriptions.Count);

                if (subscriptionsToFill > 0)
                {
                    while (subscriptions[index].Date != null || subscriptions[index].HasAtLeastOneField == true)
                    {
                        index = _random.Next(subscriptions.Count);
                    }
                }
                else
                {
                    while (subscriptions[index].Date != null)
                    {
                        index = _random.Next(subscriptions.Count);
                    }
                }

                subscriptions[index].Date = new DateModel(date, GenerateRandomStringOperator());

                subscriptions[index].HasAtLeastOneField = true;
                subscriptionsToFill--;
            }
            StringBuilder stringBuilder = new StringBuilder();

            foreach (var subscription in subscriptions)
            {
                if (stringBuilder.Length >= 2)
                {
                    stringBuilder.Append("\n");
                }
                stringBuilder.Append("{");
                if (subscription.Company != null)
                {
                    stringBuilder.Append($"(company,{subscription.Company.Operator},\"{subscription.Company.Value}\");");
                }
                if (subscription.Value != null)
                {
                    stringBuilder.Append($"(value,{subscription.Value.Operator},{subscription.Value.Value});");
                }
                if (subscription.Drop != null)
                {
                    stringBuilder.Append($"(drop,{subscription.Drop.Operator},{subscription.Drop.Value});");
                }
                if (subscription.Variation != null)
                {
                    stringBuilder.Append($"(variation,{subscription.Variation.Operator},{subscription.Variation.Value});");
                }
                if (subscription.Date != null)
                {
                    stringBuilder.Append($"(date,{subscription.Date.Operator},{subscription.Date.Value});");
                }
                stringBuilder.Append("}");
                stringBuilder.Remove(stringBuilder.Length - 2, 1);
            }
            System.IO.File.WriteAllText("subscriptions.txt", stringBuilder.ToString());
            Console.WriteLine(stringBuilder.ToString());
            Console.WriteLine();
        }
Esempio n. 22
0
 private void SaveSubscriptionConfig(long id, SubscriptionConfig config)
 {
     Database.TransactionalStorage.Batch(accessor =>
                                         accessor.Lists.Set(Constants.RavenSubscriptionsPrefix, id.ToString("D19"), RavenJObject.FromObject(config), UuidType.Subscriptions));
 }
Esempio n. 23
0
 public void Subscribe(Func <object, Task <HandleResult> > handler,
                       SubscriptionType type = SubscriptionType.SharedBetweenConsumers, SubscriptionConfig configuration = null)
 {
     _bus.Subscribe <TPayload>(this, handler, type, configuration);
 }
Esempio n. 24
0
        private void ForceReleaseAndOpenForNewClient(long id, SubscriptionConnectionOptions oldOptions, SubscriptionConnectionOptions newOptions, SubscriptionConfig config, bool allowExistingClientToAcknowledge = false)
        {
            if (allowExistingClientToAcknowledge && config.TimeOfLastAcknowledgment < config.TimeOfSendingLastBatch)
            {
                // we know that there is active client with unconfirmed batch
                // allow him to send ack in nearest future if has enough time
                var now = SystemTime.UtcNow;
                var timeSinceBatchSent = now - config.TimeOfSendingLastBatch;

                if (timeSinceBatchSent < oldOptions.BatchOptions.AcknowledgmentTimeout)
                {
                    var ackMustBeDeliveredBefore = config.TimeOfSendingLastBatch + oldOptions.BatchOptions.AcknowledgmentTimeout;
                    allowedOneTimeAcknowledgements.TryAdd(id, new OneTimeAcknowledgement {
                        ConnectionId = oldOptions.ConnectionId,
                        ValidUntil   = ackMustBeDeliveredBefore,
                        AckDelivered = new ManualResetEventSlim(false)
                    });
                }
            }

            ReleaseSubscription(id);
            openSubscriptions.TryAdd(id, newOptions);
            UpdateClientActivityDate(id);
        }
Esempio n. 25
0
 /// <summary>
 /// Gets a text for the subscription tree node.
 /// </summary>
 private static string GetSubscriptionNodeText(SubscriptionConfig subscription)
 {
     return(string.IsNullOrEmpty(subscription.DisplayName)
         ? DriverPhrases.UnnamedSubscription
         : subscription.DisplayName);
 }
Esempio n. 26
0
 /// <summary>
 /// Creates a tree node according to the subscription configuration.
 /// </summary>
 private static TreeNode CreateSubscriptionNode(SubscriptionConfig subscription)
 {
     return(TreeViewExtensions.CreateNode(GetSubscriptionNodeText(subscription), ImageKey.Elem, subscription));
 }
Esempio n. 27
0
        /// <summary>
        /// Adds a new item to the configuration.
        /// </summary>
        private bool AddItem(TreeNode serverNode)
        {
            if (serverNode?.Tag is ServerNodeTag serverNodeTag &&
                serverNodeTag.NodeClass == NodeClass.Variable)
            {
                TreeNode deviceNode    = tvDevice.SelectedNode;
                object   deviceNodeTag = deviceNode?.Tag;

                if (GetTopParentNode(tvDevice.SelectedNode) == commandsNode)
                {
                    // add a new command
                    if (GetDataTypeName(serverNodeTag.OpcNodeId, out string dataTypeName))
                    {
                        CommandConfig commandConfig = new CommandConfig
                        {
                            NodeID       = serverNodeTag.OpcNodeId.ToString(),
                            DisplayName  = serverNodeTag.DisplayName,
                            DataTypeName = dataTypeName,
                            CmdNum       = GetNextCmdNum()
                        };

                        tvDevice.Insert(commandsNode, CreateCommandNode(commandConfig),
                                        deviceConfig.Commands, commandConfig);

                        Modified = true;
                        return(true);
                    }
                }
                else
                {
                    // create a new monitored item
                    ItemConfig itemConfig = new ItemConfig
                    {
                        NodeID      = serverNodeTag.OpcNodeId.ToString(),
                        DisplayName = serverNodeTag.DisplayName,
                    };

                    itemConfig.Tag = new ItemConfigTag(0, itemConfig.IsArray, itemConfig.ArrayLen);

                    // find a subscription
                    TreeNode subscriptionNode = deviceNode?.FindClosest(typeof(SubscriptionConfig)) ??
                                                subscriptionsNode.LastNode;
                    SubscriptionConfig subscriptionConfig;

                    // add a new subscription
                    if (subscriptionNode == null)
                    {
                        subscriptionConfig = new SubscriptionConfig();
                        subscriptionNode   = CreateSubscriptionNode(subscriptionConfig);
                        tvDevice.Insert(subscriptionsNode, subscriptionNode,
                                        deviceConfig.Subscriptions, subscriptionConfig);
                    }
                    else
                    {
                        subscriptionConfig = (SubscriptionConfig)subscriptionNode.Tag;
                    }

                    // add the monitored item
                    TreeNode itemNode = CreateItemNode(itemConfig);
                    tvDevice.Insert(subscriptionNode, itemNode, subscriptionConfig.Items, itemConfig);
                    UpdateSignals(itemNode);
                    Modified = true;
                    return(true);
                }
            }

            return(false);
        }