diff options
author | Justin Clark-Casey (justincc) | 2010-05-27 21:35:17 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2010-05-27 21:35:17 +0100 |
commit | 5074d290e4aeb583560272cadc8ba09aa8337210 (patch) | |
tree | ef8df109755e6958b071adfaf31ccf283d4a4b76 /OpenSim/Region/Framework | |
parent | backport from master fix for attachment display (diff) | |
download | opensim-SC_OLD-5074d290e4aeb583560272cadc8ba09aa8337210.zip opensim-SC_OLD-5074d290e4aeb583560272cadc8ba09aa8337210.tar.gz opensim-SC_OLD-5074d290e4aeb583560272cadc8ba09aa8337210.tar.bz2 opensim-SC_OLD-5074d290e4aeb583560272cadc8ba09aa8337210.tar.xz |
commit code which stops full updates being fired multiple times when attachments cross standalone region boundaries
lots of messy debug code here too which would need to be removed
Diffstat (limited to 'OpenSim/Region/Framework')
8 files changed, 121 insertions, 21 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 42a748f..aa724c5 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -2449,6 +2449,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2449 | return; | 2449 | return; |
2450 | } | 2450 | } |
2451 | 2451 | ||
2452 | m_log.DebugFormat("[SCENE INVENTORY]: {0} {1} IsAttachment={2}", att.Name, att.LocalId, att.IsAttachment); | ||
2453 | Console.WriteLine("HERE X"); | ||
2452 | ScenePresence presence; | 2454 | ScenePresence presence; |
2453 | if (TryGetAvatar(remoteClient.AgentId, out presence)) | 2455 | if (TryGetAvatar(remoteClient.AgentId, out presence)) |
2454 | { | 2456 | { |
@@ -2456,9 +2458,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
2456 | InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); | 2458 | InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); |
2457 | item = InventoryService.GetItem(item); | 2459 | item = InventoryService.GetItem(item); |
2458 | presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/); | 2460 | presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/); |
2461 | Console.WriteLine("HERE Y"); | ||
2459 | 2462 | ||
2460 | if (m_AvatarFactory != null) | 2463 | if (m_AvatarFactory != null) |
2461 | m_AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); | 2464 | m_AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); |
2465 | |||
2466 | Console.WriteLine("HERE Z"); | ||
2462 | } | 2467 | } |
2463 | } | 2468 | } |
2464 | 2469 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index ac04dc7..d8e604f 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | |||
@@ -124,6 +124,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
124 | { | 124 | { |
125 | if (((SceneObjectGroup)ent).LocalId == primLocalID) | 125 | if (((SceneObjectGroup)ent).LocalId == primLocalID) |
126 | { | 126 | { |
127 | m_log.DebugFormat("[SCENE]: Received full update request for {0} from {1}", primLocalID, remoteClient.Name); | ||
127 | ((SceneObjectGroup)ent).SendFullUpdateToClient(remoteClient); | 128 | ((SceneObjectGroup)ent).SendFullUpdateToClient(remoteClient); |
128 | return; | 129 | return; |
129 | } | 130 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 637ebff..dd2d2cc 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -1850,9 +1850,31 @@ namespace OpenSim.Region.Framework.Scenes | |||
1850 | /// true if the object was added, false if an object with the same uuid was already in the scene | 1850 | /// true if the object was added, false if an object with the same uuid was already in the scene |
1851 | /// </returns> | 1851 | /// </returns> |
1852 | public bool AddRestoredSceneObject( | 1852 | public bool AddRestoredSceneObject( |
1853 | SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted, bool sendClientUpdates) | ||
1854 | { | ||
1855 | return m_sceneGraph.AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted, sendClientUpdates); | ||
1856 | } | ||
1857 | |||
1858 | /// <summary> | ||
1859 | /// Add an object into the scene that has come from storage | ||
1860 | /// </summary> | ||
1861 | /// | ||
1862 | /// <param name="sceneObject"></param> | ||
1863 | /// <param name="attachToBackup"> | ||
1864 | /// If true, changes to the object will be reflected in its persisted data | ||
1865 | /// If false, the persisted data will not be changed even if the object in the scene is changed | ||
1866 | /// </param> | ||
1867 | /// <param name="alreadyPersisted"> | ||
1868 | /// If true, we won't persist this object until it changes | ||
1869 | /// If false, we'll persist this object immediately | ||
1870 | /// </param> | ||
1871 | /// <returns> | ||
1872 | /// true if the object was added, false if an object with the same uuid was already in the scene | ||
1873 | /// </returns> | ||
1874 | public bool AddRestoredSceneObject( | ||
1853 | SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted) | 1875 | SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted) |
1854 | { | 1876 | { |
1855 | return m_sceneGraph.AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted); | 1877 | return AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted, true); |
1856 | } | 1878 | } |
1857 | 1879 | ||
1858 | /// <summary> | 1880 | /// <summary> |
@@ -2461,7 +2483,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2461 | /// <returns></returns> | 2483 | /// <returns></returns> |
2462 | public bool IncomingCreateObject(ISceneObject sog) | 2484 | public bool IncomingCreateObject(ISceneObject sog) |
2463 | { | 2485 | { |
2464 | //m_log.Debug(" >>> IncomingCreateObject(sog) <<< " + ((SceneObjectGroup)sog).AbsolutePosition + " deleted? " + ((SceneObjectGroup)sog).IsDeleted); | 2486 | m_log.Debug(" >>> IncomingCreateObject(sog) <<< " + ((SceneObjectGroup)sog).AbsolutePosition + " deleted? " + ((SceneObjectGroup)sog).IsDeleted); |
2465 | SceneObjectGroup newObject; | 2487 | SceneObjectGroup newObject; |
2466 | try | 2488 | try |
2467 | { | 2489 | { |
@@ -2533,10 +2555,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
2533 | 2555 | ||
2534 | if (sceneObject.IsAttachmentCheckFull()) // Attachment | 2556 | if (sceneObject.IsAttachmentCheckFull()) // Attachment |
2535 | { | 2557 | { |
2558 | m_log.DebugFormat("[SCENE]: Adding attachment {0} {1}", sceneObject.Name, sceneObject.LocalId); | ||
2559 | |||
2536 | sceneObject.RootPart.AddFlag(PrimFlags.TemporaryOnRez); | 2560 | sceneObject.RootPart.AddFlag(PrimFlags.TemporaryOnRez); |
2537 | sceneObject.RootPart.AddFlag(PrimFlags.Phantom); | 2561 | sceneObject.RootPart.AddFlag(PrimFlags.Phantom); |
2538 | 2562 | ||
2539 | AddRestoredSceneObject(sceneObject, false, false); | 2563 | AddRestoredSceneObject(sceneObject, false, false, false); |
2540 | 2564 | ||
2541 | // Handle attachment special case | 2565 | // Handle attachment special case |
2542 | SceneObjectPart RootPrim = sceneObject.RootPart; | 2566 | SceneObjectPart RootPrim = sceneObject.RootPart; |
@@ -2544,6 +2568,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2544 | // Fix up attachment Parent Local ID | 2568 | // Fix up attachment Parent Local ID |
2545 | ScenePresence sp = GetScenePresence(sceneObject.OwnerID); | 2569 | ScenePresence sp = GetScenePresence(sceneObject.OwnerID); |
2546 | 2570 | ||
2571 | Console.WriteLine("AAAA"); | ||
2572 | |||
2547 | //uint parentLocalID = 0; | 2573 | //uint parentLocalID = 0; |
2548 | if (sp != null) | 2574 | if (sp != null) |
2549 | { | 2575 | { |
@@ -2562,20 +2588,25 @@ namespace OpenSim.Region.Framework.Scenes | |||
2562 | //grp.SetFromAssetID(grp.RootPart.LastOwnerID); | 2588 | //grp.SetFromAssetID(grp.RootPart.LastOwnerID); |
2563 | m_log.DebugFormat( | 2589 | m_log.DebugFormat( |
2564 | "[ATTACHMENT]: Attach to avatar {0} at position {1}", sp.UUID, grp.AbsolutePosition); | 2590 | "[ATTACHMENT]: Attach to avatar {0} at position {1}", sp.UUID, grp.AbsolutePosition); |
2565 | 2591 | ||
2592 | RootPrim.RemFlag(PrimFlags.TemporaryOnRez); | ||
2566 | AttachObject( | 2593 | AttachObject( |
2567 | sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); | 2594 | sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); |
2568 | RootPrim.RemFlag(PrimFlags.TemporaryOnRez); | 2595 | |
2569 | grp.SendGroupFullUpdate(); | 2596 | //grp.SendGroupFullUpdate(); |
2570 | } | 2597 | } |
2571 | else | 2598 | else |
2572 | { | 2599 | { |
2573 | RootPrim.RemFlag(PrimFlags.TemporaryOnRez); | 2600 | RootPrim.RemFlag(PrimFlags.TemporaryOnRez); |
2574 | RootPrim.AddFlag(PrimFlags.TemporaryOnRez); | 2601 | RootPrim.AddFlag(PrimFlags.TemporaryOnRez); |
2575 | } | 2602 | } |
2603 | |||
2604 | Console.WriteLine("BBBB"); | ||
2576 | } | 2605 | } |
2577 | else | 2606 | else |
2578 | { | 2607 | { |
2608 | m_log.DebugFormat("[SCENE]: Adding ordinary object {0} {1}", sceneObject.Name, sceneObject.LocalId); | ||
2609 | |||
2579 | AddRestoredSceneObject(sceneObject, true, false); | 2610 | AddRestoredSceneObject(sceneObject, true, false); |
2580 | 2611 | ||
2581 | if (!Permissions.CanObjectEntry(sceneObject.UUID, | 2612 | if (!Permissions.CanObjectEntry(sceneObject.UUID, |
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index 2f6a0db..50feb17 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs | |||
@@ -1383,7 +1383,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1383 | // now we have a child agent in this region. Request all interesting data about other (root) agents | 1383 | // now we have a child agent in this region. Request all interesting data about other (root) agents |
1384 | agent.SendInitialFullUpdateToAllClients(); | 1384 | agent.SendInitialFullUpdateToAllClients(); |
1385 | 1385 | ||
1386 | Console.WriteLine("SCS 1"); | ||
1386 | agent.CrossAttachmentsIntoNewRegion(neighbourHandle, true); | 1387 | agent.CrossAttachmentsIntoNewRegion(neighbourHandle, true); |
1388 | Console.WriteLine("SCS 2"); | ||
1387 | 1389 | ||
1388 | // m_scene.SendKillObject(m_localId); | 1390 | // m_scene.SendKillObject(m_localId); |
1389 | 1391 | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 59a2f41..fa3c5eb 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -216,11 +216,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
216 | /// If true, we won't persist this object until it changes | 216 | /// If true, we won't persist this object until it changes |
217 | /// If false, we'll persist this object immediately | 217 | /// If false, we'll persist this object immediately |
218 | /// </param> | 218 | /// </param> |
219 | /// <param name="sendClientUpdate"> | ||
220 | /// If true, we send updates to the client to tell it about this object | ||
221 | /// If false, we leave it up to the caller to do this | ||
222 | /// </param> | ||
219 | /// <returns> | 223 | /// <returns> |
220 | /// true if the object was added, false if an object with the same uuid was already in the scene | 224 | /// true if the object was added, false if an object with the same uuid was already in the scene |
221 | /// </returns> | 225 | /// </returns> |
222 | protected internal bool AddRestoredSceneObject( | 226 | protected internal bool AddRestoredSceneObject( |
223 | SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted) | 227 | SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted, bool sendClientUpdates) |
224 | { | 228 | { |
225 | if (!alreadyPersisted) | 229 | if (!alreadyPersisted) |
226 | { | 230 | { |
@@ -228,8 +232,29 @@ namespace OpenSim.Region.Framework.Scenes | |||
228 | sceneObject.HasGroupChanged = true; | 232 | sceneObject.HasGroupChanged = true; |
229 | } | 233 | } |
230 | 234 | ||
231 | return AddSceneObject(sceneObject, attachToBackup, true); | 235 | return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates); |
232 | } | 236 | } |
237 | |||
238 | // /// <summary> | ||
239 | // /// Add an object into the scene that has come from storage | ||
240 | // /// </summary> | ||
241 | // /// <param name="sceneObject"></param> | ||
242 | // /// <param name="attachToBackup"> | ||
243 | // /// If true, changes to the object will be reflected in its persisted data | ||
244 | // /// If false, the persisted data will not be changed even if the object in the scene is changed | ||
245 | // /// </param> | ||
246 | // /// <param name="alreadyPersisted"> | ||
247 | // /// If true, we won't persist this object until it changes | ||
248 | // /// If false, we'll persist this object immediately | ||
249 | // /// </param> | ||
250 | // /// <returns> | ||
251 | // /// true if the object was added, false if an object with the same uuid was already in the scene | ||
252 | // /// </returns> | ||
253 | // protected internal bool AddRestoredSceneObject( | ||
254 | // SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted) | ||
255 | // { | ||
256 | // AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted, true); | ||
257 | // } | ||
233 | 258 | ||
234 | /// <summary> | 259 | /// <summary> |
235 | /// Add a newly created object to the scene. This will both update the scene, and send information about the | 260 | /// Add a newly created object to the scene. This will both update the scene, and send information about the |
@@ -611,11 +636,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
611 | protected internal bool AttachObject( | 636 | protected internal bool AttachObject( |
612 | IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, Vector3 attachPos, bool silent) | 637 | IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, Vector3 attachPos, bool silent) |
613 | { | 638 | { |
639 | Console.WriteLine("HERE A"); | ||
614 | SceneObjectGroup group = GetGroupByPrim(objectLocalID); | 640 | SceneObjectGroup group = GetGroupByPrim(objectLocalID); |
615 | if (group != null) | 641 | if (group != null) |
616 | { | 642 | { |
617 | if (m_parentScene.Permissions.CanTakeObject(group.UUID, remoteClient.AgentId)) | 643 | if (m_parentScene.Permissions.CanTakeObject(group.UUID, remoteClient.AgentId)) |
618 | { | 644 | { |
645 | Console.WriteLine("HERE -1"); | ||
619 | // If the attachment point isn't the same as the one previously used | 646 | // If the attachment point isn't the same as the one previously used |
620 | // set it's offset position = 0 so that it appears on the attachment point | 647 | // set it's offset position = 0 so that it appears on the attachment point |
621 | // and not in a weird location somewhere unknown. | 648 | // and not in a weird location somewhere unknown. |
@@ -654,9 +681,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
654 | itemId = group.GetFromItemID(); | 681 | itemId = group.GetFromItemID(); |
655 | } | 682 | } |
656 | 683 | ||
684 | Console.WriteLine("HERE 0"); | ||
657 | m_parentScene.AttachObject(remoteClient, AttachmentPt, itemId, group); | 685 | m_parentScene.AttachObject(remoteClient, AttachmentPt, itemId, group); |
658 | 686 | ||
687 | Console.WriteLine("HERE 1"); | ||
659 | group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos, silent); | 688 | group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos, silent); |
689 | Console.WriteLine("HERE 2"); | ||
660 | // In case it is later dropped again, don't let | 690 | // In case it is later dropped again, don't let |
661 | // it get cleaned up | 691 | // it get cleaned up |
662 | // | 692 | // |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 602b811..ba3fde7 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -1494,6 +1494,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
1494 | 1494 | ||
1495 | public void SendFullUpdateToClient(IClientAPI remoteClient) | 1495 | public void SendFullUpdateToClient(IClientAPI remoteClient) |
1496 | { | 1496 | { |
1497 | if (IsAttachment) | ||
1498 | m_log.DebugFormat( | ||
1499 | "[SOG]: Sending full update to client {0} for {1} {2}", remoteClient.Name, Name, LocalId); | ||
1500 | |||
1497 | SendPartFullUpdate(remoteClient, RootPart, m_scene.Permissions.GenerateClientFlags(remoteClient.AgentId, RootPart.UUID)); | 1501 | SendPartFullUpdate(remoteClient, RootPart, m_scene.Permissions.GenerateClientFlags(remoteClient.AgentId, RootPart.UUID)); |
1498 | 1502 | ||
1499 | lock (m_parts) | 1503 | lock (m_parts) |
@@ -1513,8 +1517,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1513 | /// <param name="part"></param> | 1517 | /// <param name="part"></param> |
1514 | internal void SendPartFullUpdate(IClientAPI remoteClient, SceneObjectPart part, uint clientFlags) | 1518 | internal void SendPartFullUpdate(IClientAPI remoteClient, SceneObjectPart part, uint clientFlags) |
1515 | { | 1519 | { |
1516 | // m_log.DebugFormat( | 1520 | if (IsAttachment) |
1517 | // "[SOG]: Sending part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId); | 1521 | m_log.DebugFormat( |
1522 | "[SOG]: Sending part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId); | ||
1518 | 1523 | ||
1519 | if (m_rootPart.UUID == part.UUID) | 1524 | if (m_rootPart.UUID == part.UUID) |
1520 | { | 1525 | { |
@@ -1994,7 +1999,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1994 | 1999 | ||
1995 | public void ScheduleFullUpdateToAvatar(ScenePresence presence) | 2000 | public void ScheduleFullUpdateToAvatar(ScenePresence presence) |
1996 | { | 2001 | { |
1997 | // m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1} just to avatar {2}", Name, UUID, presence.Name); | 2002 | if (IsAttachment) |
2003 | m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1} just to avatar {2}", Name, UUID, presence.Name); | ||
1998 | 2004 | ||
1999 | RootPart.AddFullUpdateToAvatar(presence); | 2005 | RootPart.AddFullUpdateToAvatar(presence); |
2000 | 2006 | ||
@@ -2026,7 +2032,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2026 | /// </summary> | 2032 | /// </summary> |
2027 | public void ScheduleGroupForFullUpdate() | 2033 | public void ScheduleGroupForFullUpdate() |
2028 | { | 2034 | { |
2029 | // m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, UUID); | 2035 | if (IsAttachment) |
2036 | m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, UUID); | ||
2030 | 2037 | ||
2031 | checkAtTargets(); | 2038 | checkAtTargets(); |
2032 | RootPart.ScheduleFullUpdate(); | 2039 | RootPart.ScheduleFullUpdate(); |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index a85a4b3..ffbb427 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -1259,16 +1259,17 @@ namespace OpenSim.Region.Framework.Scenes | |||
1259 | /// Tell all scene presences that they should send updates for this part to their clients | 1259 | /// Tell all scene presences that they should send updates for this part to their clients |
1260 | /// </summary> | 1260 | /// </summary> |
1261 | public void AddFullUpdateToAllAvatars() | 1261 | public void AddFullUpdateToAllAvatars() |
1262 | { | 1262 | { |
1263 | ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); | 1263 | ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); |
1264 | for (int i = 0; i < avatars.Length; i++) | 1264 | for (int i = 0; i < avatars.Length; i++) |
1265 | { | 1265 | AddFullUpdateToAvatar(avatars[i]); |
1266 | avatars[i].SceneViewer.QueuePartForUpdate(this); | ||
1267 | } | ||
1268 | } | 1266 | } |
1269 | 1267 | ||
1270 | public void AddFullUpdateToAvatar(ScenePresence presence) | 1268 | public void AddFullUpdateToAvatar(ScenePresence presence) |
1271 | { | 1269 | { |
1270 | if (IsAttachment) | ||
1271 | m_log.DebugFormat("AddFullUpdateToAllAvatar() {0} for {1} {2}", presence.Name, Name, LocalId); | ||
1272 | |||
1272 | presence.SceneViewer.QueuePartForUpdate(this); | 1273 | presence.SceneViewer.QueuePartForUpdate(this); |
1273 | } | 1274 | } |
1274 | 1275 | ||
@@ -1287,13 +1288,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
1287 | { | 1288 | { |
1288 | ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); | 1289 | ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); |
1289 | for (int i = 0; i < avatars.Length; i++) | 1290 | for (int i = 0; i < avatars.Length; i++) |
1290 | { | 1291 | AddTerseUpdateToAvatar(avatars[i]); |
1291 | avatars[i].SceneViewer.QueuePartForUpdate(this); | ||
1292 | } | ||
1293 | } | 1292 | } |
1294 | 1293 | ||
1295 | public void AddTerseUpdateToAvatar(ScenePresence presence) | 1294 | public void AddTerseUpdateToAvatar(ScenePresence presence) |
1296 | { | 1295 | { |
1296 | if (IsAttachment) | ||
1297 | m_log.DebugFormat("AddTerseUpdateToAvatar() {0} for {1} {2}", presence.Name, Name, LocalId); | ||
1298 | |||
1297 | presence.SceneViewer.QueuePartForUpdate(this); | 1299 | presence.SceneViewer.QueuePartForUpdate(this); |
1298 | } | 1300 | } |
1299 | 1301 | ||
@@ -2727,7 +2729,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2727 | /// </summary> | 2729 | /// </summary> |
2728 | public void ScheduleFullUpdate() | 2730 | public void ScheduleFullUpdate() |
2729 | { | 2731 | { |
2730 | // m_log.DebugFormat("[SCENE OBJECT PART]: Scheduling full update for {0} {1}", Name, LocalId); | 2732 | if (IsAttachment) |
2733 | m_log.DebugFormat("[SOP]: Scheduling full update for {0} {1}", Name, LocalId); | ||
2731 | 2734 | ||
2732 | if (m_parentGroup != null) | 2735 | if (m_parentGroup != null) |
2733 | { | 2736 | { |
@@ -2840,6 +2843,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2840 | /// <param name="remoteClient"></param> | 2843 | /// <param name="remoteClient"></param> |
2841 | public void SendFullUpdate(IClientAPI remoteClient, uint clientFlags) | 2844 | public void SendFullUpdate(IClientAPI remoteClient, uint clientFlags) |
2842 | { | 2845 | { |
2846 | if (IsAttachment) | ||
2847 | m_log.DebugFormat( | ||
2848 | "[SCENE OBJECT PART]: Sending part full update to {0} for {1} {2}", remoteClient.Name, Name, LocalId); | ||
2849 | |||
2843 | m_parentGroup.SendPartFullUpdate(remoteClient, this, clientFlags); | 2850 | m_parentGroup.SendPartFullUpdate(remoteClient, this, clientFlags); |
2844 | } | 2851 | } |
2845 | 2852 | ||
@@ -2848,6 +2855,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2848 | /// </summary> | 2855 | /// </summary> |
2849 | public void SendFullUpdateToAllClients() | 2856 | public void SendFullUpdateToAllClients() |
2850 | { | 2857 | { |
2858 | if (IsAttachment) | ||
2859 | m_log.DebugFormat( | ||
2860 | "[SCENE OBJECT PART]: Sending full update for {0} {1} for all clients", Name, LocalId); | ||
2861 | |||
2851 | ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); | 2862 | ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); |
2852 | for (int i = 0; i < avatars.Length; i++) | 2863 | for (int i = 0; i < avatars.Length; i++) |
2853 | { | 2864 | { |
@@ -2859,6 +2870,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2859 | 2870 | ||
2860 | public void SendFullUpdateToAllClientsExcept(UUID agentID) | 2871 | public void SendFullUpdateToAllClientsExcept(UUID agentID) |
2861 | { | 2872 | { |
2873 | if (IsAttachment) | ||
2874 | m_log.DebugFormat( | ||
2875 | "[SCENE OBJECT PART]: Sending full update for {0} {1} to all clients except {2}", Name, LocalId, agentID); | ||
2876 | |||
2862 | ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); | 2877 | ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); |
2863 | for (int i = 0; i < avatars.Length; i++) | 2878 | for (int i = 0; i < avatars.Length; i++) |
2864 | { | 2879 | { |
@@ -2965,6 +2980,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2965 | { | 2980 | { |
2966 | if (m_updateFlag == 2) // is a new prim, just created/reloaded or has major changes | 2981 | if (m_updateFlag == 2) // is a new prim, just created/reloaded or has major changes |
2967 | { | 2982 | { |
2983 | if (IsAttachment) | ||
2984 | m_log.DebugFormat("[SOP]: Sending scheduled full update for {0} {1}", Name, LocalId); | ||
2985 | |||
2968 | AddFullUpdateToAllAvatars(); | 2986 | AddFullUpdateToAllAvatars(); |
2969 | ClearUpdateSchedule(); | 2987 | ClearUpdateSchedule(); |
2970 | } | 2988 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneViewer.cs b/OpenSim/Region/Framework/Scenes/SceneViewer.cs index e4296ef..6f2bef9 100644 --- a/OpenSim/Region/Framework/Scenes/SceneViewer.cs +++ b/OpenSim/Region/Framework/Scenes/SceneViewer.cs | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Reflection; | ||
30 | using OpenMetaverse; | 31 | using OpenMetaverse; |
31 | using log4net; | 32 | using log4net; |
32 | using OpenSim.Framework; | 33 | using OpenSim.Framework; |
@@ -39,6 +40,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
39 | { | 40 | { |
40 | public class SceneViewer : ISceneViewer | 41 | public class SceneViewer : ISceneViewer |
41 | { | 42 | { |
43 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
44 | |||
42 | protected ScenePresence m_presence; | 45 | protected ScenePresence m_presence; |
43 | protected UpdateQueue m_partsUpdateQueue = new UpdateQueue(); | 46 | protected UpdateQueue m_partsUpdateQueue = new UpdateQueue(); |
44 | protected Queue<SceneObjectGroup> m_pendingObjects; | 47 | protected Queue<SceneObjectGroup> m_pendingObjects; |
@@ -60,6 +63,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
60 | /// <param name="part"></param> | 63 | /// <param name="part"></param> |
61 | public void QueuePartForUpdate(SceneObjectPart part) | 64 | public void QueuePartForUpdate(SceneObjectPart part) |
62 | { | 65 | { |
66 | if (part.IsAttachment) | ||
67 | m_log.DebugFormat("[SCENE VIEWER]: Queueing part {0} {1} for update", part.Name, part.LocalId); | ||
68 | |||
63 | lock (m_partsUpdateQueue) | 69 | lock (m_partsUpdateQueue) |
64 | { | 70 | { |
65 | m_partsUpdateQueue.Enqueue(part); | 71 | m_partsUpdateQueue.Enqueue(part); |
@@ -134,7 +140,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
134 | } | 140 | } |
135 | else if (update.LastTerseUpdateTime <= part.TimeStampTerse) | 141 | else if (update.LastTerseUpdateTime <= part.TimeStampTerse) |
136 | { | 142 | { |
137 | // m_log.DebugFormat( | 143 | // m_log.DebugFormat(AddFullUpdateToAvatar |
138 | // "[SCENE PRESENCE]: Tersely updating prim {0}, {1} - part timestamp {2}", | 144 | // "[SCENE PRESENCE]: Tersely updating prim {0}, {1} - part timestamp {2}", |
139 | // part.Name, part.UUID, part.TimeStampTerse); | 145 | // part.Name, part.UUID, part.TimeStampTerse); |
140 | 146 | ||