From bf1580fba45df7624180b07599c8170074500c99 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Mon, 21 Apr 2008 12:42:56 +0000 Subject: From: Dr Scofield the attached patch set is centered around RemoteAdminPlugin and focuses mainly on making it more robust (i.e. more parameter checking and better error reporting) but also we've re-implemented the LoadTerrain stuff that got disabled during the terrain code reworking: * missing PostInitialize() calls on region modules that were loaded for regions created via RemoteAdmin's CreateRegion XmlRpc call * re-implements RemoteAdmin's LoadTerrain XmlRpc call (probably lost during the TerrainModule rework) * adds lots more parameter checking and error reporting to RemoteAdmin * adds a read-only property to RegionApplicationBase so that we can access the CommsManager * adds Exceptions to TerrainModule so that we get better error case feedback (and can report more meaningful errors in turn) * adds a CheckForTerrainUpdate() call to TerrainModule.LoadFromFile() to make terrain changes effective * adds TryGetCurrentScene(LLUUID) to SceneManager so that we can retrieve Scenes not only by name but also by LLUUID cheers, dr scofield --- OpenSim/Region/Application/OpenSimMain.cs | 33 ++++++++++++++++++++-- .../Region/ClientStack/RegionApplicationBase.cs | 3 ++ OpenSim/Region/Environment/ModuleLoader.cs | 11 ++++++-- .../Environment/Modules/Terrain/TerrainModule.cs | 9 ++++-- OpenSim/Region/Environment/Scenes/SceneManager.cs | 16 +++++++++++ 5 files changed, 65 insertions(+), 7 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs index aa08f81..26ae525 100644 --- a/OpenSim/Region/Application/OpenSimMain.cs +++ b/OpenSim/Region/Application/OpenSimMain.cs @@ -462,7 +462,28 @@ namespace OpenSim /// /// /// - public UDPServer CreateRegion(RegionInfo regionInfo, bool portadd_flag) + public UDPServer CreateRegion(RegionInfo regionInfo, bool portadd_flag) { + return CreateRegion(regionInfo, portadd_flag, false); + } + + /// + /// Execute the region creation process. This includes setting up scene infrastructure. + /// + /// + /// + /// + public UDPServer CreateRegion(RegionInfo regionInfo) { + return CreateRegion(regionInfo, false, true); + } + + /// + /// Execute the region creation process. This includes setting up scene infrastructure. + /// + /// + /// + /// + /// + public UDPServer CreateRegion(RegionInfo regionInfo, bool portadd_flag, bool do_post_init) { int port = regionInfo.InternalEndPoint.Port; @@ -487,7 +508,7 @@ namespace OpenSim m_log.Info("[MODULES]: Loading Region's modules"); - m_moduleLoader.PickupModules(scene, "."); + List modules = m_moduleLoader.PickupModules(scene, "."); //m_moduleLoader.PickupModules(scene, "ScriptEngines"); //m_moduleLoader.LoadRegionModules(Path.Combine("ScriptEngines", m_scriptEngine), scene); @@ -536,6 +557,14 @@ namespace OpenSim m_regionData.Add(regionInfo); udpServer.ServerListener(); + if (do_post_init) + { + foreach (IRegionModule module in modules) + { + module.PostInitialise(); + } + } + return udpServer; } diff --git a/OpenSim/Region/ClientStack/RegionApplicationBase.cs b/OpenSim/Region/ClientStack/RegionApplicationBase.cs index bc0bea3..a6124a9 100644 --- a/OpenSim/Region/ClientStack/RegionApplicationBase.cs +++ b/OpenSim/Region/ClientStack/RegionApplicationBase.cs @@ -54,6 +54,9 @@ namespace OpenSim.Region.ClientStack protected uint m_httpServerPort; protected CommunicationsManager m_commsManager; + public CommunicationsManager CommunicationsManager { + get { return m_commsManager; } + } protected SceneManager m_sceneManager = new SceneManager(); diff --git a/OpenSim/Region/Environment/ModuleLoader.cs b/OpenSim/Region/Environment/ModuleLoader.cs index 43ca7bd..52a6fbd 100644 --- a/OpenSim/Region/Environment/ModuleLoader.cs +++ b/OpenSim/Region/Environment/ModuleLoader.cs @@ -62,14 +62,16 @@ namespace OpenSim.Region.Environment } } - public void PickupModules(Scene scene, string moduleDir) + public List PickupModules(Scene scene, string moduleDir) { DirectoryInfo dir = new DirectoryInfo(moduleDir); + List modules = new List(); foreach (FileInfo fileInfo in dir.GetFiles("*.dll")) { - LoadRegionModules(fileInfo.FullName, scene); + modules.AddRange(LoadRegionModules(fileInfo.FullName, scene)); } + return modules; } public void LoadDefaultSharedModules() @@ -190,9 +192,10 @@ namespace OpenSim.Region.Environment } } - public void LoadRegionModules(string dllName, Scene scene) + public List LoadRegionModules(string dllName, Scene scene) { IRegionModule[] modules = LoadModules(dllName); + List initializedModules = new List(); if (modules.Length > 0) { @@ -203,6 +206,7 @@ namespace OpenSim.Region.Environment { m_log.InfoFormat("[MODULES]: [{0}]: Initializing.", module.Name); InitializeModule(module, scene); + initializedModules.Add(module); } else { @@ -211,6 +215,7 @@ namespace OpenSim.Region.Environment } } } + return initializedModules; } public void LoadRegionModule(string dllName, string moduleName, Scene scene) diff --git a/OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs b/OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs index 987c3d0..f758c91 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs @@ -178,20 +178,24 @@ namespace OpenSim.Region.Environment.Modules.Terrain { m_log.Error("[TERRAIN]: Unable to load heightmap, the " + loader.Value + " parser does not support file loading. (May be save only)"); - return; + throw new Exception(String.Format("unable to load heightmap: parser {0} does not support loading", loader.Value)); } catch (FileNotFoundException) { m_log.Error( "[TERRAIN]: Unable to load heightmap, file not found. (A directory permissions error may also cause this)"); - return; + throw new Exception(String.Format("unable to load heightmap: file {0} not found (or permissions do not allow access", + filename)); } } + CheckForTerrainUpdates(); m_log.Info("[TERRAIN]: File (" + filename + ") loaded successfully"); return; } } m_log.Error("[TERRAIN]: Unable to load heightmap, no file loader availible for that format."); + throw new Exception(String.Format("unable to load heightmap from file {0}: no loader available for that format", + filename)); } /// @@ -214,6 +218,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain catch (NotImplementedException) { m_log.Error("Unable to save to " + filename + ", saving of this file format has not been implemented."); + throw new Exception(String.Format("unable to save heightmap: {0}: saving of this file format not implemented")); } } diff --git a/OpenSim/Region/Environment/Scenes/SceneManager.cs b/OpenSim/Region/Environment/Scenes/SceneManager.cs index 61a4eae..40e313a 100644 --- a/OpenSim/Region/Environment/Scenes/SceneManager.cs +++ b/OpenSim/Region/Environment/Scenes/SceneManager.cs @@ -250,6 +250,22 @@ namespace OpenSim.Region.Environment.Scenes } } + public bool TrySetCurrentScene(LLUUID regionID) + { + Console.WriteLine("Searching for Region: '{0}'", regionID.ToString()); + + foreach (Scene scene in m_localScenes) + { + if (scene.RegionInfo.RegionID == regionID) + { + m_currentScene = scene; + return true; + } + } + + return false; + } + public bool TryGetScene(string regionName, out Scene scene) { foreach (Scene mscene in m_localScenes) -- cgit v1.1