protected void TestConcurrentIterationWithDrainer(SubscriptionAction act)
        {
            IDictionary <string, object> args = new Dictionary <string, object>
            {
                { "x-message-ttl", 5000 }
            };
            string       q   = Model.QueueDeclare("", false, true, false, args);
            Subscription sub = new Subscription(Model, q, false);

            PreparedQueue(q);

            List <Thread> ts = new List <Thread>();

            for (int i = 0; i < 50; i++)
            {
                SubscriptionDrainer drainer = new SubscriptionDrainer(sub, act);
                Thread t = new Thread(drainer.Drain);
                ts.Add(t);
                t.Start();
            }

            foreach (Thread t in ts)
            {
                t.Join();
            }
        }
Ejemplo n.º 2
0
        public static string ToVerb(this SubscriptionAction action)
        {
            switch (action)
            {
            case SubscriptionAction.Activate:
                return("activate");

            case SubscriptionAction.Subscribe:
                return("subscribe");

            case SubscriptionAction.Update:
                return("update");

            case SubscriptionAction.Unsubscribe:
                return("unsubscribe from");

            case SubscriptionAction.Suspend:
                return("suspend");

            case SubscriptionAction.DeleteData:
                return("delete data for");

            case SubscriptionAction.Reinstate:
                return("reinstate");

            default:
                throw new InvalidEnumArgumentException();
            }
        }
Ejemplo n.º 3
0
 public QLHistoryDataSubscription(string code, DateTime since, HistoryProviderSpan span, SubscriptionAction action = SubscriptionAction.Subscribe)
 {
     instrument  = code;
     this.since  = new DateTime(since.Ticks, DateTimeKind.Local);
     this.span   = span;
     id          = Guid.NewGuid();
     this.Action = action;
 }
Ejemplo n.º 4
0
        public ShopTools(List <ShopProduct> products)
        {
            _onSuccessPurchase = new SubscriptionAction();
            _onFailedPurchase  = new SubscriptionAction();
            ConfigurationBuilder builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());

            foreach (ShopProduct product in products)
            {
                builder.AddProduct(product.Id, product.CurrentProductType);
            }
        }
        public DefaultBasicConsumer CreateConsumer(
            SubscriptionAction subscriptionAction, 
            IModel model, 
            bool modelIsSingleUse, 
            MessageCallback callback)
        {
            var consumer = new EasyNetQConsumer(model, queue);
            var consumerTag = Guid.NewGuid().ToString();
            consumer.ConsumerTag = consumerTag;
            subscriptions.Add(consumerTag, new SubscriptionInfo(subscriptionAction, consumer, callback, modelIsSingleUse, model));

            return consumer;
        }
        private void TestSubscriptionAction(SubscriptionAction action)
        {
            Model.BasicQos(0, 1, false);
            string       q   = Model.QueueDeclare();
            Subscription sub = new Subscription(Model, q, false);

            Model.BasicPublish("", q, null, enc.GetBytes("a message"));
            BasicDeliverEventArgs res = sub.Next();

            Assert.IsNotNull(res);
            action(sub);
            QueueDeclareOk ok = Model.QueueDeclarePassive(q);

            Assert.AreEqual(0, ok.MessageCount);
        }
        public static SubscriptionAction GetSubscriptionAction(this EncompassSubscription configSubscription,
                                                               List <SubscriptionSuccessResponse> existingSubscriptions)
        {
            var performingAction = new SubscriptionAction();

            var exsitingResourceSubscription = existingSubscriptions.FirstOrDefault(x => x.Resource.Equals(configSubscription.Resource, StringComparison.CurrentCultureIgnoreCase));

            // same resource was subscribied
            if (exsitingResourceSubscription != null)
            {
                // in encompass combination of resourceType and endpoint is unique key
                var existingResourceEndpointSubcription = existingSubscriptions.FirstOrDefault(x =>
                                                                                               x.Resource.Equals(configSubscription.Resource, StringComparison.CurrentCultureIgnoreCase) && x.Endpoint.Equals(configSubscription.Endpoint,
                                                                                                                                                                                                              StringComparison.CurrentCultureIgnoreCase));

                if (existingResourceEndpointSubcription != null)
                {
                    var missingConfigEvent = configSubscription.Events.Except(existingResourceEndpointSubcription.Events).ToList();
                    if (missingConfigEvent.Count > 0)
                    {
                        performingAction.PerformingAction = SubscriptionActionEnum.Update;
                        performingAction.SubcriptionId    = existingResourceEndpointSubcription.SubscriptionId.ToString();
                    }
                }
                else
                {
                    // resource is there but we need update endpoint
                    performingAction.PerformingAction = SubscriptionActionEnum.Update;
                    performingAction.SubcriptionId    = exsitingResourceSubscription.SubscriptionId.ToString();
                }
            }
            else
            {
                performingAction.PerformingAction = SubscriptionActionEnum.Add;
            }

            return(performingAction);
        }
Ejemplo n.º 8
0
            /// <summary>
            /// Gets the configured (P)SUBSCRIBE or (P)UNSUBSCRIBE <see cref="Message"/> for an action.
            /// </summary>
            internal Message GetMessage(RedisChannel channel, SubscriptionAction action, CommandFlags flags, bool internalCall)
            {
                var isPattern = channel.IsPatternBased;
                var command   = action switch
                {
                    SubscriptionAction.Subscribe when isPattern => RedisCommand.PSUBSCRIBE,
                    SubscriptionAction.Unsubscribe when isPattern => RedisCommand.PUNSUBSCRIBE,

                    SubscriptionAction.Subscribe when !isPattern => RedisCommand.SUBSCRIBE,
                    SubscriptionAction.Unsubscribe when !isPattern => RedisCommand.UNSUBSCRIBE,
                    _ => throw new ArgumentOutOfRangeException("This would be an impressive boolean feat"),
                };

                // TODO: Consider flags here - we need to pass Fire and Forget, but don't want to intermingle Primary/Replica
                var msg = Message.Create(-1, Flags | flags, command, channel);

                msg.SetForSubscriptionBridge();
                if (internalCall)
                {
                    msg.SetInternalCall();
                }
                return(msg);
            }
 public SubscriptionDrainer(Subscription sub, SubscriptionAction op)
 {
     m_subscription = sub;
     PostProcess = op;
 }
        private void TestSubscriptionAction(SubscriptionAction action)
        {
            Model.BasicQos(0, 1, false);
            string q = Model.QueueDeclare();
            Subscription sub = new Subscription(Model, q, false);

            Model.BasicPublish("", q, null, enc.GetBytes("a message"));
            BasicDeliverEventArgs res = sub.Next();
            Assert.IsNotNull(res);
            action(sub);
            QueueDeclareOk ok = Model.QueueDeclarePassive(q);
            Assert.AreEqual(0, ok.MessageCount);
        }
        protected void TestConcurrentIterationWithDrainer(SubscriptionAction act)
        {
            IDictionary<string, object> args = new Dictionary<string, object>
            {
                {"x-message-ttl", 5000}
            };
            string q = Model.QueueDeclare("", false, true, false, args);
            Subscription sub = new Subscription(Model, q, false);

            PreparedQueue(q);

            List<Thread> ts = new List<Thread>();
            for (int i = 0; i < 50; i++)
            {
                SubscriptionDrainer drainer = new SubscriptionDrainer(sub, act);
                Thread t = new Thread(drainer.Drain);
                ts.Add(t);
                t.Start();
            }

            foreach(Thread t in ts)
            {
                t.Join();
            }
        }
Ejemplo n.º 12
0
        /// <summary>
        ///     Subscribes or unsubscribes from newspaper.
        /// </summary>
        public async Task <SubscriptionResultJson> ManageNewspaperSubscription(int newspaperId, SubscriptionAction action)
        {
            var unsubscribe = action == SubscriptionAction.Unsubscribe;

            var result = await TrySubscribeNewspaper(newspaperId, unsubscribe);

            if (result.CaptchaRequired)
            {
                result = await TrySubscribeNewspaper(newspaperId, unsubscribe, await Client.SolveCaptcha());
            }

            return(result);
        }
Ejemplo n.º 13
0
 public DefaultBasicConsumer CreateConsumer(SubscriptionAction subscriptionAction, IModel model, bool modelIsSingleUse, MessageCallback callback)
 {
     return(new DefaultBasicConsumer());
 }
Ejemplo n.º 14
0
 public DefaultBasicConsumer CreateConsumer(SubscriptionAction subscriptionAction, IModel model, bool modelIsSingleUse, MessageCallback callback)
 {
     return null;
 }
 public SubscriptionDrainer(Subscription sub, SubscriptionAction op)
 {
     m_subscription = sub;
     PostProcess    = op;
 }
Ejemplo n.º 16
0
 public SubscriptionInfo(SubscriptionAction subscriptionAction, EasyNetQConsumer consumer, MessageCallback callback, bool modelIsSingleUse, IModel channel)
 {
     SubscriptionAction = subscriptionAction;
     Consumer = consumer;
     Callback = callback;
     ModelIsSingleUse = modelIsSingleUse;
     Channel = channel;
 }
Ejemplo n.º 17
0
        public async Task <CommandResponse <bool?> > SetSubverseListChange(DomainReference setReference, string subverse, SubscriptionAction action)
        {
            DemandAuthentication();
            var set = GetSet(setReference.Name, setReference.OwnerName);

            if (set == null)
            {
                return(CommandResponse.FromStatus <bool?>(null, Status.Denied, "Set cannot be found"));
            }

            //Check Perms
            var perms = SetPermission.GetPermissions(set.Map(), User.Identity);

            if (!perms.EditList)
            {
                return(CommandResponse.FromStatus <bool?>(null, Status.Denied, "User not authorized to modify set"));
            }

            var sub = GetSubverseInfo(subverse);

            if (sub == null)
            {
                return(CommandResponse.FromStatus <bool?>(null, Status.Denied, "Subverse cannot be found"));
            }

            return(await SetSubverseListChange(set, sub, action).ConfigureAwait(CONSTANTS.AWAIT_CAPTURE_CONTEXT));
        }
