Exemplo n.º 1
0
        public async Task <ISubscription> CreateAsync(ITransaction tx, SubscriptionDetails subscriptionDetails)
        {
            var subscription = Create(subscriptionDetails);
            await subscription.InitializeAsync(tx);

            return(subscription);
        }
        internal static async Task RemoveSubscription(
            this IReliableDictionary <string, BrokerServiceState> brokerState, ITransaction tx, string queues,
            SubscriptionDetails subscriptionDetails)
        {
            var subscribers = await brokerState.TryGetValueAsync(tx, queues, LockMode.Update);

            if (subscribers.HasValue)
            {
                var newState = BrokerServiceState.RemoveSubscriber(subscribers.Value, subscriptionDetails);
                await brokerState.SetAsync(tx, queues, newState);
            }
        }
        /// <summary>
        /// Returns a cloned instance with the same subscribers as the original, plus the new <paramref name="subscriber"/>
        /// </summary>
        /// <param name="current"></param>
        /// <param name="subscriber"></param>
        /// <returns></returns>
        public static BrokerServiceState AddSubscriber(BrokerServiceState current, SubscriptionDetails subscriber)
        {
            if (current == null)
            {
                throw new ArgumentNullException(nameof(current));
            }
            if (subscriber == null)
            {
                throw new ArgumentNullException(nameof(subscriber));
            }
            if (current.Subscribers.Any(s => s.ServiceOrActorReference.Equals(subscriber.ServiceOrActorReference)))
            {
                return(current);
            }

            var clone = new BrokerServiceState(current.MessageTypeName, ((ImmutableList <SubscriptionDetails>)current.Subscribers).Add(subscriber));

            return(clone);
        }
        internal static async Task AddOrUpdateSubscription(
            this IReliableDictionary <string, BrokerServiceState> brokerState, ITransaction tx, string queues,
            SubscriptionDetails subscriptionDetails)
        {
            BrokerServiceState AddValueFactory(string key)
            {
                var newState = new BrokerServiceState(subscriptionDetails.MessageTypeName);

                newState = BrokerServiceState.AddSubscriber(newState, subscriptionDetails);
                return(newState);
            }

            BrokerServiceState UpdateValueFactory(string key, BrokerServiceState current)
            {
                var newState = BrokerServiceState.AddSubscriber(current, subscriptionDetails);

                return(newState);
            }

            await brokerState.AddOrUpdateAsync(tx, queues, AddValueFactory, UpdateValueFactory);
        }
Exemplo n.º 5
0
 public SubscriptionUnordered(IReliableStateManager stateManager, SubscriptionDetails subscriptionDetails)
 {
     _stateManager       = stateManager;
     SubscriptionDetails = subscriptionDetails;
 }
Exemplo n.º 6
0
        private ISubscription Create(SubscriptionDetails subscriptionDetails)
        {
            var subscriptionType = subscriptionDetails.IsOrdered ? typeof(SubscriptionOrdered) : typeof(SubscriptionUnordered);

            return((ISubscription)Activator.CreateInstance(subscriptionType, _stateManager, subscriptionDetails));
        }
        /// <summary>
        /// Returns a cloned instance with the same subscribers as the original, minus the new <paramref name="subscriber"/>
        /// </summary>
        /// <param name="current"></param>
        /// <param name="subscriber"></param>
        /// <returns></returns>
        public static BrokerServiceState RemoveSubscriber(BrokerServiceState current, SubscriptionDetails subscriber)
        {
            if (subscriber == null)
            {
                throw new ArgumentNullException(nameof(subscriber));
            }

            return(RemoveSubscriber(current, subscriber.ServiceOrActorReference));
        }