public void GetExists()
        {
            using (var lua = new NLua.Lua())
            {
                lua.LoadCoroutineManager();
                lua.DoString("function test() coroutine.yield(1) coroutine.yield(2) coroutine.yield(3) end "
                             + "function test2() coroutine.yield(4) coroutine.yield(5) coroutine.yield(6) end");

                lua.CreateCoroutine("test");
                Assert.IsTrue(lua.ExistsCoroutine("test"));
                Assert.IsFalse(lua.ExistsCoroutine("test2"));

                lua.CreateCoroutine("test2");
                Assert.IsTrue(lua.ExistsCoroutine("test"));
                Assert.IsTrue(lua.ExistsCoroutine("test2"));
            }
        }
        public void GetStatus()
        {
            using (var lua = new NLua.Lua())
            {
                lua.LoadCoroutineManager();
                lua.DoString("function test() coroutine.yield() coroutine.yield() coroutine.yield() end");

                lua.CreateCoroutine("test");
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Suspended);

                bool isValid;
                lua.ResumeCoroutine("test", out isValid);
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Suspended);
                lua.ResumeCoroutine("test", out isValid);
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Suspended);
                lua.ResumeCoroutine("test", out isValid);
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Suspended);
                lua.ResumeCoroutine("test", out isValid);
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead);
            }
        }
        public void ResumeCoroutine()
        {
            using (var lua = new NLua.Lua())
            {
                lua.LoadCoroutineManager();
                lua.DoString("function test() local x = 1; coroutine.yield(x); return 2 end");

                lua.CreateCoroutine("test");
                bool isValid;
                object[] results = lua.ResumeCoroutine("test", out isValid);
                Assert.IsTrue(isValid);
                Assert.IsTrue((int)(double)results[0] == 1);

                results = lua.ResumeCoroutine("test", out isValid);
                Assert.IsTrue(isValid);
                Assert.IsTrue((int)(double)results[0] == 2);

                results = lua.ResumeCoroutine("test", out isValid);
                Assert.IsFalse(isValid);
                Assert.IsTrue((string)results[0] == "cannot resume dead coroutine");
            }
        }
        public void CleanDeadCoroutines()
        {
            using (var lua = new NLua.Lua())
            {
                lua.LoadCoroutineManager();
                lua.DoString("function test() return 1 end "
                             + "function test2() coroutine.yield(1) return 2 end");

                lua.CreateCoroutine("test");
                lua.CreateCoroutine("test2");

                lua.UpdateCoroutines();
                lua.CleanDeadCoroutines();

                Assert.IsTrue(!lua.ExistsCoroutine("test"));
                Assert.IsTrue(lua.ExistsCoroutine("test2"));

                lua.UpdateCoroutines();
                lua.CleanDeadCoroutines();

                Assert.IsTrue(!lua.ExistsCoroutine("test"));
                Assert.IsTrue(!lua.ExistsCoroutine("test2"));
            }
        }
