using FishNet.Broadcast;
using FishNet.Managing;
using FishNet.Transporting;
using UnityEngine;
namespace FishNet.Object
{
    public sealed partial class NetworkObject : MonoBehaviour
    {
        /// 
        /// Sends a broadcast to Observers on this NetworkObject.
        /// 
        /// Type of broadcast to send.
        /// Broadcast data being sent; for example: an instance of your broadcast type.
        /// True if the client must be authenticated for this broadcast to send.
        /// Channel to send on.
        public void Broadcast(T message, bool requireAuthenticated = true, Channel channel = Channel.Reliable) where T : struct, IBroadcast
        {
            if (NetworkManager == null)
            {
                NetworkManager.StaticLogWarning($"Cannot send broadcast from {gameObject.name}, NetworkManager reference is null. This may occur if the object is not spawned or initialized.");
                return;
            }
            NetworkManager.ServerManager.Broadcast(Observers, message, requireAuthenticated, channel);
        }
    }
}