Preliminary work on the new default region setting mechanism
parent
25fdbd6cbc
commit
28d6705358
|
@ -60,5 +60,16 @@ namespace OpenSim.Data
|
||||||
|
|
||||||
bool Delete(UUID regionID);
|
bool Delete(UUID regionID);
|
||||||
|
|
||||||
|
List<RegionData> GetDefaultRegions(UUID scopeID);
|
||||||
|
List<RegionData> GetFallbackRegions(UUID scopeID, int x, int y);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum RegionFlags : int
|
||||||
|
{
|
||||||
|
DefaultRegion = 1, // Used for new Rez. Random if multiple defined
|
||||||
|
FallbackRegion = 2, // Regions we redirect to when the destination is down
|
||||||
|
RegionOnline = 4, // Set when a region comes online, unset when it unregisters and DeleteOnUnregister is false
|
||||||
|
NoDirectLogin = 8 // Region unavailable for direct logins (by name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -307,5 +307,15 @@ namespace OpenSim.Data.MSSQL
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<RegionData> GetDefaultRegions(UUID scopeID)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<RegionData> GetFallbackRegions(UUID scopeID, int x, int y)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -274,5 +274,31 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
public List<RegionData> GetDefaultRegions(UUID scopeID)
|
||||||
|
{
|
||||||
|
string command = "select * from `"+m_Realm+"` where (flags & 1) <> 0";
|
||||||
|
if (scopeID != UUID.Zero)
|
||||||
|
command += " and ScopeID = ?scopeID";
|
||||||
|
|
||||||
|
MySqlCommand cmd = new MySqlCommand(command);
|
||||||
|
|
||||||
|
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
|
||||||
|
|
||||||
|
return RunCommand(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<RegionData> GetFallbackRegions(UUID scopeID, int x, int y)
|
||||||
|
{
|
||||||
|
string command = "select * from `"+m_Realm+"` where (flags & 2) <> 0";
|
||||||
|
if (scopeID != UUID.Zero)
|
||||||
|
command += " and ScopeID = ?scopeID";
|
||||||
|
|
||||||
|
MySqlCommand cmd = new MySqlCommand(command);
|
||||||
|
|
||||||
|
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
|
||||||
|
|
||||||
|
// TODO: distance-sort results
|
||||||
|
return RunCommand(cmd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
ALTER TABLE `regions` ADD COLUMN `flags` integer NOT NULL DEFAULT 0;
|
||||||
|
CREATE INDEX flags ON regions(flags);
|
||||||
|
|
||||||
|
COMMIT;
|
|
@ -130,5 +130,15 @@ namespace OpenSim.Data.Null
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<RegionData> GetDefaultRegions(UUID scopeID)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<RegionData> GetFallbackRegions(UUID scopeID, int x, int y)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,7 +136,6 @@ namespace OpenSim.Data
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public uint maturity;
|
public uint maturity;
|
||||||
|
|
||||||
|
|
||||||
//Data Wrappers
|
//Data Wrappers
|
||||||
public string RegionName
|
public string RegionName
|
||||||
{
|
{
|
||||||
|
|
|
@ -808,6 +808,20 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public List<GridRegion> GetDefaultRegions(UUID scopeID)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetRegionFlags(UUID scopeID, UUID regionID)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -250,5 +250,21 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
|
||||||
m_log.InfoFormat(" {0} @ {1}={2}", r.RegionName, r.RegionLocX / Constants.RegionSize, r.RegionLocY / Constants.RegionSize);
|
m_log.InfoFormat(" {0} @ {1}={2}", r.RegionName, r.RegionLocX / Constants.RegionSize, r.RegionLocY / Constants.RegionSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<GridRegion> GetDefaultRegions(UUID scopeID)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetRegionFlags(UUID scopeID, UUID regionID)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -450,5 +450,19 @@ namespace OpenSim.Services.Connectors
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public List<GridRegion> GetDefaultRegions(UUID scopeID)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetRegionFlags(UUID scopeID, UUID regionID)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,10 +46,18 @@ namespace OpenSim.Services.GridService
|
||||||
LogManager.GetLogger(
|
LogManager.GetLogger(
|
||||||
MethodBase.GetCurrentMethod().DeclaringType);
|
MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
private bool m_DeleteOnUnregister = true;
|
||||||
|
|
||||||
public GridService(IConfigSource config)
|
public GridService(IConfigSource config)
|
||||||
: base(config)
|
: base(config)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[GRID SERVICE]: Starting...");
|
m_log.DebugFormat("[GRID SERVICE]: Starting...");
|
||||||
|
|
||||||
|
IConfig gridConfig = config.Configs["GridService"];
|
||||||
|
if (gridConfig != null)
|
||||||
|
{
|
||||||
|
m_DeleteOnUnregister = gridConfig.GetBoolean("DeleteOnUnregister", true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IGridService
|
#region IGridService
|
||||||
|
@ -85,6 +93,15 @@ namespace OpenSim.Services.GridService
|
||||||
// Everything is ok, let's register
|
// Everything is ok, let's register
|
||||||
RegionData rdata = RegionInfo2RegionData(regionInfos);
|
RegionData rdata = RegionInfo2RegionData(regionInfos);
|
||||||
rdata.ScopeID = scopeID;
|
rdata.ScopeID = scopeID;
|
||||||
|
|
||||||
|
if (region != null)
|
||||||
|
{
|
||||||
|
rdata.Data["flags"] = region.Data["flags"]; // Preserve fields
|
||||||
|
}
|
||||||
|
int flags = Convert.ToInt32(rdata.Data["flags"]);
|
||||||
|
flags |= (int)OpenSim.Data.RegionFlags.RegionOnline;
|
||||||
|
rdata.Data["flags"] = flags.ToString();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_Database.Store(rdata);
|
m_Database.Store(rdata);
|
||||||
|
@ -103,6 +120,28 @@ namespace OpenSim.Services.GridService
|
||||||
public bool DeregisterRegion(UUID regionID)
|
public bool DeregisterRegion(UUID regionID)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[GRID SERVICE]: Region {0} deregistered", regionID);
|
m_log.DebugFormat("[GRID SERVICE]: Region {0} deregistered", regionID);
|
||||||
|
if (!m_DeleteOnUnregister)
|
||||||
|
{
|
||||||
|
RegionData region = m_Database.Get(regionID, UUID.Zero);
|
||||||
|
if (region == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
int flags = Convert.ToInt32(region.Data["flags"]);
|
||||||
|
flags &= ~(int)OpenSim.Data.RegionFlags.RegionOnline;
|
||||||
|
region.Data["flags"] = flags.ToString();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_Database.Store(region);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("[GRID SERVICE]: Database exception: {0}", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return m_Database.Delete(regionID);
|
return m_Database.Delete(regionID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,5 +257,35 @@ namespace OpenSim.Services.GridService
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public List<GridRegion> GetDefaultRegions(UUID scopeID)
|
||||||
|
{
|
||||||
|
List<GridRegion> ret = new List<GridRegion>();
|
||||||
|
|
||||||
|
List<RegionData> regions = m_Database.GetDefaultRegions(scopeID);
|
||||||
|
|
||||||
|
foreach (RegionData r in regions)
|
||||||
|
ret.Add(RegionData2RegionInfo(r));
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y)
|
||||||
|
{
|
||||||
|
List<GridRegion> ret = new List<GridRegion>();
|
||||||
|
|
||||||
|
List<RegionData> regions = m_Database.GetFallbackRegions(scopeID, x, y);
|
||||||
|
|
||||||
|
foreach (RegionData r in regions)
|
||||||
|
ret.Add(RegionData2RegionInfo(r));
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetRegionFlags(UUID scopeID, UUID regionID)
|
||||||
|
{
|
||||||
|
RegionData region = m_Database.Get(regionID, scopeID);
|
||||||
|
|
||||||
|
return Convert.ToInt32(region.Data["flags"]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,6 +90,10 @@ namespace OpenSim.Services.Interfaces
|
||||||
|
|
||||||
List<GridRegion> GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax);
|
List<GridRegion> GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax);
|
||||||
|
|
||||||
|
List<GridRegion> GetDefaultRegions(UUID scopeID);
|
||||||
|
List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y);
|
||||||
|
|
||||||
|
int GetRegionFlags(UUID scopeID, UUID regionID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GridRegion
|
public class GridRegion
|
||||||
|
|
Loading…
Reference in New Issue