diff --git a/OpenSim/Grid/GridServer/GridServerBase.cs b/OpenSim/Grid/GridServer/GridServerBase.cs index faf1d8bb9f..c29924ba2f 100644 --- a/OpenSim/Grid/GridServer/GridServerBase.cs +++ b/OpenSim/Grid/GridServer/GridServerBase.cs @@ -28,9 +28,14 @@ using System; using System.IO; using System.Timers; +using System.Collections; +using System.Collections.Generic; using OpenSim.Framework; using OpenSim.Framework.Console; using OpenSim.Framework.Servers; +using Nwc.XmlRpc; +using Mono.Addins; +using Mono.Addins.Description; namespace OpenSim.Grid.GridServer { @@ -40,6 +45,13 @@ namespace OpenSim.Grid.GridServer { protected GridConfig m_config; protected GridManager m_gridManager; + protected BaseHttpServer httpServer; + protected List m_plugins = new List(); + + public BaseHttpServer + { + get { return httpServer; } + } public void Work() { @@ -76,7 +88,7 @@ namespace OpenSim.Grid.GridServer SetupGridManager(); m_console.Status("[GRID]: Starting HTTP process"); - BaseHttpServer httpServer = new BaseHttpServer(m_config.HttpPort); + httpServer = new BaseHttpServer(m_config.HttpPort); //GridManagementAgent GridManagerAgent = new GridManagementAgent(httpServer, "gridserver", m_config.SimSendKey, m_config.SimRecvKey, managercallback); httpServer.AddXmlRPCHandler("simulator_login", m_gridManager.XmlRpcSimulatorLoginMethod); @@ -99,6 +111,8 @@ namespace OpenSim.Grid.GridServer //httpServer.AddRestHandler("GET", "/regions/", m_gridManager.RestGetRegionMethod); //httpServer.AddRestHandler("POST", "/regions/", m_gridManager.RestSetRegionMethod); + LoadGridPlugins(); + httpServer.Start(); m_console.Status("[GRID]: Starting sim status checker"); @@ -108,6 +122,23 @@ namespace OpenSim.Grid.GridServer simCheckTimer.Enabled = true; } + protected void LoadGridPlugins() + { + //m_console.Status("[GRIDPLUGINS]: Looking for plugins"); + AddinManager.Initialize("."); + AddinManager.Registry.Update(null); + + ExtensionNodeList nodes = AddinManager.GetExtensionNodes("/OpenSim/GridServer"); + foreach (TypeExtensionNode node in nodes) + { + m_console.Status("[GRIDPLUGINS]: Loading OpenSim plugin "+node.Path); + IGridPlugin plugin = (IGridPlugin) node.CreateInstance(); + plugin.Initialise(this); + m_plugins.Add(plugin); + } + } + + protected virtual void SetupGridManager() { m_console.Status("[GRID]: Connecting to Storage Server"); @@ -169,6 +200,7 @@ namespace OpenSim.Grid.GridServer break; case "shutdown": + foreach(IGridPlugin plugin in m_plugins) plugin.Close(); m_console.Close(); Environment.Exit(0); break; diff --git a/OpenSim/Grid/GridServer/IGridPlugin.cs b/OpenSim/Grid/GridServer/IGridPlugin.cs new file mode 100644 index 0000000000..fbadfce298 --- /dev/null +++ b/OpenSim/Grid/GridServer/IGridPlugin.cs @@ -0,0 +1,41 @@ +/* +* 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 Mono.Addins; + +[assembly : AddinRoot("OpenSim", "0.5")] + +namespace OpenSim.Grid.GridServer +{ + [TypeExtensionPoint("/OpenSim/GridServer")] + public interface IGridPlugin + { + void Initialise(GridServerBase gridServer); + void Close(); + } +} diff --git a/prebuild.xml b/prebuild.xml index 1d4d4c1f83..f9b16028b1 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -1092,6 +1092,7 @@ +