Example #1
0
        public void RunningFile()
        {
            var path = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".lua";

            using (var file = File.OpenWrite(path)) {
                using (var writer = new StreamWriter(file)) {
                    writer.Write(@"
                        return 'Hello, world!'
                    ");
                }
            }

            using (var runtime = new LuaRuntime()) {
                using (var result = runtime.DoFile(path)) {
                    using (var func = runtime.CompileFile(path)) {
                        using (var result2 = func.Call()) {
                            Assert.AreEqual(result.Count, 1);
                            Assert.AreEqual(result2.Count, 1);
                            Assert.AreEqual(result[0], result2[0]);
                        }
                    }
                }
            }

            File.Delete(path);
        }
Example #2
0
        public static void InitializeLua()
        {
            if (!File.Exists(StockMainLuaPath))
            {
                Logger.Warn("No main.lua - bailing out.");
                return;
            }

            try {
                if (LuaState != null)
                {
                    DeinitializeLua();
                }
                LuaState = new LuaRuntime();
                Logger.Info("Running Lua");
                LuaState.MonoStackTraceWorkaround = true;
                LuaState.InitializeClrPackage();
                using (var package = LuaState.Globals["package"] as LuaTable) {
                    package["path"]  = $"{Path.Combine(StockPath, "?.lua")};{Path.Combine(StockPath, "?/init.lua")}";
                    package["cpath"] = "";
                }
                using (var stock_table = LuaState.CreateTable()) {
                    stock_table["_VERSION"] = Assembly.GetExecutingAssembly().GetName().Version.ToString();

                    using (var func = LuaState.CreateFunctionFromDelegate(
                               new Action <LuaTable, LuaFunction>(LuaFunctions.Hook)
                               )) stock_table["hook"] = func;

                    using (var func = LuaState.CreateFunctionFromDelegate(
                               new Func <string, AssemblyHelper>(LuaFunctions.Assembly)
                               )) stock_table["assembly"] = func;

                    using (var func = LuaState.CreateFunctionFromDelegate(
                               new LuaFunctions.ArrayTypeFuncDelegate(LuaFunctions.ArrayType)
                               )) stock_table["array_type"] = func;

                    using (var func = LuaState.CreateFunctionFromDelegate(
                               new Func <Type, LuaTable, LuaClrTypeObject>(LuaFunctions.GenericType)
                               )) stock_table["generic_type"] = func;

                    using (var func = LuaState.CreateFunctionFromDelegate(
                               new Func <LuaVararg, object>(LuaFunctions.Get)
                               )) stock_table["get"] = func;

                    using (var func = LuaState.CreateFunctionFromDelegate(
                               new Action <LuaVararg>(LuaFunctions.Set)
                               )) stock_table["set"] = func;

                    LuaState.Globals["stock"] = stock_table;
                }
                LuaState.DoFile(StockMainLuaPath);

                using (var stock = LuaState.Globals["stock"]) {
                    var stock_table = stock as LuaTable;
                    if (stock_table != null)
                    {
                        var unload = stock_table["unload"];
                        if (!(unload is LuaFunction))
                        {
                            unload.Dispose();
                            unload = null;
                        }
                        var ready = stock_table["ready"];
                        if (!(ready is LuaFunction))
                        {
                            ready.Dispose();
                            ready = null;
                        }

                        if (unload != null)
                        {
                            Unload = unload as LuaFunction;
                        }
                        if (ready != null)
                        {
                            Ready = ready as LuaFunction;
                        }
                    }
                }
            } catch (LuaException e) {
                Logger.Error($"Failed initializing Lua: [{e.GetType()}]");
                Logger.ErrorIndent(e.Message);
                foreach (var line in e.TracebackArray)
                {
                    Logger.ErrorIndent(line);
                }
            } catch (Exception e) {
                Logger.Error($"Failed initializing Lua: [{e.GetType()}]");
                Logger.ErrorIndent(e.Message);
                foreach (var line in e.StackTrace.Split('\n'))
                {
                    Logger.ErrorIndent(line.Replace("  ", ""));
                }
            }

            if (_GameObject != null)
            {
                if (Ready != null)
                {
                    SafeExecLua(Ready, "running stock.ready");
                }
            }
        }