Update
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
using System.Reflection;
|
||||
using HarmonyLib;
|
||||
using MegaCrit.Sts2.Core.Multiplayer.Serialization;
|
||||
using SlayTheSpire2.LAN.Multiplayer.Patchs;
|
||||
|
||||
// ReSharper disable ClassNeverInstantiated.Global
|
||||
|
||||
@@ -13,6 +12,10 @@ namespace SlayTheSpire2.LAN.Multiplayer.Helpers
|
||||
|
||||
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<PacketReader, byte[]> RefPacketReaderTempBuffer;
|
||||
@@ -30,6 +33,13 @@ namespace SlayTheSpire2.LAN.Multiplayer.Helpers
|
||||
.GetProperty("BitPosition", flags)
|
||||
?.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 =
|
||||
AccessTools.FieldRefAccess<PacketWriter, byte[]>("_tempBuffer");
|
||||
RefPacketReaderTempBuffer =
|
||||
@@ -63,7 +73,7 @@ namespace SlayTheSpire2.LAN.Multiplayer.Helpers
|
||||
span[bytesWritten++] = (byte)val;
|
||||
|
||||
var totalBits = bytesWritten * 8;
|
||||
BitSerializationUtilWriteBytesPatch.WriteBytes(tempBuffer, writer.Buffer, writer.BitPosition, totalBits);
|
||||
WriteBytes(tempBuffer, writer.Buffer, writer.BitPosition, totalBits);
|
||||
SetPacketWriterBitPosition(writer, writer.BitPosition + totalBits);
|
||||
}
|
||||
|
||||
@@ -91,7 +101,7 @@ namespace SlayTheSpire2.LAN.Multiplayer.Helpers
|
||||
Array.Clear(tempBuffer);
|
||||
|
||||
//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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user