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; }
		
	}
}