fix exceptions not being handled correctly inside Network.Receive and Timer.Wait

This commit is contained in:
EvilFactory
2022-07-23 12:23:27 -03:00
parent d37bf9eef9
commit 3fc6892571
2 changed files with 37 additions and 12 deletions
@@ -87,7 +87,17 @@ namespace Barotrauma
if (header == ClientPacketHeader.LUA_NET_MESSAGE) if (header == ClientPacketHeader.LUA_NET_MESSAGE)
{ {
string netMessageName = netMessage.ReadString(); string netMessageName = netMessage.ReadString();
if (LuaCsNetReceives.ContainsKey(netMessageName)) LuaCsNetReceives[netMessageName](netMessage, client); if (LuaCsNetReceives.ContainsKey(netMessageName))
{
try
{
LuaCsNetReceives[netMessageName](netMessage, client);
}
catch(Exception e)
{
GameMain.LuaCs.HandleException(e, $"Exception thrown inside NetMessageReceive({netMessageName})", LuaCsSetup.ExceptionType.CSharp);
}
}
} }
else else
{ {
@@ -102,7 +112,17 @@ namespace Barotrauma
if (header == ServerPacketHeader.LUA_NET_MESSAGE) if (header == ServerPacketHeader.LUA_NET_MESSAGE)
{ {
string netMessageName = netMessage.ReadString(); string netMessageName = netMessage.ReadString();
if (LuaCsNetReceives.ContainsKey(netMessageName)) LuaCsNetReceives[netMessageName](netMessage, client); if (LuaCsNetReceives.ContainsKey(netMessageName))
{
try
{
LuaCsNetReceives[netMessageName](netMessage, client);
}
catch (Exception e)
{
GameMain.LuaCs.HandleException(e, $"Exception thrown inside NetMessageReceive({netMessageName})", LuaCsSetup.ExceptionType.CSharp);
}
}
} }
else else
{ {
@@ -15,21 +15,19 @@ namespace Barotrauma
{ {
if (timedAction1 == null || timedAction2 == null) if (timedAction1 == null || timedAction2 == null)
return 0; return 0;
return -Math.Sign(timedAction2.executionTime - timedAction1.executionTime); return -Math.Sign(timedAction2.ExecutionTime - timedAction1.ExecutionTime);
} }
} }
private class TimedAction private class TimedAction
{ {
public LuaCsAction action public LuaCsAction Action
{ {
get; get;
private set; private set;
} }
private int delayMs; public double ExecutionTime
public double executionTime
{ {
get; get;
private set; private set;
@@ -37,9 +35,8 @@ namespace Barotrauma
public TimedAction(LuaCsAction action, int delayMs) public TimedAction(LuaCsAction action, int delayMs)
{ {
this.action = action; this.Action = action;
this.delayMs = delayMs; ExecutionTime = Time + (delayMs / 1000f);
executionTime = Time + (delayMs / 1000f);
} }
} }
@@ -63,9 +60,17 @@ namespace Barotrauma
for (int i = 0; i < timedActions.Count; i++) for (int i = 0; i < timedActions.Count; i++)
{ {
TimedAction timedAction = timedActions[i]; TimedAction timedAction = timedActions[i];
if (Time >= timedAction.executionTime) if (Time >= timedAction.ExecutionTime)
{ {
timedAction.action(); try
{
timedAction.Action();
}
catch (Exception e)
{
GameMain.LuaCs.HandleException(e, "", LuaCsSetup.ExceptionType.CSharp);
}
timedActionsToRemove.Add(timedAction); timedActionsToRemove.Add(timedAction);
} }
else else