forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			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);
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
} |