diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 6d8ee7b9ef..36452dec09 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -4469,6 +4469,23 @@ namespace OpenSim.Region.Framework.Scenes
return m_sceneGraph.GetScenePresence(localID);
}
+ ///
+ /// Gets all the scene presences in this scene.
+ ///
+ ///
+ /// This method will return both root and child scene presences.
+ ///
+ /// Consider using ForEachScenePresence() or ForEachRootScenePresence() if possible since these will not
+ /// involving creating a new List object.
+ ///
+ ///
+ /// A list of the scene presences. Adding or removing from the list will not affect the presences in the scene.
+ ///
+ public List GetScenePresences()
+ {
+ return new List(m_sceneGraph.GetScenePresences());
+ }
+
///
/// Performs action on all avatars in the scene (root scene presences)
/// Avatars may be an NPC or a 'real' client.
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 2be5364a93..ba68dface9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -768,7 +768,7 @@ namespace OpenSim.Region.Framework.Scenes
/// pass a delegate to ForEachScenePresence.
///
///
- private List GetScenePresences()
+ protected internal List GetScenePresences()
{
return m_scenePresenceArray;
}
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs
index 44c1396b30..5758869e7a 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs
@@ -107,6 +107,29 @@ namespace OpenSim.Region.Framework.Scenes.Tests
Assert.That(sp, Is.Not.Null);
Assert.That(sp.IsChildAgent, Is.False);
Assert.That(sp.UUID, Is.EqualTo(spUuid));
+
+ Assert.That(scene.GetScenePresences().Count, Is.EqualTo(1));
+ }
+
+ [Test]
+ public void TestCreateDuplicateRootScenePresence()
+ {
+ TestHelpers.InMethod();
+// TestHelpers.EnableLogging();
+
+ UUID spUuid = TestHelpers.ParseTail(0x1);
+
+ TestScene scene = new SceneHelpers().SetupScene();
+ SceneHelpers.AddScenePresence(scene, spUuid);
+ SceneHelpers.AddScenePresence(scene, spUuid);
+
+ Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(spUuid), Is.Not.Null);
+ Assert.That(scene.AuthenticateHandler.GetAgentCircuits().Count, Is.EqualTo(1));
+
+ ScenePresence sp = scene.GetScenePresence(spUuid);
+ Assert.That(sp, Is.Not.Null);
+ Assert.That(sp.IsChildAgent, Is.False);
+ Assert.That(sp.UUID, Is.EqualTo(spUuid));
}
[Test]