Exemple #5
0
        /// <summary>
        /// Registers this package to the given Lua state.
        /// </summary>
        /// <param name="state"></param>
        public void RegisterPackage(NLua.Lua state)
        {
            this.m_Lua = state;

            NLua.LuaLib.LuaNewTable(state.GetState());
            this.m_FunctionDelegates.ForEach(f => state.RegisterTableFunction(f.Key, f.Value));
            NLua.LuaLib.LuaSetGlobal(state.GetState(), "objhelper");
        }
        public (Action tritonAction, Action nluaAction) Benchmark_WriteObject(Triton.Lua triton, NLua.Lua nlua)
        {
            void Triton() => triton["test"] = new object();
            void NLua() => nlua["test"]     = new object();

            return(Triton, NLua);
        }
        public (Action tritonAction, Action nluaAction) Benchmark_WriteNumber(Triton.Lua triton, NLua.Lua nlua)
        {
            void Triton() => triton["test"] = 0.0;
            void NLua() => nlua["test"]     = 0.0;

            return(Triton, NLua);
        }
        public static void Test()
        {
            NLua.Lua state = new NLua.Lua();

            NLua.Lua state2 = new NLua.Lua();

            someData sd = new someData();

            sd.ID = 25;
            sd.sList.AddRange(new String[] { "this", " is", " a", " test", " list" });
            luaData ld = new luaData(sd);


            //var test = state.DoString("return 10 + 3*(5 + 2)")[0];
            //var type = test.GetType();

            //int value = 6;
            //state["test"] = value;
            //var result = state.DoString("return test*3+(test-3)")[0];

            //state.DoString(@"
            // function ScriptFunc (val1, val2)
            //     val1=val1+2
            //     val2=val2+3
            //     return val1, val2
            //  end");

            //var scriptFunc = state["ScriptFunc"] as NLua.LuaFunction;
            //var res = scriptFunc.Call(3, 5);

            testClass tc = new testClass("Some test string here");

            tc.list.Add(25);
            state["provision"] = "Random piece of information";



            testClass tc2 = new testClass("Indirect summon");

            tc2.data = ld;
            tc2.ProvideInfoToLua(state);
            //state["testObj"] = tc;

            state.LoadCLRPackage();
            // state.DoString(@" import ('The betrayer', 'TBAGW.Utilities')
            //   import ('System.Web')
            //    import ('System')");

            // var testStringFromObject = state.DoString("return TestObject.testList[0]")[0];
            // var elementType = testStringFromObject.GetType();
            // testClass testObjFromLUA = state.DoString("return TestObject")[0] as testClass;
            //bool bWhat = testObjFromLUA.GetType() == tc.GetType();

            state.DoString("print(\"Hello World\")");

            System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog();
            ofd.Filter           = "LUA files (*.lua)|*.lua";
            ofd.InitialDirectory = Game1.rootContent;
            if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                state = new NLua.Lua();
                state.LoadCLRPackage();
                state.DoFile(ofd.FileName);
                var time = System.IO.File.GetLastWriteTime(ofd.FileName);
            }
            //var statsTest = ((state["generateSomeStats"] as NLua.LuaFunction).Call()[0] as LuaStatEdit).ExtractStatChart();

            //BaseSprite bs = new BaseSprite();
            //bs.position = new Vector2(136, 2556);
            //if (Scenes.Editor.MapBuilder.loadedMap != null)
            //{
            //    bs.UpdatePosition();
            //}
            // List<List<Object>> luaStuff = new List<List<object>>();
            //var ttt = (state["save"] as NLua.LuaFunction).Call()[0].GetType();
            (state["save"] as NLua.LuaFunction).Call();
            var st = LuaSaveData.getGlobalData("My Collection", "luaStuff");

            (state["loadProcess"] as NLua.LuaFunction).Call();
            //var dabdab = ((state["getShapeData"] as NLua.LuaFunction).Call(bs));
            //  NLua.LuaFunction savedFunction = state["e1.Test"] as NLua.LuaFunction;
            uic = ((state["createUI"] as NLua.LuaFunction).Call()[0] as LuaUICollection).ConvertFromLua(state);
            goto skip;
            var luaRect = ShapeAnimation.animFromLuaInfo(((state["generateAnimation"] as NLua.LuaFunction).Call()[0] as LuaShapeAnimationInfo));
            var resldo  = (state["returnLuaSpecificData"] as NLua.LuaFunction).Call()[0];

            NLua.LuaTable lt = (state["returnLuaSpecificData"] as NLua.LuaFunction).Call()[0] as NLua.LuaTable;
            (state["GenerateSomeStuff"] as NLua.LuaFunction).Call();
            ListDataProvider.setLuaData(state);
            (state["publicStaticCall"] as NLua.LuaFunction).Call();
            (state["internalStaticCall"] as NLua.LuaFunction).Call();
            state["testObj"] = tc;
            var ele2                     = (state["attempt"] as NLua.LuaFunction).Call()[0];
            var returnedData             = (state["returnData"] as NLua.LuaFunction).Call()[0];
            var oldProvision             = state["provision"];
            var value2                   = state["testObj.i"];
            var function                 = state["MyFunc"] as NLua.LuaFunction;
            var funcRes                  = function.Call(state["testObj.i"])[0];
            var tableResult              = (state["returnTable"] as NLua.LuaFunction).Call()[0];
            var bCompare1                = tableResult.GetType() == typeof(NLua.LuaTable);
            var tableToList              = LUAUtilities.LUATableToListUtility(typeof(testClass), tableResult as NLua.LuaTable).Cast <testClass>().ToList();
            var tableToListGenericObject = LUAUtilities.LUATableToListUtility(typeof(testClass), tableResult as NLua.LuaTable);
            var listType                 = tableToList.GetType();
            var listTypeGO               = tableToListGenericObject.GetType();



            state = new NLua.Lua();
            state.LoadCLRPackage();
            state.DoFile(ofd.FileName);
            List <testClass> tcl = new List <testClass>();

            tcl.Add(new testClass(""));
            tcl.Last().i = 25;
            tcl.Add(new testClass(""));
            tcl.Last().i = 0;
            tcl.Add(new testClass(""));
            tcl.Last().i = 10;
            foreach (var item in tcl)
            {
                (state["setStuff"] as NLua.LuaFunction).Call(item);
            }

            tcl = LUAUtilities.LUATableToListUtility(typeof(testClass), (state["doStuff"] as NLua.LuaFunction).Call()[0] as NLua.LuaTable).Cast <testClass>().ToList();
            skip : { }
            bDoTest = false;
        }
        public (Action tritonAction, Action nluaAction) Benchmark_WriteInstance(Triton.Lua triton, NLua.Lua nlua)
        {
            triton["test"] = new TestClass();
            nlua["test"]   = new TestClass();
            var tritonFunction = triton.CreateFunction("test.x = 0");
            var nluaFunction   = nlua.LoadString("test.x = 0", "test");

            void Triton() => tritonFunction.Call();
            void NLua() => nluaFunction.Call();

            return(Triton, NLua);
        }
        public (Action tritonAction, Action nluaAction) Benchmark_Results(Triton.Lua triton, NLua.Lua nlua)
        {
            void Triton() => triton.DoString("return 1, 2, 3, 4, 5");
            void NLua() => nlua.DoString("return 1, 2, 3, 4, 5");

            return(Triton, NLua);
        }
Exemple #11
0
 /// <summary>
 /// Initializes a new instance of the LuaPluginLoader class
 /// </summary>
 /// <param name="lua"></param>
 /// <param name="luaExtension"></param>
 public LuaPluginLoader(NLua.Lua lua, LuaExtension luaExtension)
 {
     LuaEnvironment = lua;
     LuaExtension   = luaExtension;
 }
Exemple #12
0
 public CozyLuaCore()
 {
     mLua = new NLua.Lua();
 }
Exemple #13
0
            public PoeCharacterModel ToCharacterModel(NLua.Lua luaState)
            {
                var    entry    = ladderEntry;
                string buildXml = PobUtils.GetBuildXmlByJsons(passivesJson, itemsJson, luaState);

                PathOfBuilding tryGetPob()
                {
                    PathOfBuilding pob;

                    try
                    {
                        pob = PobUtils.XmlToPob(buildXml);
                    }
                    catch (System.Exception e)
                    {
                        // TODO
                        // Log entry and e
                        if (e is System.InvalidOperationException || e is System.Xml.XmlException)
                        {
                            pob = null;
                            System.Console.WriteLine(e.ToString());
                        }
                        else
                        {
                            throw;
                        }
                    }
                    return(pob);
                }

                PathOfBuilding pob = tryGetPob();

                if (pob != null)
                {
                    PoeItems    items    = JsonConvert.DeserializeObject <PoeItems>(itemsJson);
                    PoePassives passives = JsonConvert.DeserializeObject <PoePassives>(passivesJson);
                    string      code     = PobUtils.XmlToCode(buildXml);
                    var         poeChar  = new PoeCharacterModel()
                    {
                        CharacterId   = entry.Character.Id,
                        CharacterName = entry.Character.Name,
                        LeagueName    = leagueName,
                        Account       = entry.Account,
                        AccountName   = entry.Account != null ? entry.Account.Name : null,
                        Level         = entry.Character.Level,
                        Class         = entry.Character.Class,
                        Depth         = entry.Character.Depth ?? new PoeDepth {
                            Solo = 0, Default = 0
                        },
                        Dead           = entry.Dead,
                        Online         = entry.Online,
                        Rank           = entry.Rank,
                        Experience     = entry.Character.Experience,
                        LifeUnreserved = pob.GetStat("LifeUnreserved"),
                        EnergyShield   = pob.GetStat("EnergyShield"),
                        Pob            = pob,
                        PobCode        = code,
                        Items          = new List <PoeItem>()
                        {
                        }.Concat(items.items.Concat(passives.items.Select(i => i.ToPoeItem()))).ToList(),
                        UpdatedAt = System.DateTime.UtcNow,
                    };
                    return(poeChar);
                }
                else
                {
                    return(null);
                }
            }
