aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs54
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs31
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs4
3 files changed, 76 insertions, 13 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 724c8bc..37929f2 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -365,6 +365,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
365 /// </value> 365 /// </value>
366 protected HashSet<uint> m_killRecord; 366 protected HashSet<uint> m_killRecord;
367 367
368// protected HashSet<uint> m_attachmentsQueued;
369// protected HashSet<uint> m_attachmentsSent;
370
368 private int m_moneyBalance; 371 private int m_moneyBalance;
369 private int m_animationSequenceNumber = 1; 372 private int m_animationSequenceNumber = 1;
370 private bool m_SendLogoutPacketWhenClosing = true; 373 private bool m_SendLogoutPacketWhenClosing = true;
@@ -456,6 +459,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
456 m_primFullUpdates = new PriorityQueue<double, ObjectUpdatePacket.ObjectDataBlock>(m_scene.Entities.Count); 459 m_primFullUpdates = new PriorityQueue<double, ObjectUpdatePacket.ObjectDataBlock>(m_scene.Entities.Count);
457 m_fullUpdateDataBlocksBuilder = new List<ObjectUpdatePacket.ObjectDataBlock>(); 460 m_fullUpdateDataBlocksBuilder = new List<ObjectUpdatePacket.ObjectDataBlock>();
458 m_killRecord = new HashSet<uint>(); 461 m_killRecord = new HashSet<uint>();
462// m_attachmentsQueued = new HashSet<uint>();
463// m_attachmentsSent = new HashSet<uint>();
459 464
460 m_assetService = m_scene.RequestModuleInterface<IAssetService>(); 465 m_assetService = m_scene.RequestModuleInterface<IAssetService>();
461 m_hyperAssets = m_scene.RequestModuleInterface<IHyperAssetService>(); 466 m_hyperAssets = m_scene.RequestModuleInterface<IHyperAssetService>();
@@ -3401,6 +3406,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3401 objupdate.ObjectData[0] = CreateAvatarUpdateBlock(data); 3406 objupdate.ObjectData[0] = CreateAvatarUpdateBlock(data);
3402 3407
3403 OutPacket(objupdate, ThrottleOutPacketType.Task); 3408 OutPacket(objupdate, ThrottleOutPacketType.Task);
3409
3410 // We need to record the avatar local id since the root prim of an attachment points to this.
3411// m_attachmentsSent.Add(data.AvatarLocalID);
3404 } 3412 }
3405 3413
3406 /// <summary> 3414 /// <summary>
@@ -3523,6 +3531,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3523 return; 3531 return;
3524 3532
3525 ObjectUpdatePacket.ObjectDataBlock objectData = CreatePrimUpdateBlock(data); 3533 ObjectUpdatePacket.ObjectDataBlock objectData = CreatePrimUpdateBlock(data);
3534
3535// if (data.attachment)
3536// m_attachmentsQueued.Add(data.localID);
3526 3537
3527 lock (m_primFullUpdates.SyncRoot) 3538 lock (m_primFullUpdates.SyncRoot)
3528 m_primFullUpdates.Enqueue(data.priority, objectData, data.localID); 3539 m_primFullUpdates.Enqueue(data.priority, objectData, data.localID);
@@ -3549,15 +3560,37 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3549 ObjectUpdatePacket.ObjectDataBlock block = m_primFullUpdates.Dequeue(); 3560 ObjectUpdatePacket.ObjectDataBlock block = m_primFullUpdates.Dequeue();
3550 3561
3551 if (!m_killRecord.Contains(block.ID)) 3562 if (!m_killRecord.Contains(block.ID))
3552 { 3563 {
3564// if (m_attachmentsQueued.Contains(block.ID))
3565// {
3566// string text = Util.FieldToString(block.Text);
3567// if (text.IndexOf("\n") >= 0)
3568// text = text.Remove(text.IndexOf("\n"));
3569//
3570// if (m_attachmentsSent.Contains(block.ParentID))
3571// {
3572// m_log.DebugFormat(
3573// "[CLIENT]: Sending full info about attached prim {0} text {1}",
3574// block.ID, text);
3575//
3576// m_fullUpdateDataBlocksBuilder.Add(block);
3577//
3578// m_attachmentsSent.Add(block.ID);
3579// }
3580// else
3581// {
3582// m_log.DebugFormat(
3583// "[CLIENT]: Requeueing full update of prim {0} text {1} since we haven't sent its parent {2} yet",
3584// block.ID, text, block.ParentID);
3585//
3586// lock (m_primFullUpdates.SyncRoot)
3587// m_primFullUpdates.Enqueue(double.MaxValue, block, block.ID);
3588// }
3589// }
3590// else
3591// {
3553 m_fullUpdateDataBlocksBuilder.Add(block); 3592 m_fullUpdateDataBlocksBuilder.Add(block);
3554 3593// }
3555// string text = Util.FieldToString(outPacket.ObjectData[i].Text);
3556// if (text.IndexOf("\n") >= 0)
3557// text = text.Remove(text.IndexOf("\n"));
3558// m_log.DebugFormat(
3559// "[CLIENT]: Sending full info about prim {0} text {1} to client {2}",
3560// outPacket.ObjectData[i].ID, text, Name);
3561 } 3594 }
3562// else 3595// else
3563// { 3596// {
@@ -4506,6 +4539,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4506 4539
4507 protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(SendPrimitiveData data) 4540 protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(SendPrimitiveData data)
4508 { 4541 {
4542// if (data.attachment)
4543// m_log.DebugFormat(
4544// "[LLCLIENTVIEW]: Creating prim update block for {0}, parent {1}, priority {2}",
4545// data.localID, data.parentID, data.priority);
4546
4509 byte[] objectData = new byte[60]; 4547 byte[] objectData = new byte[60];
4510 data.pos.ToBytes(objectData, 0); 4548 data.pos.ToBytes(objectData, 0);
4511 data.vel.ToBytes(objectData, 12); 4549 data.vel.ToBytes(objectData, 12);
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 33624a2..479ee4d 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -2929,10 +2929,33 @@ namespace OpenSim.Region.Framework.Scenes
2929 //isattachment = ParentGroup.RootPart.IsAttachment; 2929 //isattachment = ParentGroup.RootPart.IsAttachment;
2930 2930
2931 byte[] color = new byte[] {m_color.R, m_color.G, m_color.B, m_color.A}; 2931 byte[] color = new byte[] {m_color.R, m_color.G, m_color.B, m_color.A};
2932 remoteClient.SendPrimitiveToClient(new SendPrimitiveData(m_regionHandle, m_parentGroup.GetTimeDilation(), LocalId, m_shape, 2932
2933 lPos, Velocity, Acceleration, RotationOffset, AngularVelocity, clientFlags, m_uuid, _ownerID, 2933 double priority = ParentGroup.GetUpdatePriority(remoteClient);
2934 m_text, color, _parentID, m_particleSystem, m_clickAction, (byte)m_material, m_TextureAnimation, IsAttachment, 2934 if (IsRoot && IsAttachment)
2935 AttachmentPoint,FromItemID, Sound, SoundGain, SoundFlags, SoundRadius, ParentGroup.GetUpdatePriority(remoteClient))); 2935 {
2936 if (double.MinValue == priority)
2937 {
2938 m_log.WarnFormat(
2939 "[SOP]: Couldn't raise update priority of root part for attachment {0} {1} because priority is already highest value",
2940 Name, LocalId);
2941 }
2942 else
2943 {
2944 priority = double.MinValue;
2945 }
2946 }
2947
2948 remoteClient.SendPrimitiveToClient(
2949 new SendPrimitiveData(m_regionHandle, m_parentGroup.GetTimeDilation(), LocalId, m_shape,
2950 lPos, Velocity, Acceleration, RotationOffset, AngularVelocity, clientFlags, m_uuid, _ownerID,
2951 m_text, color, _parentID, m_particleSystem, m_clickAction, (byte)m_material, m_TextureAnimation, IsAttachment,
2952 AttachmentPoint,FromItemID, Sound, SoundGain, SoundFlags, SoundRadius, priority));
2953
2954// if (IsRoot && IsAttachment)
2955// {
2956// ScenePresence sp = ParentGroup.Scene.GetScenePresence(remoteClient.AgentId);
2957// remoteClient.ReprioritizeUpdates(StateUpdateTypes.PrimitiveFull, sp.UpdatePriority);
2958// }
2936 } 2959 }
2937 2960
2938 /// <summary> 2961 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 4973663..18f2fd2 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -3871,8 +3871,10 @@ namespace OpenSim.Region.Framework.Scenes
3871 } 3871 }
3872 } 3872 }
3873 3873
3874 private double UpdatePriority(UpdatePriorityData data) 3874 internal double UpdatePriority(UpdatePriorityData data)
3875 { 3875 {
3876// m_log.DebugFormat("[SCENE PRESENCE]: Reprioritizing updates to client {0} for {1}", Name, data.localID);
3877
3876 EntityBase entity; 3878 EntityBase entity;
3877 SceneObjectGroup group; 3879 SceneObjectGroup group;
3878 3880