Add exception tolerance to DispatchEntityNetworkMessage.

This commit is contained in:
Pieter-Jan Briers
2021-07-22 23:27:39 +02:00
parent 3a86c827ea
commit 78f9d92c07

View File

@@ -224,20 +224,33 @@ namespace Robust.Server.GameObjects
}
}
switch (message.Type)
#if EXCEPTION_TOLERANCE
try
#endif
{
case EntityMessageType.ComponentMessage:
ReceivedComponentMessage?.Invoke(this, new NetworkComponentMessage(message, player));
return;
switch (message.Type)
{
case EntityMessageType.ComponentMessage:
ReceivedComponentMessage?.Invoke(this, new NetworkComponentMessage(message, player));
return;
case EntityMessageType.SystemMessage:
var msg = message.SystemMessage;
var sessionType = typeof(EntitySessionMessage<>).MakeGenericType(msg.GetType());
var sessionMsg = Activator.CreateInstance(sessionType, new EntitySessionEventArgs(player), msg)!;
ReceivedSystemMessage?.Invoke(this, msg);
ReceivedSystemMessage?.Invoke(this, sessionMsg);
return;
case EntityMessageType.SystemMessage:
var msg = message.SystemMessage;
var sessionType = typeof(EntitySessionMessage<>).MakeGenericType(msg.GetType());
var sessionMsg =
Activator.CreateInstance(sessionType, new EntitySessionEventArgs(player), msg)!;
ReceivedSystemMessage?.Invoke(this, msg);
ReceivedSystemMessage?.Invoke(this, sessionMsg);
return;
}
}
#if EXCEPTION_TOLERANCE
catch (Exception e)
{
Logger.ErrorS("net.ent", $"Caught exception while dispatching {message.Type}: {e}");
brokenEnts.Add(entity);
}
#endif
}
private void OnPlayerStatusChanged(object? sender, SessionStatusEventArgs args)