Unity-WebSocket/Assets/FishNet/Runtime/Managing/Utility/Utility.cs
2025-06-28 11:28:54 +03:30

54 lines
2.0 KiB
C#

using FishNet.Object;
using FishNet.Serializing;
using FishNet.Transporting;
namespace FishNet.Managing.Utility
{
public class Packets
{
/// <summary>
/// Returns written data length for packet.
/// </summary>
internal static int GetPacketLength(ushort packetId, PooledReader reader, Channel channel)
{
/* Broadcast is a special circumstance where data
* will not be purged even if unreliable.
* This is because a broadcast receiver may not
* be set, which could be intentional. Because of this
* length is always sent to skip
* past the broadcast data.
*
* Reliables also need length read in the instance a client
* sends data to an object which server is despawning. Without
* parsing length the remainer data from client will be corrupt. */
/* //todo: we will not always get length on reconciles once
* the issue with parsed headers is resolved. */
PacketId pid = (PacketId)packetId;
if (channel == Channel.Reliable ||
pid == PacketId.Broadcast ||
pid == PacketId.SyncType ||
pid == PacketId.Reconcile
)
{
return reader.ReadInt32();
}
//Unreliable purges remaining.
else if (channel == Channel.Unreliable)
{
return (int)MissingObjectPacketLength.PurgeRemaiming;
}
/* Unhandled. This shouldn't be possible
* since both reliable and unreliable is checked.
* There are no other options. This is merely here
* for a sanity check. */
else
{
reader.NetworkManager.LogError($"Operation is unhandled for packetId {(PacketId)packetId} on channel {channel}.");
return (int)MissingObjectPacketLength.PurgeRemaiming;
}
}
}
}