From e187972377c19bdd85093677c4c54034e4f9196e Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Tue, 25 Nov 2008 15:19:00 +0000 Subject: * Apply http://opensimulator.org/mantis/view.php?id=2640 * This is Diva's hypergrid patch, as perviously discussed on the opensim-dev mailing list * Applied some minor prebuild.xml jiggling to resolve a dependency issue * Thanks Diva! --- OpenSim/Region/Application/Application.cs | 10 +- OpenSim/Region/Application/HGOpenSimNode.cs | 184 ++++++++++++++++++++++++++++ 2 files changed, 193 insertions(+), 1 deletion(-) create mode 100644 OpenSim/Region/Application/HGOpenSimNode.cs (limited to 'OpenSim/Region/Application') diff --git a/OpenSim/Region/Application/Application.cs b/OpenSim/Region/Application/Application.cs index 09d821f..c891549 100644 --- a/OpenSim/Region/Application/Application.cs +++ b/OpenSim/Region/Application/Application.cs @@ -76,11 +76,13 @@ namespace OpenSim configSource.AddSwitch("Startup", "gridmode"); configSource.AddSwitch("Startup", "physics"); configSource.AddSwitch("Startup", "useexecutepath"); + configSource.AddSwitch("Startup", "hypergrid"); configSource.AddConfig("StandAlone"); configSource.AddConfig("Network"); bool background = configSource.Configs["Startup"].GetBoolean("background", false); + bool hgrid = configSource.Configs["Startup"].GetBoolean("hypergrid", false); if (background) { @@ -89,13 +91,19 @@ namespace OpenSim } else { - OpenSimBase sim = new OpenSim(configSource); + OpenSimBase sim = null; + if (hgrid) + sim = new HGOpenSimNode(configSource); + else + sim = new OpenSim(configSource); + sim.Startup(); while (true) { MainConsole.Instance.Prompt(); } + } } diff --git a/OpenSim/Region/Application/HGOpenSimNode.cs b/OpenSim/Region/Application/HGOpenSimNode.cs new file mode 100644 index 0000000..8bb93a6 --- /dev/null +++ b/OpenSim/Region/Application/HGOpenSimNode.cs @@ -0,0 +1,184 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Reflection; +using log4net; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Framework.Console; +using OpenSim.Framework.Servers; +using OpenSim.Framework.Statistics; +using OpenSim.Region.ClientStack; +using OpenSim.Framework.Communications; +using OpenSim.Framework.Communications.Cache; +using OpenSim.Region.Communications.Local; +using OpenSim.Region.Communications.Hypergrid; +using OpenSim.Region.Environment; +using OpenSim.Region.Environment.Interfaces; +using OpenSim.Region.Environment.Scenes; +using OpenSim.Region.Environment.Scenes.Hypergrid; + +using Timer = System.Timers.Timer; + +namespace OpenSim +{ + public class HGOpenSimNode : OpenSim + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private IHyperlink HGServices = null; + + public HGOpenSimNode(IConfigSource configSource) : base(configSource) + { + } + + + /// + /// Performs initialisation of the scene, such as loading configuration from disk. + /// + protected override void StartupSpecific() + { + m_log.Info("===================================================================="); + m_log.Info("=================== STARTING HYPERGRID NODE ========================"); + m_log.Info("===================================================================="); + + base.StartupSpecific(); + } + + + protected override void InitialiseStandaloneServices(LibraryRootFolder libraryRootFolder) + { + // Standalone mode + + HGInventoryService inventoryService = new HGInventoryService(m_networkServersInfo.InventoryURL, null, false); + inventoryService.AddPlugin(m_configSettings.StandaloneInventoryPlugin, m_configSettings.StandaloneInventorySource); + + LocalUserServices userService = + new LocalUserServices(m_networkServersInfo, m_networkServersInfo.DefaultHomeLocX, + m_networkServersInfo.DefaultHomeLocY, inventoryService); + userService.AddPlugin(m_configSettings.StandaloneUserPlugin, m_configSettings.StandaloneUserSource); + + //LocalBackEndServices backendService = new LocalBackEndServices(); + HGGridServicesStandalone gridService = new HGGridServicesStandalone(m_networkServersInfo, m_httpServer, m_assetCache, m_sceneManager); + + LocalLoginService loginService = + new LocalLoginService( + userService, m_configSettings.StandaloneWelcomeMessage, inventoryService, gridService.LocalBackend, m_networkServersInfo, + m_configSettings.StandaloneAuthenticate, libraryRootFolder); + + + m_commsManager = new HGCommunicationsStandalone(m_networkServersInfo, m_httpServer, m_assetCache, + userService, userService, inventoryService, gridService, gridService, userService, libraryRootFolder, m_configSettings.DumpAssetsToFile); + + inventoryService.UserProfileCache = m_commsManager.UserProfileCacheService; + HGServices = gridService; + + // set up XMLRPC handler for client's initial login request message + m_httpServer.AddXmlRPCHandler("login_to_simulator", loginService.XmlRpcLoginMethod); + + // provides the web form login + m_httpServer.AddHTTPHandler("login", loginService.ProcessHTMLLogin); + + // Provides the LLSD login + m_httpServer.SetDefaultLLSDHandler(loginService.LLSDLoginMethod); + + // provide grid info + // m_gridInfoService = new GridInfoService(m_config.Source.Configs["Startup"].GetString("inifile", Path.Combine(Util.configDir(), "OpenSim.ini"))); + m_gridInfoService = new GridInfoService(m_config.Source); + m_httpServer.AddXmlRPCHandler("get_grid_info", m_gridInfoService.XmlRpcGridInfoMethod); + m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/get_grid_info", m_gridInfoService.RestGetGridInfoMethod)); + } + + protected override void InitialiseGridServices(LibraryRootFolder libraryRootFolder) + { + m_commsManager = new HGCommunicationsGridMode(m_networkServersInfo, m_httpServer, m_assetCache, m_sceneManager, libraryRootFolder); + + HGServices = ((HGCommunicationsGridMode)m_commsManager).HGServices; + + m_httpServer.AddStreamHandler(new SimStatusHandler()); + } + + protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, + AgentCircuitManager circuitManager) + { + HGSceneCommunicationService sceneGridService = new HGSceneCommunicationService(m_commsManager, HGServices); + return + new HGScene(regionInfo, circuitManager, m_commsManager, sceneGridService, m_assetCache, + storageManager, m_httpServer, + m_moduleLoader, m_configSettings.DumpAssetsToFile, m_configSettings.PhysicalPrim, m_configSettings.See_into_region_from_neighbor, m_config.Source, + m_version); + } + + public override void RunCmd(string command, string[] cmdparams) + { + if (command.Equals("link-region")) + { + // link-region + if (cmdparams.Length < 4) + { + LinkRegionCmdUsage(); + return; + } + + RegionInfo regInfo = new RegionInfo(); + uint xloc, yloc; + uint externalPort; + try + { + xloc = Convert.ToUInt32(cmdparams[0]); + yloc = Convert.ToUInt32(cmdparams[1]); + externalPort = Convert.ToUInt32(cmdparams[3]); + //internalPort = Convert.ToUInt32(cmdparams[4]); + //remotingPort = Convert.ToUInt32(cmdparams[5]); + } + catch (Exception e) + { + m_log.Warn("[HGrid] Wrong format for link-region command: " + e.Message); + LinkRegionCmdUsage(); + return; + } + regInfo.RegionLocX = xloc; + regInfo.RegionLocY = yloc; + regInfo.ExternalHostName = cmdparams[2]; + regInfo.HttpPort = externalPort; + //regInfo.RemotingPort = remotingPort; + try + { + regInfo.InternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), (int)0); + } + catch (Exception e) + { + m_log.Warn("[HGrid] Wrong format for link-region command: " + e.Message); + LinkRegionCmdUsage(); + return; + } + regInfo.RemotingAddress = regInfo.ExternalEndPoint.Address.ToString(); + + // Finally, link it + try + { + m_sceneManager.CurrentOrFirstScene.CommsManager.GridService.RegisterRegion(regInfo); + } + catch (Exception e) + { + m_log.Warn("[HGrid] Unable to link region: " + e.StackTrace); + } + if (cmdparams.Length >= 5) + { + regInfo.RegionName = ""; + for (int i = 4; i < cmdparams.Length; i++) + regInfo.RegionName += cmdparams[i] + " "; + } + } + + base.RunCmd(command, cmdparams); + + } + + private void LinkRegionCmdUsage() + { + Console.WriteLine("Usage: link-region []"); + } + } +} -- cgit v1.1