Preliminary work on the new default region setting mechanism

slimupdates
Melanie 2010-01-09 20:46:32 +00:00
parent 25fdbd6cbc
commit 28d6705358
11 changed files with 180 additions and 1 deletions

View File

@ -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)
}
}

View File

@ -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;
}
}
}

View File

@ -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);
}
}
}

View File

@ -0,0 +1,6 @@
BEGIN;
ALTER TABLE `regions` ADD COLUMN `flags` integer NOT NULL DEFAULT 0;
CREATE INDEX flags ON regions(flags);
COMMIT;

View File

@ -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;
}
}
}

View File

@ -136,7 +136,6 @@ namespace OpenSim.Data
/// </summary>
public uint maturity;
//Data Wrappers
public string RegionName
{

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}

View File

@ -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"]);
}
}
}

View File

@ -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