This repository has been archived on 2023-09-13. You can view files and clone it, but cannot push or open issues or pull requests.
station_obscurum_unity/Assets/FishNet/Runtime/Managing/Utility/Utility.cs

63 lines
2.1 KiB
C#

using FishNet.Object;
using FishNet.Serializing;
using FishNet.Transporting;
using UnityEngine;
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. */
PacketId pid = (PacketId)packetId;
if (channel == Channel.Reliable ||
pid == PacketId.Broadcast ||
pid == PacketId.SyncVar
)
{
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
{
LogError($"Operation is unhandled for packetId {(PacketId)packetId} on channel {channel}.");
return (int)MissingObjectPacketLength.PurgeRemaiming;
}
//Logs an error message.
void LogError(string message)
{
if (reader.NetworkManager != null)
reader.NetworkManager.LogError(message);
else
NetworkManager.StaticLogError(message);
}
}
}
}