Renamed ForEachRootScenePresence to ForEachAvatar. Cleaned up calls to

the 3 iteration functions so more of them are using the correct
iteration for the action they are performing. The 3 iterators that seem
to fit all actions within OpenSim at this time are:

ForEachAvatar: Perform an action on all avatars (root presences)
ForEachClient: Perform an action on all clients (root or child clients)
ForEachRootClient: Perform an action on all clients that have an avatar

There are still a dozen places or so calling the old
ForEachScenePresence that will take a little more refactoring to
eliminate.
This commit is contained in:
Dan Lake
2011-11-03 17:06:08 -07:00
parent 69a4057135
commit 94dc7d07eb
23 changed files with 123 additions and 156 deletions

View File

@@ -872,7 +872,7 @@ namespace OpenSim.Region.Framework.Scenes
try
{
ForEachRootScenePresence(delegate(ScenePresence agent)
ForEachAvatar(delegate(ScenePresence agent)
{
//agent.ControllingClient.new
//this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo());
@@ -1017,7 +1017,7 @@ namespace OpenSim.Region.Framework.Scenes
GridRegion r = new GridRegion(region);
try
{
ForEachRootScenePresence(delegate(ScenePresence agent)
ForEachAvatar(delegate(ScenePresence agent)
{
if (m_teleportModule != null)
m_teleportModule.EnableChildAgent(agent, r);
@@ -1423,12 +1423,10 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name="stats">Stats on the Simulator's performance</param>
private void SendSimStatsPackets(SimStats stats)
{
ForEachRootScenePresence(
delegate(ScenePresence agent)
{
agent.ControllingClient.SendSimStats(stats);
}
);
ForEachRootClient(delegate(IClientAPI client)
{
client.SendSimStats(stats);
});
}
/// <summary>
@@ -4214,35 +4212,32 @@ namespace OpenSim.Region.Framework.Scenes
return m_sceneGraph.GetScenePresence(localID);
}
/// <summary>
/// Returns true if scene presence is a child (no avatar in this scene)
/// </summary>
/// <param name="avatarID"></param>
/// <returns></returns>
public override bool PresenceChildStatus(UUID avatarID)
{
ScenePresence cp = GetScenePresence(avatarID);
// FIXME: This is really crap - some logout code is relying on a NullReferenceException to halt its processing
// This needs to be fixed properly by cleaning up the logout code.
//if (cp != null)
// return cp.IsChildAgent;
//return false;
return cp.IsChildAgent;
ScenePresence sp;
return TryGetScenePresence(avatarID, out sp) && sp.IsChildAgent;
}
/// <summary>
/// Performs action on all ROOT (not child) scene presences.
/// This is just a shortcut function since frequently actions only appy to root SPs
/// Performs action on all avatars in the scene (root scene presences)
/// Avatars may be an NPC or a 'real' client.
/// </summary>
/// <param name="action"></param>
public void ForEachRootScenePresence(Action<ScenePresence> action)
public void ForEachAvatar(Action<ScenePresence> action)
{
if(m_sceneGraph != null)
{
m_sceneGraph.ForEachRootScenePresence(action);
m_sceneGraph.ForEachAvatar(action);
}
}
/// <summary>
/// Performs action on all scene presences.
/// Performs action on all scene presences (root and child)
/// </summary>
/// <param name="action"></param>
public void ForEachScenePresence(Action<ScenePresence> action)
@@ -4253,25 +4248,6 @@ namespace OpenSim.Region.Framework.Scenes
}
}
/// <summary>
/// Perform the given action for each object
/// </summary>
/// <param name="action"></param>
// public void ForEachObject(Action<SceneObjectGroup> action)
// {
// List<SceneObjectGroup> presenceList;
//
// lock (m_sceneObjects)
// {
// presenceList = new List<SceneObjectGroup>(m_sceneObjects.Values);
// }
//
// foreach (SceneObjectGroup presence in presenceList)
// {
// action(presence);
// }
// }
/// <summary>
/// Get a group via its UUID
/// </summary>
@@ -4344,6 +4320,22 @@ namespace OpenSim.Region.Framework.Scenes
return m_sceneGraph.TryGetAvatarByName(avatarName, out avatar);
}
/// <summary>
/// Perform an action on all clients with an avatar in this scene (root only)
/// </summary>
/// <param name="action"></param>
public void ForEachRootClient(Action<IClientAPI> action)
{
ForEachAvatar(delegate(ScenePresence presence)
{
action(presence.ControllingClient);
});
}
/// <summary>
/// Perform an action on all clients connected to the region (root and child)
/// </summary>
/// <param name="action"></param>
public void ForEachClient(Action<IClientAPI> action)
{
m_clientManager.ForEachSync(action);

View File

@@ -1190,7 +1190,7 @@ namespace OpenSim.Region.Framework.Scenes
/// This is just a shortcut function since frequently actions only appy to root SPs
/// </summary>
/// <param name="action"></param>
public void ForEachRootScenePresence(Action<ScenePresence> action)
public void ForEachAvatar(Action<ScenePresence> action)
{
ForEachScenePresence(delegate(ScenePresence sp)
{

View File

@@ -458,16 +458,16 @@ namespace OpenSim.Region.Framework.Scenes
ForEachCurrentScene(
delegate(Scene scene)
{
scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
scene.ForEachRootClient(delegate(IClientAPI client)
{
if (name == null || scenePresence.Name == name)
if (name == null || client.Name == name)
{
m_log.DebugFormat("Packet debug for {0} {1} set to {2}",
scenePresence.Firstname,
scenePresence.Lastname,
client.FirstName,
client.LastName,
newDebug);
scenePresence.ControllingClient.DebugPacketLevel = newDebug;
client.DebugPacketLevel = newDebug;
}
});
}
@@ -481,7 +481,7 @@ namespace OpenSim.Region.Framework.Scenes
ForEachCurrentScene(
delegate(Scene scene)
{
scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
scene.ForEachAvatar(delegate(ScenePresence scenePresence)
{
avatars.Add(scenePresence);
});

View File

@@ -1150,7 +1150,7 @@ namespace OpenSim.Region.Framework.Scenes
{
SceneObjectPart part = parts[i];
Scene.ForEachScenePresence(delegate(ScenePresence avatar)
Scene.ForEachAvatar(delegate(ScenePresence avatar)
{
if (avatar.ParentID == LocalId)
avatar.StandUp();

View File

@@ -992,7 +992,7 @@ namespace OpenSim.Region.Framework.Scenes
public PrimitiveBaseShape Shape
{
get { return m_shape; }
set { m_shape = value; }
set { m_shape = value;}
}
/// <summary>
@@ -1336,12 +1336,12 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name="AgentID"></param>
private void SendRootPartPropertiesToClient(UUID AgentID)
{
m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar)
m_parentGroup.Scene.ForEachClient(delegate(IClientAPI client)
{
// Ugly reference :(
if (avatar.UUID == AgentID)
if (client.AgentId == AgentID)
{
m_parentGroup.SendPropertiesToClient(avatar.ControllingClient);
m_parentGroup.SendPropertiesToClient(client);
}
});
}
@@ -1461,9 +1461,9 @@ namespace OpenSim.Region.Framework.Scenes
if (volume < 0)
volume = 0;
m_parentGroup.Scene.ForEachRootScenePresence(delegate(ScenePresence sp)
m_parentGroup.Scene.ForEachRootClient(delegate(IClientAPI client)
{
sp.ControllingClient.SendAttachedSoundGainChange(UUID, (float)volume);
client.SendAttachedSoundGainChange(UUID, (float)volume);
});
}
@@ -2216,7 +2216,7 @@ namespace OpenSim.Region.Framework.Scenes
}
else
{
m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence av)
m_parentGroup.Scene.ForEachAvatar(delegate(ScenePresence av)
{
if (av.LocalId == localId)
{
@@ -2347,7 +2347,7 @@ namespace OpenSim.Region.Framework.Scenes
}
else
{
m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence av)
m_parentGroup.Scene.ForEachAvatar(delegate(ScenePresence av)
{
if (av.LocalId == localId)
{
@@ -2470,7 +2470,7 @@ namespace OpenSim.Region.Framework.Scenes
}
else
{
m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence av)
m_parentGroup.Scene.ForEachAvatar(delegate(ScenePresence av)
{
if (av.LocalId == localId)
{
@@ -2696,7 +2696,7 @@ namespace OpenSim.Region.Framework.Scenes
}
}
m_parentGroup.Scene.ForEachRootScenePresence(delegate(ScenePresence sp)
m_parentGroup.Scene.ForEachAvatar(delegate(ScenePresence sp)
{
if (!(Util.GetDistanceTo(sp.AbsolutePosition, AbsolutePosition) >= 100))
sp.ControllingClient.SendPreLoadSound(objectID, objectID, soundID);

View File

@@ -956,7 +956,7 @@ namespace OpenSim.Region.Framework.Scenes
}
// send the animations of the other presences to me
m_scene.ForEachScenePresence(delegate(ScenePresence presence)
m_scene.ForEachAvatar(delegate(ScenePresence presence)
{
if (presence != this)
presence.Animator.SendAnimPackToClient(ControllingClient);
@@ -2596,7 +2596,7 @@ namespace OpenSim.Region.Framework.Scenes
public void SendOtherAgentsAvatarDataToMe()
{
int count = 0;
m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
m_scene.ForEachAvatar(delegate(ScenePresence scenePresence)
{
// only send information about other root agents
if (scenePresence.UUID == UUID)
@@ -2660,7 +2660,7 @@ namespace OpenSim.Region.Framework.Scenes
// m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToMe: {0} {1}", Name, UUID);
int count = 0;
m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
m_scene.ForEachAvatar(delegate(ScenePresence scenePresence)
{
// only send information about other root agents
if (scenePresence.UUID == UUID)