public WebShell()
        {
            _interpreter = new DynamicExpresso.Interpreter();
            _commandsHistory = new CommandsHistory();

            _interpreter.SetVariable("Commands", _commandsHistory);
        }
        public WebShell()
        {
            _interpreter     = new DynamicExpresso.Interpreter();
            _commandsHistory = new CommandsHistory();

            _interpreter.SetVariable("Commands", _commandsHistory);
        }
        /// <summary>
        /// https://www.cnblogs.com/songxingzhu/p/6737618.html
        /// https://github.com/davideicardi/DynamicExpresso
        /// 高性能版本,支持公式计算。wangyunpeng。2018-02-07
        /// </summary>
        /// <param name="statement">支持公式计算</param>
        /// <returns></returns>
        public static string Calc(string statement)
        {
            object @object = new DynamicExpresso.Interpreter().Eval(statement);

            if (@object == null)
            {
                return(string.Empty);
            }
            else
            {
                return(@object.ToString());
            }
        }
 private TempComputeResult ComputeBinaryNative(Type leftType, Type rightType, object leftValue, object rightValue, string operatorText, ExpressionSyntax node) // 数学运算, 依赖动态编译lambda表达式,只能JIT
 {
     try
     {
         var func   = new DynamicExpresso.Interpreter().Parse(string.Format("x{0}y", operatorText), new DynamicExpresso.Parameter("x", leftType.UnWrapper()), new DynamicExpresso.Parameter("y", rightType.UnWrapper()));
         var result = func.Invoke(leftValue, rightValue);
         return(CreateComputeResult(result, result == null ? null : result.GetType()));
     }
     catch (Exception e)
     {
         throw new Exception(string.Format("Fail to calculate '{0}'", node.ToString()), e);
     }
 }
Exemple #5
0
        public bool DynamicExpresso(Parameter parameter)
        {
            DynamicExpresso.Interpreter interpreter = new DynamicExpresso.Interpreter();

            List <int> results = new List <int>(parameter.Statements.Length);

            foreach (string statement in parameter.Statements)
            {
                int result = interpreter.Eval <int>(statement);

                results.Add(result);
            }

            return(Assert(results, parameter.Sum));
        }
Exemple #6
0
        public bool DynamicExpresso(Parameter parameter)
        {
            DynamicExpresso.Interpreter interpreter = new DynamicExpresso.Interpreter();

            List <int> results = new List <int>(parameter.Numbers.Length);

            foreach (int number in parameter.Numbers)
            {
                int result = interpreter.Eval <int>(EXPRESSION, new DynamicExpresso.Parameter("n", number));

                results.Add(result);
            }

            return(Assert(results, parameter.Sum));
        }
Exemple #7
0
        private static void ConfigureServices(ApeCliOptions opts)
        {
            IServiceCollection serviceCollection = new ServiceCollection();

            serviceCollection.AddLogging();
            serviceCollection.AddSingleton(serviceCollection);

            if (opts.PcapProviderUri != null)
            {
                serviceCollection.AddSingleton <ICaptureDeviceFactory, CaptureDeviceFactory>();
                serviceCollection.AddSingleton <IPcapLoader, PcapLoader.PcapLoader>();
                serviceCollection.AddSingleton <IL7ConversationProvider, PcapL7ConversationProvider>();
                serviceCollection.AddSingleton(new PcapL7ConversationProviderOptions {
                    PcapUri = opts.PcapProviderUri
                });
            }
            // Setup for Cassandra repository
            else
            {
                serviceCollection.AddSingleton <IL7ConversationProvider, RepositoryL7ConversationProvider>();

                var dynamicExpressoInterpreter = new DynamicExpresso.Interpreter();
                Expression <Func <IL7ConversationEntity, Boolean> > l7ConversationFilterPredicate = null;

                if (opts.L7ConversationFilter != null)
                {
                    l7ConversationFilterPredicate = dynamicExpressoInterpreter
                                                    .ParseAsExpression <Func <IL7ConversationEntity, Boolean> >(opts.L7ConversationFilter, "l7c");
                }
                serviceCollection.AddSingleton(new RepositoryL7ConversationProviderOptions
                {
                    L7ConversationFilterPredicate = l7ConversationFilterPredicate
                });
            }

            if (opts.PrintSnooperExports == false)
            {
                serviceCollection.AddSingleton <ISnooperExportFacade, SnooperExportFacade>();
            }

            serviceCollection.AddSingleton <ICaptureFacade, CaptureFacade>();
            serviceCollection.AddSingleton <IL7ConversationFacade, L7ConversationFacade>();
            serviceCollection.AddSingleton <IL7ConversationFacade, L7ConversationFacade>();
            CassandraServiceInstaller.Install(serviceCollection, opts.CassandraKeyspace, opts.CassandraContactPoint);

            _services = serviceCollection.BuildServiceProvider();
        }
