From 8c74cf775895276e485f82b04c23099db09dc682 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Tue, 25 Mar 2008 18:47:14 +0000 Subject: * Tear down CAPS and http handlers when an agent leaves a region (via crossing, teleport or logout) --- OpenSim/Region/Environment/Scenes/ScenePresence.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region/Environment/Scenes/ScenePresence.cs') diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index df43490..8f9cbbf 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -1618,12 +1618,17 @@ namespace OpenSim.Region.Environment.Scenes ulong neighbourHandle = Helpers.UIntsToLong((uint)(neighbourx * Constants.RegionSize), (uint)(neighboury * Constants.RegionSize)); SimpleRegionInfo neighbourRegion = m_scene.RequestNeighbouringRegionInfo(neighbourHandle); if (neighbourRegion != null) - { + { + // When the neighbour is informed of the border crossing, it will set up CAPS handlers for the avatar + // This means we need to remove the current caps handler here and possibly compensate later, + // in case both scenes are being hosted on the same region server. Messy + m_scene.RemoveCapsHandler(UUID); + bool res = m_scene.InformNeighbourOfCrossing(neighbourHandle, m_controllingClient.AgentId, newpos, m_physicsActor.Flying); if (res) - { + { AgentCircuitData circuitdata = m_controllingClient.RequestClientInfo(); // TODO Should construct this behind a method @@ -1632,7 +1637,7 @@ namespace OpenSim.Region.Environment.Scenes + "/CAPS/" + circuitdata.CapsPath + "0000/"; m_log.DebugFormat( - "[CONNECTION DEBUGGING]: Sending new CAPS seed url {0} to avatar {1}", capsPath, m_uuid); + "[CONNECTION DEBUGGING]: Sending new CAPS seed url {0} to avatar {1}", capsPath, m_uuid); m_controllingClient.CrossRegion(neighbourHandle, newpos, vel, neighbourRegion.ExternalEndPoint, capsPath); @@ -1640,6 +1645,10 @@ namespace OpenSim.Region.Environment.Scenes m_scene.SendKillObject(m_localId); m_scene.NotifyMyCoarseLocationChange(); } + else + { + m_scene.AddCapsHandler(UUID); + } } } -- cgit v1.1