Server removes events if no clients are playing. Otherwise the server would keep creating new events indefinitely and midround-joining clients would instantly get kicked out because they're missing very old events.
+ fixed server not sending midroung sync messages if the list of new (non-unique) events is empty
This commit is contained in:
@@ -82,6 +82,11 @@ namespace Barotrauma.Networking
|
|||||||
//keep at least one event in the list (lastSentToAll == e.ID) so we can use it to keep track of the latest ID
|
//keep at least one event in the list (lastSentToAll == e.ID) so we can use it to keep track of the latest ID
|
||||||
events.RemoveAll(e => NetIdUtils.IdMoreRecent(lastSentToAll, e.ID));
|
events.RemoveAll(e => NetIdUtils.IdMoreRecent(lastSentToAll, e.ID));
|
||||||
|
|
||||||
|
if (server.ConnectedClients.Count(c => c.inGame) == 0 && events.Count > 1)
|
||||||
|
{
|
||||||
|
events.RemoveRange(0, events.Count - 1);
|
||||||
|
}
|
||||||
|
|
||||||
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
|
||||||
@@ -189,8 +194,6 @@ namespace Barotrauma.Networking
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void Write(Client client, NetOutgoingMessage msg)
|
public void Write(Client client, NetOutgoingMessage msg)
|
||||||
{
|
{
|
||||||
if (events.Count == 0) return;
|
|
||||||
|
|
||||||
List<NetEntityEvent> eventsToSync = null;
|
List<NetEntityEvent> eventsToSync = null;
|
||||||
if (client.NeedsMidRoundSync)
|
if (client.NeedsMidRoundSync)
|
||||||
{
|
{
|
||||||
@@ -246,6 +249,7 @@ namespace Barotrauma.Networking
|
|||||||
private List<NetEntityEvent> GetEventsToSync(Client client, List<ServerEntityEvent> eventList)
|
private List<NetEntityEvent> GetEventsToSync(Client client, List<ServerEntityEvent> eventList)
|
||||||
{
|
{
|
||||||
List<NetEntityEvent> eventsToSync = new List<NetEntityEvent>();
|
List<NetEntityEvent> eventsToSync = new List<NetEntityEvent>();
|
||||||
|
if (eventList.Count == 0) return eventsToSync;
|
||||||
|
|
||||||
//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 = eventList.Count;
|
int startIndex = eventList.Count;
|
||||||
|
|||||||
Reference in New Issue
Block a user