Esempio n. 1
0
        /// <summary>
        /// 将lua代码片段放入函数中执行,将key/value构建为lua的单个参数传入
        /// </summary>
        /// <param name="lua"></param>
        /// <param name="scriptCode"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public static object[] ExecuteLuaScript(Lua lua, string scriptCode, IEnumerable <KeyValuePair <string, object> > parameters)
        {
            if (parameters == null)
            {
                parameters = new Dictionary <string, object>();
            }
            string json = LuaScriptRunner.ToLuaScript(parameters);

            json = string.IsNullOrWhiteSpace(json) ? "{}" : json;
            StringBuilder  paramsBuilder = new StringBuilder();
            IList <object> paramsValues  = new List <object>();

            foreach (var pair in parameters)
            {
                if (paramsBuilder.Length > 0)
                {
                    paramsBuilder.Append(",");
                }
                paramsBuilder.Append(pair.Key);
                paramsValues.Add(pair.Value);
            }
            string script = @"
                function func(" + paramsBuilder + @")
                    " + scriptCode + @"
                end";

            return(RunLuaScript(() =>
            {
                lua.DoString(script);
                var scriptFunc = lua["func"] as LuaFunction;
                var res = scriptFunc.Call(paramsValues.ToArray());
                return res;
            }));
        }
Esempio n. 2
0
        /// <summary>
        /// 将lua代码片段放入函数中执行
        /// </summary>
        /// <param name="lua">Lua对象</param>
        /// <param name="scriptCode">代码片段</param>
        /// <param name="parameters">参数</param>
        /// <returns>返回执行结果</returns>
        public static object[] ExecuteLuaScript(Lua lua, string scriptCode, IEnumerable <KeyValuePair <string, object> > parameters, object bodyJson)
        {
            if (parameters == null)
            {
                parameters = new Dictionary <string, object>();
            }
            string paramsData        = LuaScriptRunner.ToLuaScript(parameters);
            string bodyJsonLuaScript = LuaScriptRunner.ToLuaScript(bodyJson);

            bodyJsonLuaScript = string.IsNullOrWhiteSpace(bodyJsonLuaScript) ? "{}" : bodyJsonLuaScript;
            lua.DoString("params=" + paramsData);
            lua.DoString("bodyJson=" + bodyJsonLuaScript);
            LuaTable paramsTable   = lua.GetTable("params");
            LuaTable bodyJsonTable = lua.GetTable("bodyJson");
            string   script        = @"
                function func(params,bodyJson)
                    " + scriptCode + @"
                end";

            return(RunLuaScript(() =>
            {
                lua.DoString(script);
                var scriptFunc = lua["func"] as LuaFunction;
                var res = scriptFunc.Call(paramsTable, bodyJsonTable);
                return res;
            }));
        }
Esempio n. 3
0
        /// <summary>
        /// Table数组转为List
        /// </summary>
        /// <param name="table">Table数组</param>
        /// <returns></returns>
        private static IList <object> LuaTableToList(LuaTable table)
        {
            IList <object> result = new List <object>();

            foreach (var key in table.Keys)
            {
                var value = table[key];
                var kind  = LuaScriptRunner.CheckLuaTable(value);
                if (kind == 0)
                {
                    result.Add(value);
                }
                else if (kind == 1)
                {
                    IEnumerable <KeyValuePair <string, object> > res = LuaScriptRunner.LuaTableToDictionary((LuaTable)value);
                    result.Add(res);
                }
                else
                {
                    IList <object> res = LuaScriptRunner.LuaTableToList((LuaTable)value);
                    result.Add(res);
                }
            }
            return(result);
        }
Esempio n. 4
0
        /// <summary>
        /// lua数据转C#数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static T LuaTableToCSharpData <T>(object obj)
        {
            object result = null;

            if (obj != null)
            {
                int kind = LuaScriptRunner.CheckLuaTable(obj);
                if (kind == 3)
                {
                    return(default(T));
                }
                if (kind == 0)
                {
                    result = obj;
                }
                else if (kind == 1)
                {
                    result = LuaScriptRunner.LuaTableToDictionary((LuaTable)obj);
                }
                else
                {
                    result = LuaScriptRunner.LuaTableToList((LuaTable)obj);
                }
            }
            return((T)result);
        }