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.LoadImageURL;
using OpenSim.Region.CoreModules.Scripting.XMLRPC;
using OpenSim.Framework.Servers;
namespace OpenSim.ApplicationPlugins.LoadRegions
{
public delegate void NewRegionCreated(IScene scene);
public class LoadRegionsPlugin : IApplicationPlugin
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public event NewRegionCreated OnNewRegionCreated;
private NewRegionCreated m_newRegionCreatedHandler;
#region IApplicationPlugin Members
// TODO: required by IPlugin, but likely not at all right
@ -56,6 +62,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
protected OpenSimBase m_openSim;
public void Initialise()
{
m_log.Info("[LOADREGIONS]: " + Name + " cannot be default-initialized!");
@ -65,6 +72,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
public void Initialise(OpenSimBase openSim)
{
m_openSim = openSim;
m_openSim.ApplicationRegistry.RegisterInterface<LoadRegionsPlugin>(this);
}
public void PostInitialise()
@ -99,9 +107,18 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
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_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();
@ -182,9 +199,10 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
{
if (regionhandle == regionsToLoad[i].RegionHandle)
{
IScene scene;
m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " +
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.SaveRegionToFile("dynamic region", regionXmlPath);
}
m_app.CreateRegion(region);
IScene newscene;
m_app.CreateRegion(region, out newscene);
responseData["success"] = "true";
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
{
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_autoMappingY = 0;

View File

@ -95,6 +95,40 @@ namespace OpenSim
m_console.SetGuiMode(m_gui);
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",
"clear assets",
"Clear the asset cache", HandleClearAssets);
@ -255,35 +289,6 @@ namespace OpenSim
"reset user password [<first> [<last> [<password>]]]",
"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()
@ -411,8 +416,8 @@ namespace OpenSim
m_console.Error("Usage: create region <region name> <region_file.xml>");
}
CreateRegion(new RegionInfo(cmd[2], regionFile, false, ConfigSource.Source), true);
IScene scene;
CreateRegion(new RegionInfo(cmd[2], regionFile, false, ConfigSource.Source), true, out scene);
}
private void HandleLoginEnable(string module, string[] cmd)

View File

@ -122,6 +122,13 @@ namespace OpenSim
}
protected ModuleLoader m_moduleLoader;
protected RegistryCore m_applicationRegistry = new RegistryCore();
public RegistryCore ApplicationRegistry
{
get { return m_applicationRegistry; }
}
/// <summary>
/// Constructor.
/// </summary>
@ -195,6 +202,7 @@ namespace OpenSim
LoadPlugins();
foreach (IApplicationPlugin plugin in m_plugins)
{
plugin.PostInitialise();
@ -202,7 +210,10 @@ namespace OpenSim
// Only enable logins to the regions once we have completely finished starting up (apart from scripts)
m_commsManager.GridService.RegionLoginsEnabled = true;
if ((m_commsManager != null) && (m_commsManager.GridService != null))
{
m_commsManager.GridService.RegionLoginsEnabled = true;
}
// If console exists add plugin commands.
if (m_console != null)
@ -541,9 +552,9 @@ namespace OpenSim
/// <param name="regionInfo"></param>
/// <param name="portadd_flag"></param>
/// <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>
@ -551,9 +562,9 @@ namespace OpenSim
/// </summary>
/// <param name="regionInfo"></param>
/// <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>
@ -563,7 +574,7 @@ namespace OpenSim
/// <param name="portadd_flag"></param>
/// <param name="do_post_init"></param>
/// <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;
@ -640,6 +651,7 @@ namespace OpenSim
}
}
mscene = scene;
return clientServer;
}
@ -722,8 +734,8 @@ namespace OpenSim
m_clientServers[clientServerElement].Server.Close();
m_clientServers.RemoveAt(clientServerElement);
}
CreateRegion(whichRegion, true);
IScene scene;
CreateRegion(whichRegion, true, out scene);
}
# region Setup methods
@ -738,7 +750,7 @@ namespace OpenSim
/// Handler to supply the current status of this sim
/// </summary>
/// 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,
OSHttpRequest httpRequest, OSHttpResponse httpResponse)

View File

@ -45,16 +45,21 @@ namespace OpenSim.Region.ClientStack
private static readonly ILog m_log
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected IAssetCache m_assetCache;
protected Dictionary<EndPoint, uint> m_clientCircuits = new Dictionary<EndPoint, uint>();
protected NetworkServersInfo m_networkServersInfo;
public NetworkServersInfo NetServersInfo
{
get { return m_networkServersInfo; }
}
protected BaseHttpServer m_httpServer;
protected uint m_httpServerPort;
public CommunicationsManager CommunicationsManager
{
get { return m_commsManager; }
set { m_commsManager = value; }
}
protected CommunicationsManager m_commsManager;
@ -68,6 +73,14 @@ namespace OpenSim.Region.ClientStack
}
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();
/// <summary>