Example #1
0
 /// <summary>
 /// 执行脚本文件
 /// </summary>
 /// <param name="file">文件名</param>
 /// <param name="fun">函数名</param>
 /// <param name="param1">参数1</param>
 /// <param name="param2">参数2</param>
 /// <param name="param3">参数3</param>
 /// <returns>返回执行结果</returns>
 public object RunFile(string file, object fun, object param1 = null, object param2 = null, object param3 = null)
 {
     if (string.IsNullOrEmpty(file))
     {
         Ex = "脚本文件名不能为空";
         return(null);
     }
     file = Cache.ToFullName(file, _Dir);
     if (!File.Exists(file))
     {
         Ex = "脚本不存在!请确认脚本:“" + file + "”是否存在。";
         return(null);
     }
     try
     {
         Lua Eng = new Lua();
         Eng.LoadCLRPackage();
         Eng["Cache"] = new Cache();
         var Engine = new EngineHelper
         {
             Dir = Path.GetDirectoryName(file) + "\\"
         };
         Eng["Engine"] = Engine;
         Eng.DoFile(file);
         var funObj = Eng.GetFunction("Main");
         if (param1 == null)
         {
             return(funObj.Call(fun)[0]);
         }
         else if (param2 == null)
         {
             return(funObj.Call(fun, param1)[0]);
         }
         else if (param3 == null)
         {
             return(funObj.Call(fun, param1, param2)[0]);
         }
         else
         {
             return(funObj.Call(fun, param1, param2, param3)[0]);
         }
     }
     catch (Exception ex)
     {
         Ex = ex.ToString();
     }
     return(null);
 }
Example #2
0
 /// <summary>
 /// 执行脚本文件
 /// </summary>
 /// <param name="file">文件名</param>
 /// <param name="fun">函数名</param>
 /// <param name="param1">参数1</param>
 /// <param name="param2">参数2</param>
 /// <param name="param3">参数3</param>
 /// <returns>返回执行结果</returns>
 public object RunFile(string file, object fun, object param1 = null, object param2 = null, object param3 = null)
 {
     if (string.IsNullOrEmpty(file))
     {
         Ex = "脚本文件名不能为空";
         return(null);
     }
     file = Cache.ToFullName(file, _Dir);
     if (!File.Exists(file))
     {
         Ex = "脚本不存在!请确认脚本:“" + file + "”是否存在。";
         return(null);
     }
     try
     {
         var scope = Eng.CreateScope();
         scope.SetVariable("Cache", new Cache());
         var Engine = new EngineHelper
         {
             Dir = Path.GetDirectoryName(file) + "\\"
         };
         scope.SetVariable("Engine", Engine);
         Eng.CreateScriptSourceFromFile(file, Encoding.UTF8).Execute(scope);
         dynamic dyn = scope;
         if (param1 == null)
         {
             return(dyn.Main(fun));
         }
         else if (param2 == null)
         {
             return(dyn.Main(fun, param1));
         }
         else if (param3 == null)
         {
             return(dyn.Main(fun, param1, param2));
         }
         else
         {
             return(dyn.Main(fun, param1, param2, param3));
         }
     }
     catch (Exception ex)
     {
         Ex = ex.ToString();
     }
     return(null);
 }
Example #3
0
        /// <summary>
        /// 获取函数
        /// </summary>
        /// <param name="file">文件名</param>
        /// <returns>返回函数</returns>
        public dynamic GetClass(string file)
        {
            if (string.IsNullOrEmpty(file))
            {
                Ex = "脚本文件名不能为空";
                return(null);
            }
            file = Cache.ToFullName(file, _Dir);
            if (!File.Exists(file))
            {
                Ex = "脚本不存在!请确认脚本:“" + file + "”是否存在。";
                return(null);
            }
            try
            {
                Lua Eng = new Lua();
                Eng.LoadCLRPackage();
                Eng["Cache"] = new Cache();
                var Engine = new EngineHelper
                {
                    Dir = Path.GetDirectoryName(file) + "\\"
                };
                Eng["Engine"] = Engine;
                var code = File.ReadAllText(file, Encoding.UTF8);
                Eng.DoFile(file);
                var funs = "";
                var ms   = new Regex(@"function ([a-zA-Z0-9]+)\(").Matches(code);

                for (var i = 0; i < ms.Count; i++)
                {
                    var funName = ms[i].Groups[1].Value;
                    funs += funContent.Replace("funName", funName);
                }
                var     codeCS = "using System;\npublic class ScriptLua : MM.Engine.NluaCommon\n{\n" + funs + "\n}";
                dynamic dyn    = CSScript.Evaluator.CompileCode(codeCS).CreateObject("*");
                if (dyn != null)
                {
                    dyn.Eng = Eng;
                    return(dyn);
                }
            }
            catch (Exception ex)
            {
                Ex = ex.ToString();
            }
            return(null);
        }
Example #4
0
 /// <summary>
 /// 获取函数
 /// </summary>
 /// <param name="file">文件名</param>
 /// <returns>返回函数</returns>
 public dynamic GetClass(string file)
 {
     if (string.IsNullOrEmpty(file))
     {
         Ex = "脚本文件名不能为空";
         return(null);
     }
     file = Cache.ToFullName(file, _Dir);
     if (!File.Exists(file))
     {
         Ex = "脚本不存在!请确认脚本:“" + file + "”是否存在。";
         return(null);
     }
     try
     {
         var code = File.ReadAllText(file, Encoding.UTF8);
         var dll  = "";
         if (code.Contains("using "))
         {
             var ms = new Regex("using [.A-Z0-9a-z]+;").Matches(code);
             for (var i = 0; i < ms.Count; i++)
             {
                 var o     = ms[i];
                 var value = o.Value;
                 dll += value + "\n";
                 code = code.Replace(value, "");
             }
         }
         var scope = CSScript.Evaluator.CompileCode(dll + "public class Script : MM.Engine.Common\n{\n" + code + "\n}").CreateObject("*");
         if (scope != null)
         {
             scope.SetValue("Cache", new Cache());
             var Engine = new EngineHelper
             {
                 Dir = _Dir
             };
             scope.SetValue("Engine", Engine);
             return(scope);
         }
     }
     catch (Exception ex)
     {
         Ex = ex.ToString();
     }
     return(null);
 }
Example #5
0
 /// <summary>
 /// 执行脚本代码
 /// </summary>
 /// <param name="code">代码</param>
 /// <param name="fun">函数名</param>
 /// <param name="param1">参数1</param>
 /// <param name="param2">参数2</param>
 /// <param name="param3">参数3</param>
 /// <returns>返回执行结果</returns>
 public object RunCode(string code, object fun, object param1 = null, object param2 = null, object param3 = null)
 {
     if (string.IsNullOrEmpty(code))
     {
         Ex = "脚本不能为空";
         return(null);
     }
     try
     {
         var Eng = new VBScriptEngine
         {
             EnableAutoHostVariables = true
         };
         Eng.AddHostType("Console", typeof(Console));
         Eng.AddHostObject("Cache", new Cache());
         var Engine = new EngineHelper
         {
             Dir = _Dir
         };
         Eng.AddHostObject("Engine", Engine);
         Eng.Execute(code);
         var dyn = Eng.Script;
         if (param1 == null)
         {
             return(dyn.Main(fun));
         }
         else if (param2 == null)
         {
             return(dyn.Main(fun, param1));
         }
         else if (param3 == null)
         {
             return(dyn.Main(fun, param1, param2));
         }
         else
         {
             return(dyn.Main(fun, param1, param2, param3));
         }
     }
     catch (Exception ex)
     {
         Ex = ex.ToString();
     }
     return(null);
 }
Example #6
0
 /// <summary>
 /// 执行脚本代码
 /// </summary>
 /// <param name="code">代码</param>
 /// <param name="fun">函数名</param>
 /// <param name="param1">参数1</param>
 /// <param name="param2">参数2</param>
 /// <param name="param3">参数3</param>
 /// <returns>返回执行结果</returns>
 public object RunCode(string code, object fun, object param1 = null, object param2 = null, object param3 = null)
 {
     if (string.IsNullOrEmpty(code))
     {
         Ex = "脚本不能为空";
         return(null);
     }
     try
     {
         Lua Eng = new Lua();
         Eng.LoadCLRPackage();
         Eng["Cache"] = new Cache();
         var Engine = new EngineHelper
         {
             Dir = _Dir
         };
         Eng["Engine"] = Engine;
         Eng.DoString(code, "Script");
         var funObj = Eng.GetFunction("Main");
         if (param1 == null)
         {
             return(funObj.Call(fun)[0]);
         }
         else if (param2 == null)
         {
             return(funObj.Call(fun, param1)[0]);
         }
         else if (param3 == null)
         {
             return(funObj.Call(fun, param1, param2)[0]);
         }
         else
         {
             return(funObj.Call(fun, param1, param2, param3)[0]);
         }
     }
     catch (Exception ex)
     {
         Ex = ex.ToString();
     }
     return(null);
 }
Example #7
0
 /// <summary>
 /// 执行脚本代码
 /// </summary>
 /// <param name="code">代码</param>
 /// <param name="fun">函数名</param>
 /// <param name="param1">参数1</param>
 /// <param name="param2">参数2</param>
 /// <param name="param3">参数3</param>
 /// <returns>返回执行结果</returns>
 public object RunCode(string code, object fun, object param1 = null, object param2 = null, object param3 = null)
 {
     if (string.IsNullOrEmpty(code))
     {
         Ex = "脚本不能为空";
         return(null);
     }
     try
     {
         var scope = Eng.CreateScope();
         scope.SetVariable("Cache", new Cache());
         var Engine = new EngineHelper
         {
             Dir = _Dir
         };
         scope.SetVariable("Engine", Engine);
         Eng.CreateScriptSourceFromString(code).Execute(scope);
         dynamic dyn = scope;
         if (param1 == null)
         {
             return(dyn.Main(fun));
         }
         else if (param2 == null)
         {
             return(dyn.Main(fun, param1));
         }
         else if (param3 == null)
         {
             return(dyn.Main(fun, param1, param2));
         }
         else
         {
             return(dyn.Main(fun, param1, param2, param3));
         }
     }
     catch (Exception ex)
     {
         Ex = ex.ToString();
     }
     return(null);
 }