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.Text;
using System.Threading; using System.Threading;
using libsecondlife; using libsecondlife;
using libsecondlife.Packets;
using OpenSim.Framework;
namespace OpenSim.Region.ClientStack.LindenUDP namespace OpenSim.Region.ClientStack.LindenUDP
{ {
@ -35,12 +37,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
} }
public void TrackTerrainPacket(uint sequenceNumber, int patchX, int patchY) 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(); TerrainPacketTracker tracker = new TerrainPacketTracker();
tracker.X = patchX; tracker.X = patchX;
tracker.Y = patchY; tracker.Y = patchY;
tracker.SeqNumber = sequenceNumber; tracker.SeqNumber = sequenceNumber;
tracker.TimeSent = DateTime.Now; tracker.TimeSent = DateTime.Now;
tracker.KeepResending = keepResending;
tracker.Packet = packet;
lock (m_sentTerrainPackets) lock (m_sentTerrainPackets)
{ {
m_sentTerrainPackets[patchX, patchY] = tracker; m_sentTerrainPackets[patchX, patchY] = tracker;
@ -85,7 +94,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP
foreach (TerrainPacketTracker tracker in resendList) 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 X;
public int Y; public int Y;
public DateTime TimeSent; public DateTime TimeSent;
public LayerDataPacket Packet;
public bool KeepResending;
} }
public class PrimPacketTracker public class PrimPacketTracker