using System;
using System.Threading.Tasks;
namespace Rssdp.Infrastructure
{
    /// 
    /// Interface for components that publish the existence of SSDP devices.
    /// 
    /// 
    /// Publishing a device includes sending notifications (alive and byebye) as well as responding to search requests when appropriate.
    /// 
    /// 
    /// 
    public interface ISsdpDevicePublisher
    {
        /// 
        /// Adds a device (and it's children) to the list of devices being published by this server, making them discoverable to SSDP clients.
        /// 
        /// The  instance to add.
        /// An awaitable .
        void AddDevice(SsdpRootDevice device);
        /// 
        /// Removes a device (and it's children) from the list of devices being published by this server, making them undiscoverable.
        /// 
        /// The  instance to add.
        /// An awaitable .
        Task RemoveDevice(SsdpRootDevice device);
        /// 
        /// Returns a read only list of devices being published by this instance.
        /// 
        /// 
        System.Collections.Generic.IEnumerable Devices { get; }
    }
}