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)
{
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
{
@@ -102,7 +112,17 @@ namespace Barotrauma
if (header == ServerPacketHeader.LUA_NET_MESSAGE)
{
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
{
@@ -15,21 +15,19 @@ namespace Barotrauma
{
if (timedAction1 == null || timedAction2 == null)
return 0;
return -Math.Sign(timedAction2.executionTime - timedAction1.executionTime);
return -Math.Sign(timedAction2.ExecutionTime - timedAction1.ExecutionTime);
}
}
private class TimedAction
{
public LuaCsAction action
public LuaCsAction Action
{
get;
private set;
}
private int delayMs;
public double executionTime
public double ExecutionTime
{
get;
private set;
@@ -37,9 +35,8 @@ namespace Barotrauma
public TimedAction(LuaCsAction action, int delayMs)
{
this.action = action;
this.delayMs = delayMs;
executionTime = Time + (delayMs / 1000f);
this.Action = action;
ExecutionTime = Time + (delayMs / 1000f);
}
}
@@ -63,9 +60,17 @@ namespace Barotrauma
for (int i = 0; i < timedActions.Count; 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);
}
else