Exemple #14
0
        /// <summary>
        /// 初始化lua对象
        /// </summary>
        /// <param name="lua"></param>
        /// <returns></returns>
        public static void Initial(NLua.Lua lua)
        {
            ///////////////
            //酷q类的接口//
            //////////////
            lua.RegisterFunction("cqCode_At", null, typeof(LuaApi).GetMethod("CqCode_At"));
            //获取酷Q "At某人" 代码
            lua.RegisterFunction("cqCqCode_Emoji", null, typeof(LuaApi).GetMethod("CqCode_Emoji"));
            //获取酷Q "emoji表情" 代码
            lua.RegisterFunction("cqCqCode_Face", null, typeof(LuaApi).GetMethod("CqCode_Face"));
            //获取酷Q "表情" 代码
            lua.RegisterFunction("cqCqCode_Shake", null, typeof(LuaApi).GetMethod("CqCode_Shake"));
            //获取酷Q "窗口抖动" 代码
            lua.RegisterFunction("cqCqCode_Trope", null, typeof(LuaApi).GetMethod("CqCode_Trope"));
            //获取字符串的转义形式
            lua.RegisterFunction("cqCqCode_UnTrope", null, typeof(LuaApi).GetMethod("CqCode_UnTrope"));
            //获取字符串的非转义形式
            lua.RegisterFunction("cqCqCode_ShareLink", null, typeof(LuaApi).GetMethod("CqCode_ShareLink"));
            //获取酷Q "链接分享" 代码
            lua.RegisterFunction("cqCqCode_ShareCard", null, typeof(LuaApi).GetMethod("CqCode_ShareCard"));
            //获取酷Q "名片分享" 代码
            lua.RegisterFunction("cqCqCode_ShareGPS", null, typeof(LuaApi).GetMethod("CqCode_ShareGPS"));
            //获取酷Q "位置分享" 代码
            lua.RegisterFunction("cqCqCode_Anonymous", null, typeof(LuaApi).GetMethod("CqCode_Anonymous"));
            //获取酷Q "匿名" 代码
            lua.RegisterFunction("cqCqCode_Image", null, typeof(LuaApi).GetMethod("CqCode_Image"));
            //获取酷Q "图片" 代码
            lua.RegisterFunction("cqCqCode_Music", null, typeof(LuaApi).GetMethod("CqCode_Music"));
            //获取酷Q "音乐" 代码
            lua.RegisterFunction("cqCqCode_MusciDIY", null, typeof(LuaApi).GetMethod("CqCode_MusciDIY"));
            //获取酷Q "音乐自定义" 代码
            lua.RegisterFunction("cqCqCode_Record", null, typeof(LuaApi).GetMethod("CqCode_Record"));
            //获取酷Q "语音" 代码
            lua.RegisterFunction("cqSendGroupMessage", null, typeof(LuaApi).GetMethod("SendGroupMessage"));
            //发送群消息
            lua.RegisterFunction("cqSendPrivateMessage", null, typeof(LuaApi).GetMethod("SendPrivateMessage"));
            //发送私聊消息
            lua.RegisterFunction("cqSendDelyMessage", null, typeof(LuaApi).GetMethod("SendDelyMessage"));
            //发送延迟消息
            lua.RegisterFunction("cqSendDiscussMessage", null, typeof(LuaApi).GetMethod("SendDiscussMessage"));
            //发送讨论组消息
            lua.RegisterFunction("cqSendPraise", null, typeof(LuaApi).GetMethod("SendPraise"));
            //发送赞
            lua.RegisterFunction("cqRepealMessage", null, typeof(LuaApi).GetMethod("RepealMessage"));
            //撤回消息
            lua.RegisterFunction("cqGetLoginQQ", null, typeof(LuaApi).GetMethod("GetLoginQQ"));
            //取登录QQ
            lua.RegisterFunction("cqGetLoginNick", null, typeof(LuaApi).GetMethod("GetLoginNick"));
            //获取当前登录QQ的昵称
            lua.RegisterFunction("cqAppDirectory", null, typeof(LuaApi).GetMethod("GetAppDirectory"));
            //取应用目录
            lua.RegisterFunction("cqGetMemberInfo", null, typeof(LuaApi).GetMethod("GetMemberInfo"));
            //获取群成员信息
            lua.RegisterFunction("cqGetMemberList", null, typeof(LuaApi).GetMethod("GetMemberList"));
            //获取全部群成员信息
            lua.RegisterFunction("cqGetGroupList", null, typeof(LuaApi).GetMethod("GetGroupList"));
            //获取群列表
            lua.RegisterFunction("cqAddLoger", null, typeof(LuaApi).GetMethod("AddLoger"));
            //添加日志
            lua.RegisterFunction("cqAddFatalError", null, typeof(LuaApi).GetMethod("AddFatalError"));
            //添加致命错误提示
            lua.RegisterFunction("cqSetGroupWholeBanSpeak", null, typeof(LuaApi).GetMethod("SetGroupWholeBanSpeak"));
            //置全群禁言
            lua.RegisterFunction("cqSetGroupMemberNewCard", null, typeof(LuaApi).GetMethod("SetGroupMemberNewCard"));
            //置群成员名片
            lua.RegisterFunction("cqSetGroupManager", null, typeof(LuaApi).GetMethod("SetGroupManager"));
            //置群管理员
            lua.RegisterFunction("cqSetAnonymousStatus", null, typeof(LuaApi).GetMethod("SetAnonymousStatus"));
            //置群匿名设置
            lua.RegisterFunction("cqSetGroupMemberRemove", null, typeof(LuaApi).GetMethod("SetGroupMemberRemove"));
            //置群员移除
            lua.RegisterFunction("cqSetDiscussExit", null, typeof(LuaApi).GetMethod("SetDiscussExit"));
            //置讨论组退出
            lua.RegisterFunction("cqSetGroupSpecialTitle", null, typeof(LuaApi).GetMethod("SetGroupSpecialTitle"));
            //置群成员专属头衔
            lua.RegisterFunction("cqSetGroupAnonymousBanSpeak", null, typeof(LuaApi).GetMethod("SetGroupAnonymousBanSpeak"));
            //置匿名群员禁言
            lua.RegisterFunction("cqSetGroupBanSpeak", null, typeof(LuaApi).GetMethod("SetGroupBanSpeak"));
            //置群员禁言
            lua.RegisterFunction("cqSetFriendAddRequest", null, typeof(LuaApi).GetMethod("SetFriendAddRequest"));
            //置好友添加请求
            lua.RegisterFunction("cqSetGroupAddRequest", null, typeof(LuaApi).GetMethod("SetGroupAddRequest"));
            //置群添加请求
            lua.RegisterFunction("cqSetGroupExit", null, typeof(LuaApi).GetMethod("SetGroupExit"));
            //置群退出


            /////////////
            //工具类接口//
            /////////////
            lua.RegisterFunction("apiGetPath", null, typeof(LuaApi).GetMethod("GetPath"));
            //获取程序运行目录
            lua.RegisterFunction("apiGetAppName", null, typeof(LuaApi).GetMethod("GetAppName"));
            //获取插件包名
            lua.RegisterFunction("apiGetBitmap", null, typeof(LuaApi).GetMethod("GetBitmap"));
            //获取图片对象
            lua.RegisterFunction("apiPutText", null, typeof(LuaApi).GetMethod("PutText"));
            //摆放文字
            lua.RegisterFunction("apiPutBlock", null, typeof(LuaApi).GetMethod("PutBlock"));
            //填充矩形
            lua.RegisterFunction("apiSetImage", null, typeof(LuaApi).GetMethod("SetImage"));
            //摆放图片
            lua.RegisterFunction("apiGetDir", null, typeof(LuaApi).GetMethod("GetDir"));
            //保存并获取图片路径
            lua.RegisterFunction("apiGetImagePath", null, typeof(LuaApi).GetMethod("GetImagePath"));
            //获取qq消息中图片的网址
            lua.RegisterFunction("apiHttpFileDownload", null, typeof(LuaApi).GetMethod("HttpFileDownload"));
            //下载文件
            lua.RegisterFunction("apiHttpImageDownload", null, typeof(LuaApi).GetMethod("HttpImageDownload"));
            //爬取图片
            lua.RegisterFunction("apiHttpGet", null, typeof(LuaApi).GetMethod("HttpGet"));
            //GET 请求与获取结果
            lua.RegisterFunction("apiHttpPost", null, typeof(LuaApi).GetMethod("HttpPost"));
            //POST 请求与获取结果
            lua.RegisterFunction("apiBase64File", null, typeof(LuaApi).GetMethod("Base64File"));
            //获取在线文件的base64结果
            lua.RegisterFunction("apiGetPictureWidth", null, typeof(LuaApi).GetMethod("GetPictureWidth"));
            //获取在线文件的base64结果
            lua.RegisterFunction("apiGetPictureHeight", null, typeof(LuaApi).GetMethod("GetPictureHeight"));
            //获取在线文件的base64结果
            lua.RegisterFunction("apiSetVar", null, typeof(LuaApi).GetMethod("SetVar"));
            //设置某值存入ram
            lua.RegisterFunction("apiGetVar", null, typeof(LuaApi).GetMethod("GetVar"));
            //取出某缓存的值
            lua.RegisterFunction("apiDirectoryList", null, typeof(LuaApi).GetMethod("DirectoryList"));
            //获取xml目录下的文件夹列表
            lua.RegisterFunction("apiFileList", null, typeof(LuaApi).GetMethod("FileList"));
            //获取xml目录下的文件列表
            lua.RegisterFunction("apiGetAsciiHex", null, typeof(LuaApi).GetMethod("GetAsciiHex"));
            //获取字符串ascii编码的hex串
            lua.RegisterFunction("apiSetTimerScriptWait", null, typeof(LuaApi).GetMethod("SetTimerScriptWait"));
            //设置定时脚本运行间隔时间
            lua.RegisterFunction("apiGetHardDiskFreeSpace", null, typeof(Tools).GetMethod("GetHardDiskFreeSpace"));
            //获取指定驱动器的剩余空间总大小(单位为MB)
            lua.RegisterFunction("apiMD5Encrypt", null, typeof(Tools).GetMethod("MD5Encrypt"));
            //计算MD5
            lua.RegisterFunction("apiSandBox", null, typeof(LuaEnv).GetMethod("RunSandBox"));
            //沙盒环境
            lua.RegisterFunction("apiOrderSearch", null, typeof(LuaApi).GetMethod("OrderSearch"));
            //单号识别
            lua.RegisterFunction("apiNowSearch", null, typeof(LuaApi).GetMethod("NowSearch"));
            //快递查询
            lua.RegisterFunction("apiOrderSub", null, typeof(LuaApi).GetMethod("OrderSub"));
            //快递订阅
            lua.RegisterFunction("apiservice", null, typeof(TcpSer).GetMethod("service"));
            //开启tcp服务器
            lua.RegisterFunction("apiclient", null, typeof(TcpSer).GetMethod("client"));
            //连接tcp服务器
            lua.RegisterFunction("apiListenStart", null, typeof(HttpListenerPostParaHelper).GetMethod("ListenStart"));
            //开启httprequest监听
            lua.RegisterFunction("apiGetResponseHeaders", null, typeof(LuaApi).GetMethod("GetResponseHeaders"));
            //获取response header头
            lua.RegisterFunction("apiTimerStart", null, typeof(TimerRun).GetMethod("TimerStart"));
            //开启循环任务
            lua.RegisterFunction("apiGeneralBasic", null, typeof(BaiDuApi).GetMethod("GeneralBasic"));
            //本地图片文字识别
            lua.RegisterFunction("apiGeneralBasicUrl", null, typeof(BaiDuApi).GetMethod("GeneralBasicUrl"));
            //链接图片文字识别
            lua.RegisterFunction("apiAdvancedGeneral", null, typeof(BaiDuApi).GetMethod("AdvancedGeneral"));
            //图像识别
            lua.RegisterFunction("apiQREncode", null, typeof(QRCode).GetMethod("QREncode"));
            //二维码生成
            lua.RegisterFunction("apiQRDecode", null, typeof(QRCode).GetMethod("QRDecode"));
            //二维码解码
            lua.RegisterFunction("apiCombinImage", null, typeof(QRCode).GetMethod("CombinImage"));
            //二维码logo生成


            ///////////////
            //XML操作接口//
            //////////////
            lua.RegisterFunction("apiXmlReplayGet", null, typeof(XmlApi).GetMethod("replay_get"));
            //随机获取一条结果
            lua.RegisterFunction("apiXmlListGet", null, typeof(XmlApi).GetMethod("alist_get"));
            //获取所有回复的列表
            lua.RegisterFunction("apiXmlDelete", null, typeof(XmlApi).GetMethod("del"));
            //删除所有匹配的条目
            lua.RegisterFunction("apiXmlRemove", null, typeof(XmlApi).GetMethod("remove"));
            //删除完全匹配的第一个条目
            lua.RegisterFunction("apiXmlInsert", null, typeof(XmlApi).GetMethod("insert"));
            //插入一个词条
            lua.RegisterFunction("apiXmlSet", null, typeof(XmlApi).GetMethod("set"));
            //更改某条的值
            lua.RegisterFunction("apiXmlGet", null, typeof(XmlApi).GetMethod("xml_get"));
            //获取某条的结果
            lua.RegisterFunction("apiXmlRow", null, typeof(XmlApi).GetMethod("xml_row"));
            //按结果查源头(反查)
            lua.RegisterFunction("apiXmlIdListGet", null, typeof(XmlApi).GetMethod("nlist_get"));
            //获取所有号码id列表

            lua.DoFile(Common.AppDirectory + "lua/require/head.lua");
        }
