mirror of
https://github.com/opensim/opensim.git
synced 2026-08-12 12:25:42 +08:00
ObjectPropertiesUpdate is now just entityupdate
This commit is contained in:
@@ -5165,7 +5165,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
|
||||
if(objectUpdates != null)
|
||||
{
|
||||
List<EntityUpdate> tau = new List<EntityUpdate>(30);
|
||||
//List<EntityUpdate> tau = new List<EntityUpdate>(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<EntityUpdate>(30);
|
||||
tau.Add(eu);
|
||||
//tau = new List<EntityUpdate>(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<EntityUpdate> tau = new List<EntityUpdate>(30);
|
||||
//List<EntityUpdate> tau = new List<EntityUpdate>(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<EntityUpdate>(30);
|
||||
//tau = new List<EntityUpdate>(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<ObjectPropertyUpdate> updates, OutgoingPacket oPacket)
|
||||
private void ResendPropertyUpdates(List<EntityUpdate> 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<ObjectPropertyUpdate> objectPropertiesUpdates = null;
|
||||
List<ObjectPropertyUpdate> objectPropertiesFamilyUpdates = null;
|
||||
List<EntityUpdate> objectPropertiesUpdates = null;
|
||||
List<EntityUpdate> objectPropertiesFamilyUpdates = null;
|
||||
List<EntityUpdate> used = new List<EntityUpdate>(64);
|
||||
List<SceneObjectPart> 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<ObjectPropertyUpdate>();
|
||||
objectPropertiesFamilyUpdates.Add(update);
|
||||
maxUpdateBytes -= 100;
|
||||
}
|
||||
if(objectPropertiesFamilyUpdates == null)
|
||||
objectPropertiesFamilyUpdates = new List<EntityUpdate>();
|
||||
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<SceneObjectPart>();
|
||||
needPhysics.Add(sop);
|
||||
if(objectPropertiesUpdates == null)
|
||||
objectPropertiesUpdates = new List<ObjectPropertyUpdate>();
|
||||
objectPropertiesUpdates.Add(update);
|
||||
maxUpdateBytes -= 200; // aprox
|
||||
}
|
||||
if(needPhysics == null)
|
||||
needPhysics = new List<SceneObjectPart>();
|
||||
needPhysics.Add(sop);
|
||||
if(objectPropertiesUpdates == null)
|
||||
objectPropertiesUpdates = new List<EntityUpdate>();
|
||||
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<EntityUpdate> tau = new List<EntityUpdate>(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)
|
||||
|
||||
@@ -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<ulong>.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user