aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMic Bowman2011-04-12 15:40:57 -0700
committerMic Bowman2011-04-12 15:40:57 -0700
commit80ba3de90240d190bad1bd15ff89dfdb390c5e24 (patch)
treeeeabff0c3e50fdf7e8137b9370d8710062bdbb7b
parentfixed a couple bugs with the property queues (diff)
downloadopensim-SC-80ba3de90240d190bad1bd15ff89dfdb390c5e24.zip
opensim-SC-80ba3de90240d190bad1bd15ff89dfdb390c5e24.tar.gz
opensim-SC-80ba3de90240d190bad1bd15ff89dfdb390c5e24.tar.bz2
opensim-SC-80ba3de90240d190bad1bd15ff89dfdb390c5e24.tar.xz
Fixed the update of items in the priority queue to enable both
types of property updates to be specified. Not sure if one form of property update should supercede another. But for now the old OpenSim behavior is preserved by sending both.
-rw-r--r--OpenSim/Framework/IClientAPI.cs5
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs21
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/PriorityQueue.cs2
3 files changed, 21 insertions, 7 deletions
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index c56a756..f573c32 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -575,6 +575,11 @@ namespace OpenSim.Framework
575 public ISceneEntity Entity; 575 public ISceneEntity Entity;
576 public uint Flags; 576 public uint Flags;
577 577
578 public virtual void Update(IEntityUpdate update)
579 {
580 this.Flags |= update.Flags;
581 }
582
578 public IEntityUpdate(ISceneEntity entity, uint flags) 583 public IEntityUpdate(ISceneEntity entity, uint flags)
579 { 584 {
580 Entity = entity; 585 Entity = entity;
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 4db5b22..92a76ac 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -4032,26 +4032,34 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4032 private class ObjectPropertyUpdate : IEntityUpdate 4032 private class ObjectPropertyUpdate : IEntityUpdate
4033 { 4033 {
4034 internal bool SendFamilyProps; 4034 internal bool SendFamilyProps;
4035 internal bool SendObjectProps;
4035 4036
4036 public ObjectPropertyUpdate(ISceneEntity entity, uint flags, bool sendfam) 4037 public ObjectPropertyUpdate(ISceneEntity entity, uint flags, bool sendfam, bool sendobj)
4037 : base(entity,flags) 4038 : base(entity,flags)
4038 { 4039 {
4039 SendFamilyProps = sendfam; 4040 SendFamilyProps = sendfam;
4041 SendObjectProps = sendobj;
4042 }
4043 public void Update(ObjectPropertyUpdate update)
4044 {
4045 SendFamilyProps = SendFamilyProps || update.SendFamilyProps;
4046 SendObjectProps = SendObjectProps || update.SendObjectProps;
4047 Flags |= update.Flags;
4040 } 4048 }
4041 } 4049 }
4042 4050
4043 public void SendObjectPropertiesFamilyData(ISceneEntity entity, uint requestFlags) 4051 public void SendObjectPropertiesFamilyData(ISceneEntity entity, uint requestFlags)
4044 { 4052 {
4045 uint priority = m_prioritizer.GetUpdatePriority(this, entity); 4053 uint priority = 0; // time based ordering only
4046 lock (m_entityProps.SyncRoot) 4054 lock (m_entityProps.SyncRoot)
4047 m_entityProps.Enqueue(priority, new ObjectPropertyUpdate(entity,requestFlags,true)); 4055 m_entityProps.Enqueue(priority, new ObjectPropertyUpdate(entity,requestFlags,true,false));
4048 } 4056 }
4049 4057
4050 public void SendObjectPropertiesReply(ISceneEntity entity) 4058 public void SendObjectPropertiesReply(ISceneEntity entity)
4051 { 4059 {
4052 uint priority = m_prioritizer.GetUpdatePriority(this, entity); 4060 uint priority = 0; // time based ordering only
4053 lock (m_entityProps.SyncRoot) 4061 lock (m_entityProps.SyncRoot)
4054 m_entityProps.Enqueue(priority, new ObjectPropertyUpdate(entity,0,false)); 4062 m_entityProps.Enqueue(priority, new ObjectPropertyUpdate(entity,0,false,true));
4055 } 4063 }
4056 4064
4057 private void ProcessEntityPropertyRequests(int maxUpdates) 4065 private void ProcessEntityPropertyRequests(int maxUpdates)
@@ -4082,7 +4090,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4082 objectFamilyBlocks.Value.Add(objPropDB); 4090 objectFamilyBlocks.Value.Add(objPropDB);
4083 } 4091 }
4084 } 4092 }
4085 else 4093
4094 if (update.SendObjectProps)
4086 { 4095 {
4087 if (update.Entity is SceneObjectPart) 4096 if (update.Entity is SceneObjectPart)
4088 { 4097 {
diff --git a/OpenSim/Region/ClientStack/LindenUDP/PriorityQueue.cs b/OpenSim/Region/ClientStack/LindenUDP/PriorityQueue.cs
index 6521a00..b62ec07 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/PriorityQueue.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/PriorityQueue.cs
@@ -87,7 +87,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
87 if (m_lookupTable.TryGetValue(localid, out lookup)) 87 if (m_lookupTable.TryGetValue(localid, out lookup))
88 { 88 {
89 entry = lookup.Heap[lookup.Handle].EntryOrder; 89 entry = lookup.Heap[lookup.Handle].EntryOrder;
90 value.Flags |= lookup.Heap[lookup.Handle].Value.Flags; 90 value.Update(lookup.Heap[lookup.Handle].Value);
91 lookup.Heap.Remove(lookup.Handle); 91 lookup.Heap.Remove(lookup.Handle);
92 } 92 }
93 93