Exemple #15
0
 /// <summary>
 /// Initializes a new instance of the LuaPluginLoader class
 /// </summary>
 /// <param name="lua"></param>
 public LuaPluginLoader(NLua.Lua lua)
 {
     LuaEnvironment = lua;
 }
Exemple #16
0
 public static void SetupLuaUtils(Random r)
 {
     NLua.Lua L = new NLua.Lua();
     L.DoFile(TBAGW.Game1.rootContent + "LUA\\" + "utils.lua");
 }
Exemple #17
0
 public CozyLuaCore()
 {
     mLua = new NLua.Lua();
 }
Exemple #18
0
 public LoadingScreen(string LoaderScript, NLua.Lua LuaInstance)
     : base()
 {
     LuaInstance.GetFunction(LoaderScript).Call(this);
 }
Exemple #19
0
        public Control ParseFromJson(string json, NLua.Lua lua)
        {
            var description = JsonConvert.DeserializeObject <Dictionary <string, object> >(json);

            return(ParseFromDescription(description, lua));
        }
        /// <summary>
        /// Analyze 1 step, using femm window
        /// </summary>
        /// <param name="data"></param>
        /// <param name="step"></param>
        /// <param name="femm"></param>
        private void AnalyzeOne(int step, FEMM femm = null)
        {
            if (femm == null)
            {
                femm = FEMM.DefaultFEMM;
            }

            double t          = Results.Times[step];
            double rotorAngle = RotorSpeedDegreeSecond * t + StartAngle;

            // run script to update IA,IB,IC
            NLua.Lua lua_state                   = LuaHelper.GetLuaState();
            String[] currentFormulas             = { IA, IB, IC };
            String[] circuitNames                = { "A", "B", "C" };
            Dictionary <String, double> currents = new Dictionary <string, double>();

            try
            {
                lua_state["step"]  = step;
                lua_state["time"]  = t;
                lua_state["omega"] = RotorSpeedRadSecond;

                for (int i = 0; i < currentFormulas.Length; i++)
                {
                    double Ix = (double)lua_state.DoString("return " + currentFormulas[i])[0];
                    currents[circuitNames[i]] = Ix;
                }
            }
            catch (Exception ex)
            {
                log.Error("Lua error :" + ex.Message);
                //TODO: maybe halt analysis since there maybe big problem
            }

            // open femm file
            femm.open(Motor.Path_FEMMFile);

            // clear the way (line-boundary conditional in airgap)
            Motor.Airgap.MakeWayInAirgapBeforeRotationInFEMM(femm);

            // normalize, make rotorAngle inside (-2alpha,2alpha)
            double xRotorAngle = rotorAngle;

            if (!Motor.GeneralParams.FullBuildFEMModel)
            {
                double alphax2 = 2 * Motor.Rotor.alphaDegree;
                if (xRotorAngle > alphax2 || xRotorAngle < -alphax2)
                {
                    xRotorAngle = xRotorAngle - Math.Round(xRotorAngle / (2 * alphax2)) * 2 * alphax2;
                }
            }

            // rotate rotor
            Motor.Rotor.RotateRotorInFEMM(xRotorAngle, femm);

            // modify airgap (in case partial build)
            Motor.Airgap.ModifyAirgapAfterRotationInFEMM(xRotorAngle, femm);

            // modify stator currents using args passed from OnBeginAnalyzeOne
            Motor.Stator.SetStatorCurrentsInFEMM(currents, femm);

            // save as new file fem (temp only)
            String stepfileFEM = OutDir + "\\" + String.Format("{0:D4}.FEM", step);

            femm.mi_saveas(stepfileFEM);

            // analyze
            femm.mi_analyze(true);

            // close
            femm.mi_close();

            // delete temp file
            //File.Delete(stepfileFEM);

            // open ans file to measure ?
            String stepfileANS = Path.GetDirectoryName(stepfileFEM) + "\\" + Path.GetFileNameWithoutExtension(stepfileFEM) + ".ans";

            femm.open(stepfileANS);

            //String bmpFile = config.OutDir + "\\bmp\\" + Path.GetFileNameWithoutExtension(stepfileFEM) + ".bmp";
            //femm.mo_savebitmap(bmpFile);

            // get circuits properties from stator
            TransientStepResult result = new TransientStepResult();

            Dictionary <String, FEMM.CircuitProperties> cps = Motor.Stator.getCircuitsPropertiesInAns(femm);
            double torque = Motor.Rotor.getTorqueInAns(femm);

            result.Torque            = torque;
            result.RotorAngle        = rotorAngle;
            result.CircuitProperties = cps;

            Results[step] = result;

            OnFinishAnalyzeOneStep(this, result);

            log.Info(String.Format("Time {0:F5}: {1}", t, torque));

            femm.mo_close();
        }
