示例#1
0
 private OperatorRegistry GetOperatorRegistry()
 {
     if (operatorRegistry == null)
     {
         operatorRegistry = DataManager?.List?.ServiceProvider?.GetService <OperatorRegistry>() ?? new OperatorRegistry();
     }
     return(operatorRegistry);
 }
示例#2
0
        /// <summary>
        /// Check message on alert conditions.
        /// </summary>
        /// <param name="message">Message.</param>
        public void Process(Message message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            var schema = _schemas.TryGetValue(message.GetType());

            if (schema == null)
            {
                return;
            }

            var type = schema.AlertType;

            if (type == null)
            {
                return;
            }

            var canAlert = schema.Rules.All(rule =>
            {
                var value = rule.Property.GetValue(message, null);

                switch (rule.Operator)
                {
                case ComparisonOperator.Equal:
                    return(rule.Value.Equals(value));

                case ComparisonOperator.NotEqual:
                    return(!rule.Value.Equals(value));

                case ComparisonOperator.Greater:
                    return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) == 1);

                case ComparisonOperator.GreaterOrEqual:
                    return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) >= 0);

                case ComparisonOperator.Less:
                    return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) == -1);

                case ComparisonOperator.LessOrEqual:
                    return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) <= 0);

                case ComparisonOperator.Any:
                    return(true);

                default:
                    throw new ArgumentOutOfRangeException();
                }
            });

            if (canAlert)
            {
                PushAlert((AlertTypes)type, schema.Caption, schema.Message, message.LocalTime);
            }
        }
示例#3
0
        void IAlertService.Validate(object entity, DateTime time)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            var schema = _schemas.TryGetValue(entity.GetType());

            if (schema == null)
            {
                return;
            }

            var type = schema.AlertType;

            if (type == null)
            {
                return;
            }

            var canAlert = schema.Rules.All(rule =>
            {
                var value = rule.Property.GetValue(entity, null);

                switch (rule.Operator)
                {
                case ComparisonOperator.Equal:
                    return(rule.Value.Equals(value));

                case ComparisonOperator.NotEqual:
                    return(!rule.Value.Equals(value));

                case ComparisonOperator.Greater:
                    return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) == 1);

                case ComparisonOperator.GreaterOrEqual:
                    return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) >= 0);

                case ComparisonOperator.Less:
                    return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) == -1);

                case ComparisonOperator.LessOrEqual:
                    return(OperatorRegistry.GetOperator(rule.Property.PropertyType).Compare(rule.Value, value) <= 0);

                case ComparisonOperator.Any:
                    return(true);

                default:
                    throw new ArgumentOutOfRangeException();
                }
            });

            if (canAlert)
            {
                PushAlert((AlertTypes)type, schema.Caption, schema.Message, time);
            }
        }
示例#4
0
 public TokenType Evaluate(Dictionary <Variable, TokenType> var_values)
 {
     return(ProcessCalculate((node, p1, p2) => {
         if (p1 is Variable && node.op == '=')
         {
             return OperatorRegistry.ExecuteBinaryOperation(node, p1, p2.Evaluate(var_values));
         }
         return OperatorRegistry.ExecuteBinaryOperation(node, p1.Evaluate(var_values), p2.Evaluate(var_values));
     },
                             (node) => {
         return node;
     }).Evaluate(var_values));
 }
示例#5
0
 public override TokenType Evaluate(Dictionary <Variable, TokenType> var_values)
 {
     return(OperatorRegistry.ExecuteUnaryOperation(operation, token.Evaluate(var_values)));
 }