Convert SendKillObject to take a list of uint rather than sending one

packet per prim. More to come as we change to make use of this.
This commit is contained in:
Melanie
2011-11-06 20:38:07 +00:00
parent fa992a020c
commit c7dd7b13a2
10 changed files with 52 additions and 51 deletions

View File

@@ -3102,7 +3102,7 @@ namespace OpenSim.Region.Framework.Scenes
delegate(IClientAPI client)
{
//We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway
try { client.SendKillObject(avatar.RegionHandle, avatar.LocalId); }
try { client.SendKillObject(avatar.RegionHandle, new List<uint> { avatar.LocalId }); }
catch (NullReferenceException) { }
});
@@ -3161,28 +3161,24 @@ namespace OpenSim.Region.Framework.Scenes
#region Entities
public void SendKillObject(uint localID)
public void SendKillObject(List<uint> localIDs)
{
SceneObjectPart part = GetSceneObjectPart(localID);
UUID attachedAvatar = UUID.Zero;
List<uint> deleteIDs = new List<uint>();
if (part != null) // It is a prim
foreach (uint localID in localIDs)
{
if (!part.ParentGroup.IsDeleted) // Valid
SceneObjectPart part = GetSceneObjectPart(localID);
if (part != null) // It is a prim
{
if (part.ParentGroup.RootPart != part) // Child part
return;
if (part.ParentGroup.IsAttachment && part.ParentGroup.AttachmentPoint >= 31 && part.ParentGroup.AttachmentPoint <= 38)
attachedAvatar = part.ParentGroup.AttachedAvatar;
if (part.ParentGroup != null && !part.ParentGroup.IsDeleted) // Valid
{
if (part.ParentGroup.RootPart != part) // Child part
continue;
}
}
deleteIDs.Add(localID);
}
ForEachClient(delegate(IClientAPI client)
{
if (attachedAvatar == UUID.Zero || attachedAvatar == client.AgentId)
client.SendKillObject(m_regionHandle, localID);
});
ForEachClient(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, deleteIDs); });
}
#endregion
@@ -3200,7 +3196,6 @@ namespace OpenSim.Region.Framework.Scenes
//m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate;
//m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar;
m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid;
m_sceneGridService.KiPrimitive += SendKillObject;
m_sceneGridService.OnGetLandData += GetLandData;
}
@@ -3209,7 +3204,6 @@ namespace OpenSim.Region.Framework.Scenes
/// </summary>
public void UnRegisterRegionWithComms()
{
m_sceneGridService.KiPrimitive -= SendKillObject;
m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid;
//m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar;
//m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate;

View File

@@ -44,8 +44,6 @@ using GridRegion = OpenSim.Services.Interfaces.GridRegion;
namespace OpenSim.Region.Framework.Scenes
{
public delegate void KiPrimitiveDelegate(uint localID);
public delegate void RemoveKnownRegionsFromAvatarList(UUID avatarID, List<ulong> regionlst);
/// <summary>
@@ -113,8 +111,6 @@ namespace OpenSim.Region.Framework.Scenes
// private LogOffUser handlerLogOffUser = null;
// private GetLandData handlerGetLandData = null; // OnGetLandData
public KiPrimitiveDelegate KiPrimitive;
public SceneCommunicationService()
{
}

View File

@@ -1162,7 +1162,7 @@ namespace OpenSim.Region.Framework.Scenes
{
if (!IsAttachment || (AttachedAvatar == avatar.ControllingClient.AgentId) ||
(AttachmentPoint < 31) || (AttachmentPoint > 38))
avatar.ControllingClient.SendKillObject(m_regionHandle, part.LocalId);
avatar.ControllingClient.SendKillObject(m_regionHandle, new List<uint> { part.LocalId });
}
}
});