public DateTime llOpenRemoteDataChannel() { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID)) { return(DateTime.Now); } IXMLRPC xmlrpcMod = World.RequestModuleInterface <IXMLRPC>(); if (xmlrpcMod.IsEnabled()) { UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_host.UUID, m_itemID, UUID.Zero); IXmlRpcRouter xmlRpcRouter = World.RequestModuleInterface <IXmlRpcRouter>(); if (xmlRpcRouter != null) { string hostName = MainServer.Instance.HostName; string protocol = MainServer.Instance.Secure ? "https://" : "http://"; xmlRpcRouter.RegisterNewReceiver( m_ScriptEngine.ScriptModule, channelID, m_host.UUID, m_itemID, string.Format("{0}{1}:{2}/", protocol, hostName, xmlrpcMod.Port) ); } object[] resobj = { new LSL_Integer(1), new LSL_String(channelID.ToString()), new LSL_String(UUID.Zero.ToString()), new LSL_String(string.Empty), new LSL_Integer(0), new LSL_String(string.Empty) }; m_ScriptEngine.PostScriptEvent( m_itemID, m_host.UUID, new EventParams("remote_data", resobj, new DetectParams[0]) , EventPriority.FirstStart ); } return(PScriptSleep(m_sleepMsOnOpenRemoteDataChannel)); }
public void AddRegion(Scene scene) { if (m_ScriptConfig == null) return; m_ScriptFailCount = 0; m_ScriptErrorMessage = String.Empty; if (m_ScriptConfig == null) { // m_log.ErrorFormat("[XEngine] No script configuration found. Scripts disabled"); return; } m_Enabled = m_ScriptConfig.GetBoolean("Enabled", true); if (!m_Enabled) return; AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve; m_Scene = scene; m_log.InfoFormat("[XEngine]: Initializing scripts in region {0}", m_Scene.RegionInfo.RegionName); m_MinThreads = m_ScriptConfig.GetInt("MinThreads", 2); m_MaxThreads = m_ScriptConfig.GetInt("MaxThreads", 100); m_IdleTimeout = m_ScriptConfig.GetInt("IdleTimeout", 60); string priority = m_ScriptConfig.GetString("Priority", "BelowNormal"); m_StartDelay = m_ScriptConfig.GetInt("StartDelay", 15000); m_MaxScriptQueue = m_ScriptConfig.GetInt("MaxScriptEventQueue",300); m_StackSize = m_ScriptConfig.GetInt("ThreadStackSize", 262144); m_SleepTime = m_ScriptConfig.GetInt("MaintenanceInterval", 10) * 1000; m_AppDomainLoading = m_ScriptConfig.GetBoolean("AppDomainLoading", true); m_EventLimit = m_ScriptConfig.GetInt("EventLimit", 30); m_KillTimedOutScripts = m_ScriptConfig.GetBoolean("KillTimedOutScripts", false); m_SaveTime = m_ScriptConfig.GetInt("SaveInterval", 120) * 1000; m_ScriptEnginesPath = m_ScriptConfig.GetString("ScriptEnginesPath", "ScriptEngines"); m_Prio = ThreadPriority.BelowNormal; switch (priority) { case "Lowest": m_Prio = ThreadPriority.Lowest; break; case "BelowNormal": m_Prio = ThreadPriority.BelowNormal; break; case "Normal": m_Prio = ThreadPriority.Normal; break; case "AboveNormal": m_Prio = ThreadPriority.AboveNormal; break; case "Highest": m_Prio = ThreadPriority.Highest; break; default: m_log.ErrorFormat("[XEngine] Invalid thread priority: '{0}'. Assuming BelowNormal", priority); break; } lock (m_ScriptEngines) { m_ScriptEngines.Add(this); } // Needs to be here so we can queue the scripts that need starting // m_Scene.EventManager.OnRezScript += OnRezScript; // Complete basic setup of the thread pool // SetupEngine(m_MinThreads, m_MaxThreads, m_IdleTimeout, m_Prio, m_MaxScriptQueue, m_StackSize); m_Scene.StackModuleInterface<IScriptModule>(this); m_XmlRpcRouter = m_Scene.RequestModuleInterface<IXmlRpcRouter>(); if (m_XmlRpcRouter != null) { OnScriptRemoved += m_XmlRpcRouter.ScriptRemoved; OnObjectRemoved += m_XmlRpcRouter.ObjectRemoved; } MainConsole.Instance.Commands.AddCommand( "Scripts", false, "xengine status", "xengine status", "Show status information", "Show status information on the script engine.", HandleShowStatus); MainConsole.Instance.Commands.AddCommand( "Scripts", false, "scripts show", "scripts show [<script-item-uuid>]", "Show script information", "Show information on all scripts known to the script engine." + "If a <script-item-uuid> is given then only information on that script will be shown.", HandleShowScripts); MainConsole.Instance.Commands.AddCommand( "Scripts", false, "show scripts", "show scripts [<script-item-uuid>]", "Show script information", "Synonym for scripts show command", HandleShowScripts); MainConsole.Instance.Commands.AddCommand( "Scripts", false, "scripts suspend", "scripts suspend [<script-item-uuid>]", "Suspends all running scripts", "Suspends all currently running scripts. This only suspends event delivery, it will not suspend a" + " script that is currently processing an event.\n" + "Suspended scripts will continue to accumulate events but won't process them.\n" + "If a <script-item-uuid> is given then only that script will be suspended. Otherwise, all suitable scripts are suspended.", (module, cmdparams) => HandleScriptsAction(cmdparams, HandleSuspendScript)); MainConsole.Instance.Commands.AddCommand( "Scripts", false, "scripts resume", "scripts resume [<script-item-uuid>]", "Resumes all suspended scripts", "Resumes all currently suspended scripts.\n" + "Resumed scripts will process all events accumulated whilst suspended." + "If a <script-item-uuid> is given then only that script will be resumed. Otherwise, all suitable scripts are resumed.", (module, cmdparams) => HandleScriptsAction(cmdparams, HandleResumeScript)); MainConsole.Instance.Commands.AddCommand( "Scripts", false, "scripts stop", "scripts stop [<script-item-uuid>]", "Stops all running scripts", "Stops all running scripts." + "If a <script-item-uuid> is given then only that script will be stopped. Otherwise, all suitable scripts are stopped.", (module, cmdparams) => HandleScriptsAction(cmdparams, HandleStopScript)); MainConsole.Instance.Commands.AddCommand( "Scripts", false, "scripts start", "scripts start [<script-item-uuid>]", "Starts all stopped scripts", "Starts all stopped scripts." + "If a <script-item-uuid> is given then only that script will be started. Otherwise, all suitable scripts are started.", (module, cmdparams) => HandleScriptsAction(cmdparams, HandleStartScript)); // MainConsole.Instance.Commands.AddCommand( // "Debug", false, "debug xengine", "debug xengine [<level>]", // "Turn on detailed xengine debugging.", // "If level <= 0, then no extra logging is done.\n" // + "If level >= 1, then we log every time that a script is started.", // HandleDebugLevelCommand); }
public void AddRegion(Scene scene) { if (m_ScriptConfig == null) return; m_ScriptFailCount = 0; m_ScriptErrorMessage = String.Empty; if (m_ScriptConfig == null) { // m_log.ErrorFormat("[XEngine] No script configuration found. Scripts disabled"); return; } m_Enabled = m_ScriptConfig.GetBoolean("Enabled", true); if (!m_Enabled) return; AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve; m_log.InfoFormat("[XEngine] Initializing scripts in region {0}", scene.RegionInfo.RegionName); m_Scene = scene; m_MinThreads = m_ScriptConfig.GetInt("MinThreads", 2); m_MaxThreads = m_ScriptConfig.GetInt("MaxThreads", 100); m_IdleTimeout = m_ScriptConfig.GetInt("IdleTimeout", 60); string priority = m_ScriptConfig.GetString("Priority", "BelowNormal"); m_MaxScriptQueue = m_ScriptConfig.GetInt("MaxScriptEventQueue",300); m_StackSize = m_ScriptConfig.GetInt("ThreadStackSize", 262144); m_SleepTime = m_ScriptConfig.GetInt("MaintenanceInterval", 10) * 1000; m_EventLimit = m_ScriptConfig.GetInt("EventLimit", 30); m_KillTimedOutScripts = m_ScriptConfig.GetBoolean("KillTimedOutScripts", false); m_SaveTime = m_ScriptConfig.GetInt("SaveInterval", 120) * 1000; m_Prio = ThreadPriority.BelowNormal; switch (priority) { case "Lowest": m_Prio = ThreadPriority.Lowest; break; case "BelowNormal": m_Prio = ThreadPriority.BelowNormal; break; case "Normal": m_Prio = ThreadPriority.Normal; break; case "AboveNormal": m_Prio = ThreadPriority.AboveNormal; break; case "Highest": m_Prio = ThreadPriority.Highest; break; default: m_log.ErrorFormat("[XEngine] Invalid thread priority: '{0}'. Assuming BelowNormal", priority); break; } lock (m_ScriptEngines) { m_ScriptEngines.Add(this); } // Needs to be here so we can queue the scripts that need starting // m_Scene.EventManager.OnRezScript += OnRezScript; // Complete basic setup of the thread pool // SetupEngine(m_MinThreads, m_MaxThreads, m_IdleTimeout, m_Prio, m_MaxScriptQueue, m_StackSize); m_Scene.StackModuleInterface<IScriptModule>(this); m_XmlRpcRouter = m_Scene.RequestModuleInterface<IXmlRpcRouter>(); if (m_XmlRpcRouter != null) { OnScriptRemoved += m_XmlRpcRouter.ScriptRemoved; OnObjectRemoved += m_XmlRpcRouter.ObjectRemoved; } }
public void RegionLoaded(Scene scene) { if (!m_enabled) return; StartNonSharedScriptPlugins(scene); //Must come AFTER the script plugins setup! Otherwise you'll get weird errors from the plugins if (MaintenanceThread == null) { //Still must come before the maintenance thread start StartSharedScriptPlugins(); //This only gets called once m_XmlRpcRouter = m_Scenes[0].RequestModuleInterface<IXmlRpcRouter>(); if (m_XmlRpcRouter != null) { OnScriptRemoved += m_XmlRpcRouter.ScriptRemoved; OnObjectRemoved += m_XmlRpcRouter.ObjectRemoved; } //Only needs created once MaintenanceThread = new MaintenanceThread(this); FindDefaultLSLScript(); IScriptDataConnector connector = Aurora.DataManager.DataManager.RequestPlugin<IScriptDataConnector>(); if (connector != null) connector.CacheStateSaves(); } scene.EventManager.OnStartupComplete += new OpenSim.Region.Framework.Scenes.EventManager.StartupComplete(EventManager_OnStartupComplete); scene.EventManager.TriggerAddToStartupQueue("ScriptEngine"); EventManager.HookUpRegionEvents(scene); scene.EventManager.OnRemoveScript += StopScript; scene.EventManager.OnScriptReset += OnScriptReset; scene.EventManager.OnGetScriptRunning += OnGetScriptRunning; scene.EventManager.OnStartScript += OnStartScript; scene.EventManager.OnStopScript += OnStopScript; UpdateLeasesTimer = new System.Timers.Timer(9.5 * 1000 * 60 /*9.5 minutes*/); UpdateLeasesTimer.Enabled = true; UpdateLeasesTimer.Elapsed += UpdateAllLeases; UpdateLeasesTimer.Start(); }
public void AddRegion(Scene scene) { if (m_ScriptConfig == null) { return; } m_ScriptFailCount = 0; m_ScriptErrorMessage = String.Empty; if (m_ScriptConfig == null) { // m_log.ErrorFormat("[XEngine] No script configuration found. Scripts disabled"); return; } m_Enabled = m_ScriptConfig.GetBoolean("Enabled", true); if (!m_Enabled) { return; } AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve; m_log.InfoFormat("[XEngine] Initializing scripts in region {0}", scene.RegionInfo.RegionName); m_Scene = scene; m_MinThreads = m_ScriptConfig.GetInt("MinThreads", 2); m_MaxThreads = m_ScriptConfig.GetInt("MaxThreads", 100); m_IdleTimeout = m_ScriptConfig.GetInt("IdleTimeout", 60); string priority = m_ScriptConfig.GetString("Priority", "BelowNormal"); m_MaxScriptQueue = m_ScriptConfig.GetInt("MaxScriptEventQueue", 300); m_StackSize = m_ScriptConfig.GetInt("ThreadStackSize", 262144); m_SleepTime = m_ScriptConfig.GetInt("MaintenanceInterval", 10) * 1000; m_EventLimit = m_ScriptConfig.GetInt("EventLimit", 30); m_KillTimedOutScripts = m_ScriptConfig.GetBoolean("KillTimedOutScripts", false); m_SaveTime = m_ScriptConfig.GetInt("SaveInterval", 120) * 1000; m_Prio = ThreadPriority.BelowNormal; switch (priority) { case "Lowest": m_Prio = ThreadPriority.Lowest; break; case "BelowNormal": m_Prio = ThreadPriority.BelowNormal; break; case "Normal": m_Prio = ThreadPriority.Normal; break; case "AboveNormal": m_Prio = ThreadPriority.AboveNormal; break; case "Highest": m_Prio = ThreadPriority.Highest; break; default: m_log.ErrorFormat("[XEngine] Invalid thread priority: '{0}'. Assuming BelowNormal", priority); break; } lock (m_ScriptEngines) { m_ScriptEngines.Add(this); } // Needs to be here so we can queue the scripts that need starting // m_Scene.EventManager.OnRezScript += OnRezScript; // Complete basic setup of the thread pool // SetupEngine(m_MinThreads, m_MaxThreads, m_IdleTimeout, m_Prio, m_MaxScriptQueue, m_StackSize); m_Scene.StackModuleInterface <IScriptModule>(this); m_XmlRpcRouter = m_Scene.RequestModuleInterface <IXmlRpcRouter>(); if (m_XmlRpcRouter != null) { OnScriptRemoved += m_XmlRpcRouter.ScriptRemoved; OnObjectRemoved += m_XmlRpcRouter.ObjectRemoved; } }