Applied patch from mantis #3387, which adds Dynamic plugin support to gridserver. Thanks mikkopa.
parent
c7151a5a2b
commit
70f283e089
|
@ -962,6 +962,10 @@ namespace OpenSim.Framework
|
|||
{
|
||||
fieldInfo.SetValue(settingsClass, System.Convert.ToUInt32(config.Get(fieldInfo.Name, ((uint)fieldInfo.GetValue(settingsClass)).ToString())));
|
||||
}
|
||||
else if (fieldInfo.FieldType == typeof(System.Uri))
|
||||
{
|
||||
fieldInfo.SetValue(settingsClass, new Uri(config.Get(fieldInfo.Name, (string)fieldInfo.GetValue(settingsClass))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -986,10 +990,14 @@ namespace OpenSim.Framework
|
|||
{
|
||||
propInfo.SetValue(settingsClass, config.GetFloat(propInfo.Name, (float)propInfo.GetValue(settingsClass, null)), null);
|
||||
}
|
||||
if (propInfo.PropertyType == typeof(System.UInt32))
|
||||
else if (propInfo.PropertyType == typeof(System.UInt32))
|
||||
{
|
||||
propInfo.SetValue(settingsClass, System.Convert.ToUInt32(config.Get(propInfo.Name, ((uint)propInfo.GetValue(settingsClass, null)).ToString())), null);
|
||||
}
|
||||
else if (propInfo.PropertyType == typeof(System.Uri))
|
||||
{
|
||||
propInfo.SetValue(settingsClass, new Uri(config.Get(propInfo.Name, (string)propInfo.GetValue(settingsClass, null))), null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,92 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using OpenSim.Grid.Framework;
|
||||
using log4net;
|
||||
using System.Reflection;
|
||||
using OpenSim.Framework.Servers;
|
||||
|
||||
namespace OpenSim.Grid.GridServer.ModuleLoader
|
||||
{
|
||||
public class GridModuleLoaderPlugin : IGridPlugin
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
protected List<IGridServiceModule> m_modules;
|
||||
protected GridServerBase m_core;
|
||||
|
||||
#region IGridPlugin Members
|
||||
|
||||
public void Initialise(GridServerBase gridServer)
|
||||
{
|
||||
m_core = gridServer;
|
||||
|
||||
GridModuleLoader<IGridServiceModule> moduleLoader = new GridModuleLoader<IGridServiceModule>();
|
||||
|
||||
m_modules = moduleLoader.PickupModules(".");
|
||||
|
||||
InitializeModules();
|
||||
PostInitializeModules();
|
||||
RegisterModuleHandlers();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
protected void InitializeModules()
|
||||
{
|
||||
foreach (IGridServiceModule m in m_modules)
|
||||
{
|
||||
m_log.InfoFormat("[MODULES]: Initialising Grid Service Module {0}", m.Name);
|
||||
m.Initialise(m_core);
|
||||
}
|
||||
}
|
||||
|
||||
protected void PostInitializeModules()
|
||||
{
|
||||
foreach (IGridServiceModule m in m_modules)
|
||||
{
|
||||
//m_log.InfoFormat("[MODULES]: Initialising Grid Service Module {0}", m.Name);
|
||||
m.PostInitialise();
|
||||
}
|
||||
}
|
||||
|
||||
protected void RegisterModuleHandlers()
|
||||
{
|
||||
BaseHttpServer httpServer;
|
||||
if (m_core.TryGet<BaseHttpServer>(out httpServer))
|
||||
{
|
||||
foreach (IGridServiceModule m in m_modules)
|
||||
{
|
||||
//m_log.InfoFormat("[MODULES]: Initialising Grid Service Module {0}", m.Name);
|
||||
m.RegisterHandlers(httpServer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region IPlugin Members
|
||||
|
||||
public string Version
|
||||
{
|
||||
get { return "0.1"; }
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "GridModuleLoaderPlugin"; }
|
||||
}
|
||||
|
||||
public void Initialise()
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposable Members
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -39,9 +39,9 @@ using OpenSim.Grid.Framework;
|
|||
|
||||
namespace OpenSim.Grid.GridServer.Modules
|
||||
{
|
||||
public class GridMessagingModule : IMessagingServerDiscovery
|
||||
public class GridMessagingModule : IMessagingServerDiscovery, IGridServiceModule
|
||||
{
|
||||
//private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
protected IRegionProfileService m_gridDBService;
|
||||
protected IGridServiceCore m_gridCore;
|
||||
|
@ -62,27 +62,28 @@ namespace OpenSim.Grid.GridServer.Modules
|
|||
{
|
||||
}
|
||||
|
||||
public void Initialise(string opensimVersion, IRegionProfileService gridDBService, IGridServiceCore gridCore, GridConfig config)
|
||||
public void Initialise(IGridServiceCore core)
|
||||
{
|
||||
//m_opensimVersion = opensimVersion;
|
||||
m_gridDBService = gridDBService;
|
||||
m_gridCore = gridCore;
|
||||
m_config = config;
|
||||
|
||||
m_gridCore = core;
|
||||
m_gridCore.RegisterInterface<IMessagingServerDiscovery>(this);
|
||||
|
||||
RegisterHandlers();
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
{
|
||||
|
||||
if (m_gridCore.TryGet<IRegionProfileService>(out m_gridDBService) &&
|
||||
m_gridCore.TryGet<GridConfig>(out m_config))
|
||||
{
|
||||
;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.Error("[GridMessagingModule] Failed to post initialize module");
|
||||
}
|
||||
}
|
||||
|
||||
public void RegisterHandlers()
|
||||
public void RegisterHandlers(BaseHttpServer httpServer)
|
||||
{
|
||||
//have these in separate method as some servers restart the http server and reregister all the handlers.
|
||||
m_httpServer = m_gridCore.GetHttpServer();
|
||||
m_httpServer = httpServer;
|
||||
|
||||
// Message Server ---> Grid Server
|
||||
m_httpServer.AddXmlRPCHandler("register_messageserver", XmlRPCRegisterMessageServer);
|
||||
|
@ -158,5 +159,14 @@ namespace OpenSim.Grid.GridServer.Modules
|
|||
m_messageServers.Remove(m);
|
||||
}
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "GridMessagingModule"; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ using OpenSim.Grid.Framework;
|
|||
|
||||
namespace OpenSim.Grid.GridServer.Modules
|
||||
{
|
||||
public class GridRestModule
|
||||
public class GridRestModule : IGridServiceModule
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
@ -67,24 +67,34 @@ namespace OpenSim.Grid.GridServer.Modules
|
|||
{
|
||||
}
|
||||
|
||||
public void Initialise(string opensimVersion, GridDBService gridDBService, IGridServiceCore gridCore, GridConfig config)
|
||||
#region IGridServiceModule Members
|
||||
|
||||
public void Close()
|
||||
{
|
||||
//m_opensimVersion = opensimVersion;
|
||||
m_gridDBService = gridDBService;
|
||||
m_gridCore = gridCore;
|
||||
m_config = config;
|
||||
RegisterHandlers();
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void Initialise(IGridServiceCore core)
|
||||
{
|
||||
m_gridCore = core;
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
{
|
||||
|
||||
IRegionProfileService dbService;
|
||||
if (m_gridCore.TryGet<IRegionProfileService>(out dbService) &&
|
||||
m_gridCore.TryGet<GridConfig>(out m_config))
|
||||
{
|
||||
if (dbService is GridDBService)
|
||||
m_gridDBService = (GridDBService)dbService;
|
||||
}
|
||||
else
|
||||
m_log.Warn("[GridRestModule]: Could not get modules from core");
|
||||
}
|
||||
|
||||
public void RegisterHandlers()
|
||||
public void RegisterHandlers(BaseHttpServer httpServer)
|
||||
{
|
||||
//have these in separate method as some servers restart the http server and reregister all the handlers.
|
||||
m_httpServer = m_gridCore.GetHttpServer();
|
||||
m_httpServer = httpServer;
|
||||
|
||||
m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/sims/", RestGetSimMethod));
|
||||
m_httpServer.AddStreamHandler(new RestStreamHandler("POST", "/sims/", RestSetSimMethod));
|
||||
|
@ -93,6 +103,13 @@ namespace OpenSim.Grid.GridServer.Modules
|
|||
m_httpServer.AddStreamHandler(new RestStreamHandler("POST", "/regions/", RestSetRegionMethod));
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "GridRestModule"; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Performs a REST Get Operation
|
||||
/// </summary>
|
||||
|
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||
using System.Reflection;
|
||||
using System.Text;
|
||||
using log4net;
|
||||
using OpenSim.Data;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Console;
|
||||
using OpenSim.Grid.Framework;
|
||||
|
@ -71,19 +72,8 @@ namespace OpenSim.Grid.GridServer.Modules
|
|||
|
||||
//Register the database access service so modules can fetch it
|
||||
// RegisterInterface<GridDBService>(m_gridDBService);
|
||||
|
||||
m_gridMessageModule = new GridMessagingModule();
|
||||
m_gridMessageModule.Initialise(m_version, m_gridDBService, m_core, m_config);
|
||||
|
||||
m_gridXmlRpcModule = new GridXmlRpcModule();
|
||||
m_gridXmlRpcModule.Initialise(m_version, m_gridDBService, m_core, m_config);
|
||||
|
||||
m_gridRestModule = new GridRestModule();
|
||||
m_gridRestModule.Initialise(m_version, m_gridDBService, m_core, m_config);
|
||||
|
||||
m_gridMessageModule.PostInitialise();
|
||||
m_gridXmlRpcModule.PostInitialise();
|
||||
m_gridRestModule.PostInitialise();
|
||||
m_core.RegisterInterface<IRegionProfileService>(m_gridDBService);
|
||||
m_core.RegisterInterface<GridConfig>(m_config);
|
||||
}
|
||||
|
||||
#region Console Command Handlers
|
||||
|
|
|
@ -42,7 +42,7 @@ using OpenSim.Grid.Framework;
|
|||
|
||||
namespace OpenSim.Grid.GridServer.Modules
|
||||
{
|
||||
public class GridXmlRpcModule
|
||||
public class GridXmlRpcModule : IGridServiceModule
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
@ -69,28 +69,27 @@ namespace OpenSim.Grid.GridServer.Modules
|
|||
{
|
||||
}
|
||||
|
||||
public void Initialise(string opensimVersion, IRegionProfileService gridDBService, IGridServiceCore gridCore, GridConfig config)
|
||||
#region IGridServiceModule Members
|
||||
|
||||
public void Initialise(IGridServiceCore core)
|
||||
{
|
||||
m_opensimVersion = opensimVersion;
|
||||
m_gridDBService = gridDBService;
|
||||
m_gridCore = gridCore;
|
||||
m_config = config;
|
||||
RegisterHandlers();
|
||||
m_gridCore = core;
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
{
|
||||
IMessagingServerDiscovery messagingModule;
|
||||
if (m_gridCore.TryGet<IMessagingServerDiscovery>(out messagingModule))
|
||||
if (m_gridCore.TryGet<IMessagingServerDiscovery>(out messagingModule) &&
|
||||
m_gridCore.TryGet<IRegionProfileService>(out m_gridDBService) &&
|
||||
m_gridCore.TryGet<GridConfig>(out m_config))
|
||||
{
|
||||
m_messagingServerMapper = messagingModule;
|
||||
}
|
||||
}
|
||||
|
||||
public void RegisterHandlers()
|
||||
public void RegisterHandlers(BaseHttpServer httpServer)
|
||||
{
|
||||
//have these in separate method as some servers restart the http server and reregister all the handlers.
|
||||
m_httpServer = m_gridCore.GetHttpServer();
|
||||
m_httpServer = httpServer;
|
||||
|
||||
m_httpServer.AddXmlRPCHandler("simulator_login", XmlRpcSimulatorLoginMethod);
|
||||
m_httpServer.AddXmlRPCHandler("simulator_data_request", XmlRpcSimulatorDataRequestMethod);
|
||||
|
@ -99,6 +98,17 @@ namespace OpenSim.Grid.GridServer.Modules
|
|||
m_httpServer.AddXmlRPCHandler("search_for_region_by_name", XmlRpcSearchForRegionMethod);
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "GridXmlRpcModule"; }
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Returns a XML String containing a list of the neighbouring regions
|
||||
/// </summary>
|
||||
|
|
|
@ -111,10 +111,11 @@ namespace OpenSim.Grid.GridServer
|
|||
IConfig startupConfig = m_configSource.Source.Configs["Startup"];
|
||||
if (startupConfig != null)
|
||||
{
|
||||
Convert.ToUInt32(startupConfig.GetString("HttpPort", "8051"));
|
||||
httpPort = Convert.ToUInt32(startupConfig.GetString("HttpPort", "8051"));
|
||||
|
||||
m_log.Info("[GRID]: Starting HTTP process");
|
||||
m_log.InfoFormat("[GRID]: Starting HTTP process on port {0}", httpPort);
|
||||
m_httpServer = new BaseHttpServer(httpPort);
|
||||
RegisterInterface<BaseHttpServer>(m_httpServer);
|
||||
|
||||
string pluginsToLoad = startupConfig.GetString("LoadPlugins", "");
|
||||
|
||||
|
|
|
@ -90,11 +90,6 @@ namespace OpenSim.Grid.UserServer.Modules
|
|||
StartupUserServerModules();
|
||||
|
||||
StartOtherComponents(inventoryService);
|
||||
|
||||
//PostInitialise the modules
|
||||
PostInitialiseModules();
|
||||
|
||||
RegisterHttpHandlers();
|
||||
}
|
||||
|
||||
protected virtual IInterServiceInventoryServices StartupCoreComponents()
|
||||
|
@ -123,22 +118,6 @@ namespace OpenSim.Grid.UserServer.Modules
|
|||
//setup database access service, for now this has to be created before the other modules.
|
||||
m_userDataBaseService = new UserDataBaseService();
|
||||
m_userDataBaseService.Initialise(m_core);
|
||||
|
||||
//DONE: change these modules so they fetch the databaseService class in the PostInitialise method
|
||||
|
||||
GridModuleLoader<IGridServiceModule> moduleLoader = new GridModuleLoader<IGridServiceModule>();
|
||||
|
||||
m_modules = moduleLoader.PickupModules(".");
|
||||
|
||||
InitializeModules();
|
||||
}
|
||||
|
||||
private void InitializeModules()
|
||||
{
|
||||
foreach (IGridServiceModule module in m_modules)
|
||||
{
|
||||
module.Initialise(m_core);
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void StartOtherComponents(IInterServiceInventoryServices inventoryService)
|
||||
|
@ -152,24 +131,8 @@ namespace OpenSim.Grid.UserServer.Modules
|
|||
m_loginService.setloginlevel((int)m_cfg.DefaultUserLevel);
|
||||
|
||||
m_core.RegisterInterface<UserLoginService>(m_loginService); //TODO: should be done in the login service
|
||||
}
|
||||
|
||||
protected virtual void PostInitialiseModules()
|
||||
{
|
||||
foreach (IGridServiceModule module in m_modules)
|
||||
{
|
||||
module.PostInitialise();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void RegisterHttpHandlers()
|
||||
{
|
||||
m_loginService.RegisterHandlers(m_httpServer, m_cfg.EnableLLSDLogin, true);
|
||||
|
||||
foreach (IGridServiceModule module in m_modules)
|
||||
{
|
||||
module.RegisterHandlers(m_httpServer);
|
||||
}
|
||||
}
|
||||
|
||||
#region IPlugin Members
|
||||
|
@ -195,10 +158,6 @@ namespace OpenSim.Grid.UserServer.Modules
|
|||
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (IGridServiceModule module in m_modules)
|
||||
{
|
||||
module.Close();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[Startup]
|
||||
HttpPort = 8001
|
||||
LoadPlugins = "GridServerPlugin,UserServerPlugin"
|
||||
LoadPlugins = "GridServerPlugin,UserServerPlugin,GridModuleLoaderPlugin"
|
||||
|
||||
[UserServerConfig]
|
||||
DatabaseProvider = "OpenSim.Data.MySql.dll"
|
||||
|
|
26
prebuild.xml
26
prebuild.xml
|
@ -784,6 +784,32 @@
|
|||
</Files>
|
||||
</Project>
|
||||
|
||||
<Project name="OpenSim.Grid.GridServer.ModuleLoader" path="OpenSim/Grid/GridServer.ModuleLoader" type="Library">
|
||||
<Configuration name="Debug">
|
||||
<Options>
|
||||
<OutputPath>../../../bin/</OutputPath>
|
||||
</Options>
|
||||
</Configuration>
|
||||
<Configuration name="Release">
|
||||
<Options>
|
||||
<OutputPath>../../../bin/</OutputPath>
|
||||
</Options>
|
||||
</Configuration>
|
||||
|
||||
<ReferencePath>../../../bin/</ReferencePath>
|
||||
<Reference name="System"/>
|
||||
<Reference name="OpenSim.Framework"/>
|
||||
<Reference name="OpenSim.Framework.Servers"/>
|
||||
<Reference name="OpenSim.Grid.Framework"/>
|
||||
<Reference name="OpenSim.Grid.GridServer"/>
|
||||
<Reference name="log4net.dll"/>
|
||||
|
||||
<Files>
|
||||
<Match pattern="*.cs" recurse="true"/>
|
||||
<Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/>
|
||||
</Files>
|
||||
</Project>
|
||||
|
||||
|
||||
<Project name="OpenSim.Grid.AssetServer" path="OpenSim/Grid/AssetServer" type="Exe">
|
||||
<Configuration name="Debug">
|
||||
|
|
Loading…
Reference in New Issue