diff --git a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs index 09786ec096..ce4e921b85 100644 --- a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs +++ b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs @@ -64,15 +64,25 @@ namespace OpenSim.Region.CoreModules.Media.Moap protected Scene m_scene; /// - /// Track the ObjectMedia capabilities given to users + /// Track the ObjectMedia capabilities given to users keyed by path /// protected Dictionary m_omCapUsers = new Dictionary(); /// - /// Track the ObjectMediaUpdate capabilities given to users + /// Track the ObjectMedia capabilities given to users keyed by agent. Lock m_omCapUsers to manipulate. + /// + protected Dictionary m_omCapUrls = new Dictionary(); + + /// + /// Track the ObjectMediaUpdate capabilities given to users keyed by path /// protected Dictionary m_omuCapUsers = new Dictionary(); + /// + /// Track the ObjectMediaUpdate capabilities given to users keyed by agent. Lock m_omuCapUsers to manipulate + /// + protected Dictionary m_omuCapUrls = new Dictionary(); + public void Initialise(IConfigSource config) { // TODO: Add config switches to enable/disable this module @@ -88,11 +98,13 @@ namespace OpenSim.Region.CoreModules.Media.Moap public void RegionLoaded(Scene scene) { m_scene.EventManager.OnRegisterCaps += RegisterCaps; + m_scene.EventManager.OnDeregisterCaps += DeregisterCaps; } public void Close() { m_scene.EventManager.OnRegisterCaps -= RegisterCaps; + m_scene.EventManager.OnDeregisterCaps -= DeregisterCaps; } public void RegisterCaps(UUID agentID, Caps caps) @@ -105,6 +117,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap lock (m_omCapUsers) { m_omCapUsers[omCapUrl] = agentID; + m_omCapUrls[agentID] = omCapUrl; // Even though we're registering for POST we're going to get GETS and UPDATES too caps.RegisterHandler( @@ -116,12 +129,30 @@ namespace OpenSim.Region.CoreModules.Media.Moap lock (m_omuCapUsers) { m_omuCapUsers[omuCapUrl] = agentID; + m_omuCapUrls[agentID] = omuCapUrl; // Even though we're registering for POST we're going to get GETS and UPDATES too caps.RegisterHandler( "ObjectMediaNavigate", new RestStreamHandler("POST", omuCapUrl, HandleObjectMediaNavigateMessage)); } - } + } + + public void DeregisterCaps(UUID agentID, Caps caps) + { + lock (m_omCapUsers) + { + string path = m_omCapUrls[agentID]; + m_omCapUrls.Remove(agentID); + m_omCapUsers.Remove(path); + } + + lock (m_omuCapUsers) + { + string path = m_omuCapUrls[agentID]; + m_omuCapUrls.Remove(agentID); + m_omuCapUsers.Remove(path); + } + } public MediaEntry GetMediaEntry(SceneObjectPart part, int face) {