From 8183945d5f447deb5b1c85df762a316878786d0d Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 17 Sep 2020 18:06:04 +0100 Subject: [PATCH] ObjectPropertiesUpdate is now just entityupdate --- .../ClientStack/Linden/UDP/LLClientView.cs | 79 ++++++++++--------- .../Region/Framework/Scenes/EntityUpdates.cs | 58 ++++---------- 2 files changed, 57 insertions(+), 80 deletions(-) diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 9436abc2cb..3a52f41f75 100755 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -5165,7 +5165,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if(objectUpdates != null) { - List tau = new List(30); + //List tau = new List(30); UDPPacketBuffer buf = m_udpServer.GetNewUDPBuffer(m_udpClient.RemoteEndPoint); Buffer.BlockCopy(objectUpdateHeader, 0, buf.Data, 0, 7); @@ -5199,9 +5199,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP shouldCreateSelected = part.CreateSelected; CreatePrimUpdateBlock(part, mysp, zc); } + if (zc.Position < LLUDPServer.MAXPAYLOAD - 300) { - tau.Add(eu); + //tau.Add(eu); ++count; } else @@ -5237,10 +5238,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP CreatePrimUpdateBlock((SceneObjectPart)eu.Entity, mysp, zc); } - tau = new List(30); - tau.Add(eu); + //tau = new List(30); + //tau.Add(eu); count = 1; } + eu.Free(); //remove if using resend } if (count > 0) @@ -5320,7 +5322,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (compressedUpdates != null) { - List tau = new List(30); + //List tau = new List(30); UDPPacketBuffer buf = m_udpServer.GetNewUDPBuffer(m_udpClient.RemoteEndPoint); byte[] data = buf.Data; @@ -5357,6 +5359,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP lastzc = zc.ZeroCount; CreateCompressedUpdateBlockZC(sop, mysp, zc); + if (zc.Position < LLUDPServer.MAXPAYLOAD - 200) { //tau.Add(eu); @@ -5394,10 +5397,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP // im lazy now, just do last again CreateCompressedUpdateBlockZC(sop, mysp, zc); - tau = new List(30); + //tau = new List(30); //tau.Add(eu); count = 1; } + eu.Free(); //remove if using resend } if (count > 0) @@ -5463,6 +5467,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP count = 0; } + eu.Free(); } if (count > 0) @@ -5964,17 +5969,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP { uint priority = 0; // time based ordering only lock (m_entityProps.SyncRoot) - m_entityProps.Enqueue(priority, new ObjectPropertyUpdate(entity, requestFlags, true, false)); + m_entityProps.Enqueue(priority, new EntityUpdate(entity, (PrimUpdateFlags)requestFlags, true, false)); } - private void ResendPropertyUpdate(ObjectPropertyUpdate update) + private void ResendPropertyUpdate(EntityUpdate update) { uint priority = 0; lock (m_entityProps.SyncRoot) m_entityProps.Enqueue(priority, update); } - private void ResendPropertyUpdates(List updates, OutgoingPacket oPacket) + private void ResendPropertyUpdates(List updates, OutgoingPacket oPacket) { // m_log.WarnFormat("[CLIENT] resending object property {0}",updates[0].UpdateTime); @@ -5990,7 +5995,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP // is 100% correct m_udpServer.PacketsResentCount++; - foreach (ObjectPropertyUpdate update in updates) + foreach (EntityUpdate update in updates) ResendPropertyUpdate(update); } @@ -5998,7 +6003,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { uint priority = 0; // time based ordering only lock (m_entityProps.SyncRoot) - m_entityProps.Enqueue(priority, new ObjectPropertyUpdate(entity,0,false,true)); + m_entityProps.Enqueue(priority, new EntityUpdate(entity,0,false,true)); } static private readonly byte[] ObjectPropertyUpdateHeader = new byte[] { @@ -6017,13 +6022,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP private void ProcessEntityPropertyRequests(int maxUpdateBytes) { - List objectPropertiesUpdates = null; - List objectPropertiesFamilyUpdates = null; + List objectPropertiesUpdates = null; + List objectPropertiesFamilyUpdates = null; + List used = new List(64); List needPhysics = null; // bool orderedDequeue = m_scene.UpdatePrioritizationScheme == UpdatePrioritizationSchemes.SimpleAngularDistance; bool orderedDequeue = false; // for now - EntityUpdate iupdate; + EntityUpdate update; while (maxUpdateBytes > 0) { @@ -6031,42 +6037,37 @@ namespace OpenSim.Region.ClientStack.LindenUDP { if(orderedDequeue) { - if (!m_entityProps.TryOrderedDequeue(out iupdate)) + if (!m_entityProps.TryOrderedDequeue(out update)) break; } else { - if (!m_entityProps.TryDequeue(out iupdate)) + if (!m_entityProps.TryDequeue(out update)) break; } } - ObjectPropertyUpdate update = (ObjectPropertyUpdate)iupdate; + SceneObjectPart sop = (SceneObjectPart)update.Entity as SceneObjectPart; + if(sop == null) + continue; + if ((update.PropsFlags & ObjectPropertyUpdateFlags.Family) != 0) { - if (update.Entity is SceneObjectPart) - { - SceneObjectPart sop = (SceneObjectPart)update.Entity; - if(objectPropertiesFamilyUpdates == null) - objectPropertiesFamilyUpdates = new List(); - objectPropertiesFamilyUpdates.Add(update); - maxUpdateBytes -= 100; - } + if(objectPropertiesFamilyUpdates == null) + objectPropertiesFamilyUpdates = new List(); + objectPropertiesFamilyUpdates.Add(update); + maxUpdateBytes -= 100; } if ((update.PropsFlags & ObjectPropertyUpdateFlags.Object) != 0) { - if (update.Entity is SceneObjectPart) - { - SceneObjectPart sop = (SceneObjectPart)update.Entity; - if(needPhysics == null) - needPhysics = new List(); - needPhysics.Add(sop); - if(objectPropertiesUpdates == null) - objectPropertiesUpdates = new List(); - objectPropertiesUpdates.Add(update); - maxUpdateBytes -= 200; // aprox - } + if(needPhysics == null) + needPhysics = new List(); + needPhysics.Add(sop); + if(objectPropertiesUpdates == null) + objectPropertiesUpdates = new List(); + objectPropertiesUpdates.Add(update); + maxUpdateBytes -= 200; // aprox } } @@ -6094,7 +6095,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP lastpos = zc.Position; lastzc = zc.ZeroCount; CreateObjectPropertiesBlock((SceneObjectPart)eu.Entity, zc); - eu.Free(); if (zc.Position < LLUDPServer.MAXPAYLOAD) { //tau.Add(eu); @@ -6131,6 +6131,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP count = 1; --blocks; } + used.Add(eu); } if (count > 0) @@ -6154,7 +6155,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP zc.Position = 8; CreateObjectPropertiesFamilyBlock((SceneObjectPart)eu.Entity, eu.Flags, zc); - eu.Free(); + used.Add(eu); buf.DataLength = zc.Finish(); //List tau = new List(1); //tau.Add(new ObjectPropertyUpdate((ISceneEntity) eu, (uint)eu.Flags, true, false)); @@ -6187,6 +6188,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP eq.Enqueue(eq.EndEvent(sb), AgentId); } } + foreach(EntityUpdate eu in used) + eu.Free(); } private void CreateObjectPropertiesFamilyBlock(SceneObjectPart sop, PrimUpdateFlags requestFlags, LLUDPZeroEncoder zc) diff --git a/OpenSim/Region/Framework/Scenes/EntityUpdates.cs b/OpenSim/Region/Framework/Scenes/EntityUpdates.cs index dca2c68c7b..3271a6e822 100644 --- a/OpenSim/Region/Framework/Scenes/EntityUpdates.cs +++ b/OpenSim/Region/Framework/Scenes/EntityUpdates.cs @@ -104,9 +104,8 @@ namespace OpenSim.Region.Framework.Scenes set { m_flags = value; } } - public virtual void Update() + public void Update(uint pqueue, ulong entry) { - // we are on the new one if ((m_flags & PrimUpdateFlags.CancelKill) != 0) { if ((m_flags & PrimUpdateFlags.UpdateProbe) != 0) @@ -114,18 +113,16 @@ namespace OpenSim.Region.Framework.Scenes else m_flags = PrimUpdateFlags.FullUpdatewithAnim; } - } - public void Update(uint pqueue, ulong entry) - { - Update(); m_pqueue = pqueue; m_entryorder = entry; } - public void Update(EntityUpdate oldupdate) + public void Update(EntityUpdate oldupdate, uint pqueue, ulong entry) { // we are on the new one + m_propsFlags |= oldupdate.PropsFlags; + PrimUpdateFlags updateFlags = oldupdate.Flags; if ((m_flags & PrimUpdateFlags.UpdateProbe) != 0) updateFlags &= ~PrimUpdateFlags.UpdateProbe; @@ -138,11 +135,7 @@ namespace OpenSim.Region.Framework.Scenes } else m_flags |= updateFlags; - } - public void Update(EntityUpdate oldupdate, uint pqueue, ulong entry) - { - Update(oldupdate); m_pqueue = pqueue; m_entryorder = entry; } @@ -158,6 +151,18 @@ namespace OpenSim.Region.Framework.Scenes m_flags = flags; } + public EntityUpdate(ISceneEntity entity, PrimUpdateFlags flags, bool sendfam, bool sendobj) + { + m_entity = entity; + m_flags = flags; + + if (sendfam) + m_propsFlags |= ObjectPropertyUpdateFlags.Family; + + if (sendobj) + m_propsFlags |= ObjectPropertyUpdateFlags.Object; + } + public override string ToString() { return String.Format("[{0},{1},{2}]", m_pqueue, m_entryorder, m_entity.LocalId); @@ -170,35 +175,4 @@ namespace OpenSim.Region.Framework.Scenes return Comparer.Default.Compare(this.EntryOrder, other.EntryOrder); } } - - public class ObjectPropertyUpdate : EntityUpdate - { - public ObjectPropertyUpdate(ISceneEntity entity, uint flags, bool sendfam, bool sendobj) - : base(entity, (PrimUpdateFlags)flags) - { - if (sendfam) - m_propsFlags |= ObjectPropertyUpdateFlags.Family; - else - m_propsFlags &= ObjectPropertyUpdateFlags.NoFamily; - - if (sendobj) - m_propsFlags |= ObjectPropertyUpdateFlags.Object; - else - m_propsFlags &= ObjectPropertyUpdateFlags.NoObject; - } - - public void Update(ObjectPropertyUpdate update) - { - m_propsFlags |= update.PropsFlags; - // other properties may need to be updated by base class - base.Update(update); - } - - public void Update(ObjectPropertyUpdate update, uint pqueue, ulong entry) - { - m_propsFlags |= update.PropsFlags; - // other properties may need to be updated by base class - base.Update(update, pqueue, entry); - } - } }