Ejemplo n.º 1
0
 public void RunLuaScripts()
 {
     foreach (var file in _luaList)
     {
         if (file.Enabled && file.Thread == null)
         {
             try
             {
                 file.Thread = LuaImp.SpawnCoroutine(file.Path);
             }
             catch (Exception e)
             {
                 if (e.ToString().Substring(0, 32) == "LuaInterface.LuaScriptException:")
                 {
                     file.Enabled = false;
                     ConsoleLog(e.Message);
                 }
                 else
                 {
                     MessageBox.Show(e.ToString());
                 }
             }
         }
         else
         {
             file.Stop();
         }
     }
 }
Ejemplo n.º 2
0
 private void RunLuaScripts()
 {
     foreach (var file in _luaList)
     {
         if (!file.Enabled && file.Thread == null)
         {
             try
             {
                 LuaSandbox.Sandbox(null, () =>
                 {
                     string pathToLoad = ProcessPath(file.Path);
                     file.Thread       = LuaImp.SpawnCoroutine(file.Path);
                     LuaSandbox.CreateSandbox(file.Thread, Path.GetDirectoryName(pathToLoad));
                 }, () =>
                 {
                     file.State = LuaFile.RunState.Disabled;
                 });
             }
             catch (Exception e)
             {
                 MessageBox.Show(e.ToString());
             }
         }
         else
         {
             file.Stop();
         }
     }
 }
Ejemplo n.º 3
0
        public void Restart()
        {
            // Even if the lua console is self-rebooting from client.reboot_core() we still want to re-inject dependencies
            if (IsRebootingCore)
            {
                LuaImp.Restart(Emulator.ServiceProvider);
                return;
            }

            if (LuaImp?.GuiLibrary != null && LuaImp.GuiLibrary.HasLuaSurface)
            {
                LuaImp.GuiLibrary.DrawFinish();
            }

            var runningScripts = _luaList.Where(f => f.Enabled).ToList();

            foreach (var file in runningScripts)
            {
                LuaImp.CallExitEvent(file.Thread);

                var functions = LuaImp.RegisteredFunctions.Where(lf => lf.Lua == file.Thread).ToList();

                foreach (var function in functions)
                {
                    LuaImp.RegisteredFunctions.Remove(function);
                }

                UpdateRegisteredFunctionsDialog();

                file.Stop();
            }

            LuaImp = new EmuLuaLibrary(Emulator.ServiceProvider);
            InputBox.AutoCompleteCustomSource.AddRange(LuaImp.Docs.Select(a => a.Library + "." + a.Name).ToArray());

            foreach (var file in runningScripts)
            {
                string pathToLoad = ProcessPath(file.Path);

                try
                {
                    LuaSandbox.Sandbox(file.Thread, () =>
                    {
                        file.Thread = LuaImp.SpawnCoroutine(pathToLoad);
                        LuaSandbox.CreateSandbox(file.Thread, Path.GetDirectoryName(pathToLoad));
                        file.State = LuaFile.RunState.Running;
                    }, () =>
                    {
                        file.State = LuaFile.RunState.Disabled;
                    });
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }

            UpdateDialog();
        }
Ejemplo n.º 4
0
 private void SaveConfigSettings()
 {
     LuaImp.Close();
     Global.Config.LuaSettings.Wndx   = Location.X;
     Global.Config.LuaSettings.Wndy   = Location.Y;
     Global.Config.LuaSettings.Width  = Right - Left;
     Global.Config.LuaSettings.Height = Bottom - Top;
 }
Ejemplo n.º 5
0
        public void LoadLuaFile(string path)
        {
            var processedPath = PathManager.TryMakeRelative(path);

            if (LuaAlreadyInSession(processedPath) == false)
            {
                var luaFile = new LuaFile(string.Empty, processedPath);

                _luaList.Add(luaFile);
                LuaListView.ItemCount = _luaList.Count;
                Global.Config.RecentLua.Add(processedPath);


                if (!Global.Config.DisableLuaScriptsOnLoad)
                {
                    try
                    {
                        luaFile.Thread  = LuaImp.SpawnCoroutine(processedPath);
                        luaFile.Enabled = true;
                    }
                    catch (Exception e)
                    {
                        if (e.GetType() == typeof(LuaInterface.LuaScriptException))
                        {
                            luaFile.Enabled = false;
                            ConsoleLog(e.Message);
                        }
                        else
                        {
                            MessageBox.Show(e.ToString());
                        }
                    }
                }
                else
                {
                    luaFile.Enabled = false;
                }

                luaFile.Paused = false;
            }
            else
            {
                foreach (var file in _luaList.Where(file => processedPath == file.Path && file.Enabled == false && !Global.Config.DisableLuaScriptsOnLoad))
                {
                    file.Toggle();
                    break;
                }

                RunLuaScripts();
            }

            UpdateDialog();
        }
Ejemplo n.º 6
0
        public void Restart()
        {
            if (LuaImp != null && LuaImp.GuiLibrary != null && LuaImp.GuiLibrary.HasLuaSurface)
            {
                LuaImp.GuiLibrary.DrawFinish();
            }

            var runningScripts = _luaList.Where(f => f.Enabled).ToList();

            foreach (var file in runningScripts)
            {
                LuaImp.CallExitEvent(file.Thread);

                var functions = LuaImp.RegisteredFunctions.Where(x => x.Lua == file.Thread).ToList();

                foreach (var function in functions)
                {
                    LuaImp.RegisteredFunctions.Remove(function);
                }

                UpdateRegisteredFunctionsDialog();

                file.Stop();
            }

            LuaImp = new EmuLuaLibrary(this);
            InputBox.AutoCompleteCustomSource.AddRange(LuaImp.Docs.Select(a => a.Library + "." + a.Name).ToArray());

            foreach (var file in runningScripts)
            {
                try
                {
                    file.Thread  = LuaImp.SpawnCoroutine(file.Path);
                    file.Enabled = true;
                }
                catch (Exception ex)
                {
                    if (ex is LuaScriptException)
                    {
                        file.Enabled = false;
                        ConsoleLog(ex.Message);
                    }
                    else
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
            }

            UpdateDialog();
        }
Ejemplo n.º 7
0
        /// <summary>
        /// resumes suspended Co-routines
        /// </summary>
        /// <param name="includeFrameWaiters">should frame waiters be waken up? only use this immediately before a frame of emulation</param>
        public void ResumeScripts(bool includeFrameWaiters)
        {
            if (_luaList.Any())
            {
                if (LuaImp.GuiLibrary.SurfaceIsNull)
                {
                    LuaImp.GuiLibrary.DrawNew("emu");
                }

                foreach (var lf in _luaList)
                {
                    var oldcd = Environment.CurrentDirectory;                     // Save old current directory before this lua thread clobbers it for the .net thread

                    try
                    {
                        if (lf.Enabled && lf.Thread != null && !lf.Paused)
                        {
                            var prohibit = lf.FrameWaiting && !includeFrameWaiters;
                            if (!prohibit)
                            {
                                // Restore this lua thread's preferred current directory
                                if (lf.CurrentDirectory != null)
                                {
                                    Environment.CurrentDirectory = PathManager.MakeAbsolutePath(lf.CurrentDirectory, null);
                                }

                                var result = LuaImp.ResumeScript(lf.Thread);
                                if (result.Terminated)
                                {
                                    LuaImp.CallExitEvent(lf.Thread);
                                    lf.Stop();
                                }

                                lf.FrameWaiting = result.WaitForFrame;

                                // If the lua thread changed its current directory, capture that here
                                lf.CurrentDirectory = Environment.CurrentDirectory;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        if (ex is LuaScriptException || ex is LuaException)
                        {
                            lf.Enabled = false;
                            lf.Thread  = null;
                            ConsoleLog(ex.ToString());
                        }
                        else
                        {
                            MessageBox.Show(ex.ToString());
                        }
                    }
                    finally
                    {
                        // Restore the current directory
                        Environment.CurrentDirectory = oldcd;
                    }
                }
            }
        }