Adds support for unlink-region command in hypergrid.

0.6.5-rc1
diva 2009-03-18 16:37:26 +00:00
parent 87822c5d95
commit a7d610ffcc
6 changed files with 162 additions and 0 deletions

View File

@ -65,6 +65,9 @@ namespace OpenSim.Framework.Communications
RegionInfo RequestNeighbourInfo(ulong regionHandle); RegionInfo RequestNeighbourInfo(ulong regionHandle);
RegionInfo RequestNeighbourInfo(UUID regionID); RegionInfo RequestNeighbourInfo(UUID regionID);
RegionInfo RequestNeighbourInfo(string name);
RegionInfo RequestNeighbourInfo(string host, uint port);
RegionInfo RequestClosestRegion(string regionName); RegionInfo RequestClosestRegion(string regionName);
Dictionary<string, string> GetGridSettings(); Dictionary<string, string> GetGridSettings();
List<MapBlockData> RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY); List<MapBlockData> RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY);

View File

@ -69,6 +69,9 @@ namespace OpenSim
MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-region", MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-region",
"link-region <Xloc> <Yloc> <HostName>:<HttpPort>[:<RemoteRegionName>] <cr>", "link-region <Xloc> <Yloc> <HostName>:<HttpPort>[:<RemoteRegionName>] <cr>",
"Link a hypergrid region", RunCommand); "Link a hypergrid region", RunCommand);
MainConsole.Instance.Commands.AddCommand("hypergrid", false, "unlink-region",
"unlink-region <local name> or <HostName>:<HttpPort> <cr>",
"Unlink a hypergrid region", RunCommand);
} }
protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager,
@ -188,6 +191,18 @@ namespace OpenSim
} }
return; return;
} }
else if (command.Equals("unlink-region"))
{
if (cmdparams.Count < 1)
{
UnlinkRegionCmdUsage();
return;
}
if (HGHyperlink.TryUnlinkRegion(m_sceneManager.CurrentOrFirstScene, cmdparams[0]))
m_log.InfoFormat("[HGrid]: Successfully unlinked {0}", cmdparams[0]);
else
m_log.InfoFormat("[HGrid]: Unable to unlink {0}, region not found", cmdparams[0]);
}
} }
private void LoadXmlLinkFile(List<string> cmdparams) private void LoadXmlLinkFile(List<string> cmdparams)
@ -279,5 +294,12 @@ namespace OpenSim
m_log.Info("Usage: link-region <Xloc> <Yloc> <HostName> <HttpPort> [<LocalName>]"); m_log.Info("Usage: link-region <Xloc> <Yloc> <HostName> <HttpPort> [<LocalName>]");
m_log.Info("Usage: link-region <URI_of_xml> [<exclude>]"); m_log.Info("Usage: link-region <URI_of_xml> [<exclude>]");
} }
private void UnlinkRegionCmdUsage()
{
m_log.Info("Usage: unlink-region <HostName>:<HttpPort>");
m_log.Info("Usage: unlink-region <LocalName>");
}
} }
} }

View File

@ -258,6 +258,47 @@ namespace OpenSim.Region.Communications.Hypergrid
return null; return null;
} }
public virtual RegionInfo RequestNeighbourInfo(string name)
{
foreach (RegionInfo info in m_hyperlinkRegions)
{
//m_log.Debug(" .. " + info.RegionHandle);
if (info.RegionName == name) return info;
}
foreach (RegionInfo info in m_knownRegions.Values)
{
if (info.RegionName == name)
{
//m_log.Debug("XXX------ known region " + info.RegionHandle);
return info;
}
}
return null;
}
public virtual RegionInfo RequestNeighbourInfo(string hostName, uint port)
{
foreach (RegionInfo info in m_hyperlinkRegions)
{
//m_log.Debug(" .. " + info.RegionHandle);
if ((info.ExternalHostName == hostName) && (info.HttpPort == port))
return info;
}
foreach (RegionInfo info in m_knownRegions.Values)
{
if ((info.ExternalHostName == hostName) && (info.HttpPort == port))
{
//m_log.Debug("XXX------ known region " + info.RegionHandle);
return info;
}
}
return null;
}
public virtual RegionInfo RequestClosestRegion(string regionName) public virtual RegionInfo RequestClosestRegion(string regionName)
{ {
foreach (RegionInfo info in m_hyperlinkRegions) foreach (RegionInfo info in m_hyperlinkRegions)

View File

@ -198,6 +198,38 @@ namespace OpenSim.Region.Communications.Local
return null; return null;
} }
/// <summary>
/// Get information about a neighbouring region
/// </summary>
/// <param name="regionHandle"></param>
/// <returns></returns>
public RegionInfo RequestNeighbourInfo(string name)
{
foreach (RegionInfo info in m_regions.Values)
{
if (info.RegionName == name)
return info;
}
return null;
}
/// <summary>
/// Get information about a neighbouring region
/// </summary>
/// <param name="regionHandle"></param>
/// <returns></returns>
public RegionInfo RequestNeighbourInfo(string host, uint port)
{
foreach (RegionInfo info in m_regions.Values)
{
if ((info.ExternalHostName == host) && (info.HttpPort == port))
return info;
}
return null;
}
/// <summary> /// <summary>
/// Get information about the closet region given a region name. /// Get information about the closet region given a region name.
/// </summary> /// </summary>

View File

@ -445,6 +445,28 @@ namespace OpenSim.Region.Communications.OGS1
return regionInfo; return regionInfo;
} }
/// <summary>
/// Get information about a neighbouring region
/// </summary>
/// <param name="regionHandle"></param>
/// <returns></returns>
public RegionInfo RequestNeighbourInfo(string name)
{
// Not implemented yet
return null;
}
/// <summary>
/// Get information about a neighbouring region
/// </summary>
/// <param name="regionHandle"></param>
/// <returns></returns>
public RegionInfo RequestNeighbourInfo(string host, uint port)
{
// Not implemented yet
return null;
}
public RegionInfo RequestClosestRegion(string regionName) public RegionInfo RequestClosestRegion(string regionName)
{ {
foreach (RegionInfo ri in m_remoteRegionInfoCache.Values) foreach (RegionInfo ri in m_remoteRegionInfoCache.Values)

View File

@ -149,6 +149,48 @@ namespace OpenSim.Region.Framework.Scenes.Hypergrid
return true; return true;
} }
public static bool TryUnlinkRegion(Scene m_scene, string mapName)
{
RegionInfo regInfo = null;
if (mapName.Contains(":"))
{
string host = "127.0.0.1";
string portstr;
string regionName = "";
uint port = 9000;
string[] parts = mapName.Split(new char[] { ':' });
if (parts.Length >= 1)
{
host = parts[0];
}
if (parts.Length >= 2)
{
portstr = parts[1];
if (!UInt32.TryParse(portstr, out port))
regionName = parts[1];
}
// always take the last one
if (parts.Length >= 3)
{
regionName = parts[2];
}
regInfo = m_scene.CommsManager.GridService.RequestNeighbourInfo(host, port);
}
else
{
regInfo = m_scene.CommsManager.GridService.RequestNeighbourInfo(mapName);
}
if (regInfo != null)
{
return m_scene.CommsManager.GridService.DeregisterRegion(regInfo);
}
else
{
m_log.InfoFormat("[HGrid]: Region {0} not found", mapName);
return false;
}
}
/// <summary> /// <summary>
/// Cope with this viewer limitation. /// Cope with this viewer limitation.
/// </summary> /// </summary>