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.
parent
fb096dfbd5
commit
6784cebf57
|
@ -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;
|
||||||
|
@ -84,9 +93,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (TerrainPacketTracker tracker in resendList)
|
foreach (TerrainPacketTracker tracker in resendList)
|
||||||
|
{
|
||||||
|
if (!tracker.KeepResending)
|
||||||
{
|
{
|
||||||
m_parentClient.TriggerTerrainUnackedEvent(tracker.X, tracker.Y);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PrimPacketCheck()
|
public void PrimPacketCheck()
|
||||||
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue