aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorSean Dague2008-04-21 12:42:56 +0000
committerSean Dague2008-04-21 12:42:56 +0000
commitbf1580fba45df7624180b07599c8170074500c99 (patch)
tree696a69c94554f0789b123c82fb34c658e9a0b6af /OpenSim/Region
parent* Various refactorings. (diff)
downloadopensim-SC_OLD-bf1580fba45df7624180b07599c8170074500c99.zip
opensim-SC_OLD-bf1580fba45df7624180b07599c8170074500c99.tar.gz
opensim-SC_OLD-bf1580fba45df7624180b07599c8170074500c99.tar.bz2
opensim-SC_OLD-bf1580fba45df7624180b07599c8170074500c99.tar.xz
From: Dr Scofield <hud@zurich.ibm.com>
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
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Application/OpenSimMain.cs33
-rw-r--r--OpenSim/Region/ClientStack/RegionApplicationBase.cs3
-rw-r--r--OpenSim/Region/Environment/ModuleLoader.cs11
-rw-r--r--OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs9
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneManager.cs16
5 files changed, 65 insertions, 7 deletions
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
462 /// <param name="regionInfo"></param> 462 /// <param name="regionInfo"></param>
463 /// <param name="portadd_flag"></param> 463 /// <param name="portadd_flag"></param>
464 /// <returns></returns> 464 /// <returns></returns>
465 public UDPServer CreateRegion(RegionInfo regionInfo, bool portadd_flag) 465 public UDPServer CreateRegion(RegionInfo regionInfo, bool portadd_flag) {
466 return CreateRegion(regionInfo, portadd_flag, false);
467 }
468
469 /// <summary>
470 /// Execute the region creation process. This includes setting up scene infrastructure.
471 /// </summary>
472 /// <param name="regionInfo"></param>
473 /// <param name="portadd_flag"></param>
474 /// <returns></returns>
475 public UDPServer CreateRegion(RegionInfo regionInfo) {
476 return CreateRegion(regionInfo, false, true);
477 }
478
479 /// <summary>
480 /// Execute the region creation process. This includes setting up scene infrastructure.
481 /// </summary>
482 /// <param name="regionInfo"></param>
483 /// <param name="portadd_flag"></param>
484 /// <param name="do_post_init"></param>
485 /// <returns></returns>
486 public UDPServer CreateRegion(RegionInfo regionInfo, bool portadd_flag, bool do_post_init)
466 { 487 {
467 int port = regionInfo.InternalEndPoint.Port; 488 int port = regionInfo.InternalEndPoint.Port;
468 489
@@ -487,7 +508,7 @@ namespace OpenSim
487 508
488 m_log.Info("[MODULES]: Loading Region's modules"); 509 m_log.Info("[MODULES]: Loading Region's modules");
489 510
490 m_moduleLoader.PickupModules(scene, "."); 511 List<IRegionModule> modules = m_moduleLoader.PickupModules(scene, ".");
491 //m_moduleLoader.PickupModules(scene, "ScriptEngines"); 512 //m_moduleLoader.PickupModules(scene, "ScriptEngines");
492 //m_moduleLoader.LoadRegionModules(Path.Combine("ScriptEngines", m_scriptEngine), scene); 513 //m_moduleLoader.LoadRegionModules(Path.Combine("ScriptEngines", m_scriptEngine), scene);
493 514
@@ -536,6 +557,14 @@ namespace OpenSim
536 m_regionData.Add(regionInfo); 557 m_regionData.Add(regionInfo);
537 udpServer.ServerListener(); 558 udpServer.ServerListener();
538 559
560 if (do_post_init)
561 {
562 foreach (IRegionModule module in modules)
563 {
564 module.PostInitialise();
565 }
566 }
567
539 return udpServer; 568 return udpServer;
540 } 569 }
541 570
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
54 protected uint m_httpServerPort; 54 protected uint m_httpServerPort;
55 55
56 protected CommunicationsManager m_commsManager; 56 protected CommunicationsManager m_commsManager;
57 public CommunicationsManager CommunicationsManager {
58 get { return m_commsManager; }
59 }
57 60
58 protected SceneManager m_sceneManager = new SceneManager(); 61 protected SceneManager m_sceneManager = new SceneManager();
59 62
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
62 } 62 }
63 } 63 }
64 64
65 public void PickupModules(Scene scene, string moduleDir) 65 public List<IRegionModule> PickupModules(Scene scene, string moduleDir)
66 { 66 {
67 DirectoryInfo dir = new DirectoryInfo(moduleDir); 67 DirectoryInfo dir = new DirectoryInfo(moduleDir);
68 List<IRegionModule> modules = new List<IRegionModule>();
68 69
69 foreach (FileInfo fileInfo in dir.GetFiles("*.dll")) 70 foreach (FileInfo fileInfo in dir.GetFiles("*.dll"))
70 { 71 {
71 LoadRegionModules(fileInfo.FullName, scene); 72 modules.AddRange(LoadRegionModules(fileInfo.FullName, scene));
72 } 73 }
74 return modules;
73 } 75 }
74 76
75 public void LoadDefaultSharedModules() 77 public void LoadDefaultSharedModules()
@@ -190,9 +192,10 @@ namespace OpenSim.Region.Environment
190 } 192 }
191 } 193 }
192 194
193 public void LoadRegionModules(string dllName, Scene scene) 195 public List<IRegionModule> LoadRegionModules(string dllName, Scene scene)
194 { 196 {
195 IRegionModule[] modules = LoadModules(dllName); 197 IRegionModule[] modules = LoadModules(dllName);
198 List<IRegionModule> initializedModules = new List<IRegionModule>();
196 199
197 if (modules.Length > 0) 200 if (modules.Length > 0)
198 { 201 {
@@ -203,6 +206,7 @@ namespace OpenSim.Region.Environment
203 { 206 {
204 m_log.InfoFormat("[MODULES]: [{0}]: Initializing.", module.Name); 207 m_log.InfoFormat("[MODULES]: [{0}]: Initializing.", module.Name);
205 InitializeModule(module, scene); 208 InitializeModule(module, scene);
209 initializedModules.Add(module);
206 } 210 }
207 else 211 else
208 { 212 {
@@ -211,6 +215,7 @@ namespace OpenSim.Region.Environment
211 } 215 }
212 } 216 }
213 } 217 }
218 return initializedModules;
214 } 219 }
215 220
216 public void LoadRegionModule(string dllName, string moduleName, Scene scene) 221 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
178 { 178 {
179 m_log.Error("[TERRAIN]: Unable to load heightmap, the " + loader.Value + 179 m_log.Error("[TERRAIN]: Unable to load heightmap, the " + loader.Value +
180 " parser does not support file loading. (May be save only)"); 180 " parser does not support file loading. (May be save only)");
181 return; 181 throw new Exception(String.Format("unable to load heightmap: parser {0} does not support loading", loader.Value));
182 } 182 }
183 catch (FileNotFoundException) 183 catch (FileNotFoundException)
184 { 184 {
185 m_log.Error( 185 m_log.Error(
186 "[TERRAIN]: Unable to load heightmap, file not found. (A directory permissions error may also cause this)"); 186 "[TERRAIN]: Unable to load heightmap, file not found. (A directory permissions error may also cause this)");
187 return; 187 throw new Exception(String.Format("unable to load heightmap: file {0} not found (or permissions do not allow access",
188 filename));
188 } 189 }
189 } 190 }
191 CheckForTerrainUpdates();
190 m_log.Info("[TERRAIN]: File (" + filename + ") loaded successfully"); 192 m_log.Info("[TERRAIN]: File (" + filename + ") loaded successfully");
191 return; 193 return;
192 } 194 }
193 } 195 }
194 m_log.Error("[TERRAIN]: Unable to load heightmap, no file loader availible for that format."); 196 m_log.Error("[TERRAIN]: Unable to load heightmap, no file loader availible for that format.");
197 throw new Exception(String.Format("unable to load heightmap from file {0}: no loader available for that format",
198 filename));
195 } 199 }
196 200
197 /// <summary> 201 /// <summary>
@@ -214,6 +218,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain
214 catch (NotImplementedException) 218 catch (NotImplementedException)
215 { 219 {
216 m_log.Error("Unable to save to " + filename + ", saving of this file format has not been implemented."); 220 m_log.Error("Unable to save to " + filename + ", saving of this file format has not been implemented.");
221 throw new Exception(String.Format("unable to save heightmap: {0}: saving of this file format not implemented"));
217 } 222 }
218 } 223 }
219 224
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
250 } 250 }
251 } 251 }
252 252
253 public bool TrySetCurrentScene(LLUUID regionID)
254 {
255 Console.WriteLine("Searching for Region: '{0}'", regionID.ToString());
256
257 foreach (Scene scene in m_localScenes)
258 {
259 if (scene.RegionInfo.RegionID == regionID)
260 {
261 m_currentScene = scene;
262 return true;
263 }
264 }
265
266 return false;
267 }
268
253 public bool TryGetScene(string regionName, out Scene scene) 269 public bool TryGetScene(string regionName, out Scene scene)
254 { 270 {
255 foreach (Scene mscene in m_localScenes) 271 foreach (Scene mscene in m_localScenes)