Push updates from keyframe directly to the front of the output queue rather

than through the update system.
This commit is contained in:
Melanie
2013-02-12 01:02:16 +01:00
parent e85a6237bf
commit 04235e58e8
5 changed files with 46 additions and 10 deletions

View File

@@ -3721,6 +3721,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// </summary>
public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags)
{
if ((updateFlags & PrimUpdateFlags.Immediate) != 0)
{
SendUnqueuedTerseUpdate((SceneObjectPart)entity);
return;
}
if (entity is SceneObjectPart)
{
SceneObjectPart e = (SceneObjectPart)entity;
@@ -4075,6 +4081,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP
ProcessEntityUpdates(-1);
}
public void SendUnqueuedTerseUpdate(SceneObjectPart part)
{
ImprovedTerseObjectUpdatePacket packet
= (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(
PacketType.ImprovedTerseObjectUpdate);
packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
packet.RegionData.TimeDilation = Utils.FloatToUInt16(1.0f, 0.0f, 1.0f);
packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
packet.ObjectData[0] = CreateImprovedTerseBlock(part, false);
OutPacket(packet, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
}
#endregion Primitive Packet/Data Sending Methods
// These are used to implement an adaptive backoff in the number