added support so that the packet tracker can resend packets itself as well as triggering a event. Next step to change the terrain packet resending to use these feature.

0.6.0-stable
MW 2008-07-21 16:21:59 +00:00
parent fb096dfbd5
commit 6784cebf57
1 changed files with 31 additions and 2 deletions

View File

@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Text;
using System.Threading;
using libsecondlife;
using libsecondlife.Packets;
using OpenSim.Framework;
namespace OpenSim.Region.ClientStack.LindenUDP
{
@ -35,12 +37,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
public void TrackTerrainPacket(uint sequenceNumber, int patchX, int patchY)
{
TrackTerrainPacket(sequenceNumber, patchX, patchY, false, null);
}
public void TrackTerrainPacket(uint sequenceNumber, int patchX, int patchY, bool keepResending, LayerDataPacket packet)
{
TerrainPacketTracker tracker = new TerrainPacketTracker();
tracker.X = patchX;
tracker.Y = patchY;
tracker.SeqNumber = sequenceNumber;
tracker.TimeSent = DateTime.Now;
tracker.KeepResending = keepResending;
tracker.Packet = packet;
lock (m_sentTerrainPackets)
{
m_sentTerrainPackets[patchX, patchY] = tracker;
@ -85,7 +94,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP
foreach (TerrainPacketTracker tracker in resendList)
{
m_parentClient.TriggerTerrainUnackedEvent(tracker.X, tracker.Y);
if (!tracker.KeepResending)
{
m_parentClient.TriggerTerrainUnackedEvent(tracker.X, tracker.Y);
}
else
{
if (tracker.Packet != null)
{
tracker.Packet.Header.Resent = true;
m_parentClient.OutPacket(tracker.Packet, ThrottleOutPacketType.Resend);
tracker.TimeSent = DateTime.Now;
lock (m_sentTerrainPackets)
{
if (m_sentTerrainPackets[tracker.X, tracker.Y] == null)
{
m_sentTerrainPackets[tracker.X, tracker.Y] = tracker;
}
}
}
}
}
}
@ -220,7 +248,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public int X;
public int Y;
public DateTime TimeSent;
public LayerDataPacket Packet;
public bool KeepResending;
}
public class PrimPacketTracker