From 042cd57e948f6e3695d1d5b2b2a473ee77a1e9c4 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Thu, 3 Apr 2008 15:44:20 +0000 Subject: * From: Dr Scofield * This patch removes voice code into a region module. This required the implementation of events and other code to allow region modules to register their own caps handlers, and should allow different voice module implementations. * CAVEAT: This does not provide complete voice support, it merely provides the hooks so that it can be plugged in. --- OpenSim/Region/Environment/Scenes/Scene.cs | 6 +++-- OpenSim/Region/Environment/Scenes/SceneEvents.cs | 34 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) (limited to 'OpenSim/Region/Environment/Scenes') diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 2237922..64c443d 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -1737,14 +1737,14 @@ namespace OpenSim.Region.Environment.Scenes Caps cap = new Caps(AssetCache, m_httpListener, m_regInfo.ExternalHostName, m_httpListener.Port, capsObjectPath, agentId, m_dumpAssetsToFile); - cap.RegisterHandlers(); + + EventManager.TriggerOnRegisterCaps(agentId, cap); cap.AddNewInventoryItem = AddInventoryItem; cap.ItemUpdatedCall = CapsUpdateInventoryItemAsset; cap.TaskScriptUpdatedCall = CapsUpdateTaskInventoryScriptAsset; cap.CAPSFetchInventoryDescendents = CommsManager.UserProfileCacheService.HandleFetchInventoryDescendentsCAPS; - cap.CAPSGetUserDetails = CommsManager.UserProfileCacheService.GetUserDetails; m_capsHandlers[agentId] = cap; } @@ -1764,6 +1764,8 @@ namespace OpenSim.Region.Environment.Scenes agentId, RegionInfo.RegionName); m_capsHandlers[agentId].DeregisterHandlers(); + EventManager.TriggerOnDeregisterCaps(agentId, m_capsHandlers[agentId]); + m_capsHandlers.Remove(agentId); } else diff --git a/OpenSim/Region/Environment/Scenes/SceneEvents.cs b/OpenSim/Region/Environment/Scenes/SceneEvents.cs index 809507c..c916009 100644 --- a/OpenSim/Region/Environment/Scenes/SceneEvents.cs +++ b/OpenSim/Region/Environment/Scenes/SceneEvents.cs @@ -29,6 +29,7 @@ using libsecondlife; using System; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; +using Caps = OpenSim.Region.Capabilities.Caps; namespace OpenSim.Region.Environment.Scenes { @@ -136,6 +137,19 @@ namespace OpenSim.Region.Environment.Scenes public event OnNewPresenceDelegate OnMakeChildAgent; + /// + /// RegisterCapsEvent is called by Scene after the Caps object + /// has been instantiated and before it is return to the + /// client and provides region modules to add their caps. + /// + public delegate void RegisterCapsEvent(LLUUID agentID, Caps caps); + public event RegisterCapsEvent OnRegisterCaps; + /// + /// DeregisterCapsEvent is called by Scene when the caps + /// handler for an agent are removed. + /// + public delegate void DeregisterCapsEvent(LLUUID agentID, Caps caps); + public event DeregisterCapsEvent OnDeregisterCaps; public class MoneyTransferArgs : System.EventArgs { @@ -191,6 +205,8 @@ namespace OpenSim.Region.Environment.Scenes private ClientClosed handlerClientClosed = null; //OnClientClosed; private OnNewPresenceDelegate handlerMakeChildAgent = null; //OnMakeChildAgent; private OnTerrainTickDelegate handlerTerrainTick = null; // OnTerainTick; + private RegisterCapsEvent handlerRegisterCaps = null; // OnRegisterCaps; + private DeregisterCapsEvent handlerDeregisterCaps = null; // OnDeregisterCaps; public void TriggerOnScriptChangedEvent(uint localID, uint change) { @@ -428,5 +444,23 @@ namespace OpenSim.Region.Environment.Scenes handlerMakeChildAgent(presence); } } + + public void TriggerOnRegisterCaps(LLUUID agentID, Caps caps) + { + handlerRegisterCaps = OnRegisterCaps; + if (handlerRegisterCaps != null) + { + handlerRegisterCaps(agentID, caps); + } + } + + public void TriggerOnDeregisterCaps(LLUUID agentID, Caps caps) + { + handlerDeregisterCaps = OnDeregisterCaps; + if (handlerDeregisterCaps != null) + { + handlerDeregisterCaps(agentID, caps); + } + } } } -- cgit v1.1