diff options
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs index 7d8ae57..e740fe8 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs | |||
@@ -52,6 +52,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
52 | 52 | ||
53 | private IGridService m_GridService; | 53 | private IGridService m_GridService; |
54 | private RegionInfoCache m_RegionInfoCache; | 54 | private RegionInfoCache m_RegionInfoCache; |
55 | private HashSet<Scene> m_scenes = new HashSet<Scene>(); | ||
55 | 56 | ||
56 | private bool m_Enabled; | 57 | private bool m_Enabled; |
57 | 58 | ||
@@ -68,7 +69,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
68 | 69 | ||
69 | public LocalGridServicesConnector(IConfigSource source, RegionInfoCache regionInfoCache) | 70 | public LocalGridServicesConnector(IConfigSource source, RegionInfoCache regionInfoCache) |
70 | { | 71 | { |
71 | m_log.DebugFormat("{0} LocalGridServicesConnector instantiated directly witj cache.", LogHeader); | 72 | m_log.DebugFormat("{0} LocalGridServicesConnector instantiated directly with cache.", LogHeader); |
72 | InitialiseService(source, regionInfoCache); | 73 | InitialiseService(source, regionInfoCache); |
73 | } | 74 | } |
74 | 75 | ||
@@ -153,6 +154,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
153 | if (!m_Enabled) | 154 | if (!m_Enabled) |
154 | return; | 155 | return; |
155 | 156 | ||
157 | lock(m_scenes) | ||
158 | { | ||
159 | if(!m_scenes.Contains(scene)) | ||
160 | m_scenes.Add(scene); | ||
161 | } | ||
156 | scene.RegisterModuleInterface<IGridService>(this); | 162 | scene.RegisterModuleInterface<IGridService>(this); |
157 | 163 | ||
158 | GridRegion r = new GridRegion(scene.RegionInfo); | 164 | GridRegion r = new GridRegion(scene.RegionInfo); |
@@ -166,6 +172,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
166 | if (!m_Enabled) | 172 | if (!m_Enabled) |
167 | return; | 173 | return; |
168 | 174 | ||
175 | lock(m_scenes) | ||
176 | { | ||
177 | if(m_scenes.Contains(scene)) | ||
178 | m_scenes.Remove(scene); | ||
179 | } | ||
180 | |||
169 | m_RegionInfoCache.Remove(scene.RegionInfo.ScopeID, scene.RegionInfo.RegionHandle); | 181 | m_RegionInfoCache.Remove(scene.RegionInfo.ScopeID, scene.RegionInfo.RegionHandle); |
170 | scene.EventManager.OnRegionUp -= OnRegionUp; | 182 | scene.EventManager.OnRegionUp -= OnRegionUp; |
171 | } | 183 | } |
@@ -221,14 +233,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
221 | public GridRegion GetRegionByPosition(UUID scopeID, int x, int y) | 233 | public GridRegion GetRegionByPosition(UUID scopeID, int x, int y) |
222 | { | 234 | { |
223 | 235 | ||
224 | // try in cache by handler first | ||
225 | // ulong regionHandle = Util.RegionWorldLocToHandle((uint)x, (uint)y); | ||
226 | |||
227 | bool inCache = false; | 236 | bool inCache = false; |
228 | // GridRegion rinfo = m_RegionInfoCache.Get(scopeID, regionHandle, out inCache); | ||
229 | // if (inCache) | ||
230 | // return rinfo; | ||
231 | |||
232 | GridRegion rinfo = m_RegionInfoCache.Get(scopeID, (uint)x, (uint)y, out inCache); | 237 | GridRegion rinfo = m_RegionInfoCache.Get(scopeID, (uint)x, (uint)y, out inCache); |
233 | if (inCache) | 238 | if (inCache) |
234 | return rinfo; | 239 | return rinfo; |
@@ -297,22 +302,26 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
297 | 302 | ||
298 | public void HandleShowNeighboursCommand(string module, string[] cmdparams) | 303 | public void HandleShowNeighboursCommand(string module, string[] cmdparams) |
299 | { | 304 | { |
305 | if(!m_Enabled || m_scenes.Count == 0) | ||
306 | return; | ||
307 | |||
300 | System.Text.StringBuilder caps = new System.Text.StringBuilder(); | 308 | System.Text.StringBuilder caps = new System.Text.StringBuilder(); |
301 | /* temporary broken | 309 | |
302 | lock (m_LocalCache) | 310 | List<Scene> scenes; |
311 | lock (m_scenes) | ||
312 | scenes = new List<Scene>(m_scenes); | ||
313 | |||
314 | foreach (Scene s in scenes) | ||
303 | { | 315 | { |
304 | foreach (KeyValuePair<UUID, RegionCache> kvp in m_LocalCache) | 316 | RegionInfo sr = s.RegionInfo; |
305 | { | 317 | caps.AppendFormat("*** Neighbours of {0} ({1}) ***\n", sr.RegionName, sr.RegionID); |
306 | caps.AppendFormat("*** Neighbours of {0} ({1}) ***\n", kvp.Value.RegionName, kvp.Key); | 318 | List<GridRegion> regions = GetNeighbours(sr.ScopeID, sr.RegionID); |
307 | List<GridRegion> regions = kvp.Value.GetNeighbours(); | 319 | foreach (GridRegion r in regions) |
308 | foreach (GridRegion r in regions) | 320 | caps.AppendFormat(" {0} @ {1}-{2}\n", r.RegionName, Util.WorldToRegionLoc((uint)r.RegionLocX), Util.WorldToRegionLoc((uint)r.RegionLocY)); |
309 | caps.AppendFormat(" {0} @ {1}-{2}\n", r.RegionName, Util.WorldToRegionLoc((uint)r.RegionLocX), Util.WorldToRegionLoc((uint)r.RegionLocY)); | ||
310 | } | ||
311 | } | 321 | } |
312 | 322 | ||
313 | MainConsole.Instance.Output(caps.ToString()); | 323 | MainConsole.Instance.Output(caps.ToString()); |
314 | */ | 324 | |
315 | MainConsole.Instance.Output("Neighbours list not avaiable in this version\n"); | ||
316 | } | 325 | } |
317 | } | 326 | } |
318 | } | 327 | } |