diff options
Diffstat (limited to 'OpenSim/Region/Environment')
3 files changed, 21 insertions, 9 deletions
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 | |||
50 | private bool m_Gridmode = false; | 50 | private bool m_Gridmode = false; |
51 | private List<Scene> m_Scenes = new List<Scene>(); | 51 | private List<Scene> m_Scenes = new List<Scene>(); |
52 | 52 | ||
53 | private Dictionary<UUID, Scene> m_RootAgents = | ||
54 | new Dictionary<UUID, Scene>(); | ||
55 | |||
53 | public event PresenceChange OnPresenceChange; | 56 | public event PresenceChange OnPresenceChange; |
54 | public event BulkPresenceData OnBulkPresenceData; | 57 | public event BulkPresenceData OnBulkPresenceData; |
55 | 58 | ||
@@ -69,10 +72,6 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage | |||
69 | 72 | ||
70 | lock (m_Scenes) | 73 | lock (m_Scenes) |
71 | { | 74 | { |
72 | if (m_Scenes.Count == 0) | ||
73 | { | ||
74 | } | ||
75 | |||
76 | if (m_Gridmode) | 75 | if (m_Gridmode) |
77 | NotifyMessageServerOfStartup(scene); | 76 | NotifyMessageServerOfStartup(scene); |
78 | 77 | ||
@@ -119,10 +118,23 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage | |||
119 | 118 | ||
120 | public void OnConnectionClosed(IClientAPI client) | 119 | public void OnConnectionClosed(IClientAPI client) |
121 | { | 120 | { |
121 | if (!(client.Scene is Scene)) | ||
122 | return; | ||
123 | |||
124 | if (!(m_RootAgents.ContainsKey(client.AgentId))) | ||
125 | return; | ||
126 | |||
127 | Scene scene = (Scene)client.Scene; | ||
128 | |||
129 | if (m_RootAgents[client.AgentId] != scene) | ||
130 | return; | ||
131 | |||
132 | m_RootAgents.Remove(client.AgentId); | ||
122 | } | 133 | } |
123 | 134 | ||
124 | public void OnSetRootAgentScene(UUID agentID) | 135 | public void OnSetRootAgentScene(UUID agentID, Scene scene) |
125 | { | 136 | { |
137 | m_RootAgents[agentID] = scene; | ||
126 | } | 138 | } |
127 | 139 | ||
128 | private void NotifyMessageServerOfStartup(Scene scene) | 140 | private void NotifyMessageServerOfStartup(Scene scene) |
diff --git a/OpenSim/Region/Environment/Scenes/EventManager.cs b/OpenSim/Region/Environment/Scenes/EventManager.cs index cdaff51..598f8b4 100644 --- a/OpenSim/Region/Environment/Scenes/EventManager.cs +++ b/OpenSim/Region/Environment/Scenes/EventManager.cs | |||
@@ -98,7 +98,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
98 | 98 | ||
99 | public delegate void OnPermissionErrorDelegate(UUID user, string reason); | 99 | public delegate void OnPermissionErrorDelegate(UUID user, string reason); |
100 | 100 | ||
101 | public delegate void OnSetRootAgentSceneDelegate(UUID agentID); | 101 | public delegate void OnSetRootAgentSceneDelegate(UUID agentID, Scene scene); |
102 | 102 | ||
103 | public event OnSetRootAgentSceneDelegate OnSetRootAgentScene; | 103 | public event OnSetRootAgentSceneDelegate OnSetRootAgentScene; |
104 | 104 | ||
@@ -919,11 +919,11 @@ namespace OpenSim.Region.Environment.Scenes | |||
919 | handlerCollidingEnd(localId, colliders); | 919 | handlerCollidingEnd(localId, colliders); |
920 | } | 920 | } |
921 | 921 | ||
922 | public void TriggerSetRootAgentScene(UUID agentID) | 922 | public void TriggerSetRootAgentScene(UUID agentID, Scene scene) |
923 | { | 923 | { |
924 | handlerSetRootAgentScene = OnSetRootAgentScene; | 924 | handlerSetRootAgentScene = OnSetRootAgentScene; |
925 | if (handlerSetRootAgentScene != null) | 925 | if (handlerSetRootAgentScene != null) |
926 | handlerSetRootAgentScene(agentID); | 926 | handlerSetRootAgentScene(agentID, scene); |
927 | } | 927 | } |
928 | } | 928 | } |
929 | } | 929 | } |
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 0c5eb62..d2e797a 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -4215,7 +4215,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
4215 | 4215 | ||
4216 | inv.SetRootAgentScene(agentID, this); | 4216 | inv.SetRootAgentScene(agentID, this); |
4217 | 4217 | ||
4218 | EventManager.TriggerSetRootAgentScene(agentID); | 4218 | EventManager.TriggerSetRootAgentScene(agentID, this); |
4219 | } | 4219 | } |
4220 | 4220 | ||
4221 | public bool NeedSceneCacheClear(UUID agentID) | 4221 | public bool NeedSceneCacheClear(UUID agentID) |