Ejemplo n.º 18
0
        private async Task <CommandResponse <bool?> > SetSubverseListChange(SubverseSet set, Subverse subverse, SubscriptionAction action)
        {
            using (var db = new VoatDataContext())
            {
                CommandResponse <bool?> response = new CommandResponse <bool?>(true, Status.Success, "");
                var actionTaken = SubscriptionAction.Toggle;

                var setSubverseRecord = db.SubverseSetList.FirstOrDefault(n => n.SubverseSetID == set.ID && n.SubverseID == subverse.ID);

                if (setSubverseRecord == null && ((action == SubscriptionAction.Subscribe) || action == SubscriptionAction.Toggle))
                {
                    db.SubverseSetList.Add(new SubverseSetList {
                        SubverseSetID = set.ID, SubverseID = subverse.ID, CreationDate = CurrentDate
                    });
                    actionTaken = SubscriptionAction.Subscribe;
                }
                else if (setSubverseRecord != null && ((action == SubscriptionAction.Unsubscribe) || action == SubscriptionAction.Toggle))
                {
                    db.SubverseSetList.Remove(setSubverseRecord);
                    actionTaken = SubscriptionAction.Unsubscribe;
                }

                await db.SaveChangesAsync().ConfigureAwait(CONSTANTS.AWAIT_CAPTURE_CONTEXT);

                //If Subscribe is to a front page, update subscriber count
                if (set.Type == (int)SetType.Front && !String.IsNullOrEmpty(set.UserName))
                {
                    await UpdateSubverseSubscriberCount(new DomainReference(DomainType.Subverse, subverse.Name), actionTaken);
                }
                response.Response = actionTaken == SubscriptionAction.Toggle ? (bool?)null : actionTaken == SubscriptionAction.Subscribe;
                return(response);
            }
        }
 public SetSubverseCommand(DomainReference setRef, string subverse, SubscriptionAction action = SubscriptionAction.Toggle)
 {
     _setRef   = setRef;
     _action   = action;
     _subverse = subverse;
 }
Ejemplo n.º 20
0
 /// <summary>
 /// Event triggered on realtime subscriptions
 /// </summary>
 public SubscriptionEvent(SubscriptionAction action)
 {
     Action = action;
 }
Ejemplo n.º 21
0
 public SubscribeCommand(DomainReference domainReference, SubscriptionAction action)
 {
     _action          = action;
     _domainReference = domainReference;
 }
Ejemplo n.º 22
0
 public SubscriptionCommand(DomainType domainType, SubscriptionAction action, string subscriptionItemName)
 {
     _domainType = domainType;
     _action     = action;
     _name       = subscriptionItemName;
 }
Ejemplo n.º 23
0
        public async Task <SubscriptionResponse> SendSubscriptionRequestAsync(string telephone, SubscriptionAction action)
        {
            string strAction = null;

            if (action == SubscriptionAction.Subscribe)
            {
                strAction = "1";
            }
            else
            {
                strAction = "0";
            }
            SubscriptionRequest ideaMartRequest = new SubscriptionRequest()
            {
                applicationId = AppId,
                password      = AppPassword,
                subscriberId  = telephone,
                action        = strAction,
                // version = "1.0"
            };

            Uri uri = new Uri(GetSubscriptionRequestUrl(IsInProduction));

            using (var httpclient = new HttpClient())
            {
                httpclient.DefaultRequestHeaders.Accept.Clear();
                httpclient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                httpclient.DefaultRequestHeaders.Host = uri.Host;
                StringContent content     = new StringContent(JsonConvert.SerializeObject(ideaMartRequest));
                HttpContent   httpcontent = content;
                httpcontent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                HttpResponseMessage response = await httpclient.PostAsync(uri, httpcontent); //.result<of T>

                if (response.IsSuccessStatusCode)
                {
                    string result = await response.Content.ReadAsStringAsync();

                    return(JsonConvert.DeserializeObject <SubscriptionResponse>(result));
                }
                var error = new SubscriptionStatusResponse()
                {
                    statusDetail = "ERROR_API"
                };
                string errorStr = JsonConvert.SerializeObject(error);
                return(JsonConvert.DeserializeObject <SubscriptionResponse>(errorStr));
            }
        }
Ejemplo n.º 24
0
        public DefaultBasicConsumer CreateConsumer(
            SubscriptionAction subscriptionAction,
            IModel model, 
            bool modelIsSingleUse, 
            MessageCallback callback)
        {
            var consumer = new EasyNetQConsumer(model, queue);
            consumer.ConsumerTag = subscriptionAction.Id;

            if (subscriptions.ContainsKey(consumer.ConsumerTag))
            {
                logger.DebugWrite("Removing existing subscription with ConsumerTag: " + consumer.ConsumerTag);
                subscriptions.Remove(consumer.ConsumerTag);
            }

            logger.DebugWrite("Adding subscription with ConsumerTag: " + consumer.ConsumerTag);
            subscriptions.Add(consumer.ConsumerTag, new SubscriptionInfo(subscriptionAction, consumer, callback, modelIsSingleUse, model));

            return consumer;
        }