diff options
author | Mic Bowman | 2011-04-12 15:40:57 -0700 |
---|---|---|
committer | Mic Bowman | 2011-04-13 15:37:25 -0700 |
commit | b33aac737a3e7ae28216cb98de99d9c6eba1d563 (patch) | |
tree | 9a755778c7ebad6167179847b23623b023bf340d /OpenSim | |
parent | fixed a couple bugs with the property queues (diff) | |
download | opensim-SC-b33aac737a3e7ae28216cb98de99d9c6eba1d563.zip opensim-SC-b33aac737a3e7ae28216cb98de99d9c6eba1d563.tar.gz opensim-SC-b33aac737a3e7ae28216cb98de99d9c6eba1d563.tar.bz2 opensim-SC-b33aac737a3e7ae28216cb98de99d9c6eba1d563.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.
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Framework/IClientAPI.cs | 5 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 21 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/PriorityQueue.cs | 2 |
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 f926c35..a6f2d09 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 | ||