From 648452dd91e07be4ec0e81793807e86bd48362c4 Mon Sep 17 00:00:00 2001
From: Homer Horwitz
Date: Sun, 5 Apr 2009 17:08:11 +0000
Subject: - Add new RegionModulesControllerPlugin to the application modules -
Change several classes to use the new plugin for handling of region-modules
(NOTE: No regionmodule is using this yet) - Add necessary prebuild parts
(don't forget to runprebuild) Attention: Work in progress. This shouldn't
break anything, but you never know...
---
.../Framework/Interfaces/INonSharedRegionModule.cs | 35 ++++++++++
.../Framework/Interfaces/IRegionModuleBase.cs | 76 ++++++++++++++++++++++
.../Interfaces/IRegionModulesController.cs | 38 +++++++++++
.../Framework/Interfaces/ISharedRegionModule.cs | 40 ++++++++++++
OpenSim/Region/Framework/Scenes/SceneBase.cs | 65 ++++++++++++++++--
5 files changed, 247 insertions(+), 7 deletions(-)
create mode 100644 OpenSim/Region/Framework/Interfaces/INonSharedRegionModule.cs
create mode 100644 OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs
create mode 100644 OpenSim/Region/Framework/Interfaces/IRegionModulesController.cs
create mode 100644 OpenSim/Region/Framework/Interfaces/ISharedRegionModule.cs
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Interfaces/INonSharedRegionModule.cs b/OpenSim/Region/Framework/Interfaces/INonSharedRegionModule.cs
new file mode 100644
index 0000000..b8af866
--- /dev/null
+++ b/OpenSim/Region/Framework/Interfaces/INonSharedRegionModule.cs
@@ -0,0 +1,35 @@
+/*
+ * 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;
+
+namespace OpenSim.Region.Framework.Interfaces
+{
+ public interface INonSharedRegionModule : IRegionModuleBase
+ {
+ }
+}
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs b/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs
new file mode 100644
index 0000000..265b464
--- /dev/null
+++ b/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs
@@ -0,0 +1,76 @@
+/*
+ * 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 Mono.Addins;
+using Nini.Config;
+using OpenSim.Region.Framework.Scenes;
+
+namespace OpenSim.Region.Framework.Interfaces
+{
+ public interface IRegionModuleBase
+ {
+ ///
+ /// The name of the module
+ ///
+ string Name { get; }
+
+ ///
+ /// This is called to initialize the region module. For shared modules, this is called
+ /// exactly once, after creating the single (shared) instance. For non-shared modules,
+ /// this is called once on each instance, after the instace for the region has been created.
+ ///
+ ///
+ /// A
+ ///
+ void Initialise(IConfigSource source);
+
+ ///
+ /// This is the inverse to . After a Close(), this instance won't be usable anymore.
+ ///
+ void Close();
+
+ ///
+ /// This is called whenever a is added. For shared modules, this can happen several times.
+ /// For non-shared modules, this happens exactly once, after has been called.
+ ///
+ ///
+ /// A
+ ///
+ void AddRegion(Scene scene);
+
+ ///
+ /// This is called whenever a is removed. For shared modules, this can happen several times.
+ /// For non-shared modules, this happens exactly once, if the scene this instance is associated with is removed.
+ ///
+ ///
+ /// A
+ ///
+ void RemoveRegion(Scene scene);
+ }
+
+}
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionModulesController.cs b/OpenSim/Region/Framework/Interfaces/IRegionModulesController.cs
new file mode 100644
index 0000000..d38c962
--- /dev/null
+++ b/OpenSim/Region/Framework/Interfaces/IRegionModulesController.cs
@@ -0,0 +1,38 @@
+/*
+ * 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 OpenSim.Region.Framework.Scenes;
+
+namespace OpenSim.Region.Framework.Interfaces
+{
+ public interface IRegionModulesController
+ {
+ void AddRegionToModules(Scene scene);
+ void RemoveRegionFromModules (Scene scene);
+ }
+}
diff --git a/OpenSim/Region/Framework/Interfaces/ISharedRegionModule.cs b/OpenSim/Region/Framework/Interfaces/ISharedRegionModule.cs
new file mode 100644
index 0000000..d0b6ecc
--- /dev/null
+++ b/OpenSim/Region/Framework/Interfaces/ISharedRegionModule.cs
@@ -0,0 +1,40 @@
+/*
+ * 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;
+
+namespace OpenSim.Region.Framework.Interfaces
+{
+ public interface ISharedRegionModule : IRegionModuleBase
+ {
+ ///
+ /// This is called exactly once after all the shared region-modules have been instanciated and
+ /// d.
+ ///
+ void PostInitialise();
+ }
+}
diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs
index 3695b21..42f3d97 100644
--- a/OpenSim/Region/Framework/Scenes/SceneBase.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs
@@ -59,13 +59,19 @@ namespace OpenSim.Region.Framework.Scenes
}
protected Dictionary m_modules = new Dictionary();
+ public Dictionary RegionModules
+ {
+ get { return m_regionModules; }
+ }
+ private Dictionary m_regionModules = new Dictionary();
+
///
/// The module interfaces available from this scene.
///
protected Dictionary> ModuleInterfaces = new Dictionary>();
protected Dictionary ModuleAPIMethods = new Dictionary();
-
+
///
/// The module commanders available from this scene
///
@@ -235,7 +241,7 @@ namespace OpenSim.Region.Framework.Scenes
}
}
Modules.Clear();
-
+
try
{
EventManager.TriggerShutdown();
@@ -279,6 +285,24 @@ namespace OpenSim.Region.Framework.Scenes
}
///
+ /// Add a region-module to this scene. TODO: This will replace AddModule in the future.
+ ///
+ ///
+ ///
+ public void AddRegionModule(string name, IRegionModuleBase module)
+ {
+ if (!RegionModules.ContainsKey(name))
+ {
+ RegionModules.Add(name, module);
+ }
+ }
+
+ public void RemoveRegionModule(string name)
+ {
+ RegionModules.Remove(name);
+ }
+
+ ///
/// Register a module commander.
///
///
@@ -368,6 +392,25 @@ namespace OpenSim.Region.Framework.Scenes
}
}
+ public void UnregisterModuleInterface(M mod)
+ {
+ List