Пример #1
0
        public LuaFuncInfo GetFunc(ILuaSqlInitPolicyExecutorInfo info)
        {
            var func = (Func <string, string, string, string, string, ICollection <string>, object>)(
                (type, sqlkey, prefix, suffix, separate, ignores) =>
            {
                //根据sqlkey(每次sql执行的时候都会生成一个唯一键guid)从存储中获取相应的函数进行处理。
                //  为什么这么做?目的让lua脚本只初始化加载这些函数一次(LuaSqlInitDefaultFuncsExecutor中会调用ILuaFunc.GetFunc进行初始化加载),
                //  如果每次都进行加载的话,性能会大大损失;
                //  LuaSqlParamFuncsExecutor中会调用ILuaFunc.SetFunc进行设置lua Func的C#回调,然后再存储到LuaSqlParamFuncsContainer中;
                //  例如:当lua脚本中调用这个函数的时候会触发这个事件,然后从LuaSqlParamFuncsContainer根据sqlkey获取获取回调集合,
                //  然后根据回调类型获取相应的回调进行处理
                var funcs = info.LuaSqlParamFuncsContainer[sqlkey];     //根据sqlkey获取回调集合

                //获取SqlParamsFuncLabel的回调
                var invoke = (Func <string, string, string, string, ICollection <string>, object>)funcs[LuaSqlConfigConst.SqlParamsFuncLabel];
                //回调处理
                return(invoke(type, prefix, suffix, separate, ignores));
            });

            return(new LuaFuncInfo
            {
                Func = func,
                Type = LuaSqlConfigConst.SqlParamsFuncLabel,
            });
        }
Пример #2
0
        protected void SetFunc2Config(ILuaSqlInitPolicyExecutorInfo info, string parameterName, object func)
        {
            var ps = info.Config.GetGlobalLuaParam(LuaSqlConfigConst.SqlConfigLabel);

            foreach (var p in ps)
            {
                var cfg = (Table)p;
                cfg[parameterName] = func;
            }
        }
Пример #3
0
        public void Execute(ILuaSqlInitPolicyExecutorInfo info)
        {
            var funcs = _luafuncs.GetFuncs();

            foreach (var func in funcs)
            {
                var finfo = func.GetFunc(info);
                SetFunc2Config(info, finfo.Type, finfo.Func);
            }
        }
        public void Execute(ILuaSqlInitPolicyExecutorInfo info)
        {
            info.Config.Init(); //配置初始化

            //全局策略对象初始化
            var luacfg = (Table)info.Config.GetGlobalLuaParam(LuaSqlConfigConst.SqlConfigLabel)[0];
            var gcfg   = (Table)luacfg[LuaSqlConfigConst.SqlConfigGlobalLabel];

            ForeachPolicies(info,
                            tname => (Table)gcfg[LuaSqlConfigConst.TablePoliciesLabel],
                            tname => (Table)gcfg[LuaSqlConfigConst.SqlPoliciesLabel]);

            //表配置的
            ForeachPolicies(info,
                            tname => (Table)info.Config.GetLuaParam(tname, LuaSqlConfigConst.TablePoliciesLabel)[0],
                            tname => (Table)info.Config.GetLuaParam(tname, LuaSqlConfigConst.SqlPoliciesLabel)[0]);
        }
        protected void ForeachPolicies(ILuaSqlInitPolicyExecutorInfo info, Func <string, Table> getTps, Func <string, Table> getSps)
        {
            ILuaConfigTableInfo tinfo;
            ILuaConfigSqlInfo   sinfo;

            //从lua配置中提取策略对象
            foreach (var tpair in info.Config.TableSqlInfos)
            {
                tinfo = tpair.Value;
                //lua中tabel的策略配置
                var tps = getTps(tpair.Key);
                LuaPoliciesParse(tinfo.Policies, tps);

                //lua中sql的策略配置
                var sps = getSps(tpair.Key);
                foreach (var spair in sps.Pairs)
                {
                    sinfo = new LuaConfigSqlInfo();
                    tinfo.Sqls[spair.Key.String] = sinfo;
                    LuaPoliciesParse(sinfo.Policies, spair.Value.Table);
                }
            }
        }