Exemple #21
0
 public void RegisterLuaFunc(NLua.Lua lua, string luaName, object target, string rawFunc)
 {
     lua.RegisterFunction(luaName, target, target.GetType().GetMethod(rawFunc));
 }
        public (Action tritonAction, Action nluaAction) Benchmark_NoResults(Triton.Lua triton, NLua.Lua nlua)
        {
            void Triton() => triton.DoString("test = 0");
            void NLua() => nlua.DoString("test = 0");

            return(Triton, NLua);
        }
        public void ResumeCoroutineBis()
        {
            using (var lua = new NLua.Lua())
            {
                lua.LoadCoroutineManager();
                lua.DoString("function test() x = 1; coroutine.yield(x); return 2 end");

                lua.CreateCoroutine("test");
                LuaCoroutineResult result = lua.ResumeCoroutine("test");

                Assert.IsTrue(result.IsValid);
                Assert.IsTrue((int)(double)result.Results[0] == 1);
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Suspended);

                result = lua.ResumeCoroutine("test");

                Assert.IsTrue(result.IsValid);
                Assert.IsTrue((int)(double)result.Results[0] == 2);
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead);

                result = lua.ResumeCoroutine("test");

                Assert.IsFalse(result.IsValid);
                Assert.IsTrue(result.ErrorMessage == "cannot resume dead coroutine");
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead);
            }
        }
