Example #1
0
        public void SetupLua(ProfileModel profileModel)
        {
            _logger.Debug("Setting up LUA for profile '{0}', module '{1}'", profileModel?.Name, profileModel?.GameName);
            // Clear old state
            ClearLua();

            // Stop after that if no model provided/there is no keyboard
            if (profileModel == null || _deviceManager.ActiveKeyboard == null)
            {
                return;
            }

            ProfileModel     = profileModel;
            KeyboardProvider = _deviceManager.ActiveKeyboard;

            // Get new instances of all modules
            _luaModules   = _kernel.Get <List <LuaModule> >();
            ProfileModule = (LuaProfileModule)_luaModules.First(m => m.ModuleName == "Profile");
            EventsModule  = (LuaEventsModule)_luaModules.First(m => m.ModuleName == "Events");

            // Setup new state
            LuaScript.Options.DebugPrint = LuaPrint;

            // Insert each module with a ModuleName into the script's globals
            foreach (var luaModule in _luaModules.Where(m => m.ModuleName != null))
            {
                LuaScript.Globals[luaModule.ModuleName] = luaModule;
            }

            // If there is no LUA script, don't bother executing the string
            if (ProfileModel.LuaScript.IsNullOrEmpty())
            {
                return;
            }

            try
            {
                lock (EventsModule.InvokeLock)
                {
                    lock (LuaScript)
                    {
                        LuaScript.DoString(ProfileModel.LuaScript);
                    }
                }
            }
            catch (InternalErrorException e)
            {
                _logger.Error("[{0}-LUA]: Error: {1}", ProfileModel.Name, e.DecoratedMessage);
            }
            catch (SyntaxErrorException e)
            {
                _logger.Error("[{0}-LUA]: Error: {1}", ProfileModel.Name, e.DecoratedMessage);
            }
            catch (ScriptRuntimeException e)
            {
                _logger.Error("[{0}-LUA]: Error: {1}", ProfileModel.Name, e.DecoratedMessage);
            }
        }
Example #2
0
        private IEnumerator ExecuteScriptInternal(string script)
        {
            var luaFunc = DynValue.Nil;

            try
            {
                luaFunc = LuaScript.DoString(script);
            }
            catch (InterpreterException ex)
            {
                Debug.LogErrorFormat("Lua Execute error:\n{0}", ex.DecoratedMessage);
            }
            catch (Exception ex)
            {
                Debug.LogException(ex);
            }

            if (luaFunc.IsNil())
            {
                yield break;
            }

            luaCoroutine = null;

            var dynValue = LuaScript.CreateCoroutine(luaFunc);

            if (dynValue.IsNil())
            {
                yield break;
            }

            luaCoroutine = dynValue.Coroutine;

            luaCoroutine.AutoYieldCounter = 1000;

            luaCoroutine.Resume();

            while (true)
            {
                if (luaCoroutine == null)
                {
                    break;
                }

                if (luaCoroutine.State == CoroutineState.Dead)
                {
                    break;
                }

                yield return(null);
            }
        }
Example #3
0
        // GUI Events
        private void CmdTxtBx_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                try
                {
                    script.DoString(cmdTxtBx.Text);
                }
                catch (Exception ex)
                {
                    LogError($"ERROR: {ex.Message}");
                }

                cmdTxtBx.Text = "";
                e.Handled     = true;
            }
        }
Example #4
0
        public void ClearLua()
        {
            if (_luaModules != null)
            {
                foreach (var luaModule in _luaModules)
                {
                    luaModule.Dispose();
                }
                _luaModules.Clear();
            }

            try
            {
                LuaScript.Globals.Clear();
                LuaScript.Registry.Clear();
                LuaScript.Registry.RegisterConstants();
                LuaScript.Registry.RegisterCoreModules(CoreModules.Preset_SoftSandbox);
                LuaScript.Globals.RegisterConstants();
                LuaScript.Globals.RegisterCoreModules(CoreModules.Preset_SoftSandbox);
            }
            catch (NullReferenceException)
            {
                // TODO: Ask MoonSharp folks why this is happening
            }

            if (EventsModule != null)
            {
                lock (EventsModule.InvokeLock)
                {
                    lock (LuaScript)
                    {
                        LuaScript.DoString("");
                    }
                }
            }
            else
            {
                lock (LuaScript)
                {
                    LuaScript.DoString("");
                }
            }
        }