This commit is contained in:
kmyuhkyuk
2026-03-23 08:36:06 +08:00
parent 0e921cb119
commit 72a9266e97
2 changed files with 13 additions and 46 deletions
@@ -1,7 +1,6 @@
using System.Reflection; using System.Reflection;
using HarmonyLib; using HarmonyLib;
using MegaCrit.Sts2.Core.Multiplayer.Serialization; using MegaCrit.Sts2.Core.Multiplayer.Serialization;
using SlayTheSpire2.LAN.Multiplayer.Patchs;
// ReSharper disable ClassNeverInstantiated.Global // ReSharper disable ClassNeverInstantiated.Global
@@ -13,6 +12,10 @@ namespace SlayTheSpire2.LAN.Multiplayer.Helpers
private static readonly Action<PacketReader, int> SetPacketReaderBitPosition; private static readonly Action<PacketReader, int> SetPacketReaderBitPosition;
private static readonly Action<byte[], byte[], int, int> WriteBytes;
private static readonly Action<byte[], int, byte[], int> ReadBits;
private static readonly AccessTools.FieldRef<PacketWriter, byte[]> RefPacketWriterTempBuffer; private static readonly AccessTools.FieldRef<PacketWriter, byte[]> RefPacketWriterTempBuffer;
private static readonly AccessTools.FieldRef<PacketReader, byte[]> RefPacketReaderTempBuffer; private static readonly AccessTools.FieldRef<PacketReader, byte[]> RefPacketReaderTempBuffer;
@@ -30,6 +33,13 @@ namespace SlayTheSpire2.LAN.Multiplayer.Helpers
.GetProperty("BitPosition", flags) .GetProperty("BitPosition", flags)
?.SetMethod!); ?.SetMethod!);
WriteBytes = AccessTools.MethodDelegate<Action<byte[], byte[], int, int>>(AccessTools
.TypeByName("MegaCrit.Sts2.Core.Multiplayer.Serialization.BitSerializationUtil")
.GetMethod("WriteBytes", flags)!);
ReadBits = AccessTools.MethodDelegate<Action<byte[], int, byte[], int>>(AccessTools
.TypeByName("MegaCrit.Sts2.Core.Multiplayer.Serialization.BitSerializationUtil").GetMethod("ReadBits",
BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public)!);
RefPacketWriterTempBuffer = RefPacketWriterTempBuffer =
AccessTools.FieldRefAccess<PacketWriter, byte[]>("_tempBuffer"); AccessTools.FieldRefAccess<PacketWriter, byte[]>("_tempBuffer");
RefPacketReaderTempBuffer = RefPacketReaderTempBuffer =
@@ -63,7 +73,7 @@ namespace SlayTheSpire2.LAN.Multiplayer.Helpers
span[bytesWritten++] = (byte)val; span[bytesWritten++] = (byte)val;
var totalBits = bytesWritten * 8; var totalBits = bytesWritten * 8;
BitSerializationUtilWriteBytesPatch.WriteBytes(tempBuffer, writer.Buffer, writer.BitPosition, totalBits); WriteBytes(tempBuffer, writer.Buffer, writer.BitPosition, totalBits);
SetPacketWriterBitPosition(writer, writer.BitPosition + totalBits); SetPacketWriterBitPosition(writer, writer.BitPosition + totalBits);
} }
@@ -91,7 +101,7 @@ namespace SlayTheSpire2.LAN.Multiplayer.Helpers
Array.Clear(tempBuffer); Array.Clear(tempBuffer);
//7-bit variant and 1-bit flag //7-bit variant and 1-bit flag
BitSerializationUtilReadBitsPatch.ReadBits(reader.Buffer, reader.BitPosition, tempBuffer, 8); ReadBits(reader.Buffer, reader.BitPosition, tempBuffer, 8);
SetPacketReaderBitPosition(reader, reader.BitPosition + 8); SetPacketReaderBitPosition(reader, reader.BitPosition + 8);
@@ -1,43 +0,0 @@
using System.Reflection;
using HarmonyLib;
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable UnusedType.Global
namespace SlayTheSpire2.LAN.Multiplayer.Patchs
{
[HarmonyPatch]
internal class BitSerializationUtilWriteBytesPatch
{
private static MethodInfo TargetMethod()
{
return AccessTools.TypeByName("MegaCrit.Sts2.Core.Multiplayer.Serialization.BitSerializationUtil")
.GetMethod("WriteBytes", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public)!;
}
[HarmonyReversePatch]
public static void WriteBytes(byte[] originBuffer, byte[] destinationBuffer, int destinationBitPosition,
int totalBitsToWrite)
{
throw new NotImplementedException();
}
}
[HarmonyPatch]
internal class BitSerializationUtilReadBitsPatch
{
private static MethodInfo TargetMethod()
{
return AccessTools.TypeByName("MegaCrit.Sts2.Core.Multiplayer.Serialization.BitSerializationUtil")
.GetMethod("ReadBits", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public)!;
}
[HarmonyReversePatch]
public static void ReadBits(byte[] originBuffer, int originBitPosition, byte[] destinationBuffer,
int totalBitsToRead)
{
throw new NotImplementedException();
}
}
}