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