aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services/GridService/GridService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Services/GridService/GridService.cs')
-rw-r--r--OpenSim/Services/GridService/GridService.cs69
1 files changed, 69 insertions, 0 deletions
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
46 LogManager.GetLogger( 46 LogManager.GetLogger(
47 MethodBase.GetCurrentMethod().DeclaringType); 47 MethodBase.GetCurrentMethod().DeclaringType);
48 48
49 private bool m_DeleteOnUnregister = true;
50
49 public GridService(IConfigSource config) 51 public GridService(IConfigSource config)
50 : base(config) 52 : base(config)
51 { 53 {
52 m_log.DebugFormat("[GRID SERVICE]: Starting..."); 54 m_log.DebugFormat("[GRID SERVICE]: Starting...");
55
56 IConfig gridConfig = config.Configs["GridService"];
57 if (gridConfig != null)
58 {
59 m_DeleteOnUnregister = gridConfig.GetBoolean("DeleteOnUnregister", true);
60 }
53 } 61 }
54 62
55 #region IGridService 63 #region IGridService
@@ -85,6 +93,15 @@ namespace OpenSim.Services.GridService
85 // Everything is ok, let's register 93 // Everything is ok, let's register
86 RegionData rdata = RegionInfo2RegionData(regionInfos); 94 RegionData rdata = RegionInfo2RegionData(regionInfos);
87 rdata.ScopeID = scopeID; 95 rdata.ScopeID = scopeID;
96
97 if (region != null)
98 {
99 rdata.Data["flags"] = region.Data["flags"]; // Preserve fields
100 }
101 int flags = Convert.ToInt32(rdata.Data["flags"]);
102 flags |= (int)OpenSim.Data.RegionFlags.RegionOnline;
103 rdata.Data["flags"] = flags.ToString();
104
88 try 105 try
89 { 106 {
90 m_Database.Store(rdata); 107 m_Database.Store(rdata);
@@ -103,6 +120,28 @@ namespace OpenSim.Services.GridService
103 public bool DeregisterRegion(UUID regionID) 120 public bool DeregisterRegion(UUID regionID)
104 { 121 {
105 m_log.DebugFormat("[GRID SERVICE]: Region {0} deregistered", regionID); 122 m_log.DebugFormat("[GRID SERVICE]: Region {0} deregistered", regionID);
123 if (!m_DeleteOnUnregister)
124 {
125 RegionData region = m_Database.Get(regionID, UUID.Zero);
126 if (region == null)
127 return false;
128
129 int flags = Convert.ToInt32(region.Data["flags"]);
130 flags &= ~(int)OpenSim.Data.RegionFlags.RegionOnline;
131 region.Data["flags"] = flags.ToString();
132 try
133 {
134 m_Database.Store(region);
135 }
136 catch (Exception e)
137 {
138 m_log.DebugFormat("[GRID SERVICE]: Database exception: {0}", e);
139 }
140
141 return true;
142
143 }
144
106 return m_Database.Delete(regionID); 145 return m_Database.Delete(regionID);
107 } 146 }
108 147
@@ -218,5 +257,35 @@ namespace OpenSim.Services.GridService
218 257
219 #endregion 258 #endregion
220 259
260 public List<GridRegion> GetDefaultRegions(UUID scopeID)
261 {
262 List<GridRegion> ret = new List<GridRegion>();
263
264 List<RegionData> regions = m_Database.GetDefaultRegions(scopeID);
265
266 foreach (RegionData r in regions)
267 ret.Add(RegionData2RegionInfo(r));
268
269 return ret;
270 }
271
272 public List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y)
273 {
274 List<GridRegion> ret = new List<GridRegion>();
275
276 List<RegionData> regions = m_Database.GetFallbackRegions(scopeID, x, y);
277
278 foreach (RegionData r in regions)
279 ret.Add(RegionData2RegionInfo(r));
280
281 return ret;
282 }
283
284 public int GetRegionFlags(UUID scopeID, UUID regionID)
285 {
286 RegionData region = m_Database.Get(regionID, scopeID);
287
288 return Convert.ToInt32(region.Data["flags"]);
289 }
221 } 290 }
222} 291}