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)
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user