Stopped server events that hadn't been sent to everyone from being removed
This commit is contained in:
@@ -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 &&
|
||||||
|
|||||||
Reference in New Issue
Block a user