public override bool CheckCriteria(IRegistry registry, IRegistryResolver resolver)
        {
            HookInvokeCriteria baseCriteria = ParameterRegistry.Get <HookInvokeCriteria>("base_criteria");
            long targetRepetitions          = ParameterRegistry.Get <long>("target_repetitions");
            long currentRepititions         = ParameterRegistry.Get <long>("current_repetitions");
            bool withoutInterruption        = ParameterRegistry.Get <bool>("without_interruption");

            if (baseCriteria.CheckCriteria(registry, resolver))
            {
                currentRepititions++;
            }
            else if (withoutInterruption)
            {
                currentRepititions = 0;
            }

            bool fire = currentRepititions >= targetRepetitions;

            if (fire)
            {
                currentRepititions = 0;
            }

            ParameterRegistry["current_repetitions"] = currentRepititions;

            return(fire);
        }
        /// <summary>
        /// Create a not criteria that inverts a certain criteria.
        /// </summary>
        /// <param name="criteria">The criteria to negate.</param>
        public NegateCriteria(HookInvokeCriteria criteria)
        {
            if (criteria == null)
            {
                throw new ArgumentNullException(nameof(criteria));
            }

            ParameterRegistry["criteria"] = criteria;
        }
Beispiel #3
0
        /// <summary>
        /// Invoke this hook only when a certain hook invoke criteria is satisfied.
        /// </summary>
        /// <param name="criteria"></param>
        /// <returns></returns>
        public BaseHook On(HookInvokeCriteria criteria)
        {
            if (criteria == null)
            {
                throw new ArgumentNullException(nameof(criteria));
            }

            InvokeCriteria = criteria;

            return(this);
        }
        /// <summary>
        /// Create a repeat criteria for a certain amount of repeated fires of a base criteria.
        /// </summary>
        /// <param name="repetitions">The number of repetitions that should be </param>
        /// <param name="criteria">The base criteria.</param>
        /// <param name="withoutInterruption">Indicate if the counter should be reset if the base criteria is not met.</param>
        public RepeatCriteria(HookInvokeCriteria criteria, long repetitions, bool withoutInterruption = false)
        {
            if (criteria == null)
            {
                throw new ArgumentNullException(nameof(criteria));
            }
            if (repetitions <= 0)
            {
                throw new ArgumentOutOfRangeException($"{nameof(repetitions)} must be > 0.");
            }

            ParameterRegistry["base_criteria"]        = criteria;
            ParameterRegistry["target_repetitions"]   = repetitions;
            ParameterRegistry["current_repetitions"]  = 0L;
            ParameterRegistry["without_interruption"] = withoutInterruption;
        }
 /// <summary>
 /// Create a combined multi or criteria with another criteria that fires when all of them fire (boolean AND).
 /// </summary>
 /// <param name="criteria">The other criteria.</param>
 /// <returns>A multi or criteria combining this and another criteria with boolean OR.</returns>
 public virtual MultiAndCriteria And(HookInvokeCriteria criteria)
 {
     return(new MultiAndCriteria(this, criteria));
 }
 /// <summary>
 /// Create a combined multi or criteria with another criteria that fires when either of them fires (boolean OR).
 /// </summary>
 /// <param name="criteria">The other criteria.</param>
 /// <returns>A multi or criteria combining this and another criteria with boolean OR.</returns>
 public virtual MultiOrCriteria Or(HookInvokeCriteria criteria)
 {
     return(new MultiOrCriteria(this, criteria));
 }
        public override MultiAndCriteria And(HookInvokeCriteria criteria)
        {
            ParameterRegistry.Get <IList <HookInvokeCriteria> >("criterias").Add(criteria);

            return(this);
        }
 /// <summary>
 /// Check if this criteria functionally equals another criteria.
 /// Note: The base implementation checks for same type and parameter registry.
 /// </summary>
 /// <param name="other">The other criteria.</param>
 /// <returns>A boolean indicating if this criteria functionally equals another criteria.</returns>
 internal virtual bool FunctionallyEquals(HookInvokeCriteria other)
 {
     return(GetType() == other.GetType() && ParameterRegistry.RegistryContentEquals(other.ParameterRegistry));
 }