63 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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);
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
| 
 | |
| } |