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); }
public SubscriptionUnordered(IReliableStateManager stateManager, SubscriptionDetails subscriptionDetails) { _stateManager = stateManager; SubscriptionDetails = subscriptionDetails; }
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)); }