Exemple #24
0
        public (Action tritonAction, Action nluaAction) Benchmark_CallInstance_Results(Triton.Lua triton, NLua.Lua nlua)
        {
            triton["test"] = new TestClass();
            nlua["test"]   = new TestClass();
            var tritonFunction = triton.CreateFunction("x, y = test:y2()");
            var nluaFunction   = nlua.LoadString("x, y = test:y2()", "test");

            void Triton() => tritonFunction.Call();
            void NLua() => nluaFunction.Call();

            return(Triton, NLua);
        }
        public void RunCoroutine()
        {
            using (var lua = new NLua.Lua())
            {
                lua.LoadCoroutineManager();
                lua.DoString("function test() return 'truc', 2 end");

                lua.CreateCoroutine("test");
                bool isValid;
                object[] results = lua.ResumeCoroutine("test", out isValid);

                Assert.IsTrue(isValid);
                Assert.IsTrue((string)results[0] == "truc");
                Assert.IsTrue((int)(double)results[1] == 2);
            }
        }
Exemple #26
0
        public (Action tritonAction, Action nluaAction) Benchmark_WriteStatic(Triton.Lua triton, NLua.Lua nlua)
        {
            triton.ImportType(typeof(TestClass));
            nlua.DoString("TestClass = luanet.import_type('Triton.Benchmarks.Binding.FieldBenchmark+TestClass')");
            var tritonFunction = triton.CreateFunction("TestClass.X = 0");
            var nluaFunction   = nlua.LoadString("TestClass.X = 0", "test");

            void Triton() => tritonFunction.Call();
            void NLua() => nluaFunction.Call();

            return(Triton, NLua);
        }
        public void SleepCoroutine()
        {
            using (var lua = new NLua.Lua())
            {
                lua.LoadCLRPackage();
                lua.LoadCoroutineManager();
                lua.DoString("function test() coroutine.manager.sleep(10, 'stopped 1') return 'hi' end " +
                             "function test2() coroutine.manager.sleep(20, 'stopped 2') return 'hello' end ");

                lua.CreateCoroutine("test");
                lua.CreateCoroutine("test2");

                Dictionary<string, LuaCoroutineResult> results = lua.UpdateCoroutines();

                Assert.IsTrue(results["test"].IsValid);
                Assert.IsTrue((string)results["test"].Results[0] == "stopped 1");
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Sleeping);

                Assert.IsTrue(results["test2"].IsValid);
                Assert.IsTrue((string)results["test2"].Results[0] == "stopped 2");
                Assert.IsTrue(lua.StatusCoroutine("test2") == LuaCoroutineStatus.Sleeping);

                results = lua.UpdateCoroutines(10);

                Assert.IsTrue(results["test"].IsValid);
                Assert.IsTrue((string)results["test"].Results[0] == "hi");
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead);

                Assert.IsTrue(results["test2"].IsValid);
                Assert.IsTrue(lua.StatusCoroutine("test2") == LuaCoroutineStatus.Sleeping);

                results = lua.UpdateCoroutines(10);

                Assert.IsFalse(results["test"].IsValid);
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead);

                Assert.IsTrue(results["test2"].IsValid);
                Assert.IsTrue((string)results["test2"].Results[0] == "hello");
                Assert.IsTrue(lua.StatusCoroutine("test2") == LuaCoroutineStatus.Dead);
            }
        }
        public (Action tritonAction, Action nluaAction) Benchmark_WriteBoolean(Triton.Lua triton, NLua.Lua nlua)
        {
            void Triton() => triton["test"] = false;
            void NLua() => nlua["test"]     = false;

            return(Triton, NLua);
        }
        public void UpdateCoroutines()
        {
            using (var lua = new NLua.Lua())
            {
                lua.LoadCLRPackage();
                lua.LoadCoroutineManager();
                lua.DoString("function test() return 'hi' end " + "function test2() coroutine.yield() return true end "
                             + "function test3() return 3,4 end");

                lua.CreateCoroutine("test");
                lua.CreateCoroutine("test2");
                lua.CreateCoroutine("test3");

                Dictionary<string, LuaCoroutineResult> results = lua.UpdateCoroutines();

                Assert.IsTrue(results["test"].IsValid);
                Assert.IsTrue((string)results["test"].Results[0] == "hi");
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead);

                Assert.IsTrue(results["test2"].IsValid);
                Assert.IsTrue(lua.StatusCoroutine("test2") == LuaCoroutineStatus.Suspended);

                Assert.IsTrue(results["test3"].IsValid);
                Assert.IsTrue((int)(double)results["test3"].Results[0] == 3);
                Assert.IsTrue((int)(double)results["test3"].Results[1] == 4);
                Assert.IsTrue(lua.StatusCoroutine("test3") == LuaCoroutineStatus.Dead);

                results = lua.UpdateCoroutines();

                Assert.IsFalse(results["test"].IsValid);
                Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead);

                Assert.IsTrue(results["test2"].IsValid);
                Assert.IsTrue((bool)results["test2"].Results[0]);
                Assert.IsTrue(lua.StatusCoroutine("test2") == LuaCoroutineStatus.Dead);

                Assert.IsFalse(results["test3"].IsValid);
                Assert.IsTrue(lua.StatusCoroutine("test3") == LuaCoroutineStatus.Dead);
            }
        }
        public (Action tritonAction, Action nluaAction) Benchmark_WriteString(Triton.Lua triton, NLua.Lua nlua)
        {
            void Triton() => triton["test"] = "test";
            void NLua() => nlua["test"]     = "test";

            return(Triton, NLua);
        }
        public (Action tritonAction, Action nluaAction) Benchmark_ReadBoolean(Triton.Lua triton, NLua.Lua nlua)
        {
            triton["test"] = false;
            nlua["test"]   = false;

            void Triton()
            {
                var t = triton["test"];
            }

            void NLua()
            {
                var t = nlua["test"];
            }

            return(Triton, NLua);
        }
        public (Action tritonAction, Action nluaAction) Benchmark_WriteReference(Triton.Lua triton, NLua.Lua nlua)
        {
            var tritonFunction = triton.CreateFunction("");
            var nluaFunction   = nlua.LoadString("", "test");

            void Triton() => triton["test"] = tritonFunction;
            void NLua() => nlua["test"]     = nluaFunction;

            return(Triton, NLua);
        }
