From 5d09c53a1a42b38e1ee35cfbb5571d70b75380f4 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sun, 27 Sep 2009 10:14:10 -0700 Subject: Unpacking the mess with OtherRegionUp, so we can have a real cache of the neighbours in the grid service modules. --- OpenSim/Framework/IRegionCommsListener.cs | 3 - OpenSim/Framework/IScene.cs | 2 +- OpenSim/Framework/RegionCommsListener.cs | 13 ---- .../ClientStack/LindenUDP/Tests/MockScene.cs | 3 +- .../Neighbour/NeighbourServiceInConnectorModule.cs | 4 +- .../Neighbour/LocalNeighbourServiceConnector.cs | 4 +- .../Neighbour/RemoteNeighourServiceConnector.cs | 7 +- OpenSim/Region/Framework/Scenes/EventManager.cs | 13 ++++ OpenSim/Region/Framework/Scenes/Scene.cs | 63 +++++----------- OpenSim/Region/Framework/Scenes/SceneBase.cs | 3 +- .../Framework/Scenes/SceneCommunicationService.cs | 87 +++++++++------------- .../Framework/Scenes/Tests/SceneBaseTests.cs | 3 +- .../Server/Handlers/Neighbour/NeighbourHandlers.cs | 10 ++- .../Neighbour/NeighbourServiceConnector.cs | 6 +- OpenSim/Services/Interfaces/INeighbourService.cs | 3 +- 15 files changed, 97 insertions(+), 127 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Framework/IRegionCommsListener.cs b/OpenSim/Framework/IRegionCommsListener.cs index ba4c616..307c6bc 100644 --- a/OpenSim/Framework/IRegionCommsListener.cs +++ b/OpenSim/Framework/IRegionCommsListener.cs @@ -46,8 +46,6 @@ namespace OpenSim.Framework public delegate bool CloseAgentConnection(UUID agentID); - public delegate bool RegionUp(RegionInfo region); - public delegate bool ChildAgentUpdate(ChildAgentDataUpdate cAgentData); public delegate void LogOffUser(UUID agentID, UUID regionSecret, string message); @@ -65,7 +63,6 @@ namespace OpenSim.Framework event AcknowledgePrimCross OnAcknowledgePrimCrossed; event UpdateNeighbours OnNeighboursUpdate; event CloseAgentConnection OnCloseAgentConnection; - event RegionUp OnRegionUp; event ChildAgentUpdate OnChildAgentUpdate; event LogOffUser OnLogOffUser; event GetLandData OnGetLandData; diff --git a/OpenSim/Framework/IScene.cs b/OpenSim/Framework/IScene.cs index 2e2c703..d61e08c 100644 --- a/OpenSim/Framework/IScene.cs +++ b/OpenSim/Framework/IScene.cs @@ -74,7 +74,7 @@ namespace OpenSim.Framework void CloseAllAgents(uint circuitcode); void Restart(int seconds); - bool OtherRegionUp(RegionInfo thisRegion); + //RegionInfo OtherRegionUp(RegionInfo thisRegion); string GetSimulatorVersion(); diff --git a/OpenSim/Framework/RegionCommsListener.cs b/OpenSim/Framework/RegionCommsListener.cs index 016c78c..90200d6 100644 --- a/OpenSim/Framework/RegionCommsListener.cs +++ b/OpenSim/Framework/RegionCommsListener.cs @@ -47,7 +47,6 @@ namespace OpenSim.Framework private ExpectUserDelegate handlerExpectUser = null; // OnExpectUser private UpdateNeighbours handlerNeighboursUpdate = null; // OnNeighboursUpdate; private PrimCrossing handlerPrimCrossingIntoRegion = null; // OnPrimCrossingIntoRegion; - private RegionUp handlerRegionUp = null; // OnRegionUp; private LogOffUser handlerLogOffUser = null; private GetLandData handlerGetLandData = null; @@ -62,7 +61,6 @@ namespace OpenSim.Framework public event AcknowledgeAgentCross OnAcknowledgeAgentCrossed; public event AcknowledgePrimCross OnAcknowledgePrimCrossed; public event CloseAgentConnection OnCloseAgentConnection; - public event RegionUp OnRegionUp; public event ChildAgentUpdate OnChildAgentUpdate; public event LogOffUser OnLogOffUser; public event GetLandData OnGetLandData; @@ -108,17 +106,6 @@ namespace OpenSim.Framework return false; } - public virtual bool TriggerRegionUp(RegionInfo region) - { - handlerRegionUp = OnRegionUp; - if (handlerRegionUp != null) - { - handlerRegionUp(region); - return true; - } - return false; - } - public virtual bool TriggerChildAgentUpdate(ChildAgentDataUpdate cAgentData) { handlerChildAgentUpdate = OnChildAgentUpdate; diff --git a/OpenSim/Region/ClientStack/LindenUDP/Tests/MockScene.cs b/OpenSim/Region/ClientStack/LindenUDP/Tests/MockScene.cs index c831f68..34c21aa 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/Tests/MockScene.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/Tests/MockScene.cs @@ -28,6 +28,7 @@ using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.Framework.Scenes; +using GridRegion = OpenSim.Services.Interfaces.GridRegion; namespace OpenSim.Region.ClientStack.LindenUDP.Tests { @@ -58,7 +59,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests public override void RemoveClient(UUID agentID) {} public override void CloseAllAgents(uint circuitcode) {} - public override bool OtherRegionUp(RegionInfo thisRegion) { return false; } + public override void OtherRegionUp(GridRegion otherRegion) { } /// /// Doesn't really matter what the call is - we're using this to test that a packet has actually been received diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs index a31ce8e..8a90370 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs @@ -121,7 +121,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Neighbour #region INeighbourService - public bool HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) + public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) { m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}", thisRegion.RegionName, regionHandle, m_Scenes.Count); @@ -134,7 +134,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Neighbour } } m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: region handle {0} not found", regionHandle); - return false; + return null; } #endregion INeighbourService diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs index 61bf481..daba0b3 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs @@ -119,7 +119,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Neighbour #region INeighbourService - public bool HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) + public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) { m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}", thisRegion.RegionName, regionHandle, m_Scenes.Count); @@ -132,7 +132,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Neighbour } } m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: region handle {0} not found", regionHandle); - return false; + return null; } #endregion INeighbourService diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/RemoteNeighourServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/RemoteNeighourServiceConnector.cs index 912c393..c6fc2a1 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/RemoteNeighourServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/RemoteNeighourServiceConnector.cs @@ -141,10 +141,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Neighbour #region INeighbourService - public override bool HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) + public override GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) { - if (m_LocalService.HelloNeighbour(regionHandle, thisRegion)) - return true; + GridRegion region = m_LocalService.HelloNeighbour(regionHandle, thisRegion); + if (region != null) + return region; return base.HelloNeighbour(regionHandle, thisRegion); } diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 287d8d9..7424b24 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs @@ -32,6 +32,7 @@ using OpenSim.Framework; using OpenSim.Framework.Client; using OpenSim.Region.Framework.Interfaces; using Caps=OpenSim.Framework.Capabilities.Caps; +using GridRegion = OpenSim.Services.Interfaces.GridRegion; namespace OpenSim.Region.Framework.Scenes { @@ -305,6 +306,9 @@ namespace OpenSim.Region.Framework.Scenes public delegate void Attach(uint localID, UUID itemID, UUID avatarID); public event Attach OnAttach; + public delegate void RegionUp(GridRegion region); + public event RegionUp OnRegionUp; + public class MoneyTransferArgs : EventArgs { public UUID sender; @@ -446,6 +450,7 @@ namespace OpenSim.Region.Framework.Scenes private EmptyScriptCompileQueue handlerEmptyScriptCompileQueue = null; private Attach handlerOnAttach = null; + private RegionUp handlerOnRegionUp = null; public void TriggerOnAttach(uint localID, UUID itemID, UUID avatarID) { @@ -1035,5 +1040,13 @@ namespace OpenSim.Region.Framework.Scenes if (handlerSetRootAgentScene != null) handlerSetRootAgentScene(agentID, scene); } + + public void TriggerOnRegionUp(GridRegion otherRegion) + { + handlerOnRegionUp = OnRegionUp; + if (handlerOnRegionUp != null) + handlerOnRegionUp(otherRegion); + } + } } diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 8990f29..55478da 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -587,10 +587,7 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// Another region is up. Gets called from Grid Comms: - /// (OGS1 -> LocalBackEnd -> RegionListened -> SceneCommunicationService) - /// We have to tell all our ScenePresences about it, and add it to the - /// neighbor list. + /// Another region is up. /// /// We only add it to the neighbor list if it's within 1 region from here. /// Agents may have draw distance values that cross two regions though, so @@ -599,47 +596,27 @@ namespace OpenSim.Region.Framework.Scenes /// /// RegionInfo handle for the new region. /// True after all operations complete, throws exceptions otherwise. - public override bool OtherRegionUp(RegionInfo otherRegion) + public override void OtherRegionUp(GridRegion otherRegion) { - m_log.InfoFormat("[SCENE]: Region {0} up in coords {1}-{2}", otherRegion.RegionName, otherRegion.RegionLocX, otherRegion.RegionLocY); + uint xcell = (uint)((int)otherRegion.RegionLocX / (int)Constants.RegionSize); + uint ycell = (uint)((int)otherRegion.RegionLocY / (int)Constants.RegionSize); + m_log.InfoFormat("[SCENE]: (on region {0}): Region {1} up in coords {2}-{3}", + RegionInfo.RegionName, otherRegion.RegionName, xcell, ycell); if (RegionInfo.RegionHandle != otherRegion.RegionHandle) { - for (int i = 0; i < m_neighbours.Count; i++) - { - // The purpose of this loop is to re-update the known neighbors - // when another region comes up on top of another one. - // The latest region in that location ends up in the - // 'known neighbors list' - // Additionally, the commFailTF property gets reset to false. - if (m_neighbours[i].RegionHandle == otherRegion.RegionHandle) - { - lock (m_neighbours) - { - m_neighbours[i] = otherRegion; - - } - } - } - - // If the value isn't in the neighbours, add it. - // If the RegionInfo isn't exact but is for the same XY World location, - // then the above loop will fix that. - - if (!(CheckNeighborRegion(otherRegion))) - { - lock (m_neighbours) - { - m_neighbours.Add(otherRegion); - //m_log.Info("[UP]: " + otherRegion.RegionHandle.ToString()); - } - } // If these are cast to INT because long + negative values + abs returns invalid data - int resultX = Math.Abs((int)otherRegion.RegionLocX - (int)RegionInfo.RegionLocX); - int resultY = Math.Abs((int)otherRegion.RegionLocY - (int)RegionInfo.RegionLocY); + int resultX = Math.Abs((int)xcell - (int)RegionInfo.RegionLocX); + int resultY = Math.Abs((int)ycell - (int)RegionInfo.RegionLocY); if (resultX <= 1 && resultY <= 1) { + RegionInfo regInfo = new RegionInfo(xcell, ycell, otherRegion.InternalEndPoint, otherRegion.ExternalHostName); + regInfo.RegionID = otherRegion.RegionID; + regInfo.RegionName = otherRegion.RegionName; + regInfo.ScopeID = otherRegion.ScopeID; + regInfo.ExternalHostName = otherRegion.ExternalHostName; + try { ForEachScenePresence(delegate(ScenePresence agent) @@ -653,7 +630,7 @@ namespace OpenSim.Region.Framework.Scenes List old = new List(); old.Add(otherRegion.RegionHandle); agent.DropOldNeighbours(old); - InformClientOfNeighbor(agent, otherRegion); + InformClientOfNeighbor(agent, regInfo); } } ); @@ -672,7 +649,6 @@ namespace OpenSim.Region.Framework.Scenes otherRegion.RegionLocY.ToString() + ")"); } } - return true; } public void AddNeighborRegion(RegionInfo region) @@ -704,9 +680,10 @@ namespace OpenSim.Region.Framework.Scenes } // Alias IncomingHelloNeighbour OtherRegionUp, for now - public bool IncomingHelloNeighbour(RegionInfo neighbour) + public GridRegion IncomingHelloNeighbour(RegionInfo neighbour) { - return OtherRegionUp(neighbour); + OtherRegionUp(new GridRegion(neighbour)); + return new GridRegion(RegionInfo); } /// @@ -3104,7 +3081,7 @@ namespace OpenSim.Region.Framework.Scenes m_sceneGridService.OnExpectUser += HandleNewUserConnection; m_sceneGridService.OnAvatarCrossingIntoRegion += AgentCrossing; m_sceneGridService.OnCloseAgentConnection += IncomingCloseAgent; - m_sceneGridService.OnRegionUp += OtherRegionUp; + //m_eventManager.OnRegionUp += OtherRegionUp; //m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate; m_sceneGridService.OnExpectPrim += IncomingInterRegionPrimGroup; //m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar; @@ -3132,7 +3109,7 @@ namespace OpenSim.Region.Framework.Scenes //m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar; m_sceneGridService.OnExpectPrim -= IncomingInterRegionPrimGroup; //m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate; - m_sceneGridService.OnRegionUp -= OtherRegionUp; + //m_eventManager.OnRegionUp -= OtherRegionUp; m_sceneGridService.OnExpectUser -= HandleNewUserConnection; m_sceneGridService.OnAvatarCrossingIntoRegion -= AgentCrossing; m_sceneGridService.OnCloseAgentConnection -= IncomingCloseAgent; diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs index 2a82237..2af98cc 100644 --- a/OpenSim/Region/Framework/Scenes/SceneBase.cs +++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs @@ -36,6 +36,7 @@ using OpenSim.Framework; using OpenSim.Framework.Console; using OpenSim.Framework.Communications.Cache; using OpenSim.Region.Framework.Interfaces; +using GridRegion = OpenSim.Services.Interfaces.GridRegion; namespace OpenSim.Region.Framework.Scenes { @@ -227,7 +228,7 @@ namespace OpenSim.Region.Framework.Scenes return false; } - public abstract bool OtherRegionUp(RegionInfo thisRegion); + public abstract void OtherRegionUp(GridRegion otherRegion); public virtual string GetSimulatorVersion() { diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index 9071701..3294ceb 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs @@ -93,10 +93,10 @@ namespace OpenSim.Region.Framework.Scenes /// public event PrimCrossing OnPrimCrossingIntoRegion; - /// - /// A New Region is up and available - /// - public event RegionUp OnRegionUp; + ///// + ///// A New Region is up and available + ///// + //public event RegionUp OnRegionUp; /// /// We have a child agent for this avatar and we're getting a status update about it @@ -119,7 +119,7 @@ namespace OpenSim.Region.Framework.Scenes private ExpectPrimDelegate handlerExpectPrim = null; // OnExpectPrim; private CloseAgentConnection handlerCloseAgentConnection = null; // OnCloseAgentConnection; private PrimCrossing handlerPrimCrossingIntoRegion = null; // OnPrimCrossingIntoRegion; - private RegionUp handlerRegionUp = null; // OnRegionUp; + //private RegionUp handlerRegionUp = null; // OnRegionUp; private ChildAgentUpdate handlerChildAgentUpdate = null; // OnChildAgentUpdate; //private RemoveKnownRegionsFromAvatarList handlerRemoveKnownRegionFromAvatar = null; // OnRemoveKnownRegionFromAvatar; private LogOffUser handlerLogOffUser = null; @@ -239,22 +239,6 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// A New Region is now available. Inform the scene that there is a new region available. - /// - /// Information about the new region that is available - /// True if the event was handled - protected bool newRegionUp(RegionInfo region) - { - handlerRegionUp = OnRegionUp; - if (handlerRegionUp != null) - { - //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: newRegionUp Fired for User:" + region.RegionName); - handlerRegionUp(region); - } - return true; - } - - /// /// Inform the scene that we've got an update about a child agent that we have /// /// @@ -647,31 +631,23 @@ namespace OpenSim.Region.Framework.Scenes /// private void InformNeighboursThatRegionIsUpAsync(INeighbourService neighbourService, RegionInfo region, ulong regionhandle) { - m_log.Info("[INTERGRID]: Starting to inform neighbors that I'm here"); - //RegionUpData regiondata = new RegionUpData(region.RegionLocX, region.RegionLocY, region.ExternalHostName, region.InternalEndPoint.Port); + uint x = 0, y = 0; + Utils.LongToUInts(regionhandle, out x, out y); - //bool regionAccepted = - // m_commsProvider.InterRegion.RegionUp(new SerializableRegionInfo(region), regionhandle); - - //bool regionAccepted = m_interregionCommsOut.SendHelloNeighbour(regionhandle, region); - bool regionAccepted = false; + GridRegion neighbour = null; if (neighbourService != null) - regionAccepted = neighbourService.HelloNeighbour(regionhandle, region); + neighbour = neighbourService.HelloNeighbour(regionhandle, region); else m_log.DebugFormat("[SCS]: No neighbour service provided for informing neigbhours of this region"); - if (regionAccepted) + if (neighbour != null) { - m_log.Info("[INTERGRID]: Completed informing neighbors that I'm here"); - handlerRegionUp = OnRegionUp; - - // yes, we're notifying ourselves. - if (handlerRegionUp != null) - handlerRegionUp(region); + m_log.DebugFormat("[INTERGRID]: Successfully informed neighbour {0}-{1} that I'm here", x / Constants.RegionSize, y / Constants.RegionSize); + m_scene.EventManager.TriggerOnRegionUp(neighbour); } else { - m_log.Warn("[INTERGRID]: Failed to inform neighbors that I'm here."); + m_log.WarnFormat("[INTERGRID]: Failed to inform neighbour {0}-{1} that I'm here.", x / Constants.RegionSize, y / Constants.RegionSize); } } @@ -680,22 +656,33 @@ namespace OpenSim.Region.Framework.Scenes { //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: Sending InterRegion Notification that region is up " + region.RegionName); + for (int x = (int)region.RegionLocX - 1; x <= region.RegionLocX + 1; x++) + for (int y = (int)region.RegionLocY - 1; y <= region.RegionLocY + 1; y++) + if (!((x == region.RegionLocX) && (y == region.RegionLocY))) // skip this region + { + ulong handle = Utils.UIntsToLong((uint)x * Constants.RegionSize, (uint)y * Constants.RegionSize); + InformNeighbourThatRegionUpDelegate d = InformNeighboursThatRegionIsUpAsync; - List neighbours = new List(); - // This stays uncached because we don't already know about our neighbors at this point. + d.BeginInvoke(neighbourService, region, handle, + InformNeighborsThatRegionisUpCompleted, + d); + } - neighbours = m_scene.GridService.GetNeighbours(m_regionInfo.ScopeID, m_regionInfo.RegionID); - if (neighbours != null) - { - for (int i = 0; i < neighbours.Count; i++) - { - InformNeighbourThatRegionUpDelegate d = InformNeighboursThatRegionIsUpAsync; + //List neighbours = new List(); + //// This stays uncached because we don't already know about our neighbors at this point. - d.BeginInvoke(neighbourService, region, neighbours[i].RegionHandle, - InformNeighborsThatRegionisUpCompleted, - d); - } - } + //neighbours = m_scene.GridService.GetNeighbours(m_regionInfo.ScopeID, m_regionInfo.RegionID); + //if (neighbours != null) + //{ + // for (int i = 0; i < neighbours.Count; i++) + // { + // InformNeighbourThatRegionUpDelegate d = InformNeighboursThatRegionIsUpAsync; + + // d.BeginInvoke(neighbourService, region, neighbours[i].RegionHandle, + // InformNeighborsThatRegionisUpCompleted, + // d); + // } + //} //bool val = m_commsProvider.InterRegion.RegionUp(new SerializableRegionInfo(region)); } diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneBaseTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneBaseTests.cs index f6737a5..5c9e66f 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneBaseTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneBaseTests.cs @@ -29,6 +29,7 @@ using System; using NUnit.Framework; using OpenMetaverse; using OpenSim.Framework; +using GridRegion = OpenSim.Services.Interfaces.GridRegion; namespace OpenSim.Region.Framework.Scenes.Tests { @@ -65,7 +66,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests throw new NotImplementedException(); } - public override bool OtherRegionUp(RegionInfo thisRegion) + public override void OtherRegionUp(GridRegion otherRegion) { throw new NotImplementedException(); } diff --git a/OpenSim/Server/Handlers/Neighbour/NeighbourHandlers.cs b/OpenSim/Server/Handlers/Neighbour/NeighbourHandlers.cs index c0933a8..d6ef22e 100644 --- a/OpenSim/Server/Handlers/Neighbour/NeighbourHandlers.cs +++ b/OpenSim/Server/Handlers/Neighbour/NeighbourHandlers.cs @@ -36,6 +36,7 @@ using OpenSim.Server.Handlers.Base; using OpenSim.Services.Interfaces; using OpenSim.Framework; using OpenSim.Framework.Servers.HttpServer; +using GridRegion = OpenSim.Services.Interfaces.GridRegion; using OpenMetaverse; using OpenMetaverse.StructuredData; @@ -148,11 +149,14 @@ namespace OpenSim.Server.Handlers.Neighbour } // Finally! - bool success = m_NeighbourService.HelloNeighbour(regionhandle, aRegion); - + GridRegion thisRegion = m_NeighbourService.HelloNeighbour(regionhandle, aRegion); + OSDMap resp = new OSDMap(1); - resp["success"] = OSD.FromBoolean(success); + if (thisRegion != null) + resp["success"] = OSD.FromBoolean(true); + else + resp["success"] = OSD.FromBoolean(false); httpResponse.StatusCode = (int)HttpStatusCode.OK; diff --git a/OpenSim/Services/Connectors/Neighbour/NeighbourServiceConnector.cs b/OpenSim/Services/Connectors/Neighbour/NeighbourServiceConnector.cs index 1b595e7..145f212 100644 --- a/OpenSim/Services/Connectors/Neighbour/NeighbourServiceConnector.cs +++ b/OpenSim/Services/Connectors/Neighbour/NeighbourServiceConnector.cs @@ -67,7 +67,7 @@ namespace OpenSim.Services.Connectors m_GridService = gridServices; } - public virtual bool HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) + public virtual GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) { uint x = 0, y = 0; Utils.LongToUInts(regionHandle, out x, out y); @@ -76,11 +76,11 @@ namespace OpenSim.Services.Connectors // Don't remote-call this instance; that's a startup hickup !((regInfo.ExternalHostName == thisRegion.ExternalHostName) && (regInfo.HttpPort == thisRegion.HttpPort))) { - return DoHelloNeighbourCall(regInfo, thisRegion); + DoHelloNeighbourCall(regInfo, thisRegion); } //else // m_log.Warn("[REST COMMS]: Region not found " + regionHandle); - return false; + return regInfo; } public bool DoHelloNeighbourCall(GridRegion region, RegionInfo thisRegion) diff --git a/OpenSim/Services/Interfaces/INeighbourService.cs b/OpenSim/Services/Interfaces/INeighbourService.cs index 3944486..960e13d 100644 --- a/OpenSim/Services/Interfaces/INeighbourService.cs +++ b/OpenSim/Services/Interfaces/INeighbourService.cs @@ -28,11 +28,12 @@ using System; using OpenSim.Framework; using OpenMetaverse; +using GridRegion = OpenSim.Services.Interfaces.GridRegion; namespace OpenSim.Services.Interfaces { public interface INeighbourService { - bool HelloNeighbour(ulong regionHandle, RegionInfo thisRegion); + GridRegion HelloNeighbour(ulong regionHandle, RegionInfo otherRegion); } } -- cgit v1.1