From 7aa32ac6e0992249391b4d62d93c3ebb7bca82bf Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sat, 22 Nov 2008 23:38:25 +0000 Subject: Add root agent tracking to presence module --- .../Avatar/InstantMessage/PresenceModule.cs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'OpenSim/Region/Environment/Modules/Avatar/InstantMessage') diff --git a/OpenSim/Region/Environment/Modules/Avatar/InstantMessage/PresenceModule.cs b/OpenSim/Region/Environment/Modules/Avatar/InstantMessage/PresenceModule.cs index 48c7717..003ca8e 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/InstantMessage/PresenceModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/InstantMessage/PresenceModule.cs @@ -50,6 +50,9 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage private bool m_Gridmode = false; private List m_Scenes = new List(); + private Dictionary m_RootAgents = + new Dictionary(); + public event PresenceChange OnPresenceChange; public event BulkPresenceData OnBulkPresenceData; @@ -69,10 +72,6 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage lock (m_Scenes) { - if (m_Scenes.Count == 0) - { - } - if (m_Gridmode) NotifyMessageServerOfStartup(scene); @@ -119,10 +118,23 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage public void OnConnectionClosed(IClientAPI client) { + if (!(client.Scene is Scene)) + return; + + if (!(m_RootAgents.ContainsKey(client.AgentId))) + return; + + Scene scene = (Scene)client.Scene; + + if (m_RootAgents[client.AgentId] != scene) + return; + + m_RootAgents.Remove(client.AgentId); } - public void OnSetRootAgentScene(UUID agentID) + public void OnSetRootAgentScene(UUID agentID, Scene scene) { + m_RootAgents[agentID] = scene; } private void NotifyMessageServerOfStartup(Scene scene) -- cgit v1.1