public Task Subscribe(ExpressionNode expression, IRegistryListener <K, T> listener, String @ref = "") { var key = Tuple.Create(listener, @ref); SubscriptionFilterCache.Remove(key); State.Subscriptions[key] = expression; return(base.WriteStateAsync()); }
public Task Unsubscribe(IRegistryListener <K, T> listener, String @ref = "") { var key = Tuple.Create(listener, @ref); State.Subscriptions.Remove(key); SubscriptionFilterCache.Remove(key); return(base.WriteStateAsync()); }
/// <summary> /// Listen for new registrations to the registry. If a subscription already exists, it will just be updated with the new expression. This is a wrapper which can simplify work with <see cref="Scynet.GrainInterfaces.IRegistry.Subscribe"/> /// </summary> /// <typeparam name="K">Registry key type</typeparam> /// <typeparam name="T">Registry value type</typeparam> /// <param name="query">A lambda which decides what items are interesting for the listener</param> /// <param name="listener">The listener which would receive the notifications</param> /// <param name="ref">A reference with which the subscription is tracked</param> public static Task Subscribe <K, T>(this IRegistry <K, T> registry, Expression <Func <K, T, bool> > query, IRegistryListener <K, T> listener, String @ref = "") { var expressionNode = query.ToExpressionNode(); return(registry.Subscribe(expressionNode, listener, @ref)); }