Stopped server events that hadn't been sent to everyone from being removed

This commit is contained in:
juanjp600
2017-02-16 20:34:29 -03:00
parent ae67be1775
commit c46856167c
2 changed files with 9 additions and 4 deletions
+1 -1
View File
@@ -354,7 +354,7 @@ namespace Barotrauma.Networking
{ {
if (respawnManager != null) respawnManager.Update(deltaTime); if (respawnManager != null) respawnManager.Update(deltaTime);
entityEventManager.Update(); entityEventManager.Update(connectedClients);
bool isCrewDead = bool isCrewDead =
connectedClients.Find(c => c.Character != null && !c.Character.IsDead)==null && connectedClients.Find(c => c.Character != null && !c.Character.IsDead)==null &&
@@ -11,6 +11,8 @@ namespace Barotrauma.Networking
{ {
private List<ServerEntityEvent> events; private List<ServerEntityEvent> events;
private UInt32 lastSentToAll;
public List<ServerEntityEvent> Events public List<ServerEntityEvent> Events
{ {
get { return events; } get { return events; }
@@ -67,7 +69,7 @@ namespace Barotrauma.Networking
var newEvent = new ServerEntityEvent(entity, ID + 1); var newEvent = new ServerEntityEvent(entity, ID + 1);
if (extraData != null) newEvent.SetData(extraData); if (extraData != null) newEvent.SetData(extraData);
events.RemoveAll(e => e.Sent && e.IsDuplicate(newEvent)); //remove outdated events, they are redundant now events.RemoveAll(e => e.ID<=lastSentToAll && e.IsDuplicate(newEvent)); //remove outdated events, they are redundant now
for (int i = events.Count - 1; i >= 0; i--) for (int i = events.Count - 1; i >= 0; i--)
{ {
//we already have an identical event that's waiting to be sent //we already have an identical event that's waiting to be sent
@@ -80,7 +82,7 @@ namespace Barotrauma.Networking
events.Add(newEvent); events.Add(newEvent);
} }
public void Update() public void Update(List<Client> clients)
{ {
foreach (BufferedEvent bufferedEvent in bufferedEvents) foreach (BufferedEvent bufferedEvent in bufferedEvents)
{ {
@@ -107,6 +109,9 @@ namespace Barotrauma.Networking
bufferedEvent.IsProcessed = true; bufferedEvent.IsProcessed = true;
} }
lastSentToAll = clients[0].lastRecvEntityEventID;
clients.ForEach(c => { if (c.lastRecvEntityEventID < lastSentToAll) lastSentToAll = c.lastRecvEntityEventID; });
bufferedEvents.RemoveAll(b => b.IsProcessed); bufferedEvents.RemoveAll(b => b.IsProcessed);
} }
@@ -133,7 +138,7 @@ namespace Barotrauma.Networking
if (events.Count == 0) return; if (events.Count == 0) return;
List<NetEntityEvent> eventsToSync = new List<NetEntityEvent>(); List<NetEntityEvent> eventsToSync = new List<NetEntityEvent>();
//find the index of the first event the client hasn't received //find the index of the first event the client hasn't received
int startIndex = events.Count; int startIndex = events.Count;
while (startIndex > 0 && while (startIndex > 0 &&