From 39ab8902da2c3c5b3210fb081277e2801a856fe4 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 25 Aug 2020 15:01:55 +0100 Subject: [PATCH] add GetRegionByHandle methods --- .../Grid/LocalGridServiceConnector.cs | 19 ++++++++++++++++--- .../Grid/RemoteGridServiceConnector.cs | 11 +++++++++++ .../Connectors/Grid/GridServicesConnector.cs | 7 +++++++ OpenSim/Services/GridService/GridService.cs | 7 +++++++ OpenSim/Services/Interfaces/IGridService.cs | 2 +- 5 files changed, 42 insertions(+), 4 deletions(-) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs index d220568d2f..bfedd10ee6 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs @@ -212,13 +212,26 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid public GridRegion GetRegionByUUID(UUID scopeID, UUID regionID) { bool inCache = false; - GridRegion rinfo = m_RegionInfoCache.Get(scopeID,regionID,out inCache); + GridRegion rinfo = m_RegionInfoCache.Get(scopeID, regionID, out inCache); if (inCache) return rinfo; rinfo = m_GridService.GetRegionByUUID(scopeID, regionID); - if(rinfo != null) - m_RegionInfoCache.Cache(scopeID, rinfo); + if (rinfo != null) + m_RegionInfoCache.Cache(scopeID, rinfo); + return rinfo; + } + + public GridRegion GetRegionByHandle(UUID scopeID, ulong regionhandle) + { + bool inCache = false; + GridRegion rinfo = m_RegionInfoCache.Get(scopeID, regionhandle, out inCache); + if (inCache) + return rinfo; + + rinfo = m_GridService.GetRegionByHandle(scopeID, regionhandle); + if (rinfo != null) + m_RegionInfoCache.Cache(scopeID, rinfo); return rinfo; } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs index bc7b2f89b3..f59e656764 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs @@ -218,6 +218,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid return rinfo; } + public GridRegion GetRegionByHandle(UUID scopeID, ulong regionhandle) + { + GridRegion rinfo = m_LocalGridService.GetRegionByHandle(scopeID, regionhandle); + if (rinfo != null) + return rinfo; + + rinfo = m_RemoteGridService.GetRegionByHandle(scopeID, regionhandle); + m_RegionInfoCache.Cache(scopeID, rinfo); + return rinfo; + } + // Get a region given its base world coordinates (in meters). // NOTE: this is NOT 'get a region by some point in the region'. The coordinate MUST // be the base coordinate of the region. diff --git a/OpenSim/Services/Connectors/Grid/GridServicesConnector.cs b/OpenSim/Services/Connectors/Grid/GridServicesConnector.cs index 7d1fe87b9f..73bceae6d7 100644 --- a/OpenSim/Services/Connectors/Grid/GridServicesConnector.cs +++ b/OpenSim/Services/Connectors/Grid/GridServicesConnector.cs @@ -273,6 +273,13 @@ namespace OpenSim.Services.Connectors return rinfo; } + public GridRegion GetRegionByHandle(UUID scopeID, ulong regionhandle) + { + //still not on protocol + Util.RegionHandleToWorldLoc(regionhandle, out uint x, out uint y); + return GetRegionByPosition(scopeID, (int)x, (int)y); + } + public GridRegion GetRegionByPosition(UUID scopeID, int x, int y) { GridRegion rinfo = null; diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index d8f372066f..2edcd9c347 100755 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs @@ -446,6 +446,13 @@ namespace OpenSim.Services.GridService return null; } + public GridRegion GetRegionByHandle(UUID scopeID, ulong regionhandle) + { + int x = (int)(regionhandle >> 32); + int y = (int)(regionhandle & 0xfffffffful); + return GetRegionByPosition(scopeID, x, y); + } + // Get a region given its base coordinates. // NOTE: this is NOT 'get a region by some point in the region'. The coordinate MUST // be the base coordinate of the region. diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs index ead5d3c1ae..06313fc9d5 100644 --- a/OpenSim/Services/Interfaces/IGridService.cs +++ b/OpenSim/Services/Interfaces/IGridService.cs @@ -66,7 +66,7 @@ namespace OpenSim.Services.Interfaces List GetNeighbours(UUID scopeID, UUID regionID); GridRegion GetRegionByUUID(UUID scopeID, UUID regionID); - + GridRegion GetRegionByHandle(UUID scopeID, ulong regionhandle); /// /// Get the region at the given position (in meters) ///