Preliminary work on the new default region setting mechanism
parent
25fdbd6cbc
commit
28d6705358
|
@ -60,5 +60,16 @@ namespace OpenSim.Data
|
|||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
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>
|
||||
public uint maturity;
|
||||
|
||||
|
||||
//Data Wrappers
|
||||
public string RegionName
|
||||
{
|
||||
|
|
|
@ -808,6 +808,20 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
|
|||
|
||||
#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);
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
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(
|
||||
MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private bool m_DeleteOnUnregister = true;
|
||||
|
||||
public GridService(IConfigSource config)
|
||||
: base(config)
|
||||
{
|
||||
m_log.DebugFormat("[GRID SERVICE]: Starting...");
|
||||
|
||||
IConfig gridConfig = config.Configs["GridService"];
|
||||
if (gridConfig != null)
|
||||
{
|
||||
m_DeleteOnUnregister = gridConfig.GetBoolean("DeleteOnUnregister", true);
|
||||
}
|
||||
}
|
||||
|
||||
#region IGridService
|
||||
|
@ -85,6 +93,15 @@ namespace OpenSim.Services.GridService
|
|||
// Everything is ok, let's register
|
||||
RegionData rdata = RegionInfo2RegionData(regionInfos);
|
||||
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
|
||||
{
|
||||
m_Database.Store(rdata);
|
||||
|
@ -103,6 +120,28 @@ namespace OpenSim.Services.GridService
|
|||
public bool DeregisterRegion(UUID 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);
|
||||
}
|
||||
|
||||
|
@ -218,5 +257,35 @@ namespace OpenSim.Services.GridService
|
|||
|
||||
#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> GetDefaultRegions(UUID scopeID);
|
||||
List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y);
|
||||
|
||||
int GetRegionFlags(UUID scopeID, UUID regionID);
|
||||
}
|
||||
|
||||
public class GridRegion
|
||||
|
|
Loading…
Reference in New Issue