Skip to content

Commit

Permalink
Refactor InventoryPacket
Browse files Browse the repository at this point in the history
  • Loading branch information
Lacyway committed Oct 9, 2024
1 parent e6fc7bf commit d654bb1
Show file tree
Hide file tree
Showing 9 changed files with 38 additions and 92 deletions.
7 changes: 1 addition & 6 deletions Fika.Core/Coop/BotClasses/CoopBotInventoryController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -111,14 +111,9 @@ public void HandleResult(IResult result)
#if DEBUG
FikaPlugin.Instance.FikaLogger.LogInfo($"Sending bot operation {Operation.GetType()} from {controller.coopBot.Profile.Nickname}");
#endif
InventoryPacket packet = new()
{
HasItemControllerExecutePacket = true
};

GClass1175 writer = new();
writer.WritePolymorph(Operation.ToDescriptor());
packet.ItemControllerExecutePacket = new()
InventoryPacket packet = new()
{
CallbackId = Operation.Id,
OperationBytes = writer.ToArray()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,12 +143,6 @@ private void RunClientOperation(GClass3119 operation, Callback callback)
}

GClass1175 writer = new();

InventoryPacket packet = new()
{
HasItemControllerExecutePacket = true
};

ClientInventoryOperationHandler handler = new()
{
Operation = operation,
Expand All @@ -158,7 +152,7 @@ private void RunClientOperation(GClass3119 operation, Callback callback)

uint operationNum = AddOperationCallback(operation, handler.ReceiveStatusFromServer);
writer.WritePolymorph(operation.ToDescriptor());
packet.ItemControllerExecutePacket = new()
InventoryPacket packet = new()
{
CallbackId = operationNum,
OperationBytes = writer.ToArray()
Expand Down
7 changes: 1 addition & 6 deletions Fika.Core/Coop/HostClasses/CoopHostInventoryController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,14 +142,9 @@ private void RunHostOperation(GClass3119 operation, Callback callback)
{
handler.operation.method_1(handler.HandleResult);

InventoryPacket packet = new()
{
HasItemControllerExecutePacket = true
};

GClass1175 writer = new();
writer.WritePolymorph(operation.ToDescriptor());
packet.ItemControllerExecutePacket = new()
InventoryPacket packet = new()
{
CallbackId = operation.Id,
OperationBytes = writer.ToArray()
Expand Down
49 changes: 23 additions & 26 deletions Fika.Core/Coop/PacketHandlers/PacketReceiver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -144,43 +144,40 @@ protected void Update()
private void ConvertInventoryPacket()
{
InventoryPacket packet = InventoryPackets.Dequeue();
if (packet.HasItemControllerExecutePacket)
if (packet.OperationBytes.Length == 0)
{
if (packet.ItemControllerExecutePacket.OperationBytes.Length == 0)
{
FikaPlugin.Instance.FikaLogger.LogError($"ConvertInventoryPacket::Bytes were null!");
return;
}
FikaPlugin.Instance.FikaLogger.LogError($"ConvertInventoryPacket::Bytes were null!");
return;
}

InventoryController controller = player.InventoryController;
if (controller != null)
InventoryController controller = player.InventoryController;
if (controller != null)
{
try
{
try
if (controller is Interface15 networkController)
{
if (controller is Interface15 networkController)
GClass1170 reader = new(packet.OperationBytes);
GClass1670 descriptor = reader.ReadPolymorph<GClass1670>();
GStruct423 result = networkController.CreateOperationFromDescriptor(descriptor);
if (!result.Succeeded)
{
GClass1170 reader = new(packet.ItemControllerExecutePacket.OperationBytes);
GClass1670 descriptor = reader.ReadPolymorph<GClass1670>();
GStruct423 result = networkController.CreateOperationFromDescriptor(descriptor);
if (!result.Succeeded)
{
FikaPlugin.Instance.FikaLogger.LogError($"ConvertInventoryPacket::Unable to process descriptor from netId {packet.NetId}, error: {result.Error}");
return;
}

inventoryOperations.Enqueue(result.Value);
FikaPlugin.Instance.FikaLogger.LogError($"ConvertInventoryPacket::Unable to process descriptor from netId {packet.NetId}, error: {result.Error}");
return;
}
}
catch (Exception exception)
{
FikaPlugin.Instance.FikaLogger.LogError($"ConvertInventoryPacket::Exception thrown: {exception}");

inventoryOperations.Enqueue(result.Value);
}
}
else
catch (Exception exception)
{
FikaPlugin.Instance.FikaLogger.LogError("ConvertInventoryPacket: inventory was null!");
FikaPlugin.Instance.FikaLogger.LogError($"ConvertInventoryPacket::Exception thrown: {exception}");
}
}
else
{
FikaPlugin.Instance.FikaLogger.LogError("ConvertInventoryPacket: inventory was null!");
}
}

private void HandleResult(IResult result)
Expand Down
26 changes: 0 additions & 26 deletions Fika.Core/Networking/FikaSerializationExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -698,32 +698,6 @@ public static HeadLightsPacket GetHeadLightsPacket(this NetDataReader reader)
return packet;
}

/// <summary>
/// Serializes a <see cref="ItemControllerExecutePacket"/>
/// </summary>
/// <param name="writer"></param>
/// <param name="packet"></param>
public static void PutItemControllerExecutePacket(this NetDataWriter writer, ItemControllerExecutePacket packet)
{
writer.Put(packet.CallbackId);
writer.PutByteArray(packet.OperationBytes);
}

/// <summary>
/// Deserializes a <see cref="ItemControllerExecutePacket"/>
/// </summary>
/// <param name="reader"></param>
/// <returns>A <see cref="ItemControllerExecutePacket"/> with data</returns>
public static ItemControllerExecutePacket GetItemControllerExecutePacket(this NetDataReader reader)
{
ItemControllerExecutePacket packet = new()
{
CallbackId = reader.GetUInt(),
OperationBytes = reader.GetByteArray()
};
return packet;
}

/// <summary>
/// Serializes a <see cref="WeatherClass"/>
/// </summary>
Expand Down
10 changes: 5 additions & 5 deletions Fika.Core/Networking/FikaServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1070,7 +1070,7 @@ private void OnInventoryPacketReceived(InventoryPacket packet, NetPeer peer)
{
if (coopHandler.Players.TryGetValue(packet.NetId, out CoopPlayer playerToApply))
{
GClass1170 reader = new(packet.ItemControllerExecutePacket.OperationBytes);
GClass1170 reader = new(packet.OperationBytes);
try
{
OperationCallbackPacket operationCallbackPacket;
Expand All @@ -1085,7 +1085,7 @@ private void OnInventoryPacketReceived(InventoryPacket packet, NetPeer peer)
if (result.Failed)
{
logger.LogError($"ItemControllerExecutePacket::Operation conversion failed: {result.Error}");
OperationCallbackPacket callbackPacket = new(playerToApply.NetId, packet.ItemControllerExecutePacket.CallbackId, EOperationStatus.Failed)
OperationCallbackPacket callbackPacket = new(playerToApply.NetId, packet.CallbackId, EOperationStatus.Failed)
{
Error = result.Error.ToString()
};
Expand All @@ -1096,8 +1096,8 @@ private void OnInventoryPacketReceived(InventoryPacket packet, NetPeer peer)
return;
}

InventoryOperationHandler handler = new(result, packet.ItemControllerExecutePacket.CallbackId, packet.NetId, peer, this);
operationCallbackPacket = new(playerToApply.NetId, packet.ItemControllerExecutePacket.CallbackId, EOperationStatus.Started);
InventoryOperationHandler handler = new(result, packet.CallbackId, packet.NetId, peer, this);
operationCallbackPacket = new(playerToApply.NetId, packet.CallbackId, EOperationStatus.Started);
SendDataToPeer(peer, ref operationCallbackPacket, DeliveryMethod.ReliableOrdered);

SendDataToAll(ref packet, DeliveryMethod.ReliableOrdered, peer);
Expand All @@ -1111,7 +1111,7 @@ private void OnInventoryPacketReceived(InventoryPacket packet, NetPeer peer)
catch (Exception exception)
{
logger.LogError($"ItemControllerExecutePacket::Exception thrown: {exception}");
OperationCallbackPacket callbackPacket = new(playerToApply.NetId, packet.ItemControllerExecutePacket.CallbackId, EOperationStatus.Failed)
OperationCallbackPacket callbackPacket = new(playerToApply.NetId, packet.CallbackId, EOperationStatus.Failed)
{
Error = exception.Message
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using LiteNetLib.Utils;
using static Fika.Core.Networking.FirearmSubPackets;
using static Fika.Core.Networking.Packets.SubPacket;

namespace Fika.Core.Networking
Expand Down
19 changes: 6 additions & 13 deletions Fika.Core/Networking/Packets/Player/InventoryPacket.cs
Original file line number Diff line number Diff line change
@@ -1,32 +1,25 @@
using LiteNetLib.Utils;
using static Fika.Core.Networking.Packets.SubPackets;

namespace Fika.Core.Networking
{
public struct InventoryPacket(int netId) : INetSerializable
{
public int NetId = netId;
public bool HasItemControllerExecutePacket = false;
public ItemControllerExecutePacket ItemControllerExecutePacket;
public uint CallbackId;
public byte[] OperationBytes;

public void Serialize(NetDataWriter writer)
{
writer.Put(NetId);
writer.Put(HasItemControllerExecutePacket);
if (HasItemControllerExecutePacket)
{
writer.PutItemControllerExecutePacket(ItemControllerExecutePacket);
}
writer.Put(CallbackId);
writer.PutByteArray(OperationBytes);
}

public void Deserialize(NetDataReader reader)
{
NetId = reader.GetInt();
HasItemControllerExecutePacket = reader.GetBool();
if (HasItemControllerExecutePacket)
{
ItemControllerExecutePacket = reader.GetItemControllerExecutePacket();
}
CallbackId = reader.GetUInt();
OperationBytes = reader.GetByteArray();
}
}
}
3 changes: 1 addition & 2 deletions Fika.Core/Networking/Packets/SubPackets.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ public struct PlayerInfoPacket(Profile profile, MongoID? controllerId, ushort fi

public struct ItemControllerExecutePacket
{
public uint CallbackId;
public byte[] OperationBytes;

}

public struct WeatherClassPacket
Expand Down

0 comments on commit d654bb1

Please sign in to comment.