Server doesn't attempt to resend unacked EntityEvents until Connection.AverageRoundTripTime has passed
This commit is contained in:
@@ -26,6 +26,28 @@ namespace Barotrauma.Networking
|
||||
{
|
||||
this.Data = data;
|
||||
}
|
||||
|
||||
public bool IsDuplicate(NetEntityEvent other)
|
||||
{
|
||||
if (other.Entity != this.Entity) return false;
|
||||
|
||||
if (Data != null && other.Data != null)
|
||||
{
|
||||
if (Data.Length == other.Data.Length)
|
||||
{
|
||||
for (int i = 0; i<Data.Length; i++)
|
||||
{
|
||||
if (Data[i] != other.Data[i]) return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return Data == other.Data;
|
||||
}
|
||||
}
|
||||
|
||||
class ServerEntityEvent : NetEntityEvent
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace Barotrauma.Networking
|
||||
{
|
||||
abstract class NetEntityEventManager
|
||||
{
|
||||
const int MaxEventsPerWrite = 255;
|
||||
const int MaxEventsPerWrite = 64;
|
||||
|
||||
public UInt32 LastReceivedEntityEventID
|
||||
{
|
||||
@@ -58,7 +58,7 @@ namespace Barotrauma.Networking
|
||||
public void Read(NetIncomingMessage msg, float sendingTime)
|
||||
{
|
||||
UInt32 firstEventID = msg.ReadUInt32();
|
||||
byte eventCount = msg.ReadByte();
|
||||
int eventCount = msg.ReadByte();
|
||||
|
||||
for (int i = 0; i < eventCount; i++)
|
||||
{
|
||||
@@ -83,7 +83,7 @@ namespace Barotrauma.Networking
|
||||
msg.ReadPadBits();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected virtual void WriteEvent(NetBuffer buffer, NetEntityEvent entityEvent, Client recipient = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
||||
@@ -30,6 +30,7 @@ namespace Barotrauma.Networking
|
||||
|
||||
var newEvent = new ServerEntityEvent(entity, ID);
|
||||
if (extraData != null) newEvent.SetData(extraData);
|
||||
|
||||
events.Add(newEvent);
|
||||
}
|
||||
|
||||
@@ -43,9 +44,22 @@ namespace Barotrauma.Networking
|
||||
List<NetEntityEvent> eventsToSync = new List<NetEntityEvent>();
|
||||
for (int i = events.Count - 1; i >= 0 && events[i].ID > client.lastRecvEntityEventID; i--)
|
||||
{
|
||||
float lastSent = 0;
|
||||
client.entityEventLastSent.TryGetValue(events[i].ID, out lastSent);
|
||||
|
||||
if (lastSent > NetTime.Now - client.Connection.AverageRoundtripTime)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
eventsToSync.Insert(0, events[i]);
|
||||
}
|
||||
if (eventsToSync.Count == 0) return;
|
||||
|
||||
foreach (NetEntityEvent entityEvent in eventsToSync)
|
||||
{
|
||||
client.entityEventLastSent[entityEvent.ID] = (float)NetTime.Now;
|
||||
}
|
||||
|
||||
Write(msg, eventsToSync, client);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user