Exemple #33
0
        public (Action tritonAction, Action nluaAction) Benchmark_UnaryOperator(Triton.Lua triton, NLua.Lua nlua)
        {
            triton["c"] = new Complex(1, 1);
            nlua["c"]   = new Complex(1, 1);
            var tritonFunction = triton.CreateFunction("x = -c");
            var nluaFunction   = nlua.LoadString("x = -c", "test");

            void Triton() => tritonFunction.Call();
            void NLua() => nluaFunction.Call();

            return(Triton, NLua);
        }
 public LuaScriptManager( NLua.Lua luaState )
 {
     _lua = luaState;
 }
        public (Action tritonAction, Action nluaAction) Benchmark_ReadReference(Triton.Lua triton, NLua.Lua nlua)
        {
            triton.DoString("test = function() end");
            nlua.DoString("test = function() end");

            void Triton()
            {
                var t = triton["test"];
            }

            void NLua()
            {
                var t = nlua["test"];
            }

            return(Triton, NLua);
        }
Exemple #36
0
        private Control ParseFromDescription(Dictionary <string, object> description, NLua.Lua lua)
        {
            object type;

            if (!description.TryGetValue("ControlType", out type))
            {
                throw new Exception("Missing property ControlType");
            }

            Func <BaseSpec> specCreator;

            if (!_specCreators.TryGetValue(type.ToString(), out specCreator))
            {
                throw new Exception(string.Format("Creator for type \"{0}\" does not exists", type));
            }

            var controlSpec = specCreator();

            controlSpec.SetDescription(description);

            var control = controlSpec.CreateControl();

            lua[controlSpec.Name] = control;

            controlSpec.SetEvents(control, lua);

            object children;

            if (!description.TryGetValue("Children", out children))
            {
                return(control);
            }

            foreach (var childDescription in (IEnumerable <JToken>)description["Children"])
            {
                var dict         = childDescription.ToObject <Dictionary <string, object> >();
                var childControl = ParseFromDescription(dict, lua);

                control.Controls.Add(childControl);
            }

            return(control);
        }
Exemple #37
0
 /// <summary>
 /// Register API functions with the Lua instance specified.
 /// </summary>
 /// <param name="lua">Lua instance</param>
 public void RegisterFunctions(NLua.Lua lua)
 {
     lua["Settings"]    = _userSettings;
     lua["Application"] = _mainForm;
 }
Exemple #38
0
        /// <summary>
        /// 初始化lua对象
        /// </summary>
        /// <param name="lua"></param>
        /// <returns></returns>
        public static void Initial(NLua.Lua lua)
        {
            ///////////////
            //酷q类的接口//
            //////////////
            lua.RegisterFunction("cqCode_At", null, typeof(LuaApi).GetMethod("CqCode_At"));
            //获取酷Q "At某人" 代码
            lua.RegisterFunction("cqCqCode_Emoji", null, typeof(LuaApi).GetMethod("CqCode_Emoji"));
            //获取酷Q "emoji表情" 代码
            lua.RegisterFunction("cqCqCode_Face", null, typeof(LuaApi).GetMethod("CqCode_Face"));
            //获取酷Q "表情" 代码
            lua.RegisterFunction("cqCqCode_Shake", null, typeof(LuaApi).GetMethod("CqCode_Shake"));
            //获取酷Q "窗口抖动" 代码
            lua.RegisterFunction("cqCqCode_Trope", null, typeof(LuaApi).GetMethod("CqCode_Trope"));
            //获取字符串的转义形式
            lua.RegisterFunction("cqCqCode_UnTrope", null, typeof(LuaApi).GetMethod("CqCode_UnTrope"));
            //获取字符串的非转义形式
            lua.RegisterFunction("cqCqCode_ShareLink", null, typeof(LuaApi).GetMethod("CqCode_ShareLink"));
            //获取酷Q "链接分享" 代码
            lua.RegisterFunction("cqCqCode_ShareCard", null, typeof(LuaApi).GetMethod("CqCode_ShareCard"));
            //获取酷Q "名片分享" 代码
            lua.RegisterFunction("cqCqCode_ShareGPS", null, typeof(LuaApi).GetMethod("CqCode_ShareGPS"));
            //获取酷Q "位置分享" 代码
            lua.RegisterFunction("cqCqCode_Anonymous", null, typeof(LuaApi).GetMethod("CqCode_Anonymous"));
            //获取酷Q "匿名" 代码
            lua.RegisterFunction("cqCqCode_Image", null, typeof(LuaApi).GetMethod("CqCode_Image"));
            //获取酷Q "图片" 代码
            lua.RegisterFunction("cqCqCode_Music", null, typeof(LuaApi).GetMethod("CqCode_Music"));
            //获取酷Q "音乐" 代码
            lua.RegisterFunction("cqCqCode_MusciDIY", null, typeof(LuaApi).GetMethod("CqCode_MusciDIY"));
            //获取酷Q "音乐自定义" 代码
            lua.RegisterFunction("cqCqCode_Record", null, typeof(LuaApi).GetMethod("CqCode_Record"));
            //获取酷Q "语音" 代码
            lua.RegisterFunction("cqSendGroupMessage", null, typeof(LuaApi).GetMethod("SendGroupMessage"));
            //发送群消息
            lua.RegisterFunction("cqSendPrivateMessage", null, typeof(LuaApi).GetMethod("SendPrivateMessage"));
            //发送私聊消息
            lua.RegisterFunction("cqSendDiscussMessage", null, typeof(LuaApi).GetMethod("SendDiscussMessage"));
            //发送讨论组消息
            lua.RegisterFunction("cqSendPraise", null, typeof(LuaApi).GetMethod("SendPraise"));
            //发送赞
            lua.RegisterFunction("cqRepealMessage", null, typeof(LuaApi).GetMethod("RepealMessage"));
            //撤回消息
            lua.RegisterFunction("cqGetLoginQQ", null, typeof(LuaApi).GetMethod("GetLoginQQ"));
            //取登录QQ
            lua.RegisterFunction("cqGetLoginNick", null, typeof(LuaApi).GetMethod("GetLoginNick"));
            //获取当前登录QQ的昵称
            lua.RegisterFunction("cqAppDirectory", null, typeof(LuaApi).GetMethod("GetAppDirectory"));
            //取应用目录
            lua.RegisterFunction("cqAddLoger", null, typeof(LuaApi).GetMethod("AddLoger"));
            //添加日志
            lua.RegisterFunction("cqAddFatalError", null, typeof(LuaApi).GetMethod("AddFatalError"));
            //添加致命错误提示
            lua.RegisterFunction("cqSetGroupWholeBanSpeak", null, typeof(LuaApi).GetMethod("SetGroupWholeBanSpeak"));
            //置全群禁言
            lua.RegisterFunction("cqSetGroupMemberNewCard", null, typeof(LuaApi).GetMethod("SetGroupMemberNewCard"));
            //置群成员名片
            lua.RegisterFunction("cqSetGroupManager", null, typeof(LuaApi).GetMethod("SetGroupManager"));
            //置群管理员
            lua.RegisterFunction("cqSetAnonymousStatus", null, typeof(LuaApi).GetMethod("SetAnonymousStatus"));
            //置群匿名设置
            lua.RegisterFunction("cqSetGroupMemberRemove", null, typeof(LuaApi).GetMethod("SetGroupMemberRemove"));
            //置群员移除
            lua.RegisterFunction("cqSetDiscussExit", null, typeof(LuaApi).GetMethod("SetDiscussExit"));
            //置讨论组退出
            lua.RegisterFunction("cqSetGroupSpecialTitle", null, typeof(LuaEnv).GetMethod("SetGroupSpecialTitle"));
            //置群成员专属头衔
            lua.RegisterFunction("cqSetGroupAnonymousBanSpeak", null, typeof(LuaEnv).GetMethod("SetGroupAnonymousBanSpeak"));
            //置匿名群员禁言
            lua.RegisterFunction("cqSetGroupBanSpeak", null, typeof(LuaEnv).GetMethod("SetGroupBanSpeak"));
            //置群员禁言
            lua.RegisterFunction("cqSetFriendAddRequest", null, typeof(LuaApi).GetMethod("SetFriendAddRequest"));
            //置好友添加请求
            lua.RegisterFunction("cqSetGroupAddRequest", null, typeof(LuaApi).GetMethod("SetGroupAddRequest"));
            //置群添加请求

            /////////////
            //工具类接口//
            /////////////
            lua.RegisterFunction("apiGetPath", null, typeof(LuaApi).GetMethod("GetPath"));
            //获取程序运行目录
            lua.RegisterFunction("apiGetBitmap", null, typeof(LuaApi).GetMethod("GetBitmap"));
            //获取图片对象
            lua.RegisterFunction("apiPutText", null, typeof(LuaApi).GetMethod("PutText"));
            //摆放文字
            lua.RegisterFunction("apiPutBlock", null, typeof(LuaApi).GetMethod("PutBlock"));
            //填充矩形
            lua.RegisterFunction("apiSetImage", null, typeof(LuaApi).GetMethod("SetImage"));
            //摆放图片
            lua.RegisterFunction("apiGetDir", null, typeof(LuaApi).GetMethod("GetDir"));
            //保存并获取图片路径

            lua.RegisterFunction("apiGetImageUrl", null, typeof(LuaApi).GetMethod("GetImageUrl"));
            //获取qq消息中图片的网址

            lua.RegisterFunction("apiHttpDownload", null, typeof(LuaApi).GetMethod("HttpDownload"));
            //下载文件
            lua.RegisterFunction("apiHttpGet", null, typeof(LuaApi).GetMethod("HttpGet"));
            //GET 请求与获取结果
            lua.RegisterFunction("apiHttpPost", null, typeof(LuaApi).GetMethod("HttpPost"));
            //POST 请求与获取结果
            lua.RegisterFunction("apiBase64File", null, typeof(LuaApi).GetMethod("Base64File"));
            //获取在线文件的base64结果
            lua.RegisterFunction("apiSetVar", null, typeof(LuaApi).GetMethod("SetVar"));
            //设置某值存入ram
            lua.RegisterFunction("apiGetVar", null, typeof(LuaApi).GetMethod("GetVar"));
            //取出某缓存的值
            lua.RegisterFunction("apiGetAsciiHex", null, typeof(LuaApi).GetMethod("GetAsciiHex"));
            //获取字符串ascii编码的hex串

            lua.RegisterFunction("apiGetHardDiskFreeSpace", null, typeof(Tools).GetMethod("GetHardDiskFreeSpace"));
            //获取指定驱动器的剩余空间总大小(单位为MB)

            lua.RegisterFunction("apiTcpSend", null, typeof(TcpServer).GetMethod("Send"));
            //发送tcp广播数据

            lua.RegisterFunction("apiSandBox", null, typeof(LuaEnv).GetMethod("RunSandBox"));
            //沙盒环境

            ///////////////
            //XML操作接口//
            //////////////
            lua.RegisterFunction("apiXmlReplayGet", null, typeof(XmlApi).GetMethod("replay_get"));
            //随机获取一条结果
            lua.RegisterFunction("apiXmlListGet", null, typeof(XmlApi).GetMethod("list_get"));
            //获取所有回复的列表
            lua.RegisterFunction("apiXmlDelete", null, typeof(XmlApi).GetMethod("del"));
            //删除所有匹配的条目
            lua.RegisterFunction("apiXmlRemove", null, typeof(XmlApi).GetMethod("remove"));
            //删除完全匹配的第一个条目
            lua.RegisterFunction("apiXmlInsert", null, typeof(XmlApi).GetMethod("insert"));
            //插入一个词条
            lua.RegisterFunction("apiXmlSet", null, typeof(XmlApi).GetMethod("set"));
            //更改某条的值
            lua.RegisterFunction("apiXmlGet", null, typeof(XmlApi).GetMethod("xml_get"));
            //获取某条的结果

            lua.DoFile(Common.AppDirectory + "lua/require/head.lua");
        }
        public (Action tritonAction, Action nluaAction) Benchmark_ReadString(Triton.Lua triton, NLua.Lua nlua)
        {
            triton["test"] = "test";
            nlua["test"]   = "test";

            void Triton()
            {
                var t = triton["test"];
            }

            void NLua()
            {
                var t = nlua["test"];
            }

            return(Triton, NLua);
        }
        public (Action tritonAction, Action nluaAction) Benchmark_WriteBoolean(Triton.Lua triton, NLua.Lua nlua)
        {
            var tritonTable = triton.CreateTable();
            var nluaTable   = (NLua.LuaTable)nlua.DoString("return {}")[0];

            void Triton() => tritonTable["test"] = false;
            void NLua() => nluaTable["test"]     = false;

            return(Triton, NLua);
        }
        public (Action tritonAction, Action nluaAction) Benchmark_ReadObject(Triton.Lua triton, NLua.Lua nlua)
        {
            triton["test"] = new object();
            nlua["test"]   = new object();

            void Triton()
            {
                var t = triton["test"];
            }

            void NLua()
            {
                var t = nlua["test"];
            }

            return(Triton, NLua);
        }