mirror of
https://github.com/opensim/opensim.git
synced 2026-08-11 20:05:33 +08:00
Stop simulators attempting to contact registered but offline regions (RegionFlags.Persistent but not RegioNFlags.RegionOnline) on startup and when an avatar completes a teleport.
This eliminates spurious network calls and failure reporting. This is done by adding RegionFlags to the GridRegion returned data in a backward compatible way as an alternative to multiple IGridService.GetRegionFlags() calls Using a simulator or a grid service older than this commit will just see previous behaviour.
This commit is contained in:
@@ -179,6 +179,17 @@ namespace OpenSim.Services.Interfaces
|
||||
}
|
||||
protected string m_regionName = String.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Region flags.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If not set (chiefly if a robust service is running code pre OpenSim 0.8.1) then this will be null and
|
||||
/// should be ignored. If you require flags information please use the separate IGridService.GetRegionFlags() call
|
||||
/// XXX: This field is currently ignored when used in RegisterRegion, but could potentially be
|
||||
/// used to set flags at this point.
|
||||
/// </remarks>
|
||||
public OpenSim.Framework.RegionFlags? RegionFlags { get; set; }
|
||||
|
||||
protected string m_externalHostName;
|
||||
|
||||
protected IPEndPoint m_internalEndPoint;
|
||||
@@ -299,6 +310,7 @@ namespace OpenSim.Services.Interfaces
|
||||
public GridRegion(GridRegion ConvertFrom)
|
||||
{
|
||||
m_regionName = ConvertFrom.RegionName;
|
||||
RegionFlags = ConvertFrom.RegionFlags;
|
||||
m_regionLocX = ConvertFrom.RegionLocX;
|
||||
m_regionLocY = ConvertFrom.RegionLocY;
|
||||
RegionSizeX = ConvertFrom.RegionSizeX;
|
||||
@@ -315,8 +327,112 @@ namespace OpenSim.Services.Interfaces
|
||||
RegionSecret = ConvertFrom.RegionSecret;
|
||||
EstateOwner = ConvertFrom.EstateOwner;
|
||||
}
|
||||
|
||||
public GridRegion(Dictionary<string, object> kvp)
|
||||
{
|
||||
if (kvp.ContainsKey("uuid"))
|
||||
RegionID = new UUID((string)kvp["uuid"]);
|
||||
|
||||
# region Definition of equality
|
||||
if (kvp.ContainsKey("locX"))
|
||||
RegionLocX = Convert.ToInt32((string)kvp["locX"]);
|
||||
|
||||
if (kvp.ContainsKey("locY"))
|
||||
RegionLocY = Convert.ToInt32((string)kvp["locY"]);
|
||||
|
||||
if (kvp.ContainsKey("sizeX"))
|
||||
RegionSizeX = Convert.ToInt32((string)kvp["sizeX"]);
|
||||
else
|
||||
RegionSizeX = (int)Constants.RegionSize;
|
||||
|
||||
if (kvp.ContainsKey("sizeY"))
|
||||
RegionSizeY = Convert.ToInt32((string)kvp["sizeY"]);
|
||||
else
|
||||
RegionSizeX = (int)Constants.RegionSize;
|
||||
|
||||
if (kvp.ContainsKey("regionName"))
|
||||
RegionName = (string)kvp["regionName"];
|
||||
|
||||
if (kvp.ContainsKey("flags") && kvp["flags"] != null)
|
||||
RegionFlags = (OpenSim.Framework.RegionFlags?)Convert.ToInt32((string)kvp["flags"]);
|
||||
|
||||
if (kvp.ContainsKey("serverIP"))
|
||||
{
|
||||
//int port = 0;
|
||||
//Int32.TryParse((string)kvp["serverPort"], out port);
|
||||
//IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)kvp["serverIP"]), port);
|
||||
ExternalHostName = (string)kvp["serverIP"];
|
||||
}
|
||||
else
|
||||
ExternalHostName = "127.0.0.1";
|
||||
|
||||
if (kvp.ContainsKey("serverPort"))
|
||||
{
|
||||
Int32 port = 0;
|
||||
Int32.TryParse((string)kvp["serverPort"], out port);
|
||||
InternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), port);
|
||||
}
|
||||
|
||||
if (kvp.ContainsKey("serverHttpPort"))
|
||||
{
|
||||
UInt32 port = 0;
|
||||
UInt32.TryParse((string)kvp["serverHttpPort"], out port);
|
||||
HttpPort = port;
|
||||
}
|
||||
|
||||
if (kvp.ContainsKey("serverURI"))
|
||||
ServerURI = (string)kvp["serverURI"];
|
||||
|
||||
if (kvp.ContainsKey("regionMapTexture"))
|
||||
UUID.TryParse((string)kvp["regionMapTexture"], out TerrainImage);
|
||||
|
||||
if (kvp.ContainsKey("parcelMapTexture"))
|
||||
UUID.TryParse((string)kvp["parcelMapTexture"], out ParcelImage);
|
||||
|
||||
if (kvp.ContainsKey("access"))
|
||||
Access = Byte.Parse((string)kvp["access"]);
|
||||
|
||||
if (kvp.ContainsKey("regionSecret"))
|
||||
RegionSecret =(string)kvp["regionSecret"];
|
||||
|
||||
if (kvp.ContainsKey("owner_uuid"))
|
||||
EstateOwner = new UUID(kvp["owner_uuid"].ToString());
|
||||
|
||||
if (kvp.ContainsKey("Token"))
|
||||
Token = kvp["Token"].ToString();
|
||||
|
||||
// m_log.DebugFormat("{0} New GridRegion. id={1}, loc=<{2},{3}>, size=<{4},{5}>",
|
||||
// LogHeader, RegionID, RegionLocX, RegionLocY, RegionSizeX, RegionSizeY);
|
||||
}
|
||||
|
||||
public Dictionary<string, object> ToKeyValuePairs()
|
||||
{
|
||||
Dictionary<string, object> kvp = new Dictionary<string, object>();
|
||||
kvp["uuid"] = RegionID.ToString();
|
||||
kvp["locX"] = RegionLocX.ToString();
|
||||
kvp["locY"] = RegionLocY.ToString();
|
||||
kvp["sizeX"] = RegionSizeX.ToString();
|
||||
kvp["sizeY"] = RegionSizeY.ToString();
|
||||
kvp["regionName"] = RegionName;
|
||||
|
||||
if (RegionFlags != null)
|
||||
kvp["flags"] = ((int)RegionFlags).ToString();
|
||||
|
||||
kvp["serverIP"] = ExternalHostName; //ExternalEndPoint.Address.ToString();
|
||||
kvp["serverHttpPort"] = HttpPort.ToString();
|
||||
kvp["serverURI"] = ServerURI;
|
||||
kvp["serverPort"] = InternalEndPoint.Port.ToString();
|
||||
kvp["regionMapTexture"] = TerrainImage.ToString();
|
||||
kvp["parcelMapTexture"] = ParcelImage.ToString();
|
||||
kvp["access"] = Access.ToString();
|
||||
kvp["regionSecret"] = RegionSecret;
|
||||
kvp["owner_uuid"] = EstateOwner.ToString();
|
||||
kvp["Token"] = Token.ToString();
|
||||
// Maturity doesn't seem to exist in the DB
|
||||
|
||||
return kvp;
|
||||
}
|
||||
|
||||
#region Definition of equality
|
||||
|
||||
/// <summary>
|
||||
/// Define equality as two regions having the same, non-zero UUID.
|
||||
@@ -403,101 +519,5 @@ namespace OpenSim.Services.Interfaces
|
||||
{
|
||||
get { return Util.UIntsToLong((uint)RegionLocX, (uint)RegionLocY); }
|
||||
}
|
||||
|
||||
public Dictionary<string, object> ToKeyValuePairs()
|
||||
{
|
||||
Dictionary<string, object> kvp = new Dictionary<string, object>();
|
||||
kvp["uuid"] = RegionID.ToString();
|
||||
kvp["locX"] = RegionLocX.ToString();
|
||||
kvp["locY"] = RegionLocY.ToString();
|
||||
kvp["sizeX"] = RegionSizeX.ToString();
|
||||
kvp["sizeY"] = RegionSizeY.ToString();
|
||||
kvp["regionName"] = RegionName;
|
||||
kvp["serverIP"] = ExternalHostName; //ExternalEndPoint.Address.ToString();
|
||||
kvp["serverHttpPort"] = HttpPort.ToString();
|
||||
kvp["serverURI"] = ServerURI;
|
||||
kvp["serverPort"] = InternalEndPoint.Port.ToString();
|
||||
kvp["regionMapTexture"] = TerrainImage.ToString();
|
||||
kvp["parcelMapTexture"] = ParcelImage.ToString();
|
||||
kvp["access"] = Access.ToString();
|
||||
kvp["regionSecret"] = RegionSecret;
|
||||
kvp["owner_uuid"] = EstateOwner.ToString();
|
||||
kvp["Token"] = Token.ToString();
|
||||
// Maturity doesn't seem to exist in the DB
|
||||
return kvp;
|
||||
}
|
||||
|
||||
public GridRegion(Dictionary<string, object> kvp)
|
||||
{
|
||||
if (kvp.ContainsKey("uuid"))
|
||||
RegionID = new UUID((string)kvp["uuid"]);
|
||||
|
||||
if (kvp.ContainsKey("locX"))
|
||||
RegionLocX = Convert.ToInt32((string)kvp["locX"]);
|
||||
|
||||
if (kvp.ContainsKey("locY"))
|
||||
RegionLocY = Convert.ToInt32((string)kvp["locY"]);
|
||||
|
||||
if (kvp.ContainsKey("sizeX"))
|
||||
RegionSizeX = Convert.ToInt32((string)kvp["sizeX"]);
|
||||
else
|
||||
RegionSizeX = (int)Constants.RegionSize;
|
||||
|
||||
if (kvp.ContainsKey("sizeY"))
|
||||
RegionSizeY = Convert.ToInt32((string)kvp["sizeY"]);
|
||||
else
|
||||
RegionSizeX = (int)Constants.RegionSize;
|
||||
|
||||
if (kvp.ContainsKey("regionName"))
|
||||
RegionName = (string)kvp["regionName"];
|
||||
|
||||
if (kvp.ContainsKey("serverIP"))
|
||||
{
|
||||
//int port = 0;
|
||||
//Int32.TryParse((string)kvp["serverPort"], out port);
|
||||
//IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)kvp["serverIP"]), port);
|
||||
ExternalHostName = (string)kvp["serverIP"];
|
||||
}
|
||||
else
|
||||
ExternalHostName = "127.0.0.1";
|
||||
|
||||
if (kvp.ContainsKey("serverPort"))
|
||||
{
|
||||
Int32 port = 0;
|
||||
Int32.TryParse((string)kvp["serverPort"], out port);
|
||||
InternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), port);
|
||||
}
|
||||
|
||||
if (kvp.ContainsKey("serverHttpPort"))
|
||||
{
|
||||
UInt32 port = 0;
|
||||
UInt32.TryParse((string)kvp["serverHttpPort"], out port);
|
||||
HttpPort = port;
|
||||
}
|
||||
|
||||
if (kvp.ContainsKey("serverURI"))
|
||||
ServerURI = (string)kvp["serverURI"];
|
||||
|
||||
if (kvp.ContainsKey("regionMapTexture"))
|
||||
UUID.TryParse((string)kvp["regionMapTexture"], out TerrainImage);
|
||||
|
||||
if (kvp.ContainsKey("parcelMapTexture"))
|
||||
UUID.TryParse((string)kvp["parcelMapTexture"], out ParcelImage);
|
||||
|
||||
if (kvp.ContainsKey("access"))
|
||||
Access = Byte.Parse((string)kvp["access"]);
|
||||
|
||||
if (kvp.ContainsKey("regionSecret"))
|
||||
RegionSecret =(string)kvp["regionSecret"];
|
||||
|
||||
if (kvp.ContainsKey("owner_uuid"))
|
||||
EstateOwner = new UUID(kvp["owner_uuid"].ToString());
|
||||
|
||||
if (kvp.ContainsKey("Token"))
|
||||
Token = kvp["Token"].ToString();
|
||||
|
||||
// m_log.DebugFormat("{0} New GridRegion. id={1}, loc=<{2},{3}>, size=<{4},{5}>",
|
||||
// LogHeader, RegionID, RegionLocX, RegionLocY, RegionSizeX, RegionSizeY);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user