NAK_CVR_Mods/.Experimental/LuaNetworkVariables/NetworkVariables/LuaNetVarController.Serialization.cs
2025-04-03 03:03:24 -05:00

62 lines
No EOL
2 KiB
C#

using ABI_RC.Systems.ModNetwork;
using MoonSharp.Interpreter;
namespace NAK.LuaNetVars;
public partial class LuaNetVarController
{
private static DynValue DeserializeDynValue(ModNetworkMessage msg)
{
msg.Read(out byte dataTypeByte);
DataType dataType = (DataType)dataTypeByte;
switch (dataType)
{
case DataType.Boolean:
msg.Read(out bool boolValue);
return DynValue.NewBoolean(boolValue);
case DataType.Number:
msg.Read(out double numberValue);
return DynValue.NewNumber(numberValue);
case DataType.String:
msg.Read(out string stringValue);
return DynValue.NewString(stringValue);
case DataType.Nil:
return DynValue.Nil;
default:
LuaNetVarsMod.Logger.Error($"Unsupported data type received: {dataType}");
return DynValue.Nil;
}
}
private static void SerializeDynValue(ModNetworkMessage msg, DynValue value)
{
switch (value.Type)
{
case DataType.Boolean:
msg.Write((byte)DataType.Boolean);
msg.Write(value.Boolean);
break;
case DataType.Number:
msg.Write((byte)DataType.Number);
msg.Write(value.Number);
break;
case DataType.String:
msg.Write((byte)DataType.String);
msg.Write(value.String);
break;
case DataType.Nil:
msg.Write((byte)DataType.Nil);
break;
default:
LuaNetVarsMod.Logger.Error($"Unsupported DynValue type: {value.Type}");
msg.Write((byte)DataType.Nil);
break;
}
}
private static bool IsSupportedDynValue(DynValue value)
{
return value.Type is DataType.Boolean or DataType.Number or DataType.String or DataType.Nil;
}
}