From 285dfe305550dc3f47f934ef96ae0c1b0b87aa60 Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Tue, 14 Apr 2009 03:22:02 +0000
Subject: Add the RegionLoaded(Scene) API to the new region module interface to
allow region modules to use another region module's interfaces and events in
a scene context
---
.../RegionModulesControllerPlugin.cs | 20 ++++++++++++++++++++
.../CoreModules/World/Terrain/TerrainModule.cs | 4 ++++
.../Region/Framework/Interfaces/IRegionModuleBase.cs | 13 +++++++++++++
3 files changed, 37 insertions(+)
diff --git a/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs b/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs
index 49a400a..1914120 100644
--- a/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs
@@ -174,6 +174,26 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
module.AddRegion(scene);
scene.AddRegionModule(module.Name, module);
}
+
+ // This is needed for all module types. Modules will register
+ // Interfaces with scene in AddScene, and will also need a means
+ // to access interfaces registered by other modules. Without
+ // this extra method, a module attempting to use another modules's
+ // interface would be successful only depending on load order,
+ // which can't be depended upon, or modules would need to resort
+ // to ugly kludges to attempt to request interfaces when needed
+ // and unneccessary caching logic repeated in all modules.
+ // The extra function stub is just that much cleaner
+ //
+ foreach (ISharedRegionModule module in m_sharedInstances)
+ {
+ module.RegionLoaded(scene);
+ }
+
+ foreach (INonSharedRegionModule module in list)
+ {
+ module.RegionLoaded(scene);
+ }
}
public void RemoveRegionFromModules (Scene scene)
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
index 9f1867f..5893a11 100644
--- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
+++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
@@ -136,6 +136,10 @@ namespace OpenSim.Region.CoreModules.World.Terrain
LoadPlugins();
}
+ public void RegionLoaded(Scene scene)
+ {
+ }
+
public void RemoveRegion(Scene scene)
{
lock (m_scene)
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs b/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs
index 265b464..9d2327a 100644
--- a/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs
+++ b/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs
@@ -71,6 +71,19 @@ namespace OpenSim.Region.Framework.Interfaces
/// A
///
void RemoveRegion(Scene scene);
+
+ ///
+ /// This will be called once for every scene loaded. In a shared module
+ /// this will be multiple times in one instance, while a nonshared
+ /// module instance will only be called once.
+ /// This method is called after AddRegion has been called in all
+ /// modules for that scene, providing an opportunity to request
+ /// another module's interface, or hook an event from another module.
+ ///
+ ///
+ /// A
+ ///
+ void RegionLoaded(Scene scene);
}
}
--
cgit v1.1