fix exceptions not being handled correctly inside Network.Receive and Timer.Wait
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user