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
MW 2009-02-26 20:01:20 +00:00
parent c0c1a31f61
commit 33e7c09b7b
8 changed files with 153 additions and 48 deletions

View File

@ -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);
} }
} }
} }

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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)];
}
}
}

View File

@ -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;

View File

@ -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)

View File

@ -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)

View File

@ -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>