Exemple #8
0
        public bool DynamicExpressoCompiled(Parameter parameter)
        {
            DynamicExpresso.Interpreter interpreter = new DynamicExpresso.Interpreter();

            Func <int, int> @delegate = interpreter.ParseAsDelegate <Func <int, int> >(EXPRESSION, "n");

            List <int> results = new List <int>(parameter.Numbers.Length);

            foreach (int number in parameter.Numbers)
            {
                int result = @delegate.Invoke(number);

                results.Add(result);
            }

            return(Assert(results, parameter.Sum));
        }
Exemple #9
0
        public static Func <object, object, TimeSpan, bool> ComposeTestInputOutput(string errorRuleLang, string errorRule, Action <DateTime, string> logError)
        {
            if (string.IsNullOrEmpty(errorRuleLang) || string.IsNullOrEmpty(errorRule))
            {
                return((input, output, TimeSpan) => false);
            }

            return((input, output, timeSpan) =>
            {
                var isAssert = false;
                try
                {
                    if (errorRuleLang == "DynamicExpresso")
                    {
                        var interpreter = new DynamicExpresso.Interpreter();
                        var result = interpreter.Eval(errorRule, new[] {
                            new DynamicExpresso.Parameter("input", input),
                            new DynamicExpresso.Parameter("output", output),
                            new DynamicExpresso.Parameter("timeSpan", timeSpan)
                        });
                        if (result is bool)
                        {
                            isAssert = (bool)result;
                        }
                        else
                        {
                            isAssert = true;
                            logError(DateTime.Now, $"Rule lang '{errorRuleLang}', rule '{errorRule}' has returned not boolean result");
                        }
                    }
                    if (!isAssert)
                    {
                        logError(DateTime.Now, $"[{errorRuleLang}] {errorRule}");
                    }
                }
                catch (Exception ex)
                {
                    isAssert = true;
                    logError(DateTime.Now, Markdown(ex));
                }
                return isAssert;
            });
        }
        string IActivityChooser.GetNextActivityKey(Data.Workflow wf, Data.UnliqudatedObjectsWorkflowQuestion question, string settings)
        {
            var s = JsonConvert.DeserializeObject <MySettings>(settings);
            //TODO: pass in questions object
            var parameters = new[] {
                new DynamicExpresso.Parameter(CommonParameterNames.Workflow, wf),
                new DynamicExpresso.Parameter(CommonParameterNames.Ulo, wf.UnliquidatedObligation),
                new DynamicExpresso.Parameter(CommonParameterNames.wfQuestion, question),
            };
            var i = new DynamicExpresso.Interpreter();

            foreach (var e in s.Expressions)
            {
                bool res = i.Eval <bool>(e.Code, parameters);
                if (res)
                {
                    return(e.WorkflowActivityKey);
                }
            }
            return(null);
        }
        public TempComputeResult VisitUnaryExpression(ExpressionSyntax operand, string operatorText, bool isPrefix, string nodeText)
        {
            var operandResult = Visit(operand);

            if (operandResult.Type == null)
            {
                return(CreateComputeResult(null, null));
            }

            string methodName;

            if (dic_UnaryOperator_MethodName.TryGetValue(operatorText, out methodName))
            {
                var bindingFlags           = BindingFlags.Public | BindingFlags.Static;
                var overloadOperatorMethod = DebugService.GetMethod(operandResult.Type, methodName, bindingFlags, true, operandResult.Type);
                if (overloadOperatorMethod != null) // 有运算符重载
                {
                    var result = overloadOperatorMethod.Invoke(null, new object[1] {
                        operandResult.Value
                    });
                    return(CreateComputeResult(result, overloadOperatorMethod.ReturnType));
                }
            }

            try
            {
                var expressionText = isPrefix ? "{0}x" : "x{0}";
                var func           = new DynamicExpresso.Interpreter().Parse(string.Format(expressionText, operatorText), new DynamicExpresso.Parameter("x", operandResult.Type.UnWrapper()));
                var result         = func.Invoke(operandResult.Value);
                return(CreateComputeResult(result, result == null ? null : result.GetType()));
            }
            catch
            {
                throw new Exception(string.Format("Fail to calculate '{0}'", nodeText));
            }
        }
        private Predicate<double> GetCondition(string expression)
        {
            if (string.IsNullOrWhiteSpace(expression))
                return null;

            var interpreter = new DynamicExpresso.Interpreter();

            var func = interpreter.Parse<Predicate<double>>(expression, "value");

            return func;
        }
        private Func<double, double> GetTransform(string expression)
        {
            if (string.IsNullOrWhiteSpace(expression))
                return null;

            var interpreter = new DynamicExpresso.Interpreter();

            var func = interpreter.Parse<Func<double, double>>(expression, "value");

            return func;
        }
