diff options
author | Melanie | 2010-10-08 11:31:52 +0200 |
---|---|---|
committer | Melanie | 2010-10-08 11:31:52 +0200 |
commit | 52dd547863c0cdd22f53f0efcaef11ae096855a0 (patch) | |
tree | e1b545832530f02b3485a39826555e444423aad3 | |
parent | Implement rezzing coalesced objects (diff) | |
download | opensim-SC-52dd547863c0cdd22f53f0efcaef11ae096855a0.zip opensim-SC-52dd547863c0cdd22f53f0efcaef11ae096855a0.tar.gz opensim-SC-52dd547863c0cdd22f53f0efcaef11ae096855a0.tar.bz2 opensim-SC-52dd547863c0cdd22f53f0efcaef11ae096855a0.tar.xz |
Make SendKillObject send multiple localIDs in one packet. This avoids the
halting visual behavior of large group deletes and eliminates the packet flood
19 files changed, 79 insertions, 53 deletions
diff --git a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs index 87b99e0..df9d21b 100644 --- a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs +++ b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs | |||
@@ -897,7 +897,13 @@ namespace OpenSim.Client.MXP.ClientStack | |||
897 | // Need to translate to MXP somehow | 897 | // Need to translate to MXP somehow |
898 | } | 898 | } |
899 | 899 | ||
900 | public void SendKillObject(ulong regionHandle, uint localID) | 900 | public void SendKillObject(ulong regionHandle, List<uint> localIDs) |
901 | { | ||
902 | foreach (uint localID in localIDs) | ||
903 | SendKillObject(regionHandle, localID); | ||
904 | } | ||
905 | |||
906 | private void SendKillObject(ulong regionHandle, uint localID) | ||
901 | { | 907 | { |
902 | DisappearanceEventMessage de = new DisappearanceEventMessage(); | 908 | DisappearanceEventMessage de = new DisappearanceEventMessage(); |
903 | de.ObjectIndex = localID; | 909 | de.ObjectIndex = localID; |
diff --git a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs index 51c5c17..26be5d9 100644 --- a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs +++ b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs | |||
@@ -495,7 +495,7 @@ namespace OpenSim.Client.VWoHTTP.ClientStack | |||
495 | throw new System.NotImplementedException(); | 495 | throw new System.NotImplementedException(); |
496 | } | 496 | } |
497 | 497 | ||
498 | public void SendKillObject(ulong regionHandle, uint localID) | 498 | public void SendKillObject(ulong regionHandle, List<uint> localID) |
499 | { | 499 | { |
500 | throw new System.NotImplementedException(); | 500 | throw new System.NotImplementedException(); |
501 | } | 501 | } |
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index 9025dda..51482a1 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs | |||
@@ -979,7 +979,7 @@ namespace OpenSim.Framework | |||
979 | /// </summary> | 979 | /// </summary> |
980 | /// <param name="regionHandle"></param> | 980 | /// <param name="regionHandle"></param> |
981 | /// <param name="localID"></param> | 981 | /// <param name="localID"></param> |
982 | void SendKillObject(ulong regionHandle, uint localID); | 982 | void SendKillObject(ulong regionHandle, List<uint> localID); |
983 | 983 | ||
984 | void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs); | 984 | void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs); |
985 | void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args); | 985 | void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args); |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 2b1bd97..fff4300 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -1516,35 +1516,46 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1516 | OutPacket(pc, ThrottleOutPacketType.Unknown); | 1516 | OutPacket(pc, ThrottleOutPacketType.Unknown); |
1517 | } | 1517 | } |
1518 | 1518 | ||
1519 | public void SendKillObject(ulong regionHandle, uint localID) | 1519 | public void SendKillObject(ulong regionHandle, List<uint> localIDs) |
1520 | { | 1520 | { |
1521 | // m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, localID, regionHandle); | 1521 | // m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, localID, regionHandle); |
1522 | 1522 | ||
1523 | KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject); | 1523 | KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject); |
1524 | // TODO: don't create new blocks if recycling an old packet | 1524 | // TODO: don't create new blocks if recycling an old packet |
1525 | kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; | 1525 | kill.ObjectData = new KillObjectPacket.ObjectDataBlock[localIDs.Count]; |
1526 | kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); | 1526 | for (int i = 0 ; i < localIDs.Count ; i++ ) |
1527 | kill.ObjectData[0].ID = localID; | 1527 | { |
1528 | kill.ObjectData[i] = new KillObjectPacket.ObjectDataBlock(); | ||
1529 | kill.ObjectData[i].ID = localIDs[i]; | ||
1530 | } | ||
1528 | kill.Header.Reliable = true; | 1531 | kill.Header.Reliable = true; |
1529 | kill.Header.Zerocoded = true; | 1532 | kill.Header.Zerocoded = true; |
1530 | 1533 | ||
1531 | if (m_scene.GetScenePresence(localID) == null) | 1534 | if (localIDs.Count == 1) |
1532 | { | 1535 | { |
1533 | lock (m_entityUpdates.SyncRoot) | 1536 | if (m_scene.GetScenePresence(localIDs[0]) != null) |
1534 | { | 1537 | { |
1535 | m_killRecord.Add(localID); | 1538 | OutPacket(kill, ThrottleOutPacketType.State); |
1536 | 1539 | return; | |
1537 | // The throttle queue used here must match that being used for updates. Otherwise, there is a | ||
1538 | // chance that a kill packet put on a separate queue will be sent to the client before an existing | ||
1539 | // update packet on another queue. Receiving updates after kills results in unowned and undeletable | ||
1540 | // scene objects in a viewer until that viewer is relogged in. | ||
1541 | OutPacket(kill, ThrottleOutPacketType.Task); | ||
1542 | } | 1540 | } |
1541 | m_killRecord.Add(localIDs[0]); | ||
1543 | } | 1542 | } |
1544 | else | 1543 | else |
1545 | { | 1544 | { |
1546 | OutPacket(kill, ThrottleOutPacketType.State); | 1545 | lock (m_entityUpdates.SyncRoot) |
1546 | { | ||
1547 | foreach (uint localID in localIDs) | ||
1548 | m_killRecord.Add(localID); | ||
1549 | } | ||
1547 | } | 1550 | } |
1551 | |||
1552 | // The throttle queue used here must match that being used for | ||
1553 | // updates. Otherwise, there is a chance that a kill packet put | ||
1554 | // on a separate queue will be sent to the client before an | ||
1555 | // existing update packet on another queue. Receiving updates | ||
1556 | // after kills results in unowned and undeletable | ||
1557 | // scene objects in a viewer until that viewer is relogged in. | ||
1558 | OutPacket(kill, ThrottleOutPacketType.Task); | ||
1548 | } | 1559 | } |
1549 | 1560 | ||
1550 | /// <summary> | 1561 | /// <summary> |
@@ -10969,7 +10980,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
10969 | { | 10980 | { |
10970 | // It's a ghost! tell the client to delete it from view. | 10981 | // It's a ghost! tell the client to delete it from view. |
10971 | simClient.SendKillObject(Scene.RegionInfo.RegionHandle, | 10982 | simClient.SendKillObject(Scene.RegionInfo.RegionHandle, |
10972 | localId); | 10983 | new List<uint>() { localId }); |
10973 | } | 10984 | } |
10974 | else | 10985 | else |
10975 | { | 10986 | { |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 87c9100..6ff0ffc 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -616,7 +616,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
616 | // | 616 | // |
617 | if (so.IsSelected) | 617 | if (so.IsSelected) |
618 | { | 618 | { |
619 | m_scene.SendKillObject(so.RootPart.LocalId); | 619 | m_scene.SendKillObject(new List<uint> { so.RootPart.LocalId }); |
620 | } | 620 | } |
621 | 621 | ||
622 | so.IsSelected = false; // fudge.... | 622 | so.IsSelected = false; // fudge.... |
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index d506208..2921b0d 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -529,7 +529,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
529 | 529 | ||
530 | protected void KillEntity(Scene scene, uint localID) | 530 | protected void KillEntity(Scene scene, uint localID) |
531 | { | 531 | { |
532 | scene.SendKillObject(localID); | 532 | scene.SendKillObject(new List<uint>() { localID }); |
533 | } | 533 | } |
534 | 534 | ||
535 | protected virtual GridRegion GetFinalDestination(GridRegion region) | 535 | protected virtual GridRegion GetFinalDestination(GridRegion region) |
diff --git a/OpenSim/Region/Examples/SimpleModule/ComplexObject.cs b/OpenSim/Region/Examples/SimpleModule/ComplexObject.cs index e951bef..7a0ce51 100644 --- a/OpenSim/Region/Examples/SimpleModule/ComplexObject.cs +++ b/OpenSim/Region/Examples/SimpleModule/ComplexObject.cs | |||
@@ -25,6 +25,7 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System.Collections.Generic; | ||
28 | using OpenMetaverse; | 29 | using OpenMetaverse; |
29 | using OpenSim.Framework; | 30 | using OpenSim.Framework; |
30 | using OpenSim.Region.Framework.Scenes; | 31 | using OpenSim.Region.Framework.Scenes; |
@@ -110,7 +111,7 @@ namespace OpenSim.Region.Examples.SimpleModule | |||
110 | { | 111 | { |
111 | m_parts.Remove(part.UUID); | 112 | m_parts.Remove(part.UUID); |
112 | 113 | ||
113 | remoteClient.SendKillObject(m_regionHandle, part.LocalId); | 114 | remoteClient.SendKillObject(m_regionHandle, new List<uint>() { part.LocalId} ); |
114 | remoteClient.AddMoney(1); | 115 | remoteClient.AddMoney(1); |
115 | remoteClient.SendChatMessage("Poof!", 1, AbsolutePosition, "Party Party", UUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully); | 116 | remoteClient.SendChatMessage("Poof!", 1, AbsolutePosition, "Party Party", UUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully); |
116 | } | 117 | } |
@@ -121,7 +122,7 @@ namespace OpenSim.Region.Examples.SimpleModule | |||
121 | { | 122 | { |
122 | m_parts.Remove(m_rootPart.UUID); | 123 | m_parts.Remove(m_rootPart.UUID); |
123 | m_scene.DeleteSceneObject(this, false); | 124 | m_scene.DeleteSceneObject(this, false); |
124 | remoteClient.SendKillObject(m_regionHandle, m_rootPart.LocalId); | 125 | remoteClient.SendKillObject(m_regionHandle, new List<uint>() { m_rootPart.LocalId }); |
125 | remoteClient.AddMoney(50); | 126 | remoteClient.AddMoney(50); |
126 | remoteClient.SendChatMessage("KABLAM!!!", 1, AbsolutePosition, "Groupie Groupie", UUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully); | 127 | remoteClient.SendChatMessage("KABLAM!!!", 1, AbsolutePosition, "Groupie Groupie", UUID.Zero, (byte)ChatSourceType.Object, (byte)ChatAudibleLevel.Fully); |
127 | } | 128 | } |
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index 944ad94..db427b4 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs | |||
@@ -429,7 +429,7 @@ namespace OpenSim.Region.Examples.SimpleModule | |||
429 | 429 | ||
430 | } | 430 | } |
431 | 431 | ||
432 | public virtual void SendKillObject(ulong regionHandle, uint localID) | 432 | public virtual void SendKillObject(ulong regionHandle, List<uint> localID) |
433 | { | 433 | { |
434 | } | 434 | } |
435 | 435 | ||
diff --git a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs index 8feb022..a8d24fd 100644 --- a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs +++ b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs | |||
@@ -104,8 +104,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
104 | // better than losing the object for now. | 104 | // better than losing the object for now. |
105 | if (permissionToDelete) | 105 | if (permissionToDelete) |
106 | { | 106 | { |
107 | List<uint> killIDs = new List<uint>(); | ||
108 | |||
107 | foreach (SceneObjectGroup g in objectGroups) | 109 | foreach (SceneObjectGroup g in objectGroups) |
110 | { | ||
111 | killIDs.Add(g.LocalId); | ||
108 | g.DeleteGroupFromScene(false); | 112 | g.DeleteGroupFromScene(false); |
113 | } | ||
114 | |||
115 | m_scene.SendKillObject(killIDs); | ||
109 | } | 116 | } |
110 | } | 117 | } |
111 | 118 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 8b5316a..6d7f984 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -1709,7 +1709,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1709 | if (part == null) | 1709 | if (part == null) |
1710 | { | 1710 | { |
1711 | //Client still thinks the object exists, kill it | 1711 | //Client still thinks the object exists, kill it |
1712 | SendKillObject(localID); | 1712 | deleteIDs.Add(localID); |
1713 | continue; | 1713 | continue; |
1714 | } | 1714 | } |
1715 | 1715 | ||
@@ -1717,7 +1717,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1717 | if (part.ParentGroup == null || part.ParentGroup.IsDeleted) | 1717 | if (part.ParentGroup == null || part.ParentGroup.IsDeleted) |
1718 | { | 1718 | { |
1719 | //Client still thinks the object exists, kill it | 1719 | //Client still thinks the object exists, kill it |
1720 | SendKillObject(localID); | 1720 | deleteIDs.Add(localID); |
1721 | continue; | 1721 | continue; |
1722 | } | 1722 | } |
1723 | 1723 | ||
@@ -1727,8 +1727,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1727 | 1727 | ||
1728 | SceneObjectGroup grp = part.ParentGroup; | 1728 | SceneObjectGroup grp = part.ParentGroup; |
1729 | 1729 | ||
1730 | deleteIDs.Add(localID); | ||
1731 | deleteGroups.Add(grp); | 1730 | deleteGroups.Add(grp); |
1731 | deleteIDs.Add(grp.LocalId); | ||
1732 | 1732 | ||
1733 | if (remoteClient == null) | 1733 | if (remoteClient == null) |
1734 | { | 1734 | { |
@@ -1811,6 +1811,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1811 | } | 1811 | } |
1812 | } | 1812 | } |
1813 | 1813 | ||
1814 | SendKillObject(deleteIDs); | ||
1815 | |||
1814 | if (permissionToTake) | 1816 | if (permissionToTake) |
1815 | { | 1817 | { |
1816 | m_asyncSceneObjectDeleter.DeleteToInventory( | 1818 | m_asyncSceneObjectDeleter.DeleteToInventory( |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 76e160d..48ae4ca 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -2188,6 +2188,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2188 | } | 2188 | } |
2189 | 2189 | ||
2190 | group.DeleteGroupFromScene(silent); | 2190 | group.DeleteGroupFromScene(silent); |
2191 | if (!silent) | ||
2192 | SendKillObject(new List<uint>() { group.LocalId }); | ||
2191 | 2193 | ||
2192 | // m_log.DebugFormat("[SCENE]: Exit DeleteSceneObject() for {0} {1}", group.Name, group.UUID); | 2194 | // m_log.DebugFormat("[SCENE]: Exit DeleteSceneObject() for {0} {1}", group.Name, group.UUID); |
2193 | } | 2195 | } |
@@ -3273,7 +3275,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3273 | delegate(IClientAPI client) | 3275 | delegate(IClientAPI client) |
3274 | { | 3276 | { |
3275 | //We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway | 3277 | //We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway |
3276 | try { client.SendKillObject(avatar.RegionHandle, avatar.LocalId); } | 3278 | try { client.SendKillObject(avatar.RegionHandle, new List<uint>() { avatar.LocalId}); } |
3277 | catch (NullReferenceException) { } | 3279 | catch (NullReferenceException) { } |
3278 | }); | 3280 | }); |
3279 | 3281 | ||
@@ -3336,18 +3338,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
3336 | 3338 | ||
3337 | #region Entities | 3339 | #region Entities |
3338 | 3340 | ||
3339 | public void SendKillObject(uint localID) | 3341 | public void SendKillObject(List<uint> localIDs) |
3340 | { | 3342 | { |
3341 | SceneObjectPart part = GetSceneObjectPart(localID); | 3343 | List<uint> deleteIDs = new List<uint>(); |
3342 | if (part != null) // It is a prim | 3344 | |
3345 | foreach (uint localID in localIDs) | ||
3343 | { | 3346 | { |
3344 | if (part.ParentGroup != null && !part.ParentGroup.IsDeleted) // Valid | 3347 | SceneObjectPart part = GetSceneObjectPart(localID); |
3348 | if (part != null) // It is a prim | ||
3345 | { | 3349 | { |
3346 | if (part.ParentGroup.RootPart != part) // Child part | 3350 | if (part.ParentGroup != null && !part.ParentGroup.IsDeleted) // Valid |
3347 | return; | 3351 | { |
3352 | if (part.ParentGroup.RootPart != part) // Child part | ||
3353 | continue; | ||
3354 | } | ||
3348 | } | 3355 | } |
3356 | deleteIDs.Add(localID); | ||
3349 | } | 3357 | } |
3350 | ForEachClient(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, localID); }); | 3358 | ForEachClient(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, deleteIDs); }); |
3351 | } | 3359 | } |
3352 | 3360 | ||
3353 | #endregion | 3361 | #endregion |
@@ -3365,7 +3373,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3365 | //m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate; | 3373 | //m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate; |
3366 | //m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar; | 3374 | //m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar; |
3367 | m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid; | 3375 | m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid; |
3368 | m_sceneGridService.KiPrimitive += SendKillObject; | ||
3369 | m_sceneGridService.OnGetLandData += GetLandData; | 3376 | m_sceneGridService.OnGetLandData += GetLandData; |
3370 | } | 3377 | } |
3371 | 3378 | ||
@@ -3374,7 +3381,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3374 | /// </summary> | 3381 | /// </summary> |
3375 | public void UnRegisterRegionWithComms() | 3382 | public void UnRegisterRegionWithComms() |
3376 | { | 3383 | { |
3377 | m_sceneGridService.KiPrimitive -= SendKillObject; | ||
3378 | m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid; | 3384 | m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid; |
3379 | //m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar; | 3385 | //m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar; |
3380 | //m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate; | 3386 | //m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate; |
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index 1293d5d..632646d 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs | |||
@@ -44,8 +44,6 @@ using GridRegion = OpenSim.Services.Interfaces.GridRegion; | |||
44 | 44 | ||
45 | namespace OpenSim.Region.Framework.Scenes | 45 | namespace OpenSim.Region.Framework.Scenes |
46 | { | 46 | { |
47 | public delegate void KiPrimitiveDelegate(uint localID); | ||
48 | |||
49 | public delegate void RemoveKnownRegionsFromAvatarList(UUID avatarID, List<ulong> regionlst); | 47 | public delegate void RemoveKnownRegionsFromAvatarList(UUID avatarID, List<ulong> regionlst); |
50 | 48 | ||
51 | /// <summary> | 49 | /// <summary> |
@@ -113,8 +111,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
113 | // private LogOffUser handlerLogOffUser = null; | 111 | // private LogOffUser handlerLogOffUser = null; |
114 | // private GetLandData handlerGetLandData = null; // OnGetLandData | 112 | // private GetLandData handlerGetLandData = null; // OnGetLandData |
115 | 113 | ||
116 | public KiPrimitiveDelegate KiPrimitive; | ||
117 | |||
118 | public SceneCommunicationService() | 114 | public SceneCommunicationService() |
119 | { | 115 | { |
120 | } | 116 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 9a7d560..c870797 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -1151,7 +1151,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1151 | // | 1151 | // |
1152 | if (IsSelected) | 1152 | if (IsSelected) |
1153 | { | 1153 | { |
1154 | m_scene.SendKillObject(m_rootPart.LocalId); | 1154 | m_scene.SendKillObject(new List<uint> { m_rootPart.LocalId }); |
1155 | } | 1155 | } |
1156 | 1156 | ||
1157 | IsSelected = false; // fudge.... | 1157 | IsSelected = false; // fudge.... |
@@ -1415,11 +1415,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1415 | avatar.StandUp(); | 1415 | avatar.StandUp(); |
1416 | 1416 | ||
1417 | if (!silent) | 1417 | if (!silent) |
1418 | { | ||
1419 | part.UpdateFlag = 0; | 1418 | part.UpdateFlag = 0; |
1420 | if (part == m_rootPart) | ||
1421 | avatar.ControllingClient.SendKillObject(m_regionHandle, part.LocalId); | ||
1422 | } | ||
1423 | }); | 1419 | }); |
1424 | } | 1420 | } |
1425 | 1421 | ||
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index 4ab67aa..72e5ebd 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs | |||
@@ -947,7 +947,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server | |||
947 | 947 | ||
948 | } | 948 | } |
949 | 949 | ||
950 | public void SendKillObject(ulong regionHandle, uint localID) | 950 | public void SendKillObject(ulong regionHandle, List<uint> localID) |
951 | { | 951 | { |
952 | 952 | ||
953 | } | 953 | } |
diff --git a/OpenSim/Region/OptionalModules/ContentManagementSystem/CMModel.cs b/OpenSim/Region/OptionalModules/ContentManagementSystem/CMModel.cs index 3a6996e..84c7f29 100644 --- a/OpenSim/Region/OptionalModules/ContentManagementSystem/CMModel.cs +++ b/OpenSim/Region/OptionalModules/ContentManagementSystem/CMModel.cs | |||
@@ -259,9 +259,10 @@ namespace OpenSim.Region.OptionalModules.ContentManagement | |||
259 | // I thought that the DeleteGroup() function would handle all of this, but it doesn't. I'm not sure WHAT it handles. | 259 | // I thought that the DeleteGroup() function would handle all of this, but it doesn't. I'm not sure WHAT it handles. |
260 | ((SceneObjectGroup)scene.Entities[uuid]).DetachFromBackup(); | 260 | ((SceneObjectGroup)scene.Entities[uuid]).DetachFromBackup(); |
261 | scene.PhysicsScene.RemovePrim(((SceneObjectGroup)scene.Entities[uuid]).RootPart.PhysActor); | 261 | scene.PhysicsScene.RemovePrim(((SceneObjectGroup)scene.Entities[uuid]).RootPart.PhysActor); |
262 | scene.SendKillObject(scene.Entities[uuid].LocalId); | 262 | scene.SendKillObject(new List<uint>() { scene.Entities[uuid].LocalId }); |
263 | scene.SceneGraph.DeleteSceneObject(uuid, false); | 263 | scene.SceneGraph.DeleteSceneObject(uuid, false); |
264 | ((SceneObjectGroup)scene.Entities[uuid]).DeleteGroupFromScene(false); | 264 | ((SceneObjectGroup)scene.Entities[uuid]).DeleteGroupFromScene(false); |
265 | scene.SendKillObject(new List<uint>() { ((SceneObjectGroup)scene.Entities[uuid]).LocalId }); | ||
265 | } | 266 | } |
266 | catch(Exception e) | 267 | catch(Exception e) |
267 | { | 268 | { |
diff --git a/OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs b/OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs index c7b1ed7..cd60f4b 100644 --- a/OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs +++ b/OpenSim/Region/OptionalModules/ContentManagementSystem/MetaEntity.cs | |||
@@ -175,7 +175,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement | |||
175 | //This is important because we are not IN any database. | 175 | //This is important because we are not IN any database. |
176 | //m_Entity.FakeDeleteGroup(); | 176 | //m_Entity.FakeDeleteGroup(); |
177 | foreach (SceneObjectPart part in m_Entity.Parts) | 177 | foreach (SceneObjectPart part in m_Entity.Parts) |
178 | client.SendKillObject(m_Entity.RegionHandle, part.LocalId); | 178 | client.SendKillObject(m_Entity.RegionHandle, new List<uint>() { part.LocalId }); |
179 | } | 179 | } |
180 | 180 | ||
181 | /// <summary> | 181 | /// <summary> |
@@ -187,7 +187,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement | |||
187 | { | 187 | { |
188 | m_Entity.Scene.ForEachClient( | 188 | m_Entity.Scene.ForEachClient( |
189 | delegate(IClientAPI controller) | 189 | delegate(IClientAPI controller) |
190 | { controller.SendKillObject(m_Entity.RegionHandle, part.LocalId); } | 190 | { controller.SendKillObject(m_Entity.RegionHandle, new List<uint>() { part.LocalId }); } |
191 | ); | 191 | ); |
192 | } | 192 | } |
193 | } | 193 | } |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index 1653ecb..3cbe391 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs | |||
@@ -519,7 +519,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
519 | 519 | ||
520 | } | 520 | } |
521 | 521 | ||
522 | public virtual void SendKillObject(ulong regionHandle, uint localID) | 522 | public virtual void SendKillObject(ulong regionHandle, List<uint> localID) |
523 | { | 523 | { |
524 | } | 524 | } |
525 | 525 | ||
diff --git a/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs b/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs index 421da36..2563361 100644 --- a/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs +++ b/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs | |||
@@ -386,7 +386,7 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator | |||
386 | m_scene.ForEachClient(delegate(IClientAPI controller) | 386 | m_scene.ForEachClient(delegate(IClientAPI controller) |
387 | { | 387 | { |
388 | controller.SendKillObject(m_scene.RegionInfo.RegionHandle, | 388 | controller.SendKillObject(m_scene.RegionInfo.RegionHandle, |
389 | selectedTree.LocalId); | 389 | new List<uint>() { selectedTree.LocalId }); |
390 | }); | 390 | }); |
391 | } | 391 | } |
392 | else | 392 | else |
@@ -727,7 +727,7 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator | |||
727 | m_scene.ForEachClient(delegate(IClientAPI controller) | 727 | m_scene.ForEachClient(delegate(IClientAPI controller) |
728 | { | 728 | { |
729 | controller.SendKillObject(m_scene.RegionInfo.RegionHandle, | 729 | controller.SendKillObject(m_scene.RegionInfo.RegionHandle, |
730 | selectedTree.LocalId); | 730 | new List<uint>() { selectedTree.LocalId }); |
731 | }); | 731 | }); |
732 | 732 | ||
733 | break; | 733 | break; |
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs index 1c860a7..6324146 100644 --- a/OpenSim/Tests/Common/Mock/TestClient.cs +++ b/OpenSim/Tests/Common/Mock/TestClient.cs | |||
@@ -487,7 +487,7 @@ namespace OpenSim.Tests.Common.Mock | |||
487 | 487 | ||
488 | } | 488 | } |
489 | 489 | ||
490 | public virtual void SendKillObject(ulong regionHandle, uint localID) | 490 | public virtual void SendKillObject(ulong regionHandle, List<uint> localID) |
491 | { | 491 | { |
492 | } | 492 | } |
493 | 493 | ||