namespace Rssdp
{
    /// <summary>
    /// Represents a device that is a descendant of a <see cref="SsdpRootDevice"/> instance.
    /// </summary>
    public class SsdpEmbeddedDevice : SsdpDevice
    {
        private SsdpRootDevice _RootDevice;

        /// <summary>
        /// Default constructor.
        /// </summary>
        public SsdpEmbeddedDevice()
        {
        }

        /// <summary>
        /// Returns the <see cref="SsdpRootDevice"/> that is this device's first ancestor. If this device is itself an <see cref="SsdpRootDevice"/>, then returns a reference to itself.
        /// </summary>
        public SsdpRootDevice RootDevice
        {
            get
            {
                return _RootDevice;
            }

            internal set
            {
                _RootDevice = value;
                lock (this.Devices)
                {
                    foreach (var embeddedDevice in this.Devices)
                    {
                        ((SsdpEmbeddedDevice)embeddedDevice).RootDevice = _RootDevice;
                    }
                }
            }
        }
    }
}