From 8e1d3386561f263646c10c875aa00af4b3c9f815 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Sun, 1 Jun 2008 01:01:16 +0000 Subject: * Refactor: Split opensim background server into a separate class --- .../LoadRegions/LoadRegionsPlugin.cs | 4 +- .../RemoteController/RemoteAdminPlugin.cs | 4 +- .../Rest/Regions/RestRegionPlugin.cs | 2 +- OpenSim/ApplicationPlugins/Rest/RestPlugin.cs | 6 +- OpenSim/Region/Application/Application.cs | 4 +- OpenSim/Region/Application/IApplicationPlugin.cs | 2 +- OpenSim/Region/Application/OpenSim.cs | 680 +++++++++++++++++++ OpenSim/Region/Application/OpenSimBackground.cs | 80 +++ OpenSim/Region/Application/OpenSimBase.cs | 702 ++++++++++++++++++++ OpenSim/Region/Application/OpenSimMain.cs | 729 --------------------- OpenSim/Region/Application/OpenSimMainConsole.cs | 679 ------------------- OpenSim/Tools/Export/OpenSimExport.cs | 2 +- 12 files changed, 1474 insertions(+), 1420 deletions(-) create mode 100644 OpenSim/Region/Application/OpenSim.cs create mode 100644 OpenSim/Region/Application/OpenSimBackground.cs create mode 100644 OpenSim/Region/Application/OpenSimBase.cs delete mode 100644 OpenSim/Region/Application/OpenSimMain.cs delete mode 100644 OpenSim/Region/Application/OpenSimMainConsole.cs (limited to 'OpenSim') diff --git a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs index dc4d1db..8dde28c 100644 --- a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs +++ b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs @@ -46,7 +46,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions #region IApplicationPlugin Members - public void Initialise(OpenSimMain openSim) + public void Initialise(OpenSimBase openSim) { m_log.Info("[LOADREGIONS]: Load Regions addin being initialised"); @@ -84,7 +84,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions #endregion - public void LoadRegionFromConfig(OpenSimMain openSim, ulong regionhandle) + public void LoadRegionFromConfig(OpenSimBase openSim, ulong regionhandle) { m_log.Info("[LOADREGIONS]: Load Regions addin being initialised"); diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index c436596..232fd09 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs @@ -50,11 +50,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private OpenSimMain m_app; + private OpenSimBase m_app; private BaseHttpServer m_httpd; private string requiredPassword = String.Empty; - public void Initialise(OpenSimMain openSim) + public void Initialise(OpenSimBase openSim) { try { diff --git a/OpenSim/ApplicationPlugins/Rest/Regions/RestRegionPlugin.cs b/OpenSim/ApplicationPlugins/Rest/Regions/RestRegionPlugin.cs index aeb91a9..9d68225 100644 --- a/OpenSim/ApplicationPlugins/Rest/Regions/RestRegionPlugin.cs +++ b/OpenSim/ApplicationPlugins/Rest/Regions/RestRegionPlugin.cs @@ -85,7 +85,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions /// Note that entries MUST be added to the active configuration files before /// the plugin can be enabled. /// - public override void Initialise(OpenSimMain openSim) + public override void Initialise(OpenSimBase openSim) { try { diff --git a/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs b/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs index ffabb2a..e4bd544 100644 --- a/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs +++ b/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs @@ -60,7 +60,7 @@ namespace OpenSim.ApplicationPlugins.Rest private IConfig _config; // Configuration source: Rest Plugins private IConfig _pluginConfig; // Configuration source: Plugin specific - private OpenSimMain _app; // The 'server' + private OpenSimBase _app; // The 'server' private BaseHttpServer _httpd; // The server's RPC interface private string _prefix; // URL prefix below // which all REST URLs @@ -114,7 +114,7 @@ namespace OpenSim.ApplicationPlugins.Rest /// /// OpenSimMain application /// - public OpenSimMain App + public OpenSimBase App { get { return _app; } } @@ -196,7 +196,7 @@ namespace OpenSim.ApplicationPlugins.Rest /// Note that entries MUST be added to the active configuration files before /// the plugin can be enabled. /// - public virtual void Initialise(OpenSimMain openSim) + public virtual void Initialise(OpenSimBase openSim) { RequestID = "0"; MsgID = RequestID; diff --git a/OpenSim/Region/Application/Application.cs b/OpenSim/Region/Application/Application.cs index 9aa885f..72fdf10 100644 --- a/OpenSim/Region/Application/Application.cs +++ b/OpenSim/Region/Application/Application.cs @@ -82,12 +82,12 @@ namespace OpenSim if (background) { - OpenSimMain sim = new OpenSimMain(configSource); + OpenSimBase sim = new OpenSimBackground(configSource); sim.StartUp(); } else { - OpenSimMain sim = new OpenSimMainConsole(configSource); + OpenSimBase sim = new OpenSim(configSource); sim.StartUp(); while (true) diff --git a/OpenSim/Region/Application/IApplicationPlugin.cs b/OpenSim/Region/Application/IApplicationPlugin.cs index 30f8da8..7ca4383 100644 --- a/OpenSim/Region/Application/IApplicationPlugin.cs +++ b/OpenSim/Region/Application/IApplicationPlugin.cs @@ -34,7 +34,7 @@ namespace OpenSim [TypeExtensionPoint("/OpenSim/Startup")] public interface IApplicationPlugin { - void Initialise(OpenSimMain openSim); + void Initialise(OpenSimBase openSim); void Close(); } } diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs new file mode 100644 index 0000000..1bed036 --- /dev/null +++ b/OpenSim/Region/Application/OpenSim.cs @@ -0,0 +1,680 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Reflection; +using System.Threading; +using libsecondlife; +using log4net; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Framework.Console; +using OpenSim.Framework.Statistics; +using OpenSim.Region.Environment.Interfaces; +using OpenSim.Region.Environment.Scenes; +using Timer=System.Timers.Timer; + +namespace OpenSim +{ + public delegate void ConsoleCommand(string[] comParams); + + /// + /// Interactive OpenSim region server + /// + public class OpenSim : OpenSimBase, conscmd_callback + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + protected string m_startupCommandsFile; + protected string m_shutdownCommandsFile; + + private string m_timedScript = "disabled"; + private Timer m_scriptTimer; + + public OpenSim(IConfigSource configSource) : base(configSource) + { + } + + protected override void ReadConfigSettings() + { + IConfig startupConfig = m_config.Configs["Startup"]; + + if (startupConfig != null) + { + m_startupCommandsFile = startupConfig.GetString("startup_console_commands_file", String.Empty); + m_shutdownCommandsFile = startupConfig.GetString("shutdown_console_commands_file", String.Empty); + + m_timedScript = startupConfig.GetString("timer_Script", "disabled"); + } + base.ReadConfigSettings(); + } + + /// + /// Performs initialisation of the scene, such as loading configuration from disk. + /// + public override void StartUp() + { + // + // Called from app startup (OpenSim.Application) + // + + m_log.Info("===================================================================="); + m_log.Info("========================= STARTING OPENSIM ========================="); + m_log.Info("===================================================================="); + m_log.InfoFormat("[OPENSIM MAIN]: Running in {0} mode", (m_sandbox ? "sandbox" : "grid")); + + m_console = CreateConsole(); + MainConsole.Instance = m_console; + InternalStartUp(); + + //Run Startup Commands + if (m_startupCommandsFile != String.Empty) + { + RunCommandScript(m_startupCommandsFile); + } + else + { + m_log.Info("[STARTUP]: No startup command script specified. Moving on..."); + } + + // Start timer script (run a script every xx seconds) + if (m_timedScript != "disabled") + { + m_scriptTimer = new Timer(); + m_scriptTimer.Enabled = true; + m_scriptTimer.Interval = 1200 * 1000; + m_scriptTimer.Elapsed += RunAutoTimerScript; + } + + PrintFileToConsole("startuplogo.txt"); + } + + protected ConsoleBase CreateConsole() + { + return new ConsoleBase("Region", this); + } + + private void RunAutoTimerScript(object sender, EventArgs e) + { + if (m_timedScript != "disabled") + { + RunCommandScript(m_timedScript); + } + } + + #region Console Commands + + /// + /// + /// + /// + private void RunCommandScript(string fileName) + { + m_log.Info("[COMMANDFILE]: Running " + fileName); + if (File.Exists(fileName)) + { + StreamReader readFile = File.OpenText(fileName); + string currentCommand; + while ((currentCommand = readFile.ReadLine()) != null) + { + if (currentCommand != String.Empty) + { + m_log.Info("[COMMANDFILE]: Running '" + currentCommand + "'"); + m_console.RunCommand(currentCommand); + } + } + } + else + { + m_log.Error("[COMMANDFILE]: Command script missing. Can not run commands"); + } + } + + private static void PrintFileToConsole(string fileName) + { + if (File.Exists(fileName)) + { + StreamReader readFile = File.OpenText(fileName); + string currentLine; + while ((currentLine = readFile.ReadLine()) != null) + { + m_log.Info("[!]" + currentLine); + } + } + } + + + /// + /// Runs commands issued by the server console from the operator + /// + /// The first argument of the parameter (the command) + /// Additional arguments passed to the command + public override void RunCmd(string command, string[] cmdparams) + { + base.RunCmd(command, cmdparams); + + switch (command) + { + case "clear-assets": + m_assetCache.Clear(); + break; + + case "set-time": + m_sceneManager.SetCurrentSceneTimePhase(Convert.ToInt32(cmdparams[0])); + break; + + case "force-update": + m_console.Notice("Updating all clients"); + m_sceneManager.ForceCurrentSceneClientUpdate(); + break; + + case "edit-scale": + if (cmdparams.Length == 4) + { + m_sceneManager.HandleEditCommandOnCurrentScene(cmdparams); + } + break; + + case "debug": + if (cmdparams.Length > 0) + { + Debug(cmdparams); + } + break; + + case "scene-debug": + if (cmdparams.Length == 3) + { + if (m_sceneManager.CurrentScene == null) + { + m_console.Error("CONSOLE", "Please use 'change-region ' first"); + } + else + { + m_sceneManager.CurrentScene.SetSceneCoreDebug(!Convert.ToBoolean(cmdparams[0]), !Convert.ToBoolean(cmdparams[1]), !Convert.ToBoolean(cmdparams[2])); + } + } + else + { + m_console.Error("scene-debug (where inside <> is true/false)"); + } + break; + + case "help": + m_console.Notice("alert - send alert to a designated user or all users."); + m_console.Notice(" alert [First] [Last] [Message] - send an alert to a user. Case sensitive."); + m_console.Notice(" alert general [Message] - send an alert to all users."); + m_console.Notice("backup - trigger a simulator backup"); + m_console.Notice("clear-assets - clear asset cache"); + m_console.Notice("create-region - creates a new region"); + m_console.Notice("create user - adds a new user."); + m_console.Notice("change-region [name] - sets the region that many of these commands affect."); + m_console.Notice("command-script [filename] - Execute command in a file."); + m_console.Notice("debug - debugging commands"); + m_console.Notice(" packet 0..255 - print incoming/outgoing packets (0=off)"); + m_console.Notice("scene-debug [scripting] [collision] [physics] - Enable/Disable debug stuff, each can be True/False"); + m_console.Notice("edit-scale [prim name] [x] [y] [z] - resize given prim"); + m_console.Notice("export-map [filename] - save image of world map"); + m_console.Notice("force-update - force an update of prims in the scene"); + m_console.Notice("load-xml [filename] - load prims from XML (DEPRECATED)"); + m_console.Notice("load-xml2 [filename] - load prims from XML using version 2 format"); + m_console.Notice("restart - disconnects all clients and restarts the sims in the instance."); + m_console.Notice("remove-region [name] - remove a region"); + m_console.Notice("save-xml [filename] - save prims to XML (DEPRECATED)"); + m_console.Notice("save-xml2 [filename] - save prims to XML using version 2 format"); + m_console.Notice("script - manually trigger scripts? or script commands?"); + m_console.Notice("set-time [x] - set the current scene time phase"); + m_console.Notice("show assets - show state of asset cache."); + m_console.Notice("show users - show info about connected users."); + m_console.Notice("show modules - shows info about loaded modules."); + m_console.Notice("show regions - show running region information."); + m_console.Notice("threads - list threads"); + m_console.Notice("config set section field value - set a config value"); + m_console.Notice("config get section field - get a config value"); + m_console.Notice("config save - save OpenSim.ini"); + m_console.Notice("terrain help - show help for terrain commands."); + break; + + case "threads": +// m_console.Notice("THREAD", Process.GetCurrentProcess().Threads.Count + " threads running:"); +// int _tc = 0; + +// foreach (ProcessThread pt in Process.GetCurrentProcess().Threads) +// { +// _tc++; +// m_console.Notice("THREAD", _tc + ": ID: " + pt.Id + ", Started: " + pt.StartTime.ToString() + ", CPU time: " + pt.TotalProcessorTime + ", Pri: " + pt.BasePriority.ToString() + ", State: " + pt.ThreadState.ToString()); +// } + + List threads = ThreadTracker.GetThreads(); + if (threads == null) + { + m_console.Notice("THREAD", "Thread tracking is only enabled in DEBUG mode."); + } + else + { + int _tc = 0; + m_console.Notice("THREAD", threads.Count + " threads are being tracked:"); + foreach (Thread t in threads) + { + _tc++; + m_console.Notice("THREAD", _tc + ": ID: " + t.ManagedThreadId.ToString() + ", Name: " + t.Name + ", Alive: " + t.IsAlive.ToString() + ", Pri: " + t.Priority.ToString() + ", State: " + t.ThreadState.ToString()); + } + } + + break; + case "save-xml": + m_log.Error("[CONSOLE]: PLEASE NOTE, save-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use save-xml2, please file a mantis detailing the reason."); + + if (cmdparams.Length > 0) + { + m_sceneManager.SaveCurrentSceneToXml(cmdparams[0]); + } + else + { + m_sceneManager.SaveCurrentSceneToXml(DEFAULT_PRIM_BACKUP_FILENAME); + } + break; + + case "load-xml": + m_log.Error("[CONSOLE]: PLEASE NOTE, load-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use load-xml2, please file a mantis detailing the reason."); + + LLVector3 loadOffset = new LLVector3(0, 0, 0); + if (cmdparams.Length > 0) + { + bool generateNewIDS = false; + if (cmdparams.Length > 1) + { + if (cmdparams[1] == "-newUID") + { + generateNewIDS = true; + } + if (cmdparams.Length > 2) + { + loadOffset.X = (float) Convert.ToDecimal(cmdparams[2]); + if (cmdparams.Length > 3) + { + loadOffset.Y = (float) Convert.ToDecimal(cmdparams[3]); + } + if (cmdparams.Length > 4) + { + loadOffset.Z = (float) Convert.ToDecimal(cmdparams[4]); + } + m_console.Error("loadOffsets = <" + loadOffset.X + "," + loadOffset.Y + "," + + loadOffset.Z + ">"); + } + } + m_sceneManager.LoadCurrentSceneFromXml(cmdparams[0], generateNewIDS, loadOffset); + } + else + { + m_sceneManager.LoadCurrentSceneFromXml(DEFAULT_PRIM_BACKUP_FILENAME, false, loadOffset); + } + break; + + case "save-xml2": + if (cmdparams.Length > 0) + { + m_sceneManager.SaveCurrentSceneToXml2(cmdparams[0]); + } + else + { + m_sceneManager.SaveCurrentSceneToXml2(DEFAULT_PRIM_BACKUP_FILENAME); + } + break; + + case "load-xml2": + if (cmdparams.Length > 0) + { + m_sceneManager.LoadCurrentSceneFromXml2(cmdparams[0]); + } + else + { + m_sceneManager.LoadCurrentSceneFromXml2(DEFAULT_PRIM_BACKUP_FILENAME); + } + break; + + case "load-oar": + m_log.Error("[CONSOLE]: Don't use me - I haven't yet been sufficiently implemented!"); + + if (cmdparams.Length > 0) + { + m_sceneManager.LoadArchiveToCurrentScene(cmdparams[0]); + } + else + { + m_sceneManager.LoadArchiveToCurrentScene(DEFAULT_OAR_BACKUP_FILENAME); + } + break; + + case "save-oar": + m_log.Error("[CONSOLE]: Don't use me - I haven't yet been sufficiently implemented!"); + + if (cmdparams.Length > 0) + { + m_sceneManager.SaveCurrentSceneToArchive(cmdparams[0]); + } + else + { + m_sceneManager.SaveCurrentSceneToArchive(DEFAULT_OAR_BACKUP_FILENAME); + } + break; + + case "plugin": + m_sceneManager.SendCommandToPluginModules(cmdparams); + break; + + case "command-script": + if (cmdparams.Length > 0) + { + RunCommandScript(cmdparams[0]); + } + break; + + case "backup": + m_sceneManager.BackupCurrentScene(); + break; + + case "alert": + m_sceneManager.HandleAlertCommandOnCurrentScene(cmdparams); + break; + + case "create": + CreateAccount(cmdparams); + break; + + case "create-region": + CreateRegion(new RegionInfo(cmdparams[0], "Regions/" + cmdparams[1],false), true); + break; + case "remove-region": + string regName = CombineParams(cmdparams, 0); + + Scene killScene; + if (m_sceneManager.TryGetScene(regName, out killScene)) + { + // only need to check this if we are not at the + // root level + if ((m_sceneManager.CurrentScene != null) && + (m_sceneManager.CurrentScene.RegionInfo.RegionID == killScene.RegionInfo.RegionID)) + { + m_sceneManager.TrySetCurrentScene(".."); + } + m_regionData.Remove(killScene.RegionInfo); + m_sceneManager.CloseScene(killScene); + } + break; + + case "restart": + m_sceneManager.RestartCurrentScene(); + break; + + case "change-region": + if (cmdparams.Length > 0) + { + string regionName = CombineParams(cmdparams, 0); + + if (!m_sceneManager.TrySetCurrentScene(regionName)) + { + m_console.Error("Couldn't set current region to: " + regionName); + } + } + + if (m_sceneManager.CurrentScene == null) + { + m_console.Error("CONSOLE", "Currently at Root level. To change region please use 'change-region '"); + } + else + { + m_console.Error("CONSOLE", "Current Region: " + m_sceneManager.CurrentScene.RegionInfo.RegionName + + ". To change region please use 'change-region '"); + } + + break; + + case "export-map": + if (cmdparams.Length > 0) + { + m_sceneManager.CurrentOrFirstScene.ExportWorldMap(cmdparams[0]); + } + else + { + m_sceneManager.CurrentOrFirstScene.ExportWorldMap("exportmap.jpg"); + } + break; + + case "config": + string n = command.ToUpper(); + if (cmdparams.Length > 0) + { + switch (cmdparams[0].ToLower()) + { + case "set": + if (cmdparams.Length < 4) + { + m_console.Error(n, "SYNTAX: " + n + " SET SECTION KEY VALUE"); + m_console.Error(n, "EXAMPLE: " + n + " SET ScriptEngine.DotNetEngine NumberOfScriptThreads 5"); + } + else + { + IConfig c = DefaultConfig().Configs[cmdparams[1]]; + if (c == null) + c = DefaultConfig().AddConfig(cmdparams[1]); + string _value = String.Join(" ", cmdparams, 3, cmdparams.Length - 3); + c.Set(cmdparams[2], _value); + m_config.Merge(c.ConfigSource); + + m_console.Error(n, n + " " + n + " " + cmdparams[1] + " " + cmdparams[2] + " " + + _value); + } + break; + case "get": + if (cmdparams.Length < 3) + { + m_console.Error(n, "SYNTAX: " + n + " GET SECTION KEY"); + m_console.Error(n, "EXAMPLE: " + n + " GET ScriptEngine.DotNetEngine NumberOfScriptThreads"); + } + else + { + IConfig c = DefaultConfig().Configs[cmdparams[1]]; + if (c == null) + { + m_console.Notice(n, "Section \"" + cmdparams[1] + "\" does not exist."); + break; + } + else + { + m_console.Notice(n + " GET " + cmdparams[1] + " " + cmdparams[2] + ": " + + c.GetString(cmdparams[2])); + } + } + + break; + case "save": + m_console.Notice("Saving configuration file: " + Application.iniFilePath); + m_config.Save(Application.iniFilePath); + break; + } + } + break; + case "modules": + if (cmdparams.Length > 0) + { + switch (cmdparams[0].ToLower()) + { + case "list": + foreach (IRegionModule irm in m_moduleLoader.GetLoadedSharedModules) + { + m_console.Notice("Shared region module: " + irm.Name); + } + break; + case "unload": + if (cmdparams.Length > 1) + { + foreach (IRegionModule rm in new ArrayList(m_moduleLoader.GetLoadedSharedModules)) + { + if (rm.Name.ToLower() == cmdparams[1].ToLower()) + { + m_console.Notice("Unloading module: " + rm.Name); + m_moduleLoader.UnloadModule(rm); + } + } + } + break; + case "load": + if (cmdparams.Length > 1) + { + foreach (Scene s in new ArrayList(m_sceneManager.Scenes)) + { + + m_console.Notice("Loading module: " + cmdparams[1]); + m_moduleLoader.LoadRegionModules(cmdparams[1], s); + } + } + break; + } + } + + break; + default: + string[] tmpPluginArgs = new string[cmdparams.Length + 1]; + cmdparams.CopyTo(tmpPluginArgs, 1); + tmpPluginArgs[0] = command; + + m_sceneManager.SendCommandToPluginModules(tmpPluginArgs); + break; + } + } + + public void Debug(string[] args) + { + switch (args[0]) + { + case "packet": + if (args.Length > 1) + { + int newDebug; + if (int.TryParse(args[1], out newDebug)) + { + m_sceneManager.SetDebugPacketOnCurrentScene(newDebug); + } + else + { + m_console.Error("packet debug should be 0..2"); + } + m_console.Notice("New packet debug: " + newDebug.ToString()); + } + + break; + default: + m_console.Error("Unknown debug"); + break; + } + } + + // see BaseOpenSimServer + public override void Show(string ShowWhat) + { + base.Show(ShowWhat); + + switch (ShowWhat) + { + case "assets": + m_assetCache.ShowState(); + break; + + case "users": + IList agents = m_sceneManager.GetCurrentSceneAvatars(); + + m_console.Notice(String.Format("\nAgents connected: {0}\n", agents.Count)); + + m_console.Notice( + String.Format("{0,-16}{1,-16}{2,-37}{3,-16}", "Firstname", "Lastname", + "Agent ID","Region")); + + foreach (ScenePresence presence in agents) + { + RegionInfo regionInfo = m_sceneManager.GetRegionInfo(presence.RegionHandle); + string regionName; + + if (regionInfo == null) + { + regionName = "Unresolvable"; + } + else + { + regionName = regionInfo.RegionName; + } + + m_console.Notice( + String.Format( + "{0,-16}{1,-16}{2,-37}{3,-16}", + presence.Firstname, + presence.Lastname, + presence.UUID, + regionName)); + } + + m_console.Notice(""); + break; + + case "modules": + m_console.Notice("The currently loaded shared modules are:"); + foreach (IRegionModule module in m_moduleLoader.GetLoadedSharedModules) + { + m_console.Notice("Shared Module: " + module.Name); + } + break; + + case "regions": + m_sceneManager.ForEachScene( + delegate(Scene scene) + { + m_console.Notice("Region Name: " + scene.RegionInfo.RegionName + " , Region XLoc: " + + scene.RegionInfo.RegionLocX + " , Region YLoc: " + + scene.RegionInfo.RegionLocY); + }); + break; + } + } + + private static string CombineParams(string[] commandParams, int pos) + { + string result = String.Empty; + for (int i = pos; i < commandParams.Length; i++) + { + result += commandParams[i] + " "; + } + result = result.TrimEnd(' '); + return result; + } + + #endregion + } +} diff --git a/OpenSim/Region/Application/OpenSimBackground.cs b/OpenSim/Region/Application/OpenSimBackground.cs new file mode 100644 index 0000000..0c3a0a3 --- /dev/null +++ b/OpenSim/Region/Application/OpenSimBackground.cs @@ -0,0 +1,80 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Reflection; +using System.Threading; +using log4net; +using Nini.Config; + +namespace OpenSim +{ + /// + /// Consoleless OpenSim region server + /// + public class OpenSimBackground : OpenSimBase + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private ManualResetEvent WorldHasComeToAnEnd = new ManualResetEvent(false); + + public OpenSimBackground(IConfigSource configSource) : base(configSource) + { + } + + /// + /// Performs initialisation of the scene, such as loading configuration from disk. + /// + public override void StartUp() + { + // + // Called from app startup (OpenSim.Application) + // + m_log.Info("===================================================================="); + m_log.Info("========================= STARTING OPENSIM ========================="); + m_log.Info("===================================================================="); + m_log.InfoFormat("[OPENSIM MAIN]: Running in background {0} mode", m_sandbox ? "sandbox" : "grid"); + + InternalStartUp(); + + // We are done with startup + m_log.InfoFormat("[OPENSIM MAIN]: Startup complete, serving {0} region{1}", + m_clientServers.Count.ToString(), m_clientServers.Count > 1 ? "s" : ""); + + WorldHasComeToAnEnd.WaitOne(); + } + + /// + /// Performs any last-minute sanity checking and shuts down the region server + /// + public override void Shutdown() + { + WorldHasComeToAnEnd.Set(); + + base.Shutdown(); + } + } +} diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs new file mode 100644 index 0000000..468881e --- /dev/null +++ b/OpenSim/Region/Application/OpenSimBase.cs @@ -0,0 +1,702 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Reflection; +using System.Text; +using System.Threading; +using libsecondlife; +using log4net; +using Mono.Addins; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Framework.Communications.Cache; +using OpenSim.Framework.Servers; +using OpenSim.Framework.Statistics; +using OpenSim.Region.ClientStack; +using OpenSim.Region.Communications.Local; +using OpenSim.Region.Communications.OGS1; +using OpenSim.Region.Environment; +using OpenSim.Region.Environment.Interfaces; +using OpenSim.Region.Environment.Scenes; +using OpenSim.Region.Physics.Manager; + +namespace OpenSim +{ + /// + /// Common OpenSim region service code + /// + public class OpenSimBase : RegionApplicationBase + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + protected string proxyUrl; + protected int proxyOffset = 0; + + /// + /// The file used to load and save prim backup xml if none has been specified + /// + protected const string DEFAULT_PRIM_BACKUP_FILENAME = "prim-backup.xml"; + + /// + /// The file use to load and save an opensim archive if none has been specified + /// + protected const string DEFAULT_OAR_BACKUP_FILENAME = "scene.oar.tar"; + + public string m_physicsEngine; + public string m_meshEngineName; + public string m_scriptEngine; + public bool m_sandbox; + public bool user_accounts; + public bool m_gridLocalAsset; + public bool m_see_into_region_from_neighbor; + + protected LocalLoginService m_loginService; + + protected string m_storageDll; + + protected List m_clientServers = new List(); + protected List m_regionData = new List(); + + protected bool m_physicalPrim; + + protected bool m_standaloneAuthenticate = false; + protected string m_standaloneWelcomeMessage = null; + protected string m_standaloneInventoryPlugin; + protected string m_standaloneAssetPlugin; + protected string m_standaloneUserPlugin; + + private string m_standaloneInventorySource; + private string m_standaloneAssetSource; + private string m_standaloneUserSource; + + protected string m_assetStorage = "local"; + + public ConsoleCommand CreateAccount = null; + protected bool m_dumpAssetsToFile; + + protected List m_plugins = new List(); + + protected IConfigSource m_finalConfig = null; + + protected IniConfigSource m_config; + + public IniConfigSource ConfigSource + { + get { return m_config; } + set { m_config = value; } + } + + public List ClientServers + { + get { return m_clientServers; } + } + + public List RegionData + { + get { return m_regionData; } + } + + public new BaseHttpServer HttpServer + { + get { return m_httpServer; } + } + + public new uint HttpServerPort + { + get { return m_httpServerPort; } + } + + protected ModuleLoader m_moduleLoader; + + public ModuleLoader ModuleLoader + { + get { return m_moduleLoader; } + set { m_moduleLoader = value; } + } + + public OpenSimBase(IConfigSource configSource) + : base() + { + IConfig startupConfig = configSource.Configs["Startup"]; + + // The Mono addin manager (in Mono.Addins.dll version 0.2.0.0) occasionally seems to corrupt its addin cache + // Hence, as a temporary solution we'll remove it before each startup + if (Directory.Exists("addin-db-000")) + Directory.Delete("addin-db-000", true); + + if (Directory.Exists("addin-db-001")) + Directory.Delete("addin-db-001", true); + + // This blocks the scanning warnings from outputing to the console. + TextWriter oldOutput = Console.Out; + Console.SetOut(new StreamWriter(Stream.Null)); + + AddinManager.Initialize("."); + AddinManager.Registry.Update(null); + + // Returns the console.writelines back to the console's stream + Console.SetOut(oldOutput); + + Application.iniFilePath = startupConfig.GetString("inifile", "OpenSim.ini"); + + m_config = new IniConfigSource(); + //check for .INI file (either default or name passed in command line) + if (File.Exists(Application.iniFilePath)) + { + m_config.Merge(new IniConfigSource(Application.iniFilePath)); + m_config.Merge(configSource); + } + else + { + Application.iniFilePath = Path.Combine(Util.configDir(), Application.iniFilePath); + if (File.Exists(Application.iniFilePath)) + { + m_config.Merge(new IniConfigSource(Application.iniFilePath)); + m_config.Merge(configSource); + } + else + { + // no default config files, so set default values, and save it + m_config.Merge(DefaultConfig()); + m_config.Merge(configSource); + m_config.Save(Application.iniFilePath); + } + } + + ReadConfigSettings(); + } + + public static IConfigSource DefaultConfig() + { + IConfigSource DefaultConfig = new IniConfigSource(); + if (DefaultConfig.Configs["Startup"] == null) + DefaultConfig.AddConfig("Startup"); + IConfig config = DefaultConfig.Configs["Startup"]; + if (config != null) + { + config.Set("gridmode", false); + config.Set("physics", "basicphysics"); + config.Set("physical_prim", true); + config.Set("see_into_this_sim_from_neighbor", true); + config.Set("serverside_object_permissions", false); + config.Set("storage_plugin", "OpenSim.Data.SQLite.dll"); + config.Set("storage_connection_string", "URI=file:OpenSim.db,version=3"); + config.Set("storage_prim_inventories", true); + config.Set("startup_console_commands_file", String.Empty); + config.Set("shutdown_console_commands_file", String.Empty); + config.Set("script_engine", "OpenSim.Region.ScriptEngine.DotNetEngine.dll"); + config.Set("asset_database", "sqlite"); + } + + if (DefaultConfig.Configs["StandAlone"] == null) + DefaultConfig.AddConfig("StandAlone"); + + config = DefaultConfig.Configs["StandAlone"]; + if (config != null) + { + config.Set("accounts_authenticate", false); + config.Set("welcome_message", "Welcome to OpenSimulator"); + config.Set("inventory_plugin", "OpenSim.Data.SQLite.dll"); + config.Set("inventory_source", ""); + config.Set("userDatabase_plugin", "OpenSim.Data.SQLite.dll"); + config.Set("user_source", ""); + config.Set("asset_plugin", "OpenSim.Data.SQLite.dll"); + config.Set("asset_source", ""); + config.Set("dump_assets_to_file", false); + } + + if (DefaultConfig.Configs["Network"] == null) + DefaultConfig.AddConfig("Network"); + config = DefaultConfig.Configs["Network"]; + if (config != null) + { + config.Set("default_location_x", 1000); + config.Set("default_location_y", 1000); + config.Set("http_listener_port", NetworkServersInfo.DefaultHttpListenerPort); + config.Set("remoting_listener_port", NetworkServersInfo.RemotingListenerPort); + config.Set("grid_server_url", "http://127.0.0.1:" + GridConfig.DefaultHttpPort.ToString()); + config.Set("grid_send_key", "null"); + config.Set("grid_recv_key", "null"); + config.Set("user_server_url", "http://127.0.0.1:" + UserConfig.DefaultHttpPort.ToString()); + config.Set("user_send_key", "null"); + config.Set("user_recv_key", "null"); + config.Set("asset_server_url", "http://127.0.0.1:" + AssetConfig.DefaultHttpPort.ToString()); + config.Set("inventory_server_url", "http://127.0.0.1:" + InventoryConfig.DefaultHttpPort.ToString()); + } + + if (DefaultConfig.Configs["RemoteAdmin"] == null) + DefaultConfig.AddConfig("RemoteAdmin"); + config = DefaultConfig.Configs["RemoteAdmin"]; + if (config != null) + { + config.Set("enabled", "false"); + } + + if (DefaultConfig.Configs["Voice"] == null) + DefaultConfig.AddConfig("Voice"); + config = DefaultConfig.Configs["Voice"]; + if (config != null) + { + config.Set("enabled", "false"); + } + return DefaultConfig; + + } + + protected virtual void ReadConfigSettings() + { + m_networkServersInfo = new NetworkServersInfo(); + + IConfig startupConfig = m_config.Configs["Startup"]; + + if (startupConfig != null) + { + m_sandbox = !startupConfig.GetBoolean("gridmode", false); + m_physicsEngine = startupConfig.GetString("physics", "basicphysics"); + m_meshEngineName = startupConfig.GetString("meshing", "ZeroMesher"); + + m_physicalPrim = startupConfig.GetBoolean("physical_prim", true); + + m_see_into_region_from_neighbor = startupConfig.GetBoolean("see_into_this_sim_from_neighbor", true); + + m_storageDll = startupConfig.GetString("storage_plugin", "OpenSim.Data.SQLite.dll"); + if (m_storageDll == "OpenSim.DataStore.MonoSqlite.dll") + { + m_storageDll = "OpenSim.Data.SQLite.dll"; + Console.WriteLine("WARNING: OpenSim.DataStore.MonoSqlite.dll is deprecated. Set storage_plugin to OpenSim.Data.SQLite.dll."); + Thread.Sleep(3000); + } + m_storageConnectionString + = startupConfig.GetString("storage_connection_string", "URI=file:OpenSim.db,version=3"); + m_storagePersistPrimInventories + = startupConfig.GetBoolean("storage_prim_inventories", true); + + m_scriptEngine = startupConfig.GetString("script_engine", "OpenSim.Region.ScriptEngine.DotNetEngine.dll"); + m_assetStorage = startupConfig.GetString("asset_database", "local"); + } + + IConfig standaloneConfig = m_config.Configs["StandAlone"]; + if (standaloneConfig != null) + { + m_standaloneAuthenticate = standaloneConfig.GetBoolean("accounts_authenticate", false); + m_standaloneWelcomeMessage = standaloneConfig.GetString("welcome_message", "Welcome to OpenSim"); + m_standaloneInventoryPlugin = + standaloneConfig.GetString("inventory_plugin", "OpenSim.Data.SQLite.dll"); + m_standaloneInventorySource = + standaloneConfig.GetString("inventory_source",""); + m_standaloneUserPlugin = + standaloneConfig.GetString("userDatabase_plugin", "OpenSim.Data.SQLite.dll"); + m_standaloneUserSource = + standaloneConfig.GetString("user_source",""); + m_standaloneAssetPlugin = + standaloneConfig.GetString("asset_plugin", "OpenSim.Data.SQLite.dll"); + m_standaloneAssetSource = + standaloneConfig.GetString("asset_source",""); + + m_dumpAssetsToFile = standaloneConfig.GetBoolean("dump_assets_to_file", false); + } + + m_networkServersInfo.loadFromConfiguration(m_config); + } + + /// + /// Performs initialisation of the scene, such as loading configuration from disk. + /// + protected void InternalStartUp() + { + m_log.Info("[STARTUP]: Version " + m_version + "\n"); + + m_stats = StatsManager.StartCollectingSimExtraStats(); + + // Do baseclass startup sequence: OpenSim.Region.ClientStack.RegionApplicationBase.StartUp + // TerrainManager, StorageManager, HTTP Server + // This base will call abstract Initialize + base.StartUp(); + + // StandAlone mode? m_sandbox is determined by !startupConfig.GetBoolean("gridmode", false) + if (m_sandbox) + { + LocalInventoryService inventoryService = new LocalInventoryService(); + inventoryService.AddPlugin(m_standaloneInventoryPlugin, m_standaloneInventorySource); + + LocalUserServices userService = + new LocalUserServices(m_networkServersInfo, m_networkServersInfo.DefaultHomeLocX, + m_networkServersInfo.DefaultHomeLocY, inventoryService); + userService.AddPlugin(m_standaloneUserPlugin, m_standaloneUserSource); + + LocalBackEndServices backendService = new LocalBackEndServices(); + + CommunicationsLocal localComms = + new CommunicationsLocal(m_networkServersInfo, m_httpServer, m_assetCache, userService, + inventoryService, backendService, backendService, m_dumpAssetsToFile); + m_commsManager = localComms; + + m_loginService = + new LocalLoginService(userService, m_standaloneWelcomeMessage, localComms, m_networkServersInfo, + m_standaloneAuthenticate); + m_loginService.OnLoginToRegion += backendService.AddNewSession; + + // set up XMLRPC handler for client's initial login request message + m_httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod); + + // provides the web form login + m_httpServer.AddHTTPHandler("login", m_loginService.ProcessHTMLLogin); + + // Provides the LLSD login + m_httpServer.SetLLSDHandler(m_loginService.LLSDLoginMethod); + + CreateAccount = localComms.doCreate; + } + else + { + // We are in grid mode + m_commsManager = new CommunicationsOGS1(m_networkServersInfo, m_httpServer, m_assetCache); + m_httpServer.AddStreamHandler(new SimStatusHandler()); + } + + proxyUrl = ConfigSource.Configs["Network"].GetString("proxy_url", ""); + proxyOffset = Int32.Parse(ConfigSource.Configs["Network"].GetString("proxy_offset", "0")); + + // Create a ModuleLoader instance + m_moduleLoader = new ModuleLoader(m_config); + + ExtensionNodeList nodes = AddinManager.GetExtensionNodes("/OpenSim/Startup"); + foreach (TypeExtensionNode node in nodes) + { + m_log.InfoFormat("[PLUGINS]: Loading OpenSim application plugin {0}", node.Path); + IApplicationPlugin plugin = (IApplicationPlugin)node.CreateInstance(); + plugin.Initialise(this); + m_plugins.Add(plugin); + } + } + + protected override void Initialize() + { + // + // Called from base.StartUp() + // + + m_httpServerPort = m_networkServersInfo.HttpListenerPort; + + IAssetServer assetServer; + if (m_assetStorage == "grid") + { + assetServer = new GridAssetClient(m_networkServersInfo.AssetURL); + } + else + { + SQLAssetServer sqlAssetServer = new SQLAssetServer(m_standaloneAssetPlugin, m_standaloneAssetSource); + sqlAssetServer.LoadDefaultAssets(); + assetServer = sqlAssetServer; + } + + m_assetCache = new AssetCache(assetServer); + + m_sceneManager.OnRestartSim += handleRestartRegion; + } + + public LLUUID CreateUser(string tempfirstname, string templastname, string tempPasswd, uint regX, uint regY) + { + return m_commsManager.AddUser(tempfirstname,templastname,tempPasswd,regX,regY); + } + + /// + /// Execute the region creation process. This includes setting up scene infrastructure. + /// + /// + /// + /// + public IClientNetworkServer CreateRegion(RegionInfo regionInfo, bool portadd_flag) + { + return CreateRegion(regionInfo, portadd_flag, false); + } + + /// + /// Execute the region creation process. This includes setting up scene infrastructure. + /// + /// + /// + /// + public IClientNetworkServer CreateRegion(RegionInfo regionInfo) + { + return CreateRegion(regionInfo, false, true); + } + + /// + /// Execute the region creation process. This includes setting up scene infrastructure. + /// + /// + /// + /// + /// + public IClientNetworkServer CreateRegion(RegionInfo regionInfo, bool portadd_flag, bool do_post_init) + { + int port = regionInfo.InternalEndPoint.Port; + + // set initial RegionID to originRegionID in RegionInfo. (it needs for loding prims) + regionInfo.originRegionID = regionInfo.RegionID; + + // set initial ServerURI + regionInfo.ServerURI = "http://" + regionInfo.ExternalHostName + + ":" + regionInfo.InternalEndPoint.Port.ToString(); + + regionInfo.HttpPort = m_httpServerPort; + + if ((proxyUrl.Length > 0) && (portadd_flag)) + { + // set proxy url to RegionInfo + regionInfo.proxyUrl = proxyUrl; + Util.XmlRpcCommand(proxyUrl, "AddPort", port, port + proxyOffset, regionInfo.ExternalHostName); + } + + IClientNetworkServer clientServer; + Scene scene = SetupScene(regionInfo, proxyOffset, out clientServer); + + m_log.Info("[MODULES]: Loading Region's modules"); + + List modules = m_moduleLoader.PickupModules(scene, "."); + // This needs to be ahead of the script engine load, so the + // script module can pick up events exposed by a module + m_moduleLoader.InitialiseSharedModules(scene); + + //m_moduleLoader.PickupModules(scene, "ScriptEngines"); + //m_moduleLoader.LoadRegionModules(Path.Combine("ScriptEngines", m_scriptEngine), scene); + + if (string.IsNullOrEmpty(m_scriptEngine)) + { + m_log.Info("[MODULES]: No script engien module specified"); + } + else + { + m_log.Info("[MODULES]: Loading scripting engine modules"); + foreach (string module in m_scriptEngine.Split(',')) + { + string mod = module.Trim(" \t".ToCharArray()); // Clean up name + m_log.Info("[MODULES]: Loading scripting engine: " + mod); + try + { + m_moduleLoader.LoadRegionModules(Path.Combine("ScriptEngines", mod), scene); + } + catch (Exception ex) + { + m_log.Error("[MODULES]: Failed to load script engine: " + ex.ToString()); + } + } + } + + scene.SetModuleInterfaces(); + + //moved these here as the terrain texture has to be created after the modules are initialized + // and has to happen before the region is registered with the grid. + scene.CreateTerrainTexture(true); + + try + { + scene.RegisterRegionWithGrid(); + } + catch (Exception e) + { + m_log.ErrorFormat("[STARTUP]: Registration of region with grid failed, aborting startup - {0}", e); + + // Carrying on now causes a lot of confusion down the line - we need to get the user's attention + System.Environment.Exit(1); + } + + // We need to do this after we've initialized the scripting engines. + scene.StartScripts(); + + scene.loadAllLandObjectsFromStorage(regionInfo.originRegionID); + scene.EventManager.TriggerParcelPrimCountUpdate(); + + m_sceneManager.Add(scene); + + m_clientServers.Add(clientServer); + m_regionData.Add(regionInfo); + clientServer.Start(); + + if (do_post_init) + { + foreach (IRegionModule module in modules) + { + module.PostInitialise(); + } + } + + return clientServer; + } + + protected override StorageManager CreateStorageManager(string connectionstring) + { + return new StorageManager(m_storageDll, connectionstring, m_storagePersistPrimInventories); + } + + protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, + AgentCircuitManager circuitManager) + { + SceneCommunicationService sceneGridService = new SceneCommunicationService(m_commsManager); + return + new Scene(regionInfo, circuitManager, m_commsManager, sceneGridService, m_assetCache, + storageManager, m_httpServer, + m_moduleLoader, m_dumpAssetsToFile, m_physicalPrim, m_see_into_region_from_neighbor, m_config, + m_version); + + } + + public void handleRestartRegion(RegionInfo whichRegion) + { + m_log.Error("[OPENSIM MAIN]: Got restart signal from SceneManager"); + + // Shutting down the client server + bool foundClientServer = false; + int clientServerElement = 0; + + for (int i = 0; i < m_clientServers.Count; i++) + { + if (m_clientServers[i].HandlesRegion(new Location(whichRegion.RegionHandle))) + { + clientServerElement = i; + foundClientServer = true; + break; + } + } + if (foundClientServer) + { + m_clientServers[clientServerElement].Server.Close(); + m_clientServers.RemoveAt(clientServerElement); + } + + //Removing the region from the sim's database of regions.. + int RegionHandleElement = -1; + for (int i = 0; i < m_regionData.Count; i++) + { + if (whichRegion.RegionHandle == m_regionData[i].RegionHandle) + { + RegionHandleElement = i; + } + } + if (RegionHandleElement >= 0) + { + m_regionData.RemoveAt(RegionHandleElement); + } + + CreateRegion(whichRegion, true); + } + + # region Setup methods + + protected override PhysicsScene GetPhysicsScene() + { + return GetPhysicsScene(m_physicsEngine, m_meshEngineName, m_config); + } + + /// + /// Handler to supply the current status of this sim + /// + /// Currently this is always OK if the simulator is still listening for connections on its HTTP service + /// + protected class SimStatusHandler : IStreamedRequestHandler + { + public byte[] Handle(string path, Stream request, + OSHttpRequest httpRequest, OSHttpResponse httpResponse) + { + return Encoding.UTF8.GetBytes("OK"); + } + + public string ContentType + { + get { return "text/plain"; } + } + + public string HttpMethod + { + get { return "GET"; } + } + + public string Path + { + get { return "/simstatus/"; } + } + } + + #endregion + + /// + /// Performs any last-minute sanity checking and shuts down the region server + /// + public override void Shutdown() + { + if (proxyUrl.Length > 0) + { + Util.XmlRpcCommand(proxyUrl, "Stop"); + } + + m_log.Info("[SHUTDOWN]: Closing all threads"); + m_log.Info("[SHUTDOWN]: Killing listener thread"); + m_log.Info("[SHUTDOWN]: Killing clients"); + // TODO: implement this + m_log.Info("[SHUTDOWN]: Closing console and terminating"); + + m_sceneManager.Close(); + + base.Shutdown(); + } + + /// + /// Get the start time and up time of Region server + /// + /// The first out parameter describing when the Region server started + /// The second out parameter describing how long the Region server has run + public void GetRunTime(out string starttime, out string uptime) + { + starttime = m_startuptime.ToString(); + uptime = (DateTime.Now - m_startuptime).ToString(); + } + + /// + /// Get the number of the avatars in the Region server + /// + /// The first out parameter describing the number of all the avatars in the Region server + public void GetAvatarNumber(out int usernum) + { + usernum = m_sceneManager.GetCurrentSceneAvatars().Count; + } + + /// + /// Get the number of regions + /// + /// The first out parameter describing the number of regions + public void GetRegionNumber(out int regionnum) + { + regionnum = m_sceneManager.Scenes.Count; + } + } +} + diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs deleted file mode 100644 index 03dbf78..0000000 --- a/OpenSim/Region/Application/OpenSimMain.cs +++ /dev/null @@ -1,729 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Net; -using System.Reflection; -using System.Text; -using System.Threading; -using libsecondlife; -using log4net; -using Mono.Addins; -using Nini.Config; -using OpenSim.Framework; -using OpenSim.Framework.Communications.Cache; -using OpenSim.Framework.Servers; -using OpenSim.Framework.Statistics; -using OpenSim.Region.ClientStack; -using OpenSim.Region.Communications.Local; -using OpenSim.Region.Communications.OGS1; -using OpenSim.Region.Environment; -using OpenSim.Region.Environment.Interfaces; -using OpenSim.Region.Environment.Scenes; -using OpenSim.Region.Physics.Manager; - -namespace OpenSim -{ - public class OpenSimMain : RegionApplicationBase - { - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - protected string proxyUrl; - protected int proxyOffset = 0; - - /// - /// The file used to load and save prim backup xml if none has been specified - /// - protected const string DEFAULT_PRIM_BACKUP_FILENAME = "prim-backup.xml"; - - /// - /// The file use to load and save an opensim archive if none has been specified - /// - protected const string DEFAULT_OAR_BACKUP_FILENAME = "scene.oar.tar"; - - public string m_physicsEngine; - public string m_meshEngineName; - public string m_scriptEngine; - public bool m_sandbox; - public bool user_accounts; - public bool m_gridLocalAsset; - public bool m_see_into_region_from_neighbor; - - protected LocalLoginService m_loginService; - - protected string m_storageDll; - - protected List m_clientServers = new List(); - protected List m_regionData = new List(); - - protected bool m_physicalPrim; - - protected bool m_standaloneAuthenticate = false; - protected string m_standaloneWelcomeMessage = null; - protected string m_standaloneInventoryPlugin; - protected string m_standaloneAssetPlugin; - protected string m_standaloneUserPlugin; - - private string m_standaloneInventorySource; - private string m_standaloneAssetSource; - private string m_standaloneUserSource; - - protected string m_assetStorage = "local"; - - public ConsoleCommand CreateAccount = null; - protected bool m_dumpAssetsToFile; - - protected List m_plugins = new List(); - - protected IConfigSource m_finalConfig = null; - - protected IniConfigSource m_config; - - public IniConfigSource ConfigSource - { - get { return m_config; } - set { m_config = value; } - } - - public List ClientServers - { - get { return m_clientServers; } - } - - public List RegionData - { - get { return m_regionData; } - } - - public new BaseHttpServer HttpServer - { - get { return m_httpServer; } - } - - public new uint HttpServerPort - { - get { return m_httpServerPort; } - } - - protected ModuleLoader m_moduleLoader; - - public ModuleLoader ModuleLoader - { - get { return m_moduleLoader; } - set { m_moduleLoader = value; } - } - - public OpenSimMain(IConfigSource configSource) - : base() - { - IConfig startupConfig = configSource.Configs["Startup"]; - - // The Mono addin manager (in Mono.Addins.dll version 0.2.0.0) occasionally seems to corrupt its addin cache - // Hence, as a temporary solution we'll remove it before each startup - if (Directory.Exists("addin-db-000")) - Directory.Delete("addin-db-000", true); - - if (Directory.Exists("addin-db-001")) - Directory.Delete("addin-db-001", true); - - // This blocks the scanning warnings from outputing to the console. - TextWriter oldOutput = Console.Out; - Console.SetOut(new StreamWriter(Stream.Null)); - - AddinManager.Initialize("."); - AddinManager.Registry.Update(null); - - // Returns the console.writelines back to the console's stream - Console.SetOut(oldOutput); - - Application.iniFilePath = startupConfig.GetString("inifile", "OpenSim.ini"); - - m_config = new IniConfigSource(); - //check for .INI file (either default or name passed in command line) - if (File.Exists(Application.iniFilePath)) - { - m_config.Merge(new IniConfigSource(Application.iniFilePath)); - m_config.Merge(configSource); - } - else - { - Application.iniFilePath = Path.Combine(Util.configDir(), Application.iniFilePath); - if (File.Exists(Application.iniFilePath)) - { - m_config.Merge(new IniConfigSource(Application.iniFilePath)); - m_config.Merge(configSource); - } - else - { - // no default config files, so set default values, and save it - m_config.Merge(DefaultConfig()); - m_config.Merge(configSource); - m_config.Save(Application.iniFilePath); - } - } - - ReadConfigSettings(); - } - - public static IConfigSource DefaultConfig() - { - IConfigSource DefaultConfig = new IniConfigSource(); - if (DefaultConfig.Configs["Startup"] == null) - DefaultConfig.AddConfig("Startup"); - IConfig config = DefaultConfig.Configs["Startup"]; - if (config != null) - { - config.Set("gridmode", false); - config.Set("physics", "basicphysics"); - config.Set("physical_prim", true); - config.Set("see_into_this_sim_from_neighbor", true); - config.Set("serverside_object_permissions", false); - config.Set("storage_plugin", "OpenSim.Data.SQLite.dll"); - config.Set("storage_connection_string", "URI=file:OpenSim.db,version=3"); - config.Set("storage_prim_inventories", true); - config.Set("startup_console_commands_file", String.Empty); - config.Set("shutdown_console_commands_file", String.Empty); - config.Set("script_engine", "OpenSim.Region.ScriptEngine.DotNetEngine.dll"); - config.Set("asset_database", "sqlite"); - } - - if (DefaultConfig.Configs["StandAlone"] == null) - DefaultConfig.AddConfig("StandAlone"); - - config = DefaultConfig.Configs["StandAlone"]; - if (config != null) - { - config.Set("accounts_authenticate", false); - config.Set("welcome_message", "Welcome to OpenSimulator"); - config.Set("inventory_plugin", "OpenSim.Data.SQLite.dll"); - config.Set("inventory_source", ""); - config.Set("userDatabase_plugin", "OpenSim.Data.SQLite.dll"); - config.Set("user_source", ""); - config.Set("asset_plugin", "OpenSim.Data.SQLite.dll"); - config.Set("asset_source", ""); - config.Set("dump_assets_to_file", false); - } - - if (DefaultConfig.Configs["Network"] == null) - DefaultConfig.AddConfig("Network"); - config = DefaultConfig.Configs["Network"]; - if (config != null) - { - config.Set("default_location_x", 1000); - config.Set("default_location_y", 1000); - config.Set("http_listener_port", NetworkServersInfo.DefaultHttpListenerPort); - config.Set("remoting_listener_port", NetworkServersInfo.RemotingListenerPort); - config.Set("grid_server_url", "http://127.0.0.1:" + GridConfig.DefaultHttpPort.ToString()); - config.Set("grid_send_key", "null"); - config.Set("grid_recv_key", "null"); - config.Set("user_server_url", "http://127.0.0.1:" + UserConfig.DefaultHttpPort.ToString()); - config.Set("user_send_key", "null"); - config.Set("user_recv_key", "null"); - config.Set("asset_server_url", "http://127.0.0.1:" + AssetConfig.DefaultHttpPort.ToString()); - config.Set("inventory_server_url", "http://127.0.0.1:" + InventoryConfig.DefaultHttpPort.ToString()); - } - - if (DefaultConfig.Configs["RemoteAdmin"] == null) - DefaultConfig.AddConfig("RemoteAdmin"); - config = DefaultConfig.Configs["RemoteAdmin"]; - if (config != null) - { - config.Set("enabled", "false"); - } - - if (DefaultConfig.Configs["Voice"] == null) - DefaultConfig.AddConfig("Voice"); - config = DefaultConfig.Configs["Voice"]; - if (config != null) - { - config.Set("enabled", "false"); - } - return DefaultConfig; - - } - - protected virtual void ReadConfigSettings() - { - m_networkServersInfo = new NetworkServersInfo(); - - IConfig startupConfig = m_config.Configs["Startup"]; - - if (startupConfig != null) - { - m_sandbox = !startupConfig.GetBoolean("gridmode", false); - m_physicsEngine = startupConfig.GetString("physics", "basicphysics"); - m_meshEngineName = startupConfig.GetString("meshing", "ZeroMesher"); - - m_physicalPrim = startupConfig.GetBoolean("physical_prim", true); - - m_see_into_region_from_neighbor = startupConfig.GetBoolean("see_into_this_sim_from_neighbor", true); - - m_storageDll = startupConfig.GetString("storage_plugin", "OpenSim.Data.SQLite.dll"); - if (m_storageDll == "OpenSim.DataStore.MonoSqlite.dll") - { - m_storageDll = "OpenSim.Data.SQLite.dll"; - Console.WriteLine("WARNING: OpenSim.DataStore.MonoSqlite.dll is deprecated. Set storage_plugin to OpenSim.Data.SQLite.dll."); - Thread.Sleep(3000); - } - m_storageConnectionString - = startupConfig.GetString("storage_connection_string", "URI=file:OpenSim.db,version=3"); - m_storagePersistPrimInventories - = startupConfig.GetBoolean("storage_prim_inventories", true); - - m_scriptEngine = startupConfig.GetString("script_engine", "OpenSim.Region.ScriptEngine.DotNetEngine.dll"); - m_assetStorage = startupConfig.GetString("asset_database", "local"); - } - - IConfig standaloneConfig = m_config.Configs["StandAlone"]; - if (standaloneConfig != null) - { - m_standaloneAuthenticate = standaloneConfig.GetBoolean("accounts_authenticate", false); - m_standaloneWelcomeMessage = standaloneConfig.GetString("welcome_message", "Welcome to OpenSim"); - m_standaloneInventoryPlugin = - standaloneConfig.GetString("inventory_plugin", "OpenSim.Data.SQLite.dll"); - m_standaloneInventorySource = - standaloneConfig.GetString("inventory_source",""); - m_standaloneUserPlugin = - standaloneConfig.GetString("userDatabase_plugin", "OpenSim.Data.SQLite.dll"); - m_standaloneUserSource = - standaloneConfig.GetString("user_source",""); - m_standaloneAssetPlugin = - standaloneConfig.GetString("asset_plugin", "OpenSim.Data.SQLite.dll"); - m_standaloneAssetSource = - standaloneConfig.GetString("asset_source",""); - - m_dumpAssetsToFile = standaloneConfig.GetBoolean("dump_assets_to_file", false); - } - - - m_networkServersInfo.loadFromConfiguration(m_config); - - } - - private ManualResetEvent WorldHasComeToAnEnd = new ManualResetEvent(false); - - /// - /// Performs initialisation of the scene, such as loading configuration from disk. - /// - public override void StartUp() - { - // - // Called from app startup (OpenSim.Application) - // - m_log.Info("===================================================================="); - m_log.Info("========================= STARTING OPENSIM ========================="); - m_log.Info("===================================================================="); - m_log.InfoFormat("[OPENSIM MAIN]: Running in background {0} mode", m_sandbox ? "sandbox" : "grid"); - - InternalStartUp(); - - // We are done with startup - m_log.InfoFormat("[OPENSIM MAIN]: Startup complete, serving {0} region{1}", - m_clientServers.Count.ToString(), m_clientServers.Count > 1 ? "s" : ""); - - WorldHasComeToAnEnd.WaitOne(); - m_log.Info("[OPENSIM MAIN]: Shutdown complete, goodbye."); - - Environment.Exit(0); - } - - /// - /// Performs initialisation of the scene, such as loading configuration from disk. - /// - protected void InternalStartUp() - { - m_log.Info("[STARTUP]: Version " + m_version + "\n"); - - m_stats = StatsManager.StartCollectingSimExtraStats(); - - // Do baseclass startup sequence: OpenSim.Region.ClientStack.RegionApplicationBase.StartUp - // TerrainManager, StorageManager, HTTP Server - // This base will call abstract Initialize - base.StartUp(); - - // StandAlone mode? m_sandbox is determined by !startupConfig.GetBoolean("gridmode", false) - if (m_sandbox) - { - LocalInventoryService inventoryService = new LocalInventoryService(); - inventoryService.AddPlugin(m_standaloneInventoryPlugin, m_standaloneInventorySource); - - LocalUserServices userService = - new LocalUserServices(m_networkServersInfo, m_networkServersInfo.DefaultHomeLocX, - m_networkServersInfo.DefaultHomeLocY, inventoryService); - userService.AddPlugin(m_standaloneUserPlugin, m_standaloneUserSource); - - LocalBackEndServices backendService = new LocalBackEndServices(); - - CommunicationsLocal localComms = - new CommunicationsLocal(m_networkServersInfo, m_httpServer, m_assetCache, userService, - inventoryService, backendService, backendService, m_dumpAssetsToFile); - m_commsManager = localComms; - - m_loginService = - new LocalLoginService(userService, m_standaloneWelcomeMessage, localComms, m_networkServersInfo, - m_standaloneAuthenticate); - m_loginService.OnLoginToRegion += backendService.AddNewSession; - - // set up XMLRPC handler for client's initial login request message - m_httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod); - - // provides the web form login - m_httpServer.AddHTTPHandler("login", m_loginService.ProcessHTMLLogin); - - // Provides the LLSD login - m_httpServer.SetLLSDHandler(m_loginService.LLSDLoginMethod); - - CreateAccount = localComms.doCreate; - } - else - { - // We are in grid mode - m_commsManager = new CommunicationsOGS1(m_networkServersInfo, m_httpServer, m_assetCache); - m_httpServer.AddStreamHandler(new SimStatusHandler()); - } - - proxyUrl = ConfigSource.Configs["Network"].GetString("proxy_url", ""); - proxyOffset = Int32.Parse(ConfigSource.Configs["Network"].GetString("proxy_offset", "0")); - - // Create a ModuleLoader instance - m_moduleLoader = new ModuleLoader(m_config); - - ExtensionNodeList nodes = AddinManager.GetExtensionNodes("/OpenSim/Startup"); - foreach (TypeExtensionNode node in nodes) - { - m_log.InfoFormat("[PLUGINS]: Loading OpenSim application plugin {0}", node.Path); - IApplicationPlugin plugin = (IApplicationPlugin)node.CreateInstance(); - plugin.Initialise(this); - m_plugins.Add(plugin); - } - } - - protected override void Initialize() - { - // - // Called from base.StartUp() - // - - m_httpServerPort = m_networkServersInfo.HttpListenerPort; - - IAssetServer assetServer; - if (m_assetStorage == "grid") - { - assetServer = new GridAssetClient(m_networkServersInfo.AssetURL); - } - else - { - SQLAssetServer sqlAssetServer = new SQLAssetServer(m_standaloneAssetPlugin, m_standaloneAssetSource); - sqlAssetServer.LoadDefaultAssets(); - assetServer = sqlAssetServer; - } - - m_assetCache = new AssetCache(assetServer); - - m_sceneManager.OnRestartSim += handleRestartRegion; - } - - public LLUUID CreateUser(string tempfirstname, string templastname, string tempPasswd, uint regX, uint regY) - { - return m_commsManager.AddUser(tempfirstname,templastname,tempPasswd,regX,regY); - } - - /// - /// Execute the region creation process. This includes setting up scene infrastructure. - /// - /// - /// - /// - public IClientNetworkServer CreateRegion(RegionInfo regionInfo, bool portadd_flag) - { - return CreateRegion(regionInfo, portadd_flag, false); - } - - /// - /// Execute the region creation process. This includes setting up scene infrastructure. - /// - /// - /// - /// - public IClientNetworkServer CreateRegion(RegionInfo regionInfo) - { - return CreateRegion(regionInfo, false, true); - } - - /// - /// Execute the region creation process. This includes setting up scene infrastructure. - /// - /// - /// - /// - /// - public IClientNetworkServer CreateRegion(RegionInfo regionInfo, bool portadd_flag, bool do_post_init) - { - int port = regionInfo.InternalEndPoint.Port; - - // set initial RegionID to originRegionID in RegionInfo. (it needs for loding prims) - regionInfo.originRegionID = regionInfo.RegionID; - - // set initial ServerURI - regionInfo.ServerURI = "http://" + regionInfo.ExternalHostName - + ":" + regionInfo.InternalEndPoint.Port.ToString(); - - regionInfo.HttpPort = m_httpServerPort; - - if ((proxyUrl.Length > 0) && (portadd_flag)) - { - // set proxy url to RegionInfo - regionInfo.proxyUrl = proxyUrl; - Util.XmlRpcCommand(proxyUrl, "AddPort", port, port + proxyOffset, regionInfo.ExternalHostName); - } - - IClientNetworkServer clientServer; - Scene scene = SetupScene(regionInfo, proxyOffset, out clientServer); - - m_log.Info("[MODULES]: Loading Region's modules"); - - List modules = m_moduleLoader.PickupModules(scene, "."); - // This needs to be ahead of the script engine load, so the - // script module can pick up events exposed by a module - m_moduleLoader.InitialiseSharedModules(scene); - - //m_moduleLoader.PickupModules(scene, "ScriptEngines"); - //m_moduleLoader.LoadRegionModules(Path.Combine("ScriptEngines", m_scriptEngine), scene); - - if (string.IsNullOrEmpty(m_scriptEngine)) - { - m_log.Info("[MODULES]: No script engien module specified"); - } - else - { - m_log.Info("[MODULES]: Loading scripting engine modules"); - foreach (string module in m_scriptEngine.Split(',')) - { - string mod = module.Trim(" \t".ToCharArray()); // Clean up name - m_log.Info("[MODULES]: Loading scripting engine: " + mod); - try - { - m_moduleLoader.LoadRegionModules(Path.Combine("ScriptEngines", mod), scene); - } - catch (Exception ex) - { - m_log.Error("[MODULES]: Failed to load script engine: " + ex.ToString()); - } - } - } - - scene.SetModuleInterfaces(); - - //moved these here as the terrain texture has to be created after the modules are initialized - // and has to happen before the region is registered with the grid. - scene.CreateTerrainTexture(true); - - try - { - scene.RegisterRegionWithGrid(); - } - catch (Exception e) - { - m_log.ErrorFormat("[STARTUP]: Registration of region with grid failed, aborting startup - {0}", e); - - // Carrying on now causes a lot of confusion down the line - we need to get the user's attention - System.Environment.Exit(1); - } - - // We need to do this after we've initialized the scripting engines. - scene.StartScripts(); - - scene.loadAllLandObjectsFromStorage(regionInfo.originRegionID); - scene.EventManager.TriggerParcelPrimCountUpdate(); - - m_sceneManager.Add(scene); - - m_clientServers.Add(clientServer); - m_regionData.Add(regionInfo); - clientServer.Start(); - - if (do_post_init) - { - foreach (IRegionModule module in modules) - { - module.PostInitialise(); - } - } - - return clientServer; - } - - protected override StorageManager CreateStorageManager(string connectionstring) - { - return new StorageManager(m_storageDll, connectionstring, m_storagePersistPrimInventories); - } - - protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, - AgentCircuitManager circuitManager) - { - SceneCommunicationService sceneGridService = new SceneCommunicationService(m_commsManager); - return - new Scene(regionInfo, circuitManager, m_commsManager, sceneGridService, m_assetCache, - storageManager, m_httpServer, - m_moduleLoader, m_dumpAssetsToFile, m_physicalPrim, m_see_into_region_from_neighbor, m_config, - m_version); - - } - - public void handleRestartRegion(RegionInfo whichRegion) - { - m_log.Error("[OPENSIM MAIN]: Got restart signal from SceneManager"); - - // Shutting down the client server - bool foundClientServer = false; - int clientServerElement = 0; - - for (int i = 0; i < m_clientServers.Count; i++) - { - if (m_clientServers[i].HandlesRegion(new Location(whichRegion.RegionHandle))) - { - clientServerElement = i; - foundClientServer = true; - break; - } - } - if (foundClientServer) - { - m_clientServers[clientServerElement].Server.Close(); - m_clientServers.RemoveAt(clientServerElement); - } - - //Removing the region from the sim's database of regions.. - int RegionHandleElement = -1; - for (int i = 0; i < m_regionData.Count; i++) - { - if (whichRegion.RegionHandle == m_regionData[i].RegionHandle) - { - RegionHandleElement = i; - } - } - if (RegionHandleElement >= 0) - { - m_regionData.RemoveAt(RegionHandleElement); - } - - CreateRegion(whichRegion, true); - } - - # region Setup methods - - protected override PhysicsScene GetPhysicsScene() - { - return GetPhysicsScene(m_physicsEngine, m_meshEngineName, m_config); - } - - /// - /// Handler to supply the current status of this sim - /// - /// Currently this is always OK if the simulator is still listening for connections on its HTTP service - /// - protected class SimStatusHandler : IStreamedRequestHandler - { - public byte[] Handle(string path, Stream request, - OSHttpRequest httpRequest, OSHttpResponse httpResponse) - { - return Encoding.UTF8.GetBytes("OK"); - } - - public string ContentType - { - get { return "text/plain"; } - } - - public string HttpMethod - { - get { return "GET"; } - } - - public string Path - { - get { return "/simstatus/"; } - } - } - - #endregion - - /// - /// Performs any last-minute sanity checking and shuts down the region server - /// - public override void Shutdown() - { - if (proxyUrl.Length > 0) - { - Util.XmlRpcCommand(proxyUrl, "Stop"); - } - - m_log.Info("[SHUTDOWN]: Closing all threads"); - m_log.Info("[SHUTDOWN]: Killing listener thread"); - m_log.Info("[SHUTDOWN]: Killing clients"); - // TODO: implement this - m_log.Info("[SHUTDOWN]: Closing console and terminating"); - - m_sceneManager.Close(); - - WorldHasComeToAnEnd.Set(); - - base.Shutdown(); - } - - /// - /// Get the start time and up time of Region server - /// - /// The first out parameter describing when the Region server started - /// The second out parameter describing how long the Region server has run - public void GetRunTime(out string starttime, out string uptime) - { - starttime = m_startuptime.ToString(); - uptime = (DateTime.Now - m_startuptime).ToString(); - } - - /// - /// Get the number of the avatars in the Region server - /// - /// The first out parameter describing the number of all the avatars in the Region server - public void GetAvatarNumber(out int usernum) - { - usernum = m_sceneManager.GetCurrentSceneAvatars().Count; - } - - /// - /// Get the number of regions - /// - /// The first out parameter describing the number of regions - public void GetRegionNumber(out int regionnum) - { - regionnum = m_sceneManager.Scenes.Count; - } - } -} diff --git a/OpenSim/Region/Application/OpenSimMainConsole.cs b/OpenSim/Region/Application/OpenSimMainConsole.cs deleted file mode 100644 index 467db14..0000000 --- a/OpenSim/Region/Application/OpenSimMainConsole.cs +++ /dev/null @@ -1,679 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Net; -using System.Reflection; -using System.Threading; -using libsecondlife; -using log4net; -using Nini.Config; -using OpenSim.Framework; -using OpenSim.Framework.Console; -using OpenSim.Framework.Statistics; -using OpenSim.Region.Environment.Interfaces; -using OpenSim.Region.Environment.Scenes; -using Timer=System.Timers.Timer; - -namespace OpenSim -{ - public delegate void ConsoleCommand(string[] comParams); - - public class OpenSimMainConsole : OpenSimMain, conscmd_callback - { - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - protected string m_startupCommandsFile; - protected string m_shutdownCommandsFile; - - private string m_timedScript = "disabled"; - private Timer m_scriptTimer; - - public OpenSimMainConsole(IConfigSource configSource) - : base(configSource) - { - } - - protected override void ReadConfigSettings() - { - IConfig startupConfig = m_config.Configs["Startup"]; - - if (startupConfig != null) - { - m_startupCommandsFile = startupConfig.GetString("startup_console_commands_file", String.Empty); - m_shutdownCommandsFile = startupConfig.GetString("shutdown_console_commands_file", String.Empty); - - m_timedScript = startupConfig.GetString("timer_Script", "disabled"); - } - base.ReadConfigSettings(); - } - - /// - /// Performs initialisation of the scene, such as loading configuration from disk. - /// - public override void StartUp() - { - // - // Called from app startup (OpenSim.Application) - // - - m_log.Info("===================================================================="); - m_log.Info("========================= STARTING OPENSIM ========================="); - m_log.Info("===================================================================="); - m_log.InfoFormat("[OPENSIM MAIN]: Running in {0} mode", (m_sandbox ? "sandbox" : "grid")); - - m_console = CreateConsole(); - MainConsole.Instance = m_console; - InternalStartUp(); - - //Run Startup Commands - if (m_startupCommandsFile != String.Empty) - { - RunCommandScript(m_startupCommandsFile); - } - else - { - m_log.Info("[STARTUP]: No startup command script specified. Moving on..."); - } - - // Start timer script (run a script every xx seconds) - if (m_timedScript != "disabled") - { - m_scriptTimer = new Timer(); - m_scriptTimer.Enabled = true; - m_scriptTimer.Interval = 1200 * 1000; - m_scriptTimer.Elapsed += RunAutoTimerScript; - } - - PrintFileToConsole("startuplogo.txt"); - } - - protected ConsoleBase CreateConsole() - { - return new ConsoleBase("Region", this); - } - - private void RunAutoTimerScript(object sender, EventArgs e) - { - if (m_timedScript != "disabled") - { - RunCommandScript(m_timedScript); - } - } - - #region Console Commands - - /// - /// - /// - /// - private void RunCommandScript(string fileName) - { - m_log.Info("[COMMANDFILE]: Running " + fileName); - if (File.Exists(fileName)) - { - StreamReader readFile = File.OpenText(fileName); - string currentCommand; - while ((currentCommand = readFile.ReadLine()) != null) - { - if (currentCommand != String.Empty) - { - m_log.Info("[COMMANDFILE]: Running '" + currentCommand + "'"); - m_console.RunCommand(currentCommand); - } - } - } - else - { - m_log.Error("[COMMANDFILE]: Command script missing. Can not run commands"); - } - } - - private static void PrintFileToConsole(string fileName) - { - if (File.Exists(fileName)) - { - StreamReader readFile = File.OpenText(fileName); - string currentLine; - while ((currentLine = readFile.ReadLine()) != null) - { - m_log.Info("[!]" + currentLine); - } - } - } - - - /// - /// Runs commands issued by the server console from the operator - /// - /// The first argument of the parameter (the command) - /// Additional arguments passed to the command - public override void RunCmd(string command, string[] cmdparams) - { - base.RunCmd(command, cmdparams); - - switch (command) - { - case "clear-assets": - m_assetCache.Clear(); - break; - - case "set-time": - m_sceneManager.SetCurrentSceneTimePhase(Convert.ToInt32(cmdparams[0])); - break; - - case "force-update": - m_console.Notice("Updating all clients"); - m_sceneManager.ForceCurrentSceneClientUpdate(); - break; - - case "edit-scale": - if (cmdparams.Length == 4) - { - m_sceneManager.HandleEditCommandOnCurrentScene(cmdparams); - } - break; - - case "debug": - if (cmdparams.Length > 0) - { - Debug(cmdparams); - } - break; - - case "scene-debug": - if (cmdparams.Length == 3) - { - if (m_sceneManager.CurrentScene == null) - { - m_console.Error("CONSOLE", "Please use 'change-region ' first"); - } - else - { - m_sceneManager.CurrentScene.SetSceneCoreDebug(!Convert.ToBoolean(cmdparams[0]), !Convert.ToBoolean(cmdparams[1]), !Convert.ToBoolean(cmdparams[2])); - } - } - else - { - m_console.Error("scene-debug (where inside <> is true/false)"); - } - break; - - case "help": - m_console.Notice("alert - send alert to a designated user or all users."); - m_console.Notice(" alert [First] [Last] [Message] - send an alert to a user. Case sensitive."); - m_console.Notice(" alert general [Message] - send an alert to all users."); - m_console.Notice("backup - trigger a simulator backup"); - m_console.Notice("clear-assets - clear asset cache"); - m_console.Notice("create-region - creates a new region"); - m_console.Notice("create user - adds a new user."); - m_console.Notice("change-region [name] - sets the region that many of these commands affect."); - m_console.Notice("command-script [filename] - Execute command in a file."); - m_console.Notice("debug - debugging commands"); - m_console.Notice(" packet 0..255 - print incoming/outgoing packets (0=off)"); - m_console.Notice("scene-debug [scripting] [collision] [physics] - Enable/Disable debug stuff, each can be True/False"); - m_console.Notice("edit-scale [prim name] [x] [y] [z] - resize given prim"); - m_console.Notice("export-map [filename] - save image of world map"); - m_console.Notice("force-update - force an update of prims in the scene"); - m_console.Notice("load-xml [filename] - load prims from XML (DEPRECATED)"); - m_console.Notice("load-xml2 [filename] - load prims from XML using version 2 format"); - m_console.Notice("restart - disconnects all clients and restarts the sims in the instance."); - m_console.Notice("remove-region [name] - remove a region"); - m_console.Notice("save-xml [filename] - save prims to XML (DEPRECATED)"); - m_console.Notice("save-xml2 [filename] - save prims to XML using version 2 format"); - m_console.Notice("script - manually trigger scripts? or script commands?"); - m_console.Notice("set-time [x] - set the current scene time phase"); - m_console.Notice("show assets - show state of asset cache."); - m_console.Notice("show users - show info about connected users."); - m_console.Notice("show modules - shows info about loaded modules."); - m_console.Notice("show regions - show running region information."); - m_console.Notice("threads - list threads"); - m_console.Notice("config set section field value - set a config value"); - m_console.Notice("config get section field - get a config value"); - m_console.Notice("config save - save OpenSim.ini"); - m_console.Notice("terrain help - show help for terrain commands."); - break; - - case "threads": -// m_console.Notice("THREAD", Process.GetCurrentProcess().Threads.Count + " threads running:"); -// int _tc = 0; - -// foreach (ProcessThread pt in Process.GetCurrentProcess().Threads) -// { -// _tc++; -// m_console.Notice("THREAD", _tc + ": ID: " + pt.Id + ", Started: " + pt.StartTime.ToString() + ", CPU time: " + pt.TotalProcessorTime + ", Pri: " + pt.BasePriority.ToString() + ", State: " + pt.ThreadState.ToString()); -// } - - List threads = ThreadTracker.GetThreads(); - if (threads == null) - { - m_console.Notice("THREAD", "Thread tracking is only enabled in DEBUG mode."); - } - else - { - int _tc = 0; - m_console.Notice("THREAD", threads.Count + " threads are being tracked:"); - foreach (Thread t in threads) - { - _tc++; - m_console.Notice("THREAD", _tc + ": ID: " + t.ManagedThreadId.ToString() + ", Name: " + t.Name + ", Alive: " + t.IsAlive.ToString() + ", Pri: " + t.Priority.ToString() + ", State: " + t.ThreadState.ToString()); - } - } - - break; - case "save-xml": - m_log.Error("[CONSOLE]: PLEASE NOTE, save-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use save-xml2, please file a mantis detailing the reason."); - - if (cmdparams.Length > 0) - { - m_sceneManager.SaveCurrentSceneToXml(cmdparams[0]); - } - else - { - m_sceneManager.SaveCurrentSceneToXml(DEFAULT_PRIM_BACKUP_FILENAME); - } - break; - - case "load-xml": - m_log.Error("[CONSOLE]: PLEASE NOTE, load-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use load-xml2, please file a mantis detailing the reason."); - - LLVector3 loadOffset = new LLVector3(0, 0, 0); - if (cmdparams.Length > 0) - { - bool generateNewIDS = false; - if (cmdparams.Length > 1) - { - if (cmdparams[1] == "-newUID") - { - generateNewIDS = true; - } - if (cmdparams.Length > 2) - { - loadOffset.X = (float) Convert.ToDecimal(cmdparams[2]); - if (cmdparams.Length > 3) - { - loadOffset.Y = (float) Convert.ToDecimal(cmdparams[3]); - } - if (cmdparams.Length > 4) - { - loadOffset.Z = (float) Convert.ToDecimal(cmdparams[4]); - } - m_console.Error("loadOffsets = <" + loadOffset.X + "," + loadOffset.Y + "," + - loadOffset.Z + ">"); - } - } - m_sceneManager.LoadCurrentSceneFromXml(cmdparams[0], generateNewIDS, loadOffset); - } - else - { - m_sceneManager.LoadCurrentSceneFromXml(DEFAULT_PRIM_BACKUP_FILENAME, false, loadOffset); - } - break; - - case "save-xml2": - if (cmdparams.Length > 0) - { - m_sceneManager.SaveCurrentSceneToXml2(cmdparams[0]); - } - else - { - m_sceneManager.SaveCurrentSceneToXml2(DEFAULT_PRIM_BACKUP_FILENAME); - } - break; - - case "load-xml2": - if (cmdparams.Length > 0) - { - m_sceneManager.LoadCurrentSceneFromXml2(cmdparams[0]); - } - else - { - m_sceneManager.LoadCurrentSceneFromXml2(DEFAULT_PRIM_BACKUP_FILENAME); - } - break; - - case "load-oar": - m_log.Error("[CONSOLE]: Don't use me - I haven't yet been sufficiently implemented!"); - - if (cmdparams.Length > 0) - { - m_sceneManager.LoadArchiveToCurrentScene(cmdparams[0]); - } - else - { - m_sceneManager.LoadArchiveToCurrentScene(DEFAULT_OAR_BACKUP_FILENAME); - } - break; - - case "save-oar": - m_log.Error("[CONSOLE]: Don't use me - I haven't yet been sufficiently implemented!"); - - if (cmdparams.Length > 0) - { - m_sceneManager.SaveCurrentSceneToArchive(cmdparams[0]); - } - else - { - m_sceneManager.SaveCurrentSceneToArchive(DEFAULT_OAR_BACKUP_FILENAME); - } - break; - - case "plugin": - m_sceneManager.SendCommandToPluginModules(cmdparams); - break; - - case "command-script": - if (cmdparams.Length > 0) - { - RunCommandScript(cmdparams[0]); - } - break; - - case "backup": - m_sceneManager.BackupCurrentScene(); - break; - - case "alert": - m_sceneManager.HandleAlertCommandOnCurrentScene(cmdparams); - break; - - case "create": - CreateAccount(cmdparams); - break; - - case "create-region": - CreateRegion(new RegionInfo(cmdparams[0], "Regions/" + cmdparams[1],false), true); - break; - case "remove-region": - string regName = CombineParams(cmdparams, 0); - - Scene killScene; - if (m_sceneManager.TryGetScene(regName, out killScene)) - { - // only need to check this if we are not at the - // root level - if ((m_sceneManager.CurrentScene != null) && - (m_sceneManager.CurrentScene.RegionInfo.RegionID == killScene.RegionInfo.RegionID)) - { - m_sceneManager.TrySetCurrentScene(".."); - } - m_regionData.Remove(killScene.RegionInfo); - m_sceneManager.CloseScene(killScene); - } - break; - - case "restart": - m_sceneManager.RestartCurrentScene(); - break; - - case "change-region": - if (cmdparams.Length > 0) - { - string regionName = CombineParams(cmdparams, 0); - - if (!m_sceneManager.TrySetCurrentScene(regionName)) - { - m_console.Error("Couldn't set current region to: " + regionName); - } - } - - if (m_sceneManager.CurrentScene == null) - { - m_console.Error("CONSOLE", "Currently at Root level. To change region please use 'change-region '"); - } - else - { - m_console.Error("CONSOLE", "Current Region: " + m_sceneManager.CurrentScene.RegionInfo.RegionName + - ". To change region please use 'change-region '"); - } - - break; - - case "export-map": - if (cmdparams.Length > 0) - { - m_sceneManager.CurrentOrFirstScene.ExportWorldMap(cmdparams[0]); - } - else - { - m_sceneManager.CurrentOrFirstScene.ExportWorldMap("exportmap.jpg"); - } - break; - - case "config": - string n = command.ToUpper(); - if (cmdparams.Length > 0) - { - switch (cmdparams[0].ToLower()) - { - case "set": - if (cmdparams.Length < 4) - { - m_console.Error(n, "SYNTAX: " + n + " SET SECTION KEY VALUE"); - m_console.Error(n, "EXAMPLE: " + n + " SET ScriptEngine.DotNetEngine NumberOfScriptThreads 5"); - } - else - { - IConfig c = DefaultConfig().Configs[cmdparams[1]]; - if (c == null) - c = DefaultConfig().AddConfig(cmdparams[1]); - string _value = String.Join(" ", cmdparams, 3, cmdparams.Length - 3); - c.Set(cmdparams[2], _value); - m_config.Merge(c.ConfigSource); - - m_console.Error(n, n + " " + n + " " + cmdparams[1] + " " + cmdparams[2] + " " + - _value); - } - break; - case "get": - if (cmdparams.Length < 3) - { - m_console.Error(n, "SYNTAX: " + n + " GET SECTION KEY"); - m_console.Error(n, "EXAMPLE: " + n + " GET ScriptEngine.DotNetEngine NumberOfScriptThreads"); - } - else - { - IConfig c = DefaultConfig().Configs[cmdparams[1]]; - if (c == null) - { - m_console.Notice(n, "Section \"" + cmdparams[1] + "\" does not exist."); - break; - } - else - { - m_console.Notice(n + " GET " + cmdparams[1] + " " + cmdparams[2] + ": " + - c.GetString(cmdparams[2])); - } - } - - break; - case "save": - m_console.Notice("Saving configuration file: " + Application.iniFilePath); - m_config.Save(Application.iniFilePath); - break; - } - } - break; - case "modules": - if (cmdparams.Length > 0) - { - switch (cmdparams[0].ToLower()) - { - case "list": - foreach (IRegionModule irm in m_moduleLoader.GetLoadedSharedModules) - { - m_console.Notice("Shared region module: " + irm.Name); - } - break; - case "unload": - if (cmdparams.Length > 1) - { - foreach (IRegionModule rm in new ArrayList(m_moduleLoader.GetLoadedSharedModules)) - { - if (rm.Name.ToLower() == cmdparams[1].ToLower()) - { - m_console.Notice("Unloading module: " + rm.Name); - m_moduleLoader.UnloadModule(rm); - } - } - } - break; - case "load": - if (cmdparams.Length > 1) - { - foreach (Scene s in new ArrayList(m_sceneManager.Scenes)) - { - - m_console.Notice("Loading module: " + cmdparams[1]); - m_moduleLoader.LoadRegionModules(cmdparams[1], s); - } - } - break; - } - } - - break; - default: - string[] tmpPluginArgs = new string[cmdparams.Length + 1]; - cmdparams.CopyTo(tmpPluginArgs, 1); - tmpPluginArgs[0] = command; - - m_sceneManager.SendCommandToPluginModules(tmpPluginArgs); - break; - } - } - - public void Debug(string[] args) - { - switch (args[0]) - { - case "packet": - if (args.Length > 1) - { - int newDebug; - if (int.TryParse(args[1], out newDebug)) - { - m_sceneManager.SetDebugPacketOnCurrentScene(newDebug); - } - else - { - m_console.Error("packet debug should be 0..2"); - } - m_console.Notice("New packet debug: " + newDebug.ToString()); - } - - break; - default: - m_console.Error("Unknown debug"); - break; - } - } - - // see BaseOpenSimServer - public override void Show(string ShowWhat) - { - base.Show(ShowWhat); - - switch (ShowWhat) - { - case "assets": - m_assetCache.ShowState(); - break; - - case "users": - IList agents = m_sceneManager.GetCurrentSceneAvatars(); - - m_console.Notice(String.Format("\nAgents connected: {0}\n", agents.Count)); - - m_console.Notice( - String.Format("{0,-16}{1,-16}{2,-37}{3,-16}", "Firstname", "Lastname", - "Agent ID","Region")); - - foreach (ScenePresence presence in agents) - { - RegionInfo regionInfo = m_sceneManager.GetRegionInfo(presence.RegionHandle); - string regionName; - System.Net.EndPoint ep = null; - - if (regionInfo == null) - { - regionName = "Unresolvable"; - } - else - { - regionName = regionInfo.RegionName; - } - - m_console.Notice( - String.Format( - "{0,-16}{1,-16}{2,-37}{3,-16}", - presence.Firstname, - presence.Lastname, - presence.UUID, - regionName)); - } - - m_console.Notice(""); - break; - - case "modules": - m_console.Notice("The currently loaded shared modules are:"); - foreach (IRegionModule module in m_moduleLoader.GetLoadedSharedModules) - { - m_console.Notice("Shared Module: " + module.Name); - } - break; - - case "regions": - m_sceneManager.ForEachScene( - delegate(Scene scene) - { - m_console.Notice("Region Name: " + scene.RegionInfo.RegionName + " , Region XLoc: " + - scene.RegionInfo.RegionLocX + " , Region YLoc: " + - scene.RegionInfo.RegionLocY); - }); - break; - } - } - - private static string CombineParams(string[] commandParams, int pos) - { - string result = String.Empty; - for (int i = pos; i < commandParams.Length; i++) - { - result += commandParams[i] + " "; - } - result = result.TrimEnd(' '); - return result; - } - - #endregion - } -} diff --git a/OpenSim/Tools/Export/OpenSimExport.cs b/OpenSim/Tools/Export/OpenSimExport.cs index 4891ea7..1e7db51 100644 --- a/OpenSim/Tools/Export/OpenSimExport.cs +++ b/OpenSim/Tools/Export/OpenSimExport.cs @@ -102,7 +102,7 @@ namespace OpenSimExport { // no default config files, so set default values, and save it Console.WriteLine("We didn't find a config!"); - config.Merge(OpenSimMain.DefaultConfig()); + config.Merge(OpenSimBase.DefaultConfig()); config.Merge(configSource); } -- cgit v1.1