Cleaned UpdatePermissions calls on SOP and SOG to eliminate redundant properties packet sends and so one part is not telling a different part what to do. That should be up to the SOG to manage permissions on its parts and notify clients when one of them changes.

remove-scene-viewer
Dan Lake 2011-11-10 15:20:21 -08:00
parent f3fea81936
commit 9359293b11
2 changed files with 15 additions and 19 deletions

View File

@ -1873,7 +1873,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
/// <summary> /// <summary>
/// Send metadata about the root prim (name, description, sale price, etc.) to a client. /// Send metadata about the root prim (name, description, sale price, permissions, etc.) to a client.
/// </summary> /// </summary>
/// <param name="client"></param> /// <param name="client"></param>
public void SendPropertiesToClient(IClientAPI client) public void SendPropertiesToClient(IClientAPI client)
@ -2481,6 +2481,11 @@ namespace OpenSim.Region.Framework.Scenes
parts[i].UpdatePermissions(AgentID, field, localID, mask, addRemTF); parts[i].UpdatePermissions(AgentID, field, localID, mask, addRemTF);
HasGroupChanged = true; HasGroupChanged = true;
// Send the group's properties to all clients once all parts are updated
IClientAPI client;
if (Scene.TryGetClient(AgentID, out client))
SendPropertiesToClient(client);
} }
#endregion #endregion

View File

@ -1338,22 +1338,6 @@ namespace OpenSim.Region.Framework.Scenes
client.SendObjectPropertiesReply(this); client.SendObjectPropertiesReply(this);
} }
/// <summary>
/// For the scene object group to which this part belongs, send that scene object's root part properties to a client.
/// </summary>
/// <param name="AgentID"></param>
private void SendRootPartPropertiesToClient(UUID AgentID)
{
m_parentGroup.Scene.ForEachClient(delegate(IClientAPI client)
{
// Ugly reference :(
if (client.AgentId == AgentID)
{
m_parentGroup.SendPropertiesToClient(client);
}
});
}
// TODO: unused: // TODO: unused:
// private void handleTimerAccounting(uint localID, double interval) // private void handleTimerAccounting(uint localID, double interval)
// { // {
@ -4214,6 +4198,15 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// Update permissions on the SOP. Should only be called from SOG.UpdatePermissions because the SOG
/// will handle the client notifications once all of its parts are updated.
/// </summary>
/// <param name="AgentID"></param>
/// <param name="field"></param>
/// <param name="localID"></param>
/// <param name="mask"></param>
/// <param name="addRemTF"></param>
public void UpdatePermissions(UUID AgentID, byte field, uint localID, uint mask, byte addRemTF) public void UpdatePermissions(UUID AgentID, byte field, uint localID, uint mask, byte addRemTF)
{ {
bool set = addRemTF == 1; bool set = addRemTF == 1;
@ -4262,8 +4255,6 @@ namespace OpenSim.Region.Framework.Scenes
} }
SendFullUpdateToAllClients(); SendFullUpdateToAllClients();
SendRootPartPropertiesToClient(AgentID);
} }
} }