diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index db81fea0a8..37024fd5db 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -4173,8 +4173,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP while (updatesThisCall < m_maxUpdates) { lock (m_entityProps.SyncRoot) - if (!m_entityProps.TryDequeue(out iupdate, out timeinqueue)) - break; + if (!m_entityProps.TryDequeue(out iupdate, out timeinqueue)) + break; ObjectPropertyUpdate update = (ObjectPropertyUpdate)iupdate; if (update.SendFamilyProps) diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs index 49e3236754..eb4731c44c 100644 --- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs @@ -101,7 +101,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell part.ParentGroup.HasGroupChanged = true; - part.GetProperties(client); + part.SendPropertiesToClient(client); } public bool BuyObject(IClientAPI remoteClient, UUID categoryID, uint localID, byte saleType, int salePrice) @@ -142,7 +142,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell part.SalePrice = 10; group.HasGroupChanged = true; - part.GetProperties(remoteClient); + part.SendPropertiesToClient(remoteClient); part.TriggerScriptChangedEvent(Changed.OWNER); group.ResumeScripts(); part.ScheduleFullUpdate(); diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index c2ec5d01f6..931fedcc36 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -261,7 +261,7 @@ namespace OpenSim.Region.Framework.Scenes item.AssetID = asset.FullID; group.UpdateInventoryItem(item); - part.GetProperties(remoteClient); + part.SendPropertiesToClient(remoteClient); // Trigger rerunning of script (use TriggerRezScript event, see RezScript) ArrayList errors = new ArrayList(); @@ -1005,7 +1005,7 @@ namespace OpenSim.Region.Framework.Scenes } group.RemoveInventoryItem(localID, itemID); - part.GetProperties(remoteClient); + part.SendPropertiesToClient(remoteClient); } } @@ -1283,7 +1283,7 @@ namespace OpenSim.Region.Framework.Scenes if (TryGetScenePresence(srcTaskItem.OwnerID, out avatar)) { - destPart.GetProperties(avatar.ControllingClient); + destPart.SendPropertiesToClient(avatar.ControllingClient); } } @@ -1446,7 +1446,7 @@ namespace OpenSim.Region.Framework.Scenes m_log.InfoFormat( "[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}", item.Name, primLocalID, remoteClient.Name); - part.GetProperties(remoteClient); + part.SendPropertiesToClient(remoteClient); if (!Permissions.BypassPermissions()) { if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) @@ -1534,7 +1534,7 @@ namespace OpenSim.Region.Framework.Scenes if (part.Inventory.UpdateInventoryItem(itemInfo)) { - part.GetProperties(remoteClient); + part.SendPropertiesToClient(remoteClient); } } } @@ -1586,7 +1586,7 @@ namespace OpenSim.Region.Framework.Scenes // m_log.InfoFormat("[PRIMINVENTORY]: " + // "Rezzed script {0} into prim local ID {1} for user {2}", // item.inventoryName, localID, remoteClient.Name); - part.GetProperties(remoteClient); + part.SendPropertiesToClient(remoteClient); part.ParentGroup.ResumeScripts(); } else @@ -1644,7 +1644,7 @@ namespace OpenSim.Region.Framework.Scenes taskItem.AssetID = asset.FullID; part.Inventory.AddInventoryItem(taskItem, false); - part.GetProperties(remoteClient); + part.SendPropertiesToClient(remoteClient); part.Inventory.CreateScriptInstance(taskItem, 0, false, DefaultScriptEngine, 0); part.ParentGroup.ResumeScripts(); @@ -1758,7 +1758,7 @@ namespace OpenSim.Region.Framework.Scenes if (TryGetScenePresence(srcTaskItem.OwnerID, out avatar)) { - destPart.GetProperties(avatar.ControllingClient); + destPart.SendPropertiesToClient(avatar.ControllingClient); } } @@ -2217,7 +2217,7 @@ namespace OpenSim.Region.Framework.Scenes SceneObjectPart part = GetSceneObjectPart(localID); if (part == null) continue; - part.GetProperties(remoteClient); + part.SendPropertiesToClient(remoteClient); } } diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index 9da57a8997..575079f454 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs @@ -144,7 +144,7 @@ namespace OpenSim.Region.Framework.Scenes { if (((SceneObjectGroup) ent).LocalId == primLocalID) { - ((SceneObjectGroup) ent).GetProperties(remoteClient); + ((SceneObjectGroup) ent).SendPropertiesToClient(remoteClient); ((SceneObjectGroup) ent).IsSelected = true; // A prim is only tainted if it's allowed to be edited by the person clicking it. if (Permissions.CanEditObject(((SceneObjectGroup)ent).UUID, remoteClient.AgentId) @@ -167,7 +167,7 @@ namespace OpenSim.Region.Framework.Scenes { if (part.LocalId == primLocalID) { - part.GetProperties(remoteClient); + part.SendPropertiesToClient(remoteClient); foundPrim = true; break; } diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index ea6aab0ad1..5e9cb327a8 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -2104,8 +2104,6 @@ namespace OpenSim.Region.Framework.Scenes #endregion - #region Scheduling - public override void Update() { // Check that the group was not deleted before the scheduled update @@ -2256,7 +2254,14 @@ namespace OpenSim.Region.Framework.Scenes parts[i].SendTerseUpdateToAllClients(); } - #endregion + /// + /// Send metadata about the root prim (name, description, sale price, etc.) to a client. + /// + /// + public void SendPropertiesToClient(IClientAPI client) + { + m_rootPart.SendPropertiesToClient(client); + } #region SceneGroupPart Methods @@ -2750,15 +2755,6 @@ namespace OpenSim.Region.Framework.Scenes } } - /// - /// Return metadata about a prim (name, description, sale price, etc.) - /// - /// - public void GetProperties(IClientAPI client) - { - m_rootPart.GetProperties(client); - } - /// /// Set the name of a prim /// diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 0c3b4044d3..541469388e 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -1357,8 +1357,6 @@ namespace OpenSim.Region.Framework.Scenes #endregion Public Properties with only Get - #region Private Methods - private uint ApplyMask(uint val, bool set, uint mask) { if (set) @@ -1371,14 +1369,35 @@ namespace OpenSim.Region.Framework.Scenes } } - private void SendObjectPropertiesToClient(UUID AgentID) + /// + /// Clear all pending updates of parts to clients + /// + private void ClearUpdateSchedule() + { + m_updateFlag = 0; + } + + /// + /// Send this part's properties (name, description, inventory serial, base mask, etc.) to a client + /// + /// + public void SendPropertiesToClient(IClientAPI client) + { + client.SendObjectPropertiesReply(this); + } + + /// + /// For the scene object group to which this part belongs, send that scene object's root part properties to a client. + /// + /// + private void SendRootPartPropertiesToClient(UUID AgentID) { m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar) { // Ugly reference :( if (avatar.UUID == AgentID) { - m_parentGroup.GetProperties(avatar.ControllingClient); + m_parentGroup.SendPropertiesToClient(avatar.ControllingClient); } }); } @@ -1407,8 +1426,6 @@ namespace OpenSim.Region.Framework.Scenes // } // } - #endregion Private Methods - #region Public Methods public void ResetExpire() @@ -2077,11 +2094,6 @@ namespace OpenSim.Region.Framework.Scenes return Vector3.Zero; } - public void GetProperties(IClientAPI client) - { - client.SendObjectPropertiesReply(this); - } - /// /// Method for a prim to get it's world position from the group. /// @@ -3500,7 +3512,7 @@ namespace OpenSim.Region.Framework.Scenes { _groupID = groupID; if (client != null) - GetProperties(client); + SendPropertiesToClient(client); m_updateFlag = 2; } @@ -4320,10 +4332,10 @@ namespace OpenSim.Region.Framework.Scenes break; } + SendFullUpdateToAllClients(); - SendObjectPropertiesToClient(AgentID); - + SendRootPartPropertiesToClient(AgentID); } } diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index 58ca00c68a..4edc22034c 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs @@ -1107,10 +1107,12 @@ namespace OpenSim.Region.Framework.Scenes if (m_inventoryFileData.Length > 2) { xferManager.AddNewFile(m_inventoryFileName, m_inventoryFileData); + client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial, + Util.StringToBytes256(m_inventoryFileName)); + return; } - client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial, - Util.StringToBytes256(m_inventoryFileName)); + client.SendTaskInventory(m_part.UUID, 0, new byte[0]); } /// diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 18c0dd29dc..769c84ee0a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -3953,7 +3953,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api parentPrim.ScheduleGroupForFullUpdate(); if (client != null) - parentPrim.GetProperties(client); + parentPrim.SendPropertiesToClient(client); ScriptSleep(1000); }