aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
diff options
context:
space:
mode:
authorUbitUmarov2016-08-12 18:47:01 +0100
committerUbitUmarov2016-08-12 18:47:01 +0100
commit09832edadf91e02edbc3e5238aad12ec10998391 (patch)
tree5df43f09ba549d4dc8aa71466014f5c4330a181c /OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
parent only reissue a kill if a update is for a deleted sog root part. (diff)
downloadopensim-SC-09832edadf91e02edbc3e5238aad12ec10998391.zip
opensim-SC-09832edadf91e02edbc3e5238aad12ec10998391.tar.gz
opensim-SC-09832edadf91e02edbc3e5238aad12ec10998391.tar.bz2
opensim-SC-09832edadf91e02edbc3e5238aad12ec10998391.tar.xz
avoid automatic packet spliting in GroupMembersReply
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs')
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs29
1 files changed, 19 insertions, 10 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 2c2bcea..6275f19 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -4462,12 +4462,24 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4462 4462
4463 if (kills.Count > 0) 4463 if (kills.Count > 0)
4464 { 4464 {
4465 List<uint> partIDs = new List<uint>();
4465 foreach(SceneObjectGroup grp in kills) 4466 foreach(SceneObjectGroup grp in kills)
4466 { 4467 {
4468 SendEntityUpdate(grp.RootPart,PrimUpdateFlags.Kill);
4467 foreach(SceneObjectPart p in grp.Parts) 4469 foreach(SceneObjectPart p in grp.Parts)
4468 SendEntityUpdate(p,PrimUpdateFlags.Kill); 4470 {
4471 if(p != grp.RootPart)
4472 partIDs.Add(p.LocalId);
4473 }
4469 } 4474 }
4470 kills.Clear(); 4475 kills.Clear();
4476 if(partIDs.Count > 0)
4477 {
4478 lock (m_entityProps.SyncRoot)
4479 m_entityProps.Remove(partIDs);
4480 lock (m_entityUpdates.SyncRoot)
4481 m_entityUpdates.Remove(partIDs);
4482 }
4471 } 4483 }
4472 4484
4473 if(GroupsNeedFullUpdate.Count > 0) 4485 if(GroupsNeedFullUpdate.Count > 0)
@@ -11409,12 +11421,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11409 m_GroupsModule.GroupMembersRequest(this, groupMembersRequestPacket.GroupData.GroupID); 11421 m_GroupsModule.GroupMembersRequest(this, groupMembersRequestPacket.GroupData.GroupID);
11410 11422
11411 int memberCount = members.Count; 11423 int memberCount = members.Count;
11412 11424 int indx = 0;
11413 while (true) 11425 while (indx < memberCount)
11414 { 11426 {
11415 int blockCount = members.Count; 11427 int blockCount = memberCount - indx;
11416 if (blockCount > 40) 11428 if (blockCount > 25)
11417 blockCount = 40; 11429 blockCount = 25;
11418 11430
11419 GroupMembersReplyPacket groupMembersReply = (GroupMembersReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupMembersReply); 11431 GroupMembersReplyPacket groupMembersReply = (GroupMembersReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupMembersReply);
11420 11432
@@ -11435,8 +11447,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11435 11447
11436 for (int i = 0; i < blockCount; i++) 11448 for (int i = 0; i < blockCount; i++)
11437 { 11449 {
11438 GroupMembersData m = members[0]; 11450 GroupMembersData m = members[indx++];
11439 members.RemoveAt(0);
11440 11451
11441 groupMembersReply.MemberData[i] = 11452 groupMembersReply.MemberData[i] =
11442 new GroupMembersReplyPacket.MemberDataBlock(); 11453 new GroupMembersReplyPacket.MemberDataBlock();
@@ -11454,8 +11465,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11454 m.IsOwner; 11465 m.IsOwner;
11455 } 11466 }
11456 OutPacket(groupMembersReply, ThrottleOutPacketType.Task); 11467 OutPacket(groupMembersReply, ThrottleOutPacketType.Task);
11457 if (members.Count == 0)
11458 return true;
11459 } 11468 }
11460 } 11469 }
11461 return true; 11470 return true;