Пример #1
0
        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());
        }
Пример #2
0
        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());
        }
Пример #3
0
        /// <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));
        }