From 28d6705358c2e383fb46c57f064de4dcff144e33 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sat, 9 Jan 2010 20:46:32 +0000 Subject: Preliminary work on the new default region setting mechanism --- OpenSim/Services/GridService/GridService.cs | 69 +++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) (limited to 'OpenSim/Services/GridService/GridService.cs') diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index 86815e5..884bc95 100644 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs @@ -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 GetDefaultRegions(UUID scopeID) + { + List ret = new List(); + + List regions = m_Database.GetDefaultRegions(scopeID); + + foreach (RegionData r in regions) + ret.Add(RegionData2RegionInfo(r)); + + return ret; + } + + public List GetFallbackRegions(UUID scopeID, int x, int y) + { + List ret = new List(); + + List 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"]); + } } } -- cgit v1.1