Added IRegistryCore and RegistryCore to OpenSim.Framework.
Added a ApplicationRegistry to OpenSimBase. Changed LoadRegionsPlugin so it registers itself to that application registry. Added a event to LoadRegionsPlugin, that is triggered when it creates a new scene ,although maybe this event should actually be in opensimBase incase other plugins are creating regions (like the RemoteAdminPlugin).GenericGridServerConcept
parent
c0c1a31f61
commit
33e7c09b7b
|
@ -38,13 +38,19 @@ using OpenSim.Region.CoreModules.Avatar.InstantMessage;
|
||||||
using OpenSim.Region.CoreModules.Scripting.DynamicTexture;
|
using OpenSim.Region.CoreModules.Scripting.DynamicTexture;
|
||||||
using OpenSim.Region.CoreModules.Scripting.LoadImageURL;
|
using OpenSim.Region.CoreModules.Scripting.LoadImageURL;
|
||||||
using OpenSim.Region.CoreModules.Scripting.XMLRPC;
|
using OpenSim.Region.CoreModules.Scripting.XMLRPC;
|
||||||
|
using OpenSim.Framework.Servers;
|
||||||
|
|
||||||
namespace OpenSim.ApplicationPlugins.LoadRegions
|
namespace OpenSim.ApplicationPlugins.LoadRegions
|
||||||
{
|
{
|
||||||
|
public delegate void NewRegionCreated(IScene scene);
|
||||||
|
|
||||||
public class LoadRegionsPlugin : IApplicationPlugin
|
public class LoadRegionsPlugin : IApplicationPlugin
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
public event NewRegionCreated OnNewRegionCreated;
|
||||||
|
private NewRegionCreated m_newRegionCreatedHandler;
|
||||||
|
|
||||||
#region IApplicationPlugin Members
|
#region IApplicationPlugin Members
|
||||||
|
|
||||||
// TODO: required by IPlugin, but likely not at all right
|
// TODO: required by IPlugin, but likely not at all right
|
||||||
|
@ -56,6 +62,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
|
||||||
|
|
||||||
protected OpenSimBase m_openSim;
|
protected OpenSimBase m_openSim;
|
||||||
|
|
||||||
|
|
||||||
public void Initialise()
|
public void Initialise()
|
||||||
{
|
{
|
||||||
m_log.Info("[LOADREGIONS]: " + Name + " cannot be default-initialized!");
|
m_log.Info("[LOADREGIONS]: " + Name + " cannot be default-initialized!");
|
||||||
|
@ -65,6 +72,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
|
||||||
public void Initialise(OpenSimBase openSim)
|
public void Initialise(OpenSimBase openSim)
|
||||||
{
|
{
|
||||||
m_openSim = openSim;
|
m_openSim = openSim;
|
||||||
|
m_openSim.ApplicationRegistry.RegisterInterface<LoadRegionsPlugin>(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PostInitialise()
|
public void PostInitialise()
|
||||||
|
@ -99,9 +107,18 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
|
||||||
|
|
||||||
for (int i = 0; i < regionsToLoad.Length; i++)
|
for (int i = 0; i < regionsToLoad.Length; i++)
|
||||||
{
|
{
|
||||||
|
IScene scene;
|
||||||
m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " + Thread.CurrentThread.ManagedThreadId.ToString() +
|
m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " + Thread.CurrentThread.ManagedThreadId.ToString() +
|
||||||
")");
|
")");
|
||||||
m_openSim.CreateRegion(regionsToLoad[i], true);
|
m_openSim.CreateRegion(regionsToLoad[i], true, out scene);
|
||||||
|
if (scene != null)
|
||||||
|
{
|
||||||
|
m_newRegionCreatedHandler = OnNewRegionCreated;
|
||||||
|
if (m_newRegionCreatedHandler != null)
|
||||||
|
{
|
||||||
|
m_newRegionCreatedHandler(scene);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_openSim.ModuleLoader.PostInitialise();
|
m_openSim.ModuleLoader.PostInitialise();
|
||||||
|
@ -182,9 +199,10 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
|
||||||
{
|
{
|
||||||
if (regionhandle == regionsToLoad[i].RegionHandle)
|
if (regionhandle == regionsToLoad[i].RegionHandle)
|
||||||
{
|
{
|
||||||
|
IScene scene;
|
||||||
m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " +
|
m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " +
|
||||||
Thread.CurrentThread.ManagedThreadId.ToString() + ")");
|
Thread.CurrentThread.ManagedThreadId.ToString() + ")");
|
||||||
openSim.CreateRegion(regionsToLoad[i], true);
|
openSim.CreateRegion(regionsToLoad[i], true, out scene);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -563,8 +563,8 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
region.RegionID, regionXmlPath);
|
region.RegionID, regionXmlPath);
|
||||||
region.SaveRegionToFile("dynamic region", regionXmlPath);
|
region.SaveRegionToFile("dynamic region", regionXmlPath);
|
||||||
}
|
}
|
||||||
|
IScene newscene;
|
||||||
m_app.CreateRegion(region);
|
m_app.CreateRegion(region, out newscene);
|
||||||
|
|
||||||
responseData["success"] = "true";
|
responseData["success"] = "true";
|
||||||
responseData["region_name"] = region.RegionName;
|
responseData["region_name"] = region.RegionName;
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework
|
||||||
|
{
|
||||||
|
public interface IRegistryCore
|
||||||
|
{
|
||||||
|
T Get<T>();
|
||||||
|
void RegisterInterface<T>(T iface);
|
||||||
|
bool TryGet<T>(out T iface);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework
|
||||||
|
{
|
||||||
|
public class RegistryCore
|
||||||
|
{
|
||||||
|
protected Dictionary<Type, object> m_moduleInterfaces = new Dictionary<Type, object>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Register an Module interface.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <param name="iface"></param>
|
||||||
|
public void RegisterInterface<T>(T iface)
|
||||||
|
{
|
||||||
|
lock (m_moduleInterfaces)
|
||||||
|
{
|
||||||
|
if (!m_moduleInterfaces.ContainsKey(typeof(T)))
|
||||||
|
{
|
||||||
|
m_moduleInterfaces.Add(typeof(T), iface);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool TryGet<T>(out T iface)
|
||||||
|
{
|
||||||
|
if (m_moduleInterfaces.ContainsKey(typeof(T)))
|
||||||
|
{
|
||||||
|
iface = (T)m_moduleInterfaces[typeof(T)];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
iface = default(T);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T Get<T>()
|
||||||
|
{
|
||||||
|
return (T)m_moduleInterfaces[typeof(T)];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -47,7 +47,7 @@ namespace OpenSim
|
||||||
public class HGOpenSimNode : OpenSim
|
public class HGOpenSimNode : OpenSim
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private IHyperlink HGServices = null;
|
public IHyperlink HGServices = null;
|
||||||
|
|
||||||
private uint m_autoMappingX = 0;
|
private uint m_autoMappingX = 0;
|
||||||
private uint m_autoMappingY = 0;
|
private uint m_autoMappingY = 0;
|
||||||
|
|
|
@ -95,6 +95,40 @@ namespace OpenSim
|
||||||
m_console.SetGuiMode(m_gui);
|
m_console.SetGuiMode(m_gui);
|
||||||
MainConsole.Instance = m_console;
|
MainConsole.Instance = m_console;
|
||||||
|
|
||||||
|
RegisterConsoleCommands();
|
||||||
|
|
||||||
|
base.StartupSpecific();
|
||||||
|
|
||||||
|
//Run Startup Commands
|
||||||
|
if (String.IsNullOrEmpty( m_startupCommandsFile ))
|
||||||
|
{
|
||||||
|
m_log.Info("[STARTUP]: No startup command script specified. Moving on...");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RunCommandScript(m_startupCommandsFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start timer script (run a script every xx seconds)
|
||||||
|
if (m_timedScript != "disabled")
|
||||||
|
{
|
||||||
|
m_scriptTimer = new Timer();
|
||||||
|
m_scriptTimer.Enabled = true;
|
||||||
|
m_scriptTimer.Interval = 1200 * 1000;
|
||||||
|
m_scriptTimer.Elapsed += RunAutoTimerScript;
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintFileToConsole("startuplogo.txt");
|
||||||
|
|
||||||
|
// For now, start at the 'root' level by default
|
||||||
|
if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it
|
||||||
|
ChangeSelectedRegion("region", new string[] {"change", "region", m_sceneManager.Scenes[0].RegionInfo.RegionName});
|
||||||
|
else
|
||||||
|
ChangeSelectedRegion("region", new string[] {"change", "region", "root"});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RegisterConsoleCommands()
|
||||||
|
{
|
||||||
m_console.Commands.AddCommand("region", false, "clear assets",
|
m_console.Commands.AddCommand("region", false, "clear assets",
|
||||||
"clear assets",
|
"clear assets",
|
||||||
"Clear the asset cache", HandleClearAssets);
|
"Clear the asset cache", HandleClearAssets);
|
||||||
|
@ -255,35 +289,6 @@ namespace OpenSim
|
||||||
"reset user password [<first> [<last> [<password>]]]",
|
"reset user password [<first> [<last> [<password>]]]",
|
||||||
"Reset a user password", HandleResetUserPassword);
|
"Reset a user password", HandleResetUserPassword);
|
||||||
}
|
}
|
||||||
|
|
||||||
base.StartupSpecific();
|
|
||||||
|
|
||||||
//Run Startup Commands
|
|
||||||
if (String.IsNullOrEmpty( m_startupCommandsFile ))
|
|
||||||
{
|
|
||||||
m_log.Info("[STARTUP]: No startup command script specified. Moving on...");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
RunCommandScript(m_startupCommandsFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start timer script (run a script every xx seconds)
|
|
||||||
if (m_timedScript != "disabled")
|
|
||||||
{
|
|
||||||
m_scriptTimer = new Timer();
|
|
||||||
m_scriptTimer.Enabled = true;
|
|
||||||
m_scriptTimer.Interval = 1200 * 1000;
|
|
||||||
m_scriptTimer.Elapsed += RunAutoTimerScript;
|
|
||||||
}
|
|
||||||
|
|
||||||
PrintFileToConsole("startuplogo.txt");
|
|
||||||
|
|
||||||
// For now, start at the 'root' level by default
|
|
||||||
if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it
|
|
||||||
ChangeSelectedRegion("region", new string[] {"change", "region", m_sceneManager.Scenes[0].RegionInfo.RegionName});
|
|
||||||
else
|
|
||||||
ChangeSelectedRegion("region", new string[] {"change", "region", "root"});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void ShutdownSpecific()
|
public override void ShutdownSpecific()
|
||||||
|
@ -411,8 +416,8 @@ namespace OpenSim
|
||||||
m_console.Error("Usage: create region <region name> <region_file.xml>");
|
m_console.Error("Usage: create region <region name> <region_file.xml>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IScene scene;
|
||||||
CreateRegion(new RegionInfo(cmd[2], regionFile, false, ConfigSource.Source), true);
|
CreateRegion(new RegionInfo(cmd[2], regionFile, false, ConfigSource.Source), true, out scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleLoginEnable(string module, string[] cmd)
|
private void HandleLoginEnable(string module, string[] cmd)
|
||||||
|
|
|
@ -122,6 +122,13 @@ namespace OpenSim
|
||||||
}
|
}
|
||||||
protected ModuleLoader m_moduleLoader;
|
protected ModuleLoader m_moduleLoader;
|
||||||
|
|
||||||
|
protected RegistryCore m_applicationRegistry = new RegistryCore();
|
||||||
|
|
||||||
|
public RegistryCore ApplicationRegistry
|
||||||
|
{
|
||||||
|
get { return m_applicationRegistry; }
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructor.
|
/// Constructor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -195,6 +202,7 @@ namespace OpenSim
|
||||||
|
|
||||||
LoadPlugins();
|
LoadPlugins();
|
||||||
|
|
||||||
|
|
||||||
foreach (IApplicationPlugin plugin in m_plugins)
|
foreach (IApplicationPlugin plugin in m_plugins)
|
||||||
{
|
{
|
||||||
plugin.PostInitialise();
|
plugin.PostInitialise();
|
||||||
|
@ -202,7 +210,10 @@ namespace OpenSim
|
||||||
|
|
||||||
|
|
||||||
// Only enable logins to the regions once we have completely finished starting up (apart from scripts)
|
// Only enable logins to the regions once we have completely finished starting up (apart from scripts)
|
||||||
|
if ((m_commsManager != null) && (m_commsManager.GridService != null))
|
||||||
|
{
|
||||||
m_commsManager.GridService.RegionLoginsEnabled = true;
|
m_commsManager.GridService.RegionLoginsEnabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
// If console exists add plugin commands.
|
// If console exists add plugin commands.
|
||||||
if (m_console != null)
|
if (m_console != null)
|
||||||
|
@ -541,9 +552,9 @@ namespace OpenSim
|
||||||
/// <param name="regionInfo"></param>
|
/// <param name="regionInfo"></param>
|
||||||
/// <param name="portadd_flag"></param>
|
/// <param name="portadd_flag"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public IClientNetworkServer CreateRegion(RegionInfo regionInfo, bool portadd_flag)
|
public IClientNetworkServer CreateRegion(RegionInfo regionInfo, bool portadd_flag, out IScene scene)
|
||||||
{
|
{
|
||||||
return CreateRegion(regionInfo, portadd_flag, false);
|
return CreateRegion(regionInfo, portadd_flag, false, out scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -551,9 +562,9 @@ namespace OpenSim
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="regionInfo"></param>
|
/// <param name="regionInfo"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public IClientNetworkServer CreateRegion(RegionInfo regionInfo)
|
public IClientNetworkServer CreateRegion(RegionInfo regionInfo, out IScene scene)
|
||||||
{
|
{
|
||||||
return CreateRegion(regionInfo, false, true);
|
return CreateRegion(regionInfo, false, true, out scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -563,7 +574,7 @@ namespace OpenSim
|
||||||
/// <param name="portadd_flag"></param>
|
/// <param name="portadd_flag"></param>
|
||||||
/// <param name="do_post_init"></param>
|
/// <param name="do_post_init"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public IClientNetworkServer CreateRegion(RegionInfo regionInfo, bool portadd_flag, bool do_post_init)
|
public IClientNetworkServer CreateRegion(RegionInfo regionInfo, bool portadd_flag, bool do_post_init, out IScene mscene)
|
||||||
{
|
{
|
||||||
int port = regionInfo.InternalEndPoint.Port;
|
int port = regionInfo.InternalEndPoint.Port;
|
||||||
|
|
||||||
|
@ -640,6 +651,7 @@ namespace OpenSim
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mscene = scene;
|
||||||
return clientServer;
|
return clientServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -722,8 +734,8 @@ namespace OpenSim
|
||||||
m_clientServers[clientServerElement].Server.Close();
|
m_clientServers[clientServerElement].Server.Close();
|
||||||
m_clientServers.RemoveAt(clientServerElement);
|
m_clientServers.RemoveAt(clientServerElement);
|
||||||
}
|
}
|
||||||
|
IScene scene;
|
||||||
CreateRegion(whichRegion, true);
|
CreateRegion(whichRegion, true, out scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
# region Setup methods
|
# region Setup methods
|
||||||
|
@ -738,7 +750,7 @@ namespace OpenSim
|
||||||
/// Handler to supply the current status of this sim
|
/// Handler to supply the current status of this sim
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// Currently this is always OK if the simulator is still listening for connections on its HTTP service
|
/// Currently this is always OK if the simulator is still listening for connections on its HTTP service
|
||||||
protected class SimStatusHandler : IStreamedRequestHandler
|
public class SimStatusHandler : IStreamedRequestHandler
|
||||||
{
|
{
|
||||||
public byte[] Handle(string path, Stream request,
|
public byte[] Handle(string path, Stream request,
|
||||||
OSHttpRequest httpRequest, OSHttpResponse httpResponse)
|
OSHttpRequest httpRequest, OSHttpResponse httpResponse)
|
||||||
|
|
|
@ -45,16 +45,21 @@ namespace OpenSim.Region.ClientStack
|
||||||
private static readonly ILog m_log
|
private static readonly ILog m_log
|
||||||
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
protected IAssetCache m_assetCache;
|
|
||||||
protected Dictionary<EndPoint, uint> m_clientCircuits = new Dictionary<EndPoint, uint>();
|
protected Dictionary<EndPoint, uint> m_clientCircuits = new Dictionary<EndPoint, uint>();
|
||||||
protected NetworkServersInfo m_networkServersInfo;
|
protected NetworkServersInfo m_networkServersInfo;
|
||||||
|
|
||||||
|
public NetworkServersInfo NetServersInfo
|
||||||
|
{
|
||||||
|
get { return m_networkServersInfo; }
|
||||||
|
}
|
||||||
|
|
||||||
protected BaseHttpServer m_httpServer;
|
protected BaseHttpServer m_httpServer;
|
||||||
protected uint m_httpServerPort;
|
protected uint m_httpServerPort;
|
||||||
|
|
||||||
public CommunicationsManager CommunicationsManager
|
public CommunicationsManager CommunicationsManager
|
||||||
{
|
{
|
||||||
get { return m_commsManager; }
|
get { return m_commsManager; }
|
||||||
|
set { m_commsManager = value; }
|
||||||
}
|
}
|
||||||
protected CommunicationsManager m_commsManager;
|
protected CommunicationsManager m_commsManager;
|
||||||
|
|
||||||
|
@ -68,6 +73,14 @@ namespace OpenSim.Region.ClientStack
|
||||||
}
|
}
|
||||||
protected SceneManager m_sceneManager = new SceneManager();
|
protected SceneManager m_sceneManager = new SceneManager();
|
||||||
|
|
||||||
|
protected IAssetCache m_assetCache;
|
||||||
|
|
||||||
|
public IAssetCache AssetCache
|
||||||
|
{
|
||||||
|
get { return m_assetCache; }
|
||||||
|
set { m_assetCache = value; }
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract void Initialize();
|
protected abstract void Initialize();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Reference in New Issue