aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Environment/Modules/Avatar/InstantMessage/PresenceModule.cs22
-rw-r--r--OpenSim/Region/Environment/Scenes/EventManager.cs6
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs2
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)