Update
This commit is contained in:
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user