Exemple #14
0
        public async Task Execute(IJobExecutionContext context)
        {
            try
            {
                //ILoggerRepository repository = LogManager.CreateRepository("TestJob");
                //XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
                //ILog log = LogManager.GetLogger(repository.Name, "TestJob");
                var methodName = System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName;
                logger.Info("InfoInfoInfoInfoInfoInfoInfoInfoInfoInfoInfoInfoInfo");
                logger.Warn("WarnWarnWarnWarnWarnWarnWarnWarnWarnWarnWarnWarnWarnWarnWarn");
                logger.Error("ErrorErrorErrorErrorErrorErrorErrorErrorErrorErrorErrorErrorError");
                logger.Debug("DebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebug");
                //log.LogInformation("aaaaaaaaaaaaaaaaa");
                //log.LogWarning("bbbbbbbbbbbbbbbbbbbbb");
                //log.LogError("cccccccccccccccccccccccccc");
                //log.LogDebug("dddddddddddddddddd");
                var jobData     = context.JobDetail.JobDataMap; //获取Job中的参数
                var triggerData = context.Trigger.JobDataMap;   //获取Trigger中的参数
                                                                //  var data = context.MergedJobDataMap;//获取Job和Trigger中合并的参数
                var value1 = jobData.GetString("key1");
                var value2 = jobData.GetString("key2");         //
                var flag   = jobData.GetInt("flag");
                // var value3 = data.GetString("key2");

                await Task.Run(() =>
                {
//                    ==============================(Install - Package DynamicExpresso.Core)======================================

//var whereExpression = $"m.{queryField}==\"{queryValue}\"";

//                string whereExpression = "customer.Age > 18 && customer.Gender == 'F'";

//                var interpreter = new Interpreter();
//                Func<Customer, bool> dynamicWhere = interpreter.ParseAsDelegate<Func<Customer, bool>>(whereExpression, "customer");

//                Assert.AreEqual(1, customers.Where(dynamicWhere).Count());

//=====================================================================================================
//string whereExpression = "customer.Age > 18 && customer.Gender == 'F'";

//var interpreter = new Interpreter();
//Expression<Func<Customer, bool>> expression = interpreter.ParseAsExpression<Func<Customer, bool>>(whereExpression, "customer");

                    var code        = "i<100&&s.Contains(\"测试\")";
                    var interpreter = new DynamicExpresso.Interpreter();
                    var result      = interpreter.ParseAsDelegate <Func <int, string, bool> >(code, "i", "s");
                    //var result = interpreter.ParseAsExpression<Func<int, string, bool>>(code, "i", "s").Compile();
                    for (int i = 0; i < 102; i++)
                    {
                        var v = result(i, "我在测试" + i);//2213ms
                        logger.Warn(v);
                        //Console.WriteLine(v);
                    }
                    for (var i = 0; i < 10; i++)
                    {
                        logger.Info($"参数作业:{flag}");
                    }
                    //context.Scheduler.UnscheduleJob(context.Trigger.Key);// 移除触发器
                    //context.Scheduler.DeleteJob(context.JobDetail.Key);// 删除任务

                    //context.Scheduler.Shutdown();
                    //Thread.Sleep(5000);
                });
            }
            catch (Exception e)
            {
                await context.Scheduler.Shutdown();

                logger.Error(e.ToString());
            }
        }
Exemple #15
0
 public ScriptService()
 {
     _engine = new DynamicExpresso.